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/role/components/RolePermissionDrawer.vue | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 205 insertions(+), 0 deletions(-) diff --git a/src/views/system/role/components/RolePermissionDrawer.vue b/src/views/system/role/components/RolePermissionDrawer.vue new file mode 100644 index 0000000..3fbe54b --- /dev/null +++ b/src/views/system/role/components/RolePermissionDrawer.vue @@ -0,0 +1,205 @@ +<template> + <BasicDrawer v-bind="$attrs" + @register="registerDrawer" + width="650px" + destroyOnClose + showFooter> + <template #title> + 瑙掕壊鏉冮檺閰嶇疆 + <a-dropdown> + <Icon icon="ant-design:more-outlined" class="more-icon" /> + <template #overlay> + <a-menu @click="treeMenuClick"> + <a-menu-item key="checkAll">閫夋嫨鍏ㄩ儴</a-menu-item> + <a-menu-item key="cancelCheck">鍙栨秷閫夋嫨</a-menu-item> + <div class="line"></div> + <a-menu-item key="openAll">灞曞紑鍏ㄩ儴</a-menu-item> + <a-menu-item key="closeAll">鎶樺彔鍏ㄩ儴</a-menu-item> + <div class="line"></div> + <a-menu-item key="relation">灞傜骇鍏宠仈</a-menu-item> + <a-menu-item key="standAlone">灞傜骇鐙珛</a-menu-item> + </a-menu> + </template> + </a-dropdown> + </template> + <BasicTree ref="treeRef" checkable :treeData="treeData" :checkedKeys="checkedKeys" :expandedKeys="expandedKeys" + :selectedKeys="selectedKeys" :checkStrictly="checkStrictly" :clickRowToExpand="false" title="鎵�鎷ユ湁鐨勭殑鏉冮檺" + @check="onCheck" @select="onTreeNodeSelect"> + <template #title="{ slotTitle, ruleFlag }"> + {{ slotTitle }} + <Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red"></Icon> + </template> + </BasicTree> + <!--鍙充笅瑙掓寜閽�--> + <template #footer> + <PopConfirmButton title="纭畾鏀惧純缂栬緫锛�" @confirm="closeDrawer" okText="纭畾" cancelText="鍙栨秷">鍙栨秷</PopConfirmButton> + <a-button @click="handleSubmit(false)" type="primary" :loading="loading" ghost + style="margin-right: 0.8rem">浠呬繚瀛�</a-button> + <a-button @click="handleSubmit(true)" type="primary" :loading="loading">淇濆瓨骞跺叧闂�</a-button> + </template> + <RoleDataRuleDrawer @register="registerDrawer1" /> + </BasicDrawer> +</template> +<script lang="ts" setup> +import { ref, computed, unref, onMounted } from 'vue' +import { BasicDrawer, useDrawer, useDrawerInner } from '/src/components/Drawer' +import { BasicTree, TreeItem } from '/src/components/Tree' +import { PopConfirmButton } from '/@/components/Button' +import RoleDataRuleDrawer from './RoleDataRuleDrawer.vue' +import { queryTreeListForRole, queryRolePermission, saveRolePermission } from '../role.api' +const emit = defineEmits(['register']) +//鏍戠殑淇℃伅 +const treeData = ref<TreeItem[]>([]) +//鏍戠殑鍏ㄩ儴鑺傜偣淇℃伅 +const allTreeKeys = ref([]) +//鏍戠殑閫夋嫨鑺傜偣淇℃伅 +const checkedKeys = ref([]) +const defaultCheckedKeys = ref([]) +//鏍戠殑閫変腑鐨勮妭鐐逛俊鎭� +const selectedKeys = ref([]) +const roleId = ref('') +//鏍戠殑瀹炰緥 +const treeRef = ref(null) +const loading = ref(false) + +//灞曞紑鎶樺彔鐨刱ey +const expandedKeys = ref<any>([]) +//鐖跺瓙鑺傜偣閫変腑鐘舵�佹槸鍚﹀叧鑱� +const checkStrictly = ref<boolean>(true) +const [registerDrawer1, { openDrawer: openDataRuleDrawer }] = useDrawer() +const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { + await reset() + setDrawerProps({ confirmLoading: false, loading: true }) + roleId.value = data.roleId + //鍒濆鍖栨暟鎹� + const roleResult = await queryTreeListForRole() + treeData.value = roleResult.treeList + allTreeKeys.value = roleResult.ids + expandedKeys.value = roleResult.ids + //鍒濆鍖栬鑹茶彍鍗曟暟鎹� + const permResult = await queryRolePermission({ roleId: unref(roleId) }) + checkedKeys.value = permResult + defaultCheckedKeys.value = permResult + setDrawerProps({ loading: false }) +}) +/** + * 鐐瑰嚮閫変腑 + */ +function onCheck(o) { + checkedKeys.value = o.checked ? o.checked : o +} +/** + * 閫変腑鑺傜偣锛屾墦寮�鏁版嵁鏉冮檺鎶藉眽 + */ +function onTreeNodeSelect(key) { + if (key && key.length > 0) { + selectedKeys.value = key + } + openDataRuleDrawer(true, { functionId: unref(selectedKeys)[0], roleId: unref(roleId) }) +} +/** + * 鏁版嵁閲嶇疆 + */ +function reset() { + treeData.value = [] + allTreeKeys.value = [] + checkedKeys.value = [] + defaultCheckedKeys.value = [] + selectedKeys.value = [] + roleId.value = '' +} +/** + * 鑾峰彇tree瀹炰緥 + */ +function getTree() { + const tree = unref(treeRef) + if (!tree) { + throw new Error('tree is null!') + } + return tree +} +/** + * 鎻愪氦 + */ +async function handleSubmit(exit) { + let params = { + roleId: unref(roleId), + permissionIds: unref(getTree().getCheckedKeys()).join(','), + lastpermissionIds: unref(defaultCheckedKeys).join(','), + } + //update-begin-author:taoyan date:2023-2-11 for: issues/352 VUE瑙掕壊鎺堟潈閲嶅淇濆瓨 + if (loading.value === false) { + await doSave(params) + } else { + console.log('璇风瓑寰呬笂娆℃墽琛屽畬姣�!') + } + if (exit) { + // 濡傛灉鍏抽棴 + closeDrawer() + } else { + // 娌℃湁鍏抽棴闇�瑕侀噸鏂拌幏鍙栭�変腑鏁版嵁 + const permResult = await queryRolePermission({ roleId: unref(roleId) }) + defaultCheckedKeys.value = permResult + } +} + +// VUE瑙掕壊鎺堟潈閲嶅淇濆瓨 #352 +async function doSave(params) { + loading.value = true + await saveRolePermission(params) + setTimeout(() => { + loading.value = false + }, 500) +} +//update-end-author:taoyan date:2023-2-11 for: issues/352 VUE瑙掕壊鎺堟潈閲嶅淇濆瓨 + +/** + * 鏍戣彍鍗曢�夋嫨 + * @param key + */ +function treeMenuClick({ key }) { + if (key === 'checkAll') { + checkedKeys.value = allTreeKeys.value + } else if (key === 'cancelCheck') { + checkedKeys.value = [] + } else if (key === 'openAll') { + expandedKeys.value = allTreeKeys.value + } else if (key === 'closeAll') { + expandedKeys.value = [] + } else if (key === 'relation') { + checkStrictly.value = false + } else { + checkStrictly.value = true + } +} +</script> + +<style lang="less" scoped> +/** 鍥哄畾鎿嶄綔鎸夐挳 */ +.jeecg-basic-tree { + position: absolute; + width: 618px; +} + +//update-begin---author:wangshuai ---date:20230202 for锛氭娊灞夊脊绐楁爣棰樺浘鏍囦笅鎷夋牱寮�------------ +.line { + height: 1px; + width: 100%; + border-bottom: 1px solid #f0f0f0; +} + +.more-icon { + font-size: 20px !important; + color: black; + display: inline-flex; + float: right; + margin-right: 2px; + cursor: pointer; +} + +:deep(.jeecg-tree-header) { + border-bottom: none; +} + +//update-end---author:wangshuai ---date:20230202 for锛氭娊灞夊脊绐楁爣棰樺浘鏍囦笅鎷夋牱寮�------------ +</style> -- Gitblit v1.9.3