From 09f08bc55334cbfe5369630ba916d67c62fdd284 Mon Sep 17 00:00:00 2001 From: zhang zhuo Date: Fri, 21 Nov 2025 17:45:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E6=BA=90=E9=80=89=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/model/system.ts | 28 +++++++++++ src/components/piAsset/index.vue | 5 +- src/components/piAsset/picker.vue | 79 ++++++++++++++++++------------ src/components/piAsset/save.vue | 5 +- src/config/asset.ts | 23 ++++----- src/views/monitor/crontab/save.vue | 6 +-- src/views/tools/gen/index.vue | 2 +- 7 files changed, 99 insertions(+), 49 deletions(-) diff --git a/src/api/model/system.ts b/src/api/model/system.ts index 3832215..4e394f5 100644 --- a/src/api/model/system.ts +++ b/src/api/model/system.ts @@ -89,6 +89,34 @@ export default { upload: async function (data, config = {}) { return await http.post("upload", data, config); }, + asset_category: { + list: async function (data = {}) { + return await http.get("asset_category/list", data); + }, + add: async function (data = {}) { + return await http.post("asset_category/add", data); + }, + edit: async function (data = {}) { + return await http.put("asset_category/edit", data); + }, + del: async function (data = {}) { + return await http.delete("asset_category/del", data); + }, + }, + asset: { + list: async function (data = {}) { + return await http.get("asset/list", data); + }, + move: async function (data = {}) { + return await http.put("asset/move", data); + }, + del: async function (data = {}) { + return await http.delete("asset/del", data); + }, + upload: async function (data, config = {}) { + return await http.post("asset/upload", data, config); + }, + }, monitor: { server: async function (data, config = {}) { return await http.get("monitor/server", data, config); diff --git a/src/components/piAsset/index.vue b/src/components/piAsset/index.vue index e3ef373..9cc4872 100644 --- a/src/components/piAsset/index.vue +++ b/src/components/piAsset/index.vue @@ -1,9 +1,9 @@ @@ -57,7 +57,7 @@

{{ file.name }}

+ :class="{active: active(item) }" @click="select(item)">
@@ -70,7 +70,8 @@
-
@@ -88,7 +89,8 @@
-
@@ -108,8 +110,9 @@ import assetConfig from "@/config/asset" import saveDialog from "./save.vue"; import moveDialog from "./move.vue"; import * as imageConversion from 'image-conversion'; -import {ref, onMounted, nextTick, getCurrentInstance} from "vue" +import {ref, onMounted, nextTick, getCurrentInstance, computed} from "vue" import tools from "@/utils/tools" +import config from "@/config" defineExpose({ open @@ -164,7 +167,7 @@ async function getMenu() { const res = await assetConfig.menuListObj(); menu.value = tools.makeTreeData(res.data, 0, "category_id") menu.value.unshift({ - 'category_id': '', + 'category_id': 0, 'category_name': '未分类', 'pid': 0 }) @@ -179,7 +182,7 @@ async function getData() { [assetConfig.request.pageSize]: pageSize.value, }; reqData.type = props.type - reqData.file_name = file_name.value + reqData.ori_name = file_name.value const res = await assetConfig.fileListObj(reqData); const parseData = assetConfig.listParseData(res); data.value = parseData.rows @@ -203,37 +206,56 @@ function search() { getData() } +function active(item) { + if (props.multiple) { + let choice = false; + value.value.forEach(i => { + if (i[assetConfig.fileProps.id] === item[assetConfig.fileProps.id]) { + choice = true + } + }) + return choice + } else { + return value.value[assetConfig.fileProps.id] === item[assetConfig.fileProps.id] + } +} + function select(item) { - const itemUrl = item[fileProps.value.url] if (props.multiple) { if (value.value.length >= props.max) { proxy.$message.error("选择文件过多") return; } - if (value.value.includes(itemUrl)) { - value.value.splice(value.value.findIndex(f => f == itemUrl), 1) + if (active(item)) { + value.value.splice(value.value.findIndex(f => f[assetConfig.fileProps.id] === item[assetConfig.fileProps.id]), 1) } else { - value.value.push(itemUrl) + value.value.push(item) } } else { - if (value.value.includes(itemUrl)) { + if (value.value[assetConfig.fileProps.id] === item[assetConfig.fileProps.id]) { value.value = '' } else { - value.value = itemUrl + value.value = item } } } function submit() { - emit('success', value.value); + if (props.multiple) { + emit('success', value.value.map(i => i[assetConfig.fileProps.url])); + } else { + emit('success', value.value[assetConfig.fileProps.url]); + } visible.value = false } async function delFile() { const _value = JSON.parse(JSON.stringify(value.value)) - const url = props.multiple ? _value.toString() : _value; - if (!url) return; - const res = await assetConfig.delFileObj({url: url}); + const ids = props.multiple ? _value.map(i => i[assetConfig.fileProps.id]) : [_value[assetConfig.fileProps.id]]; + if (!ids) return; + const res = await assetConfig.delFileObj({ids: ids}); + // 删除文件成功,取消选择 + value.value = props.multiple ? [] : '' proxy.$message.success(res.msg) getData() } @@ -246,11 +268,10 @@ function moveFile() { } async function moveSuccess(category_id) { - console.log(category_id) const _value = JSON.parse(JSON.stringify(value.value)) - const url = props.multiple ? _value.toString() : _value; - if (!url) return; - const res = await assetConfig.moveFileObj({url: url, category_id: category_id}); + const ids = props.multiple ? _value.map(i=>i[assetConfig.fileProps.id]) :[ _value[assetConfig.fileProps.id]]; + if (!ids) return; + const res = await assetConfig.moveFileObj({ids: ids, category_id: category_id}); proxy.$message.success(res.msg) getData() } @@ -311,12 +332,9 @@ function clearFiles(file) { function uploadSuccess(res, file) { fileList.value.splice(fileList.value.findIndex(f => f.uid == file.uid), 1) var response = assetConfig.uploadParseData(res); - data.value.unshift({ - [fileProps.value.fileName]: response.fileName, - [fileProps.value.url]: response.url - }) + data.value.unshift(response) if (!props.multiple) { - value.value = response.url + value.value = response } } @@ -337,13 +355,13 @@ function editCategory(data) { function addCategory() { dialog.value.save = true nextTick(() => { - saveRef.value.open('add',menu.value) + saveRef.value.open('add', menu.value, null, menuRef.value.getCurrentKey()) }) } async function delCategory() { var CheckedNodes = menuRef.value.getCheckedNodes() - if (CheckedNodes.length == 0) { + if (CheckedNodes.length === 0) { proxy.$message.warning("请选择需要删除的项") return false; } @@ -354,12 +372,11 @@ async function delCategory() { confirmButtonClass: 'el-button--danger' }).catch(() => { }) - if (confirm != 'confirm') { + if (confirm !== 'confirm') { return false } menuLoading.value = true - var ids = CheckedNodes.map(item => item.category_id) - var res = await assetConfig.menuDelObj({ids: ids.toString()}) + var res = await assetConfig.menuDelObj({ids: CheckedNodes.map(item => item.category_id)}) menuLoading.value = false proxy.$message.success(res.msg) CheckedNodes.forEach(item => { diff --git a/src/components/piAsset/save.vue b/src/components/piAsset/save.vue index 899cd76..ba4e7f4 100644 --- a/src/components/piAsset/save.vue +++ b/src/components/piAsset/save.vue @@ -59,12 +59,15 @@ let menuProps = ref({ checkStrictly: true }) -function open(_mode = 'add', _menu = null, data = null) { +function open(_mode = 'add', _menu = null, data = null, pid=null) { mode.value = _mode; visible.value = true; if (_menu) { menu.value = _menu } + if (pid) { + form.value.pid = pid + } if (data) { Object.assign(form.value, data) } diff --git a/src/config/asset.ts b/src/config/asset.ts index 180a5d0..7431565 100644 --- a/src/config/asset.ts +++ b/src/config/asset.ts @@ -1,22 +1,22 @@ import api from "@/api"; export default { - uploadObj: api.system.upload, - fileListObj: api.system.file.list, - moveFileObj: api.system.file.move, - delFileObj: api.system.file.del, - menuListObj: api.system.category.list, - menuAddObj: api.system.category.add, - menuEditObj: api.system.category.edit, - menuDelObj: api.system.category.del, + uploadObj: api.system.asset.upload, + fileListObj: api.system.asset.list, + moveFileObj: api.system.asset.move, + delFileObj: api.system.asset.del, + menuListObj: api.system.asset_category.list, + menuAddObj: api.system.asset_category.add, + menuEditObj: api.system.asset_category.edit, + menuDelObj: api.system.asset_category.del, successCode: 200, maxSize: 20, max: 99, uploadParseData: function (res) { - return { + return Object.assign({ fileName: res.data.fileName, url: res.data.filePath - } + }, res.data) }, listParseData: function (res) { return { @@ -38,7 +38,8 @@ export default { children: 'children' }, fileProps: { - fileName: 'file_name', + id: 'asset_id', + fileName: 'ori_name', url: 'url' }, fileType(type: string) { diff --git a/src/views/monitor/crontab/save.vue b/src/views/monitor/crontab/save.vue index 69249e0..bb380c7 100644 --- a/src/views/monitor/crontab/save.vue +++ b/src/views/monitor/crontab/save.vue @@ -20,8 +20,7 @@ - - + - +