From 64920403797a80149ac1ba2cd2426ad5db044bec Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期一, 26 八月 2024 14:58:01 +0800
Subject: [PATCH] fix: 修改settings 备注
---
src/views/authority/resource/index.vue | 490 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 314 insertions(+), 176 deletions(-)
diff --git a/src/views/authority/resource/index.vue b/src/views/authority/resource/index.vue
index 2017ba2..7c94293 100644
--- a/src/views/authority/resource/index.vue
+++ b/src/views/authority/resource/index.vue
@@ -3,56 +3,108 @@
<authheader :items="menuTips"></authheader>
<a-row :gutter="20">
<a-col :span="8">
- <a-card :title="$t('menu.resource.title')" :bordered="false"
- :style="{ width: '100%',height: '900px', 'overflow-y': 'auto' }">
+ <a-card
+ :title="$t('menu.resource.title')"
+ :bordered="false"
+ style=" 'width': '100%'; height: calc(100vh - 250px); overflow-y:auto "
+ >
<a-tree
class="tree-demo"
draggable
blockNode
+ :default-expand-all=true
:data="treeData"
:show-line="showLine"
:fieldNames="{
- key:'menuId',
- title:'menuName',
- children:'children',
+ key: 'menuId',
+ title: 'menuName',
+ children: 'children',
}"
@drop="onDrop"
@select="showDetail"
>
- <template #extra="nodeData">
+ <template #extra="nodeData" >
<IconPlus
- style="position: absolute; right: 60px; font-size: 12px; top: 10px; color: #3370ff;"
+ style="
+ position: absolute;
+ right: 60px;
+ font-size: 12px;
+ top: 10px;
+ color: #3370ff;
+ "
@click="() => onIconClick(nodeData)"
/>
- <IconDelete style="position: absolute; right: 40px; font-size: 12px; top: 10px; color: #3370ff;"
- @click="() => onIconClickDelete(nodeData)" />
+ <a-popconfirm v-if="nodeData.menuName!='root'"
+ content="璇风‘璁ゆ槸鍚﹀垹闄わ紵"
+ type="success"
+ @ok="() => onIconClickDelete(nodeData)"
+ >
+ <IconDelete
+ style="
+ position: absolute;
+ right: 40px;
+ font-size: 12px;
+ top: 10px;
+ color: #3370ff;
+ " />
+ </a-popconfirm>
</template>
</a-tree>
-
</a-card>
</a-col>
<a-col :span="16">
- <a-card :title="$t('menu.resource.detail')" :bordered="false" :style="{ width: '100%' }">
- <a-form :model="resourceform" layout="horizontal">
+ <a-card
+ :title="$t('menu.resource.detail')"
+ :bordered="false"
+ :style="{ width: '100%' }"
+ >
+ <a-form :model="resourceform" layout="horizontal" ref="formRef">
<a-form-item field="parentName" label="涓婄骇璧勬簮" disabled>
<a-input v-model="resourceform.parentName" />
</a-form-item>
<a-form-item field="status" label="璧勬簮鐘舵��">
- <a-switch checked-value="0" unchecked-value="1" v-model="resourceform.status"></a-switch>
+ <a-switch
+ checked-value="0"
+ unchecked-value="1"
+ v-model="resourceform.status"
+ ></a-switch>
</a-form-item>
- <a-form-item field="menuName" label="璧勬簮鍚嶇О">
+ <a-form-item field="menuName" label="璧勬簮鍚嶇О" :rules="[{required:true,message:'璧勬簮鍚嶇О蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]">
<a-input v-model="resourceform.menuName" />
</a-form-item>
- <a-form-item field="menuType" label="璧勬簮绫诲瀷">
- <a-select v-model="resourceform.menuType" :options="options" :field-names="fieldNames"
- :style="{width:'320px'}"
- placeholder="璇烽�夋嫨" />
-
+ <a-form-item field="menuName" label="璧勬簮鍥炬爣">
+ <Upload
+ :action="uploadAction"
+ :limit="1"
+ :url="resourceform.icon"
+ @update:fileList="updateFileList"
+ @success="handleSuccess"
+ ></Upload>
</a-form-item>
- <a-form-item field="perms" label="璧勬簮鎺у埗鏉冮檺瀛楃">
+ <a-form-item field="menuType" label="璧勬簮绫诲瀷" :rules="[{required:true,message:'璧勬簮绫诲瀷蹇呭~'}]">
+ <a-select
+ v-model="resourceform.menuType"
+ :options="options"
+ :field-names="fieldNames"
+ :style="{ width: '320px' }"
+ placeholder="璇烽�夋嫨"
+ />
+ </a-form-item>
+ <a-form-item field="description" label="鎻愮ず璇�">
+ <a-input
+ v-model="resourceform.description"
+ placeholder="璇疯緭鍏ユ彁绀鸿瘝"
+ />
+ </a-form-item>
+ <a-form-item field="perms" label="璧勬簮鎺у埗鏉冮檺瀛楃" :rules="[{required:true,message:'璧勬簮鎺у埗鏉冮檺瀛楃蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]">
<a-input v-model="resourceform.perms" />
</a-form-item>
- <a-form-item field="component" label="璧勬簮鍦板潃" style="align: start">
+ <a-form-item
+ field="component"
+ label="璧勬簮鍦板潃"
+ style="align: start"
+ :rules="[{required:true,message:'璧勬簮鍦板潃蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]"
+ >
<a-input v-model="resourceform.component" />
</a-form-item>
<a-form-item>
@@ -65,26 +117,55 @@
</a-card>
</a-col>
</a-row>
- <a-modal width="50%" v-model:visible="visible" title="鏂板" @cancel="handleCancel" @ok="addresource">
- <a-form :model="resourceform" layout="horizontal">
+ <a-modal
+ width="50%"
+ v-model:visible="visible"
+ title="鏂板"
+ @cancel="handleCancel"
+ @ok="addresource"
+ >
+ <a-form :model="resourceform" layout="horizontal" ref="addFormRef">
<a-form-item field="parentName" label="涓婄骇璧勬簮" disabled>
<a-input v-model="resourceform.parentName" />
</a-form-item>
<a-form-item field="status" label="璧勬簮鐘舵��">
- <a-switch checked-value="0" unchecked-value="1" v-model="resourceform.status"></a-switch>
+ <a-switch
+ checked-value="0"
+ unchecked-value="1"
+ v-model="resourceform.status"
+ ></a-switch>
</a-form-item>
- <a-form-item field="menuName" label="璧勬簮鍚嶇О">
+ <a-form-item field="menuName" label="璧勬簮鍚嶇О" :rules="[{required:true,message:'璧勬簮鍚嶇О蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]">
<a-input v-model="resourceform.menuName" />
</a-form-item>
- <a-form-item field="menuType" label="璧勬簮绫诲瀷">
- <a-select v-model="resourceform.menuType" :options="options" :field-names="fieldNames"
- :style="{width:'320px'}"
- placeholder="璇烽�夋嫨" />
+ <a-form-item field="icon" label="璧勬簮鍥炬爣">
+ <Upload
+ :action="uploadAction"
+ :limit="1"
+ :url="resourceform.icon"
+ @update:fileList="updateFileList"
+ @success="handleSuccess"
+ ></Upload>
</a-form-item>
- <a-form-item field="perms" label="璧勬簮鎺у埗鏉冮檺瀛楃">
+ <a-form-item field="menuType" label="璧勬簮绫诲瀷" :rules="[{required:true,message:'璧勬簮绫诲瀷蹇呭~'}]">
+ <a-select
+ v-model="resourceform.menuType"
+ :options="options"
+ :field-names="fieldNames"
+ :style="{ width: '320px' }"
+ placeholder="璇烽�夋嫨"
+ />
+ </a-form-item>
+ <a-form-item field="description" label="鎻愮ず璇�">
+ <a-input
+ v-model="resourceform.description"
+ placeholder="璇疯緭鍏ユ彁绀鸿瘝"
+ />
+ </a-form-item>
+ <a-form-item field="perms" label="璧勬簮鎺у埗鏉冮檺瀛楃" :rules="[{required:true,message:'璧勬簮鎺у埗鏉冮檺瀛楃蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]">
<a-input v-model="resourceform.perms" />
</a-form-item>
- <a-form-item field="component" label="璧勬簮鍦板潃" style="align: start">
+ <a-form-item field="component" label="璧勬簮鍦板潃" style="align: start" :rules="[{required:true,message:'璧勬簮鍦板潃蹇呭~'},{maxLength:50,message:'闀垮害涓嶈秴杩�50'}]">
<a-input v-model="resourceform.component" />
</a-form-item>
</a-form>
@@ -93,170 +174,227 @@
</template>
<script lang="ts" setup>
-import { ref } from "vue";
-import { IconPlus } from "@arco-design/web-vue/es/icon";
-import { 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 { 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';
-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: "",
- parentId: "",
- parentName: "",
- children: [],
- path: "",
- perms: "",
- status: "",
- syesourcetype: "",
- target: "",
- updateTime: ""
-});
-
-const onIconClick = (nodeData) => {
- resourceform.value.parentId = nodeData.menuId;
- 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.parentName = nodeData.menuName;
- resourceform.value.path = "";
- resourceform.value.perms = "";
- resourceform.value.status = "";
- resourceform.value.syesourcetype = "";
-
- visible.value = true;
-};
-
-const addresource = async () => {
- await ResourceAdd({
- ...resourceform.value
- } as unknown as Resource).then((res) => {
- ResourceData("");
+ 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 onIconClickDelete = (nodeData) => {
- ResourceDelete(nodeData.menuId).then(() => {
- ResourceData("");
- });
-};
-const showDetail = (id) => {
- ResourceById(id).then((res) => {
- resourceform.value = { ...res.data };
- });
-};
-const editresource = () => {
- ResourceUpdate({
- ...resourceform.value
- } as unknown as Resource).then((res) => {
- ResourceData("");
- Modal.success({
- title: "淇濆瓨鎴愬姛",
- content: "淇濆瓨鎴愬姛"
+ 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;
});
- });
-};
-const reset = (id) => {
- ResourceById(id).then((res) => {
- resourceform.value = { ...res.data };
- });
-};
+ imageUrls.value = urlsArr; // 鎷垮埌涓婁紶鐨勫浘鐗囧湴鍧�
+ };
-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;
+ 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 addresource = async (done) => {
+ addFormRef.value.validate(addCb);
+ };
+
+ const onIconClickDelete = (nodeData) => {
+ ResourceDelete(nodeData.menuId).then(() => {
+ ResourceData('');
});
};
- loop(data, dragNode.menuId, (_, index, arr) => {
- arr.splice(index, 1);
- });
+ const showDetail = (id) => {
+ ResourceById(id).then((res) => {
+ resourceform.value = { ...res.data };
+ resourceform.value.icon = res.data.icon;
- if (dropPosition === 0) {
- loop(data, dropNode.menuId, (item) => {
- item.children = item.children || [];
- item.children.push(dragNode);
+ imageUrls.value.push(httpUrl + res.data.icon);
});
- } else {
- loop(data, dropNode.menuId, (_, index, arr) => {
- arr.splice(dropPosition < 0 ? index : index + 1, 0, dragNode);
+ };
+ 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 handleCancel = (type) => {
- if (type == 1) {
- visible.value = false;
- }
-};
+ 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;
+ });
+ };
-const ResourceData = async (key) => {
- await ResourceList(key).then((res) => {
- treeData.value = [...res.rows];
- });
-};
+ loop(data, dragNode.menuId, (_, index, arr) => {
+ arr.splice(index, 1);
+ });
-ResourceData("");
+ 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];
+ });
+ };
+
+ 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;
-}
-
-@keyframes blinkBg {
- 0% {
- background-color: transparent;
+ .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;
}
- 100% {
- background-color: var(--color-primary-light-1);
+ @keyframes blinkBg {
+ 0% {
+ background-color: transparent;
+ }
+
+ 100% {
+ background-color: var(--color-primary-light-1);
+ }
}
-}
</style>
--
Gitblit v1.8.0