From 42e3694b8c48ef8d7b9cec3a8e48da666bcfcbe3 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期五, 13 九月 2024 14:49:17 +0800
Subject: [PATCH] 增加权限管理-资源的拖拽功能锁定按钮
---
src/views/authority/resource/index.vue | 423 +++++++++++++++++++++++++++-------------------------
1 files changed, 220 insertions(+), 203 deletions(-)
diff --git a/src/views/authority/resource/index.vue b/src/views/authority/resource/index.vue
index 7c94293..673324d 100644
--- a/src/views/authority/resource/index.vue
+++ b/src/views/authority/resource/index.vue
@@ -6,11 +6,20 @@
<a-card
:title="$t('menu.resource.title')"
:bordered="false"
+ :header-style="{ textAlign: 'left' }"
style=" 'width': '100%'; height: calc(100vh - 250px); overflow-y:auto "
>
+ <template #title>
+ <span>{{ $t('menu.resource.title') }}</span>
+ <a-tooltip content="鐐瑰嚮鍚庡彲閫氳繃鎷栨嫿鏇存敼璧勬簮缁撴瀯,鍐嶆鐐瑰嚮鏉ュ叧闂�" background-color="#165DFF">
+ <a-button type="outline" style="float: right;" @click="toggleDraggable" :style="{color: buttonColor}">
+ <component :is="lockIcon" />
+ </a-button>
+ </a-tooltip>
+ </template>
<a-tree
class="tree-demo"
- draggable
+ :draggable="draggable"
blockNode
:default-expand-all=true
:data="treeData"
@@ -35,9 +44,9 @@
@click="() => onIconClick(nodeData)"
/>
<a-popconfirm v-if="nodeData.menuName!='root'"
- content="璇风‘璁ゆ槸鍚﹀垹闄わ紵"
- type="success"
- @ok="() => onIconClickDelete(nodeData)"
+ content="璇风‘璁ゆ槸鍚﹀垹闄わ紵"
+ type="success"
+ @ok="() => onIconClickDelete(nodeData)"
>
<IconDelete
style="
@@ -174,227 +183,235 @@
</template>
<script lang="ts" setup>
- import { ref } from 'vue';
- import { IconPlus } from '@arco-design/web-vue/es/icon';
- import {
- Organization,
- OrganizationAdd, OrganizationUpdate,
- Resource,
- ResourceAdd,
- ResourceById,
- ResourceDelete,
- ResourceList,
- ResourceUpdate
- } from "@/api/authority";
- import Authheader from '@/views/authority/components/authheader.vue';
- import { Modal } from '@arco-design/web-vue';
- import { userModelState } from '@/store';
+import { ref } from 'vue';
+import { IconPlus } from '@arco-design/web-vue/es/icon';
+import {
+ Organization,
+ OrganizationAdd, OrganizationUpdate,
+ Resource,
+ ResourceAdd,
+ ResourceById,
+ ResourceDelete,
+ ResourceList,
+ ResourceUpdate
+} from "@/api/authority";
+import Authheader from '@/views/authority/components/authheader.vue';
+import { Modal } from '@arco-design/web-vue';
+import { userModelState } from '@/store';
- const modelStore = userModelState();
- let formRef = ref();
- let addFormRef= ref();
- let visible = ref(false);
- let treeData = ref([]);
- let showLine = ref(true);
- let menuTips = ref(['鏉冮檺绠$悊', '璧勬簮']);
- const fieldNames = { value: 'key', label: 'value' };
- // 0鐩綍 1鑿滃崟 2鎸夐挳
- let options = ref([
- {
- key: '3',
- value: '鐩綍',
- },
- {
- key: '0',
- value: '鑿滃崟',
- },
- {
- key: '1',
- value: '鎸夐挳',
- },
- ]);
- let resourceform = ref<Resource>({
- component: '',
- createTime: '',
- description: '',
- icon: '',
- menuId: '',
- menuName: '',
- menuType: '',
- orderNum: '0',
- parentId: '',
- parentName: '',
- children: [],
- path: '',
- perms: '',
- status: '',
- syesourcetype: '',
- target: '',
- updateTime: '',
- });
+const modelStore = userModelState();
+let formRef = ref();
+let addFormRef= ref();
+let visible = ref(false);
+let treeData = ref([]);
+let showLine = ref(true);
+let menuTips = ref(['鏉冮檺绠$悊', '璧勬簮']);
+const fieldNames = { value: 'key', label: 'value' };
+// 0鐩綍 1鑿滃崟 2鎸夐挳
+let options = ref([
+ {
+ key: '3',
+ value: '鐩綍',
+ },
+ {
+ key: '0',
+ value: '鑿滃崟',
+ },
+ {
+ key: '1',
+ value: '鎸夐挳',
+ },
+]);
+let resourceform = ref<Resource>({
+ component: '',
+ createTime: '',
+ description: '',
+ icon: '',
+ menuId: '',
+ menuName: '',
+ menuType: '',
+ orderNum: '0',
+ parentId: '',
+ parentName: '',
+ children: [],
+ path: '',
+ perms: '',
+ status: '',
+ syesourcetype: '',
+ target: '',
+ updateTime: '',
+});
+let draggable = ref(false);
+let buttonColor = ref("");
+let lockIcon = ref("IconLock");
- const onIconClick = (nodeData) => {
- if (nodeData) {
- resourceform.value.parentId = nodeData.menuId;
- resourceform.value.parentName = nodeData.menuName;
- }
- resourceform.value.component = '';
- resourceform.value.createTime = '';
- resourceform.value.description = '';
- resourceform.value.icon = '';
- resourceform.value.menuId = '';
- resourceform.value.menuName = '';
- resourceform.value.menuType = '';
- resourceform.value.orderNum = '0';
- resourceform.value.path = '';
- resourceform.value.perms = '';
- resourceform.value.status = '';
- resourceform.value.syesourcetype = '';
-
- visible.value = true;
- };
-
- //鍥剧墖涓婁紶
- const uploadAction = '/api/v1/llm/upload'; // 鏇挎崲涓轰綘鐨勪笂浼燗PI
- const fileList = ref([]);
- const imageUrls = ref([]);
- const uploadUrl = ref([]);
- const httpUrl = modelStore.hrefUrl;
- const updateFileList = (newFileList) => {
- fileList.value = newFileList;
- };
-
- const handleSuccess = (urls) => {
- uploadUrl.value = urls;
-
- const urlsArr = urls.map((url) => {
- return httpUrl + url;
- });
- imageUrls.value = urlsArr; // 鎷垮埌涓婁紶鐨勫浘鐗囧湴鍧�
- };
-
- const addCb = async (err) => {
- if (err) {
- visible.value = true;
- } else {
- resourceform.value.icon = uploadUrl.value[0] || '';
- await ResourceAdd({
- ...resourceform.value,
- } as unknown as Resource).then((res) => {
- ResourceData('');
- });
- }
+const onIconClick = (nodeData) => {
+ if (nodeData) {
+ resourceform.value.parentId = nodeData.menuId;
+ resourceform.value.parentName = nodeData.menuName;
}
+ resourceform.value.component = '';
+ resourceform.value.createTime = '';
+ resourceform.value.description = '';
+ resourceform.value.icon = '';
+ resourceform.value.menuId = '';
+ resourceform.value.menuName = '';
+ resourceform.value.menuType = '';
+ resourceform.value.orderNum = '0';
+ resourceform.value.path = '';
+ resourceform.value.perms = '';
+ resourceform.value.status = '';
+ resourceform.value.syesourcetype = '';
- const addresource = async (done) => {
- addFormRef.value.validate(addCb);
- };
+ visible.value = true;
+};
- const onIconClickDelete = (nodeData) => {
- ResourceDelete(nodeData.menuId).then(() => {
+//鍥剧墖涓婁紶
+const uploadAction = '/api/v1/llm/upload'; // 鏇挎崲涓轰綘鐨勪笂浼燗PI
+const fileList = ref([]);
+const imageUrls = ref([]);
+const uploadUrl = ref([]);
+const httpUrl = modelStore.hrefUrl;
+const updateFileList = (newFileList) => {
+ fileList.value = newFileList;
+};
+
+const handleSuccess = (urls) => {
+ uploadUrl.value = urls;
+
+ const urlsArr = urls.map((url) => {
+ return httpUrl + url;
+ });
+ imageUrls.value = urlsArr; // 鎷垮埌涓婁紶鐨勫浘鐗囧湴鍧�
+};
+
+const addCb = async (err) => {
+ if (err) {
+ visible.value = true;
+ } else {
+ resourceform.value.icon = uploadUrl.value[0] || '';
+ await ResourceAdd({
+ ...resourceform.value,
+ } as unknown as Resource).then((res) => {
ResourceData('');
});
- };
-
- const showDetail = (id) => {
- ResourceById(id).then((res) => {
- resourceform.value = { ...res.data };
- resourceform.value.icon = res.data.icon;
-
- imageUrls.value.push(httpUrl + res.data.icon);
- });
- };
- const cb = async (err) => {
- if (err) {
-
- } else {
- resourceform.value.icon = uploadUrl.value[0] || '';
- ResourceUpdate({
- ...resourceform.value,
- } as unknown as Resource).then((res) => {
- ResourceData('');
- Modal.success({
- title: '淇濆瓨鎴愬姛',
- content: '淇濆瓨鎴愬姛',
- });
- });
- }
}
- const editresource = () => {
- formRef.value.validate(cb);
+}
- };
- const reset = (id) => {
- ResourceById(id).then((res) => {
- resourceform.value = { ...res.data };
- });
- };
+const addresource = async (done) => {
+ addFormRef.value.validate(addCb);
+};
- const onDrop = ({ dragNode, dropNode, dropPosition }) => {
- const data = treeData.value;
+const onIconClickDelete = (nodeData) => {
+ ResourceDelete(nodeData.menuId).then(() => {
+ ResourceData('');
+ });
+};
+
+const showDetail = (id) => {
+ ResourceById(id).then((res) => {
+ resourceform.value = { ...res.data };
+ resourceform.value.icon = res.data.icon;
+
+ imageUrls.value.push(httpUrl + res.data.icon);
+ });
+};
+const cb = async (err) => {
+ if (err) {
+
+ } else {
+ resourceform.value.icon = uploadUrl.value[0] || '';
ResourceUpdate({
- orderNum: '0',
- parentId: dropNode.menuId,
- menuId: dragNode.menuId,
+ ...resourceform.value,
+ } as unknown as Resource).then((res) => {
+ ResourceData('');
+ Modal.success({
+ title: '淇濆瓨鎴愬姛',
+ content: '淇濆瓨鎴愬姛',
+ });
});
- const loop = (data, key, callback) => {
- data.some((item, index, arr) => {
- if (item.menuId === key) {
- callback(item, index, arr);
- return true;
- }
- if (item.children) {
- return loop(item.children, key, callback);
- }
- return false;
- });
- };
+ }
+}
+const editresource = () => {
+ formRef.value.validate(cb);
- loop(data, dragNode.menuId, (_, index, arr) => {
- arr.splice(index, 1);
- });
+};
+const reset = (id) => {
+ ResourceById(id).then((res) => {
+ resourceform.value = { ...res.data };
+ });
+};
- if (dropPosition === 0) {
- loop(data, dropNode.menuId, (item) => {
- item.children = item.children || [];
- item.children.push(dragNode);
- });
- } else {
- loop(data, dropNode.menuId, (_, index, arr) => {
- arr.splice(dropPosition < 0 ? index : index + 1, 0, dragNode);
- });
- }
- };
-
- const handleCancel = (type) => {
- if (type == 1) {
- visible.value = false;
- }
- };
-
- const ResourceData = async (key) => {
- await ResourceList(key).then((res) => {
- treeData.value = [...res.rows];
+const onDrop = ({ dragNode, dropNode, dropPosition }) => {
+ const data = treeData.value;
+ ResourceUpdate({
+ orderNum: '0',
+ parentId: dropNode.menuId,
+ menuId: dragNode.menuId,
+ });
+ const loop = (data, key, callback) => {
+ data.some((item, index, arr) => {
+ if (item.menuId === key) {
+ callback(item, index, arr);
+ return true;
+ }
+ if (item.children) {
+ return loop(item.children, key, callback);
+ }
+ return false;
});
};
- ResourceData('');
+ loop(data, dragNode.menuId, (_, index, arr) => {
+ arr.splice(index, 1);
+ });
+
+ if (dropPosition === 0) {
+ loop(data, dropNode.menuId, (item) => {
+ item.children = item.children || [];
+ item.children.push(dragNode);
+ });
+ } else {
+ loop(data, dropNode.menuId, (_, index, arr) => {
+ arr.splice(dropPosition < 0 ? index : index + 1, 0, dragNode);
+ });
+ }
+};
+
+const handleCancel = (type) => {
+ if (type == 1) {
+ visible.value = false;
+ }
+};
+
+const toggleDraggable = () =>{
+ draggable.value = !draggable.value;
+ buttonColor.value= draggable.value ? '#575757' : '';
+ lockIcon.value = draggable.value ? 'IconUnlock' : 'IconLock';
+};
+const ResourceData = async (key) => {
+ await ResourceList(key).then((res) => {
+ treeData.value = [...res.rows];
+ });
+};
+
+ResourceData('');
</script>
<style scoped>
- .tree-demo :deep(.tree-node-dropover) > :deep(.arco-tree-node-title),
- .tree-demo :deep(.tree-node-dropover) > :deep(.arco-tree-node-title):hover {
- animation: blinkBg 0.4s 2;
+.tree-demo :deep(.tree-node-dropover) > :deep(.arco-tree-node-title),
+.tree-demo :deep(.tree-node-dropover) > :deep(.arco-tree-node-title):hover {
+ animation: blinkBg 0.4s 2;
+}
+
+@keyframes blinkBg {
+ 0% {
+ background-color: transparent;
}
- @keyframes blinkBg {
- 0% {
- background-color: transparent;
- }
-
- 100% {
- background-color: var(--color-primary-light-1);
- }
+ 100% {
+ background-color: var(--color-primary-light-1);
}
+}
</style>
--
Gitblit v1.8.0