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