mirror of
https://github.com/flipped-aurora/gin-vue-admin.git
synced 2026-09-21 20:35:16 +00:00
字典优化,tabs优化,自动化代码优化 (#1128)
* server/service/system/sys_dictionary.go: fix 获取字典单条数据时status失效的bug * 增加关闭状态下折叠内容所在menu的高亮提示 * 修复字典变更无法打开的bug * 增加详情页签区分功能 * 增加字典详情区分 * 修复字典功能 Co-authored-by: yancunju <yancunju@autouc.com>
This commit is contained in:
committed by
GitHub
co-authored by
yancunju
parent
9da394f711
commit
e0280a56ce
@@ -53,6 +53,7 @@
|
||||
|
||||
:root {
|
||||
--el-color-primary: #4D70FF;
|
||||
--el-menu-item-height:56px ;
|
||||
}
|
||||
|
||||
.gva-search-box {
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
export const fmtTitle = (title, now) => {
|
||||
const reg = /\$\{(.+?)\}/
|
||||
const reg_g = /\$\{(.+?)\}/g
|
||||
const result = title.match(reg_g)
|
||||
if (result) {
|
||||
result.forEach((item) => {
|
||||
const key = item.match(reg)[1]
|
||||
const value = now.params[key] || now.query[key]
|
||||
title = title.replace(item, value)
|
||||
})
|
||||
}
|
||||
return title
|
||||
}
|
||||
@@ -1,10 +1,19 @@
|
||||
<template>
|
||||
<el-sub-menu ref="subMenu" :index="routerInfo.name">
|
||||
|
||||
<template #title>
|
||||
<el-icon v-if="routerInfo.meta.icon">
|
||||
<component :is="routerInfo.meta.icon" />
|
||||
</el-icon>
|
||||
<span>{{ routerInfo.meta.title }}</span>
|
||||
<div v-if="!isCollapse" class="gva-subMenu">
|
||||
<el-icon v-if="routerInfo.meta.icon">
|
||||
<component :is="routerInfo.meta.icon" />
|
||||
</el-icon>
|
||||
<span>{{ routerInfo.meta.title }}</span>
|
||||
</div>
|
||||
<template v-else>
|
||||
<el-icon v-if="routerInfo.meta.icon">
|
||||
<component :is="routerInfo.meta.icon" />
|
||||
</el-icon>
|
||||
<span>{{ routerInfo.meta.title }}</span>
|
||||
</template>
|
||||
</template>
|
||||
<slot />
|
||||
</el-sub-menu>
|
||||
@@ -39,15 +48,15 @@ const props = defineProps({
|
||||
}
|
||||
})
|
||||
|
||||
// const activeBackground = ref(props.theme.activeBackground)
|
||||
// const activeText = ref(props.theme.activeText)
|
||||
const activeBackground = ref(props.theme.activeBackground)
|
||||
const activeText = ref(props.theme.activeText)
|
||||
const normalText = ref(props.theme.normalText)
|
||||
// const hoverBackground = ref(props.theme.hoverBackground)
|
||||
// const hoverText = ref(props.theme.hoverText)
|
||||
|
||||
watch(() => props.theme, () => {
|
||||
// activeBackground.value = props.theme.activeBackground
|
||||
// activeText.value = props.theme.activeText
|
||||
activeBackground.value = props.theme.activeBackground
|
||||
activeText.value = props.theme.activeText
|
||||
normalText.value = props.theme.normalText
|
||||
// hoverBackground.value = props.theme.hoverBackground
|
||||
// hoverText.value = props.theme.hoverText
|
||||
@@ -58,8 +67,26 @@ watch(() => props.theme, () => {
|
||||
<style lang="scss" scoped>
|
||||
.el-sub-menu{
|
||||
::v-deep(.el-sub-menu__title){
|
||||
padding: 6px;
|
||||
color: v-bind(normalText);
|
||||
}
|
||||
}
|
||||
|
||||
.is-active:not(.is-opened){
|
||||
::v-deep(.el-sub-menu__title) .gva-subMenu{
|
||||
flex:1;
|
||||
height: 100%;
|
||||
line-height: 44px;
|
||||
background: v-bind(activeBackground) !important;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 0 2px 1px v-bind(activeBackground) !important;
|
||||
i{
|
||||
color: v-bind(activeText);
|
||||
}
|
||||
span{
|
||||
color: v-bind(activeText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
activeValue === name(item) ? userStore.activeColor : '#ddd',
|
||||
}"
|
||||
/>
|
||||
{{ item.meta.title }}</span>
|
||||
{{ fmtTitle(item.meta.title,item) }}</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@@ -59,6 +59,7 @@ import { emitter } from '@/utils/bus.js'
|
||||
import { computed, onUnmounted, ref, watch } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useUserStore } from '@/pinia/modules/user'
|
||||
import { fmtTitle } from '@/utils/fmtRouterTitle'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
@@ -208,11 +209,11 @@ const setTab = (route) => {
|
||||
|
||||
const historyMap = ref({})
|
||||
|
||||
watch(()=>historys.value,()=>{
|
||||
historyMap.value={}
|
||||
historys.value.forEach((item)=>{
|
||||
watch(() => historys.value, () => {
|
||||
historyMap.value = {}
|
||||
historys.value.forEach((item) => {
|
||||
historyMap.value[getFmtString(item)] = item
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
const changeTab = (name) => {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<el-breadcrumb-item
|
||||
v-for="item in matched.slice(1,matched.length)"
|
||||
:key="item.path"
|
||||
>{{ route.params.title || item.meta.title }}</el-breadcrumb-item>
|
||||
>{{ fmtTitle(item.meta.title,route) }}</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</el-col>
|
||||
<el-col :xs="12" :lg="9" :md="9" :sm="14" :xl="9">
|
||||
@@ -114,6 +114,7 @@ import { computed, ref, onMounted, nextTick } from 'vue'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { useUserStore } from '@/pinia/modules/user'
|
||||
import { useRouterStore } from '@/pinia/modules/router'
|
||||
import { fmtTitle } from '@/utils/fmtRouterTitle'
|
||||
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
||||
@@ -85,13 +85,15 @@
|
||||
<el-button
|
||||
size="small"
|
||||
icon="document"
|
||||
type="primary" link
|
||||
type="primary"
|
||||
link
|
||||
@click="toDetile(scope.row)"
|
||||
>详情</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
icon="edit"
|
||||
type="primary" link
|
||||
type="primary"
|
||||
link
|
||||
@click="updateSysDictionaryFunc(scope.row)"
|
||||
>变更</el-button>
|
||||
<el-popover
|
||||
@@ -103,7 +105,8 @@
|
||||
<div style="text-align: right; margin-top: 8px">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary" link
|
||||
type="primary"
|
||||
link
|
||||
@click="scope.row.visible = false"
|
||||
>取消</el-button>
|
||||
<el-button
|
||||
@@ -114,7 +117,8 @@
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button
|
||||
type="primary" link
|
||||
type="primary"
|
||||
link
|
||||
icon="delete"
|
||||
size="small"
|
||||
style="margin-left: 10px"
|
||||
@@ -308,7 +312,7 @@ const toDetile = (row) => {
|
||||
const dialogFormVisible = ref(false)
|
||||
const type = ref('')
|
||||
const updateSysDictionaryFunc = async(row) => {
|
||||
const res = await findSysDictionary({ ID: row.ID })
|
||||
const res = await findSysDictionary({ ID: row.ID, status: row.status })
|
||||
type.value = 'update'
|
||||
if (res.code === 0) {
|
||||
formData.value = res.data.resysDictionary
|
||||
@@ -356,6 +360,7 @@ const enterDialog = async() => {
|
||||
break
|
||||
}
|
||||
if (res.code === 0) {
|
||||
ElMessage.success('操作成功')
|
||||
closeDialog()
|
||||
getTableData()
|
||||
}
|
||||
|
||||
@@ -221,7 +221,7 @@ const updateSysDictionaryDetailFunc = async(row) => {
|
||||
const res = await findSysDictionaryDetail({ ID: row.ID })
|
||||
type.value = 'update'
|
||||
if (res.code === 0) {
|
||||
formData.value = res.data.resysDictionaryDetail
|
||||
formData.value = res.data.reSysDictionaryDetail
|
||||
dialogFormVisible.value = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -480,7 +480,9 @@ const init = () => {
|
||||
init()
|
||||
|
||||
watch(() => route.params.id, (id) => {
|
||||
init()
|
||||
if (route.name === 'autoCodeEdit') {
|
||||
init()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user