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/departUser/components/DepartRoleAuthDrawer.vue |  158 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 158 insertions(+), 0 deletions(-)

diff --git a/src/views/system/departUser/components/DepartRoleAuthDrawer.vue b/src/views/system/departUser/components/DepartRoleAuthDrawer.vue
new file mode 100644
index 0000000..10989df
--- /dev/null
+++ b/src/views/system/departUser/components/DepartRoleAuthDrawer.vue
@@ -0,0 +1,158 @@
+<template>
+	<BasicDrawer
+		title="閮ㄩ棬瑙掕壊鏉冮檺閰嶇疆"
+		:width="650"
+		:loading="loading"
+		showFooter
+		okText="淇濆瓨骞跺叧闂�"
+		@ok="onSubmit(true)"
+		@close="onClose"
+		@register="registerDrawer"
+	>
+		<div>
+			<a-spin :spinning="loading">
+				<template v-if="treeData.length > 0">
+					<BasicTree
+						title="鎵�鎷ユ湁鐨勯儴闂ㄦ潈闄�"
+						toolbar
+						checkable
+						:treeData="treeData"
+						:checkedKeys="checkedKeys"
+						:selectedKeys="selectedKeys"
+						:expandedKeys="expandedKeys"
+						:checkStrictly="checkStrictly"
+						:clickRowToExpand="false"
+						@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="鏃犲彲閰嶇疆閮ㄩ棬鏉冮檺" />
+			</a-spin>
+		</div>
+
+		<template #centerFooter>
+			<a-button type="primary" :loading="loading" ghost @click="onSubmit(false)">浠呬繚瀛�</a-button>
+		</template>
+	</BasicDrawer>
+	<DepartRoleDataRuleDrawer @register="registerDataRuleDrawer" />
+</template>
+
+<script lang="ts" setup>
+	import { ref } from 'vue'
+
+	import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer'
+	import { BasicTree } from '/@/components/Tree/index'
+	import { useMessage } from '/@/hooks/web/useMessage'
+
+	import { queryDeptRolePermission, queryTreeListForDeptRole, saveDeptRolePermission } from '../depart.user.api'
+	import DepartRoleDataRuleDrawer from './DepartRoleDataRuleDrawer.vue'
+
+	defineEmits(['register'])
+	const { createMessage } = useMessage()
+	const loading = ref(false)
+	const departId = ref('')
+	const roleId = ref('')
+	const treeData = ref<Array<any>>([])
+	const checkedKeys = ref<Array<any>>([])
+	const lastCheckedKeys = ref<Array<any>>([])
+	const expandedKeys = ref<Array<any>>([])
+	const selectedKeys = ref<Array<any>>([])
+	const allTreeKeys = ref<Array<any>>([])
+	const checkStrictly = ref(true)
+
+	// 娉ㄥ唽鎶藉眽缁勪欢
+	const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => {
+		roleId.value = data.record.id
+		departId.value = data.record.departId
+		loadData()
+	})
+	// 娉ㄥ唽鏁版嵁瑙勫垯鎺堟潈寮圭獥鎶藉眽
+	const [registerDataRuleDrawer, dataRuleDrawer] = useDrawer()
+
+	async function loadData() {
+		try {
+			loading.value = true
+			// 鐢ㄦ埛瑙掕壊鎺堟潈鍔熻兘锛屾煡璇㈣彍鍗曟潈闄愭爲
+			const { ids, treeList } = await queryTreeListForDeptRole({ departId: departId.value })
+			if (ids.length > 0) {
+				allTreeKeys.value = ids
+				expandedKeys.value = ids
+				treeData.value = treeList
+				// 鏌ヨ瑙掕壊鎺堟潈
+				checkedKeys.value = await queryDeptRolePermission({ roleId: roleId.value })
+				lastCheckedKeys.value = [checkedKeys.value]
+			} else {
+				reset()
+			}
+		} finally {
+			loading.value = false
+		}
+	}
+
+	// 閲嶇疆椤甸潰
+	function reset() {
+		treeData.value = []
+		expandedKeys.value = []
+		checkedKeys.value = []
+		lastCheckedKeys.value = []
+		loading.value = false
+	}
+
+	// tree鍕鹃�夊閫夋浜嬩欢
+	function onCheck(event) {
+		if (checkStrictly.value) {
+			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, { roleId, departId, functionId })
+		}
+		selectedKeys.value = []
+	}
+
+	function doClose() {
+		reset()
+		closeDrawer()
+	}
+
+	function onClose() {
+		reset()
+	}
+
+	async function onSubmit(exit) {
+		try {
+			loading.value = true
+			let params = {
+				roleId: roleId.value,
+				permissionIds: checkedKeys.value.join(','),
+				lastpermissionIds: lastCheckedKeys.value.join(','),
+			}
+			await saveDeptRolePermission(params)
+			if (exit) {
+				doClose()
+			}
+		} finally {
+			loading.value = false
+			if (!exit) {
+				loadData()
+			}
+		}
+	}
+</script>

--
Gitblit v1.9.3