From fa3ac93010bea3805438ee3ab0a182bfbf7423da Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 27 五月 2024 16:19:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/system/depart/components/DepartRuleTab.vue | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 160 insertions(+), 0 deletions(-) diff --git a/src/views/system/depart/components/DepartRuleTab.vue b/src/views/system/depart/components/DepartRuleTab.vue new file mode 100644 index 0000000..d66ca3f --- /dev/null +++ b/src/views/system/depart/components/DepartRuleTab.vue @@ -0,0 +1,160 @@ +<template> + <a-spin :spinning="loading"> + <template v-if="treeData.length > 0"> + <BasicTree ref="basicTree" class="depart-rule-tree" checkable :treeData="treeData" :checkedKeys="checkedKeys" + :selectedKeys="selectedKeys" :expandedKeys="expandedKeys" :checkStrictly="checkStrictly" + style="height: 500px; overflow: auto" @check="onCheck" @expand="onExpand" @select="onSelect"> + <template #title="{ slotTitle, ruleFlag }"> + <span>{{ slotTitle }}</span> + <Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red" /> + </template> + </BasicTree> + </template> + <a-empty v-else description="鏃犲彲閰嶇疆閮ㄩ棬鏉冮檺" /> + + <div class="j-box-bottom-button offset-20" style="margin-top: 30px"> + <div class="j-box-bottom-button-float"> + <a-dropdown :trigger="['click']" placement="top"> + <template #overlay> + <a-menu> + <a-menu-item key="1" @click="toggleCheckStrictly(false)">鐖跺瓙鍏宠仈</a-menu-item> + <a-menu-item key="2" @click="toggleCheckStrictly(true)">鍙栨秷鍏宠仈</a-menu-item> + <a-menu-item key="3" @click="toggleCheckALL(true)">鍏ㄩ儴鍕鹃��</a-menu-item> + <a-menu-item key="4" @click="toggleCheckALL(false)">鍙栨秷鍏ㄩ��</a-menu-item> + <a-menu-item key="5" @click="toggleExpandAll(true)">灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item key="6" @click="toggleExpandAll(false)">鏀惰捣鎵�鏈�</a-menu-item> + </a-menu> + </template> + <a-button style="float: left"> + 鏍戞搷浣� + <Icon icon="ant-design:up-outlined" /> + </a-button> + </a-dropdown> + <a-button type="primary" preIcon="ant-design:save-filled" @click="onSubmit">淇濆瓨</a-button> + </div> + </div> + </a-spin> + <DepartDataRuleDrawer @register="registerDataRuleDrawer" /> +</template> + +<script lang="ts" setup> +import { computed, inject, nextTick, ref, watch } from 'vue' +import { queryDepartPermission, queryRoleTreeList, saveDepartPermission } from '../depart.api' +import DepartDataRuleDrawer from './DepartDataRuleDrawer.vue' +import { useDrawer } from '/@/components/Drawer' +import { BasicTree } from '/@/components/Tree/index' + +const props = defineProps({ + data: { type: Object, default: () => ({}) }, +}) +// 褰撳墠閫変腑鐨勯儴闂↖D锛屽彲鑳戒細涓虹┖锛屼唬琛ㄦ湭閫夋嫨閮ㄩ棬 +const departId = computed(() => props.data?.id) + +const prefixCls = inject('prefixCls') +const basicTree = ref() +const loading = ref<boolean>(false) +const treeData = ref<any[]>([]) +const expandedKeys = ref<Array<any>>([]) +const selectedKeys = ref<Array<any>>([]) +const checkedKeys = ref<Array<any>>([]) +const lastCheckedKeys = ref<Array<any>>([]) +const checkStrictly = ref(true) + +// 娉ㄥ唽鏁版嵁瑙勫垯鎺堟潈寮圭獥鎶藉眽 +const [registerDataRuleDrawer, dataRuleDrawer] = useDrawer() + +// onCreated +loadData() +watch(departId, () => loadDepartPermission(), { immediate: true }) + +async function loadData() { + try { + loading.value = true + let { treeList } = await queryRoleTreeList() + treeData.value = treeList + await nextTick() + toggleExpandAll(true) + } finally { + loading.value = false + } +} + +async function loadDepartPermission() { + if (departId.value) { + try { + loading.value = true + let keys = await queryDepartPermission({ departId: departId.value }) + checkedKeys.value = keys + lastCheckedKeys.value = [...keys] + } finally { + loading.value = false + } + } +} + +async function onSubmit() { + try { + loading.value = true + await saveDepartPermission({ + departId: departId.value, + permissionIds: checkedKeys.value.join(','), + lastpermissionIds: lastCheckedKeys.value.join(','), + }) + await loadData() + await loadDepartPermission() + } finally { + loading.value = false + } +} + +// tree鍕鹃�夊閫夋浜嬩欢 +function onCheck(event) { + if (!Array.isArray(event)) { + checkedKeys.value = event.checked + } else { + checkedKeys.value = event + } +} + +// tree灞曞紑浜嬩欢 +function onExpand($expandedKeys) { + expandedKeys.value = $expandedKeys +} + +// tree閫変腑浜嬩欢 +function onSelect($selectedKeys, { selectedNodes }) { + if (selectedNodes[0]?.ruleFlag) { + let functionId = $selectedKeys[0] + dataRuleDrawer.openDrawer(true, { departId, functionId }) + } + selectedKeys.value = [] +} + +// 鍒囨崲鐖跺瓙鍏宠仈 +async function toggleCheckStrictly(flag) { + checkStrictly.value = flag + await nextTick() + checkedKeys.value = basicTree.value.getCheckedKeys() +} + +// 鍒囨崲灞曞紑鏀惰捣 +async function toggleExpandAll(flag) { + basicTree.value.expandAll(flag) + await nextTick() + expandedKeys.value = basicTree.value.getExpandedKeys() +} + +// 鍒囨崲鍏ㄩ�� +async function toggleCheckALL(flag) { + basicTree.value.checkAll(flag) + await nextTick() + checkedKeys.value = basicTree.value.getCheckedKeys() +} +</script> + +<style lang="less" scoped> +// 銆怴UEN-188銆戣В鍐虫粴鍔ㄦ潯涓嶇伒鏁忕殑闂 +.depart-rule-tree :deep(.scrollbar__bar) { + pointer-events: none; +} +</style> -- Gitblit v1.9.3