Pre Merge pull request !9 from 毕梅/master
commit
80a3a10668
|
|
@ -12,6 +12,7 @@ import { useAppStore } from '@/store/modules/app'
|
|||
import { useDesign } from '@/hooks/web/useDesign'
|
||||
import { XTableProps } from './type'
|
||||
import { isBoolean, isFunction } from '@/utils/is'
|
||||
import styleCss from './style/dark.scss'
|
||||
|
||||
import download from '@/utils/download'
|
||||
|
||||
|
|
@ -26,14 +27,39 @@ const prefixCls = getPrefixCls('x-vxe-table')
|
|||
const attrs = useAttrs()
|
||||
const emit = defineEmits(['register'])
|
||||
|
||||
const removeStyles = () => {
|
||||
var filename = 'cssTheme'
|
||||
//移除引入的文件名
|
||||
var targetelement = 'style'
|
||||
var targetattr = 'id'
|
||||
var allsuspects = document.getElementsByTagName(targetelement)
|
||||
for (var i = allsuspects.length; i >= 0; i--) {
|
||||
if (
|
||||
allsuspects[i] &&
|
||||
allsuspects[i].getAttribute(targetattr) != null &&
|
||||
allsuspects[i].getAttribute(targetattr)?.indexOf(filename) != -1
|
||||
) {
|
||||
console.log(allsuspects[i], 'node')
|
||||
allsuspects[i].parentNode?.removeChild(allsuspects[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
const reImport = () => {
|
||||
var head = document.getElementsByTagName('head')[0]
|
||||
var style = document.createElement('style')
|
||||
style.innerText = styleCss
|
||||
style.id = 'cssTheme'
|
||||
head.appendChild(style)
|
||||
}
|
||||
|
||||
watch(
|
||||
() => appStore.getIsDark,
|
||||
() => {
|
||||
if (appStore.getIsDark == true) {
|
||||
import('./style/dark.scss')
|
||||
reImport()
|
||||
}
|
||||
if (appStore.getIsDark == false) {
|
||||
import('./style/light.scss')
|
||||
removeStyles()
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
|
|
|
|||
|
|
@ -99,37 +99,47 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 分配角色的菜单权限对话框 -->
|
||||
<el-form-item
|
||||
label="权限范围"
|
||||
v-if="
|
||||
actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
|
||||
"
|
||||
>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
父子联动(选中父节点,自动选择子节点):
|
||||
<el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
|
||||
全选/全不选:
|
||||
<el-switch
|
||||
v-model="treeNodeAll"
|
||||
inline-prompt
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
@change="handleCheckedTreeNodeAll()"
|
||||
/>
|
||||
</template>
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
node-key="id"
|
||||
show-checkbox
|
||||
:default-checked-keys="defaultCheckedKeys"
|
||||
:check-strictly="!checkStrictly"
|
||||
:props="defaultProps"
|
||||
:data="treeOptions"
|
||||
empty-text="加载中,请稍后"
|
||||
/>
|
||||
</el-card>
|
||||
</el-form-item>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item
|
||||
label="权限范围"
|
||||
v-if="
|
||||
actionScopeType === 'menu' ||
|
||||
dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
|
||||
"
|
||||
style="display: flex"
|
||||
>
|
||||
<el-card class="card" shadow="never">
|
||||
<template #header>
|
||||
父子联动(选中父节点,自动选择子节点):
|
||||
<el-switch
|
||||
v-model="checkStrictly"
|
||||
inline-prompt
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
/>
|
||||
全选/全不选:
|
||||
<el-switch
|
||||
v-model="treeNodeAll"
|
||||
inline-prompt
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
@change="handleCheckedTreeNodeAll()"
|
||||
/>
|
||||
</template>
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
node-key="id"
|
||||
show-checkbox
|
||||
:default-checked-keys="defaultCheckedKeys"
|
||||
:check-strictly="!checkStrictly"
|
||||
:props="defaultProps"
|
||||
:data="treeOptions"
|
||||
empty-text="加载中,请稍后"
|
||||
/>
|
||||
</el-card>
|
||||
</el-form-item> </el-col
|
||||
></el-row>
|
||||
</el-form>
|
||||
<!-- 操作按钮 -->
|
||||
<template #footer>
|
||||
|
|
@ -312,3 +322,10 @@ onMounted(() => {
|
|||
init()
|
||||
})
|
||||
</script>
|
||||
<style scoped>
|
||||
.card {
|
||||
width: 100%;
|
||||
max-height: 400px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
ref="formRef"
|
||||
>
|
||||
<template #menuIds>
|
||||
<el-card class="w-120">
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
全选/全不选:
|
||||
|
|
@ -91,6 +91,16 @@ const dialogTitle = ref('edit') // 弹出层标题
|
|||
const handleCheckedTreeNodeAll = () => {
|
||||
treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
|
||||
}
|
||||
|
||||
const validateCategory = (rule: any, value: any, callback: any) => {
|
||||
if (!treeRef.value!.getCheckedKeys().length) {
|
||||
callback(new Error('该项为必填项'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
rules.menuIds = [{ required: true, validator: validateCategory, trigger: 'blur' }]
|
||||
|
||||
const getTree = async () => {
|
||||
const res = await listSimpleMenusApi()
|
||||
menuOptions.value = handleTree(res)
|
||||
|
|
@ -166,3 +176,10 @@ onMounted(async () => {
|
|||
})
|
||||
// getList()
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-card {
|
||||
width: 100%;
|
||||
max-height: 400px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
|
|||
{
|
||||
title: '菜单权限',
|
||||
field: 'menuIds',
|
||||
isTable: false
|
||||
isTable: false,
|
||||
form: {
|
||||
colProps: {
|
||||
span: 24
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
title: t('form.remark'),
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@
|
|||
:data="detailData"
|
||||
>
|
||||
<template #deptId="{ row }">
|
||||
<span>{{ row.dept?.name }}</span>
|
||||
<el-tag>{{ dataFormater(row.deptId) }}</el-tag>
|
||||
</template>
|
||||
<template #postIds="{ row }">
|
||||
<template v-if="row.postIds !== ''">
|
||||
|
|
@ -332,6 +332,29 @@ const getPostOptions = async () => {
|
|||
const res = await listSimplePostsApi()
|
||||
postOptions.value.push(...res)
|
||||
}
|
||||
|
||||
const dataFormater = (val) => {
|
||||
return deptFormater(deptOptions.value, val)
|
||||
}
|
||||
//部门回显
|
||||
const deptFormater = (ary, val: any) => {
|
||||
var o = ''
|
||||
if (ary && val) {
|
||||
for (const v of ary) {
|
||||
if (v.id == val) {
|
||||
o = v.name
|
||||
if (o) return o
|
||||
} else if (v.children?.length) {
|
||||
o = deptFormater(v.children, val)
|
||||
if (o) return o
|
||||
}
|
||||
}
|
||||
return o
|
||||
} else {
|
||||
return val
|
||||
}
|
||||
}
|
||||
|
||||
// 设置标题
|
||||
const setDialogTile = async (type: string) => {
|
||||
dialogTitle.value = t('action.' + type)
|
||||
|
|
|
|||
Loading…
Reference in New Issue