From 40b5273e2540cee05bf3b9f11af5706989b5f699 Mon Sep 17 00:00:00 2001 From: zhang_12370 <z2864490065@outlook.com> Date: 星期五, 27 六月 2025 16:42:11 +0800 Subject: [PATCH] 提交删除部分页面导出按钮 修改采购逻辑 取消供应商新增校验 完善vue打包以后找不到文件的问题 --- src/views/archiveManagement/index.vue | 441 ++++++++++++++++++++++++------------------------------ 1 files changed, 194 insertions(+), 247 deletions(-) diff --git a/src/views/archiveManagement/index.vue b/src/views/archiveManagement/index.vue index 7bcbed9..af8c450 100644 --- a/src/views/archiveManagement/index.vue +++ b/src/views/archiveManagement/index.vue @@ -153,107 +153,92 @@ import {Delete, Document, Folder, Plus, Search,} from "@element-plus/icons-vue"; import {addOrEditTree, delArchive, delTree, getArchiveList, getTree,} from "@/api/archiveManagement"; -const dialogVisible = ref(false); // 鎺у埗褰掓。瀵硅瘽妗嗘樉绀� +// ===== 鍝嶅簲寮忕姸鎬佺鐞� ===== +const dialogVisible = ref(false); const loading = ref(false); const tableData = ref([]); const treeData = ref([]); const newName = ref(""); -const inputRefs = ref(new Map()); // 瀛樺偍杈撳叆妗嗗紩鐢� -const filterText = ref(""); // 鎼滅储鍏抽敭瀛� -const treeRef = ref(); // 鏍戠粍浠跺紩鐢� -const total = ref(0); // 鎬昏褰曟暟 +const inputRefs = ref(new Map()); +const filterText = ref(""); +const treeRef = ref(); +const total = ref(0); +const row = ref({}); +const selectedRows = reactive([]); +const rowClickData = ref({}); +const tableSwitch = ref(false); +const archiveDialogs = ref(null); + +// ===== 閰嶇疆甯搁噺 ===== const columns = [ {prop: "name", label: "鍚嶇О", minWidth: 180}, {prop: "type", label: "绫诲瀷", minWidth: 120}, {prop: "status", label: "鐘舵��", minWidth: 100}, ]; -const selectedRows = reactive([]); // 瀛樺偍閫変腑琛屾暟鎹� -const handleSelectionChange = (selection) => { - selectedRows.splice(0, selectedRows.length, ...selection); -}; + const queryParams = reactive({ searchAll: "", current: 1, - pageSize: 10, // 鍥哄畾姣忛〉10鏉� - treeId: null, // 褰撳墠鏍戣妭鐐笽D + pageSize: 10, + treeId: null, }); -// 鎼滅储杩囨护鍔熻兘 + +const props = { + label: "name", + children: "children", + isLeaf: "leaf", +}; + +// ===== 宸ュ叿鍑芥暟 ===== +const handleError = (error, defaultMsg = "鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯") => { + console.error(error); + ElMessage.error(defaultMsg); +}; + +const showSuccess = (msg = "鎿嶄綔鎴愬姛") => { + ElMessage.success(msg); +}; + +const showConfirm = (message, title = "纭鎿嶄綔") => { + return ElMessageBox.confirm(message, title, { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning', + }); +}; + +// ===== 鍩虹鍔熻兘鍑芥暟 ===== +const handleSelectionChange = (selection) => { + selectedRows.splice(0, selectedRows.length, ...selection); +}; + const handleFilter = () => { treeRef.value?.filter(filterText.value); }; -const row = ref({}); // 褰撳墠閫変腑琛屾暟鎹� + const filterNode = (value, data) => { if (!value) return true; return data.name?.toLowerCase().includes(value.toLowerCase()); -}; -const submitForm = async (res) => { - try { - if (res && res.code === 200) { - ElMessage.success("鎿嶄綔鎴愬姛"); - dialogVisible.value = false; - // 鍒锋柊鍒楄〃鏁版嵁 - await getArchiveListData(); - } else { - ElMessage.error("鎿嶄綔澶辫触: " + (res?.message || res?.msg || "鏈煡閿欒")); - } - } catch (error) { - console.error("鎻愪氦琛ㄥ崟閿欒:", error); - ElMessage.error("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯"); - } }; const centerDialogVisible = (val) => { dialogVisible.value = val; }; -const tableSwitch = ref(false); -// 澶勭悊鑺傜偣鐐瑰嚮 -const handleNodeClick = (data) => { - rowClickData.value = data; // 瀛樺偍褰撳墠鐐瑰嚮鐨勮妭鐐规暟鎹� - tableSwitch.value = true; - // 鍒囨崲鑺傜偣鏃堕噸缃埌绗竴椤� - queryParams.current = 1; - queryParams.treeId = data.id; - getArchiveListData(); -}; -const rowClickData = ref({}); // 瀛樺偍褰撳墠鐐瑰嚮鐨勮妭鐐规暟鎹� -const archiveDialogs = ref(null); // 琛ㄦ牸缁勪欢寮曠敤 -// 鏂板褰掓。 -const add = () => { +// ===== 鏁版嵁鑾峰彇鍑芥暟 ===== +const getList = async () => { try { - row.value = {}; // 娓呯┖琛屾暟鎹紝纭繚鏄柊澧炴ā寮� - newName.value = ""; // 娓呯┖杈撳叆妗� - dialogVisible.value = true; - - // 纭繚缁勪欢寮曠敤瀛樺湪鍚庡啀璋冪敤鏂规硶 - nextTick(() => { - if (archiveDialogs.value && typeof archiveDialogs.value.initForm === 'function') { - archiveDialogs.value.initForm(rowClickData.value); // 閲嶇疆琛ㄥ崟 - } - }); + const res = await getTree(); + treeData.value = res.code === 200 ? (res.data?.records || res.data || []) : []; } catch (error) { - console.error("鏂板褰掓。閿欒:", error); - ElMessage.error("鎵撳紑鏂板鐣岄潰澶辫触"); - } -}; -// 澶勭悊鍒嗛〉鍙樺寲 -const handlePageChange = (pagination) => { - try { - const { page, limit } = pagination; - queryParams.current = page; - if (limit) { - queryParams.pageSize = limit; - } - getArchiveListData(); - } catch (error) { - console.error("鍒嗛〉澶勭悊閿欒:", error); - ElMessage.error("鍒嗛〉鎿嶄綔澶辫触"); + handleError(error, "鑾峰彇鏍戠粨鏋勬暟鎹け璐�"); + treeData.value = []; } }; const getArchiveListData = async () => { try { loading.value = true; - let res = await getArchiveList({ + const res = await getArchiveList({ treeId: queryParams.treeId, current: queryParams.current, size: queryParams.pageSize, @@ -265,23 +250,80 @@ total.value = 0; return; } + tableData.value = res.data?.records || res.data || []; total.value = res.data?.total || 0; - // 纭繚鍒嗛〉鍙傛暟姝g‘鏇存柊 + if (res.data?.current) { queryParams.current = res.data.current; } - // pageSize 鍥哄畾涓�20锛屼笉浠庡悗绔幏鍙� - } catch (error) { - ElMessage.error("鑾峰彇鏁版嵁澶辫触"); + handleError(error, "鑾峰彇褰掓。鏁版嵁澶辫触"); tableData.value = []; total.value = 0; } finally { loading.value = false; } }; -// 鍒犻櫎閫変腑鐨勫綊妗h褰� + +// ===== 琛ㄥ崟鎻愪氦澶勭悊 ===== +const submitForm = async (res) => { + try { + if (res?.code === 200) { + showSuccess(); + dialogVisible.value = false; + await getArchiveListData(); + } else { + ElMessage.error("鎿嶄綔澶辫触: " + (res?.message || res?.msg || "鏈煡閿欒")); + } + } catch (error) { + handleError(error, "鎻愪氦琛ㄥ崟澶辫触"); + } +}; +// ===== 鑺傜偣鎿嶄綔鍑芥暟 ===== +const handleNodeClick = (data) => { + rowClickData.value = data; + tableSwitch.value = true; + queryParams.current = 1; + queryParams.treeId = data.id; + getArchiveListData(); +}; + +const handlePageChange = (pagination) => { + try { + const { page, limit } = pagination; + queryParams.current = page; + if (limit) queryParams.pageSize = limit; + getArchiveListData(); + } catch (error) { + handleError(error, "鍒嗛〉鎿嶄綔澶辫触"); + } +}; + +// ===== 寮圭獥鎿嶄綔鍑芥暟 ===== +const openDialog = (isEdit = false, rowData = {}) => { + try { + row.value = isEdit ? { ...rowData } : {}; + newName.value = ""; + dialogVisible.value = true; + + nextTick(() => { + if (archiveDialogs.value) { + const method = isEdit ? 'editForm' : 'initForm'; + if (typeof archiveDialogs.value[method] === 'function') { + archiveDialogs.value[method](isEdit ? rowData : rowClickData.value); + } + } + }); + } catch (error) { + handleError(error, `鎵撳紑${isEdit ? '缂栬緫' : '鏂板'}鐣岄潰澶辫触`); + } +}; + +const add = () => openDialog(false); +const handleEdit = (rows) => openDialog(true, rows); + +// ===== 鍒犻櫎鎿嶄綔鍑芥暟 ===== const delHandler = async () => { if (selectedRows.length === 0) { ElMessage.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁"); @@ -289,16 +331,8 @@ } try { - await ElMessageBox.confirm( - `纭畾瑕佸垹闄ら�変腑鐨� ${selectedRows.length} 鏉¤褰曞悧锛焋, - '鍒犻櫎纭', - { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ); - + await showConfirm(`纭畾瑕佸垹闄ら�変腑鐨� ${selectedRows.length} 鏉¤褰曞悧锛焋, '鍒犻櫎纭'); + const ids = selectedRows.map((row) => row.id); const { code, msg } = await delArchive(ids); @@ -307,20 +341,49 @@ return; } - ElMessage.success("鍒犻櫎鎴愬姛"); - // 鍒犻櫎鎴愬姛鍚庨噸鏂拌幏鍙栨暟鎹� + showSuccess("鍒犻櫎鎴愬姛"); await getArchiveListData(); - // 娓呯┖閫変腑鐘舵�� selectedRows.splice(0, selectedRows.length); } catch (error) { if (error !== 'cancel') { - console.error("鍒犻櫎褰掓。澶辫触:", error); - ElMessage.error("鍒犻櫎鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯"); + handleError(error, "鍒犻櫎鎿嶄綔澶辫触"); } } }; -// 鍙屽嚮缂栬緫鑺傜偣 + +const remove = async (node, data) => { + if (!data?.id) { + ElMessage.warning("鏃犳硶鍒犻櫎姝よ妭鐐�"); + return; + } + + try { + await showConfirm(`纭畾瑕佸垹闄よ妭鐐� "${data.name}" 鍚楋紵`, '鍒犻櫎纭'); + + const { code, msg } = await delTree([data.id]); + + if (code !== 200) { + ElMessage.error("鍒犻櫎澶辫触: " + msg); + return; + } + + showSuccess("鍒犻櫎鎴愬姛"); + await getList(); + + } catch (error) { + if (error !== 'cancel') { + handleError(error, "鍒犻櫎鑺傜偣澶辫触"); + } + } +}; +// ===== 鏍戣妭鐐圭紪杈戝嚱鏁� ===== +const setInputRef = (el, data) => { + if (el) { + inputRefs.value.set(data.id || data, el); + } +}; + const headerDbClick = (node, data) => { data.isEdit = true; newName.value = data.name; @@ -333,71 +396,51 @@ }); }; -// 璁剧疆杈撳叆妗嗗紩鐢ㄧ殑鏂规硶 -const setInputRef = (el, data) => { - if (el) { - inputRefs.value.set(data.id || data, el); - if (data.isEdit) { - nextTick(() => { - // el.focus(); - // el.select(); - }); - } +const expandParentNodes = (node) => { + if (node?.parent?.data) { + node.parent.expanded = true; + expandParentNodes(node.parent); } }; -// 澶勭悊杈撳叆妗嗗け鐒� const handleInputBlur = async (event, comeTreeData, node) => { try { - if (!comeTreeData.isEdit) return; // 濡傛灉涓嶆槸缂栬緫鐘舵�侊紝鐩存帴杩斿洖 - - if (event.relatedTarget && event.relatedTarget.tagName === "BUTTON") { - return; - } + if (!comeTreeData.isEdit || (event.relatedTarget?.tagName === "BUTTON")) return; comeTreeData.isEdit = false; const newValue = newName.value.trim(); - if (comeTreeData.name === newValue) { - return; - } + if (comeTreeData.name === newValue) return; - if (newValue === "") { + if (!newValue) { newName.value = comeTreeData.name || "鏂拌妭鐐�"; ElMessage.warning("鑺傜偣鍚嶇О涓嶈兘涓虹┖"); return; } - // 鑾峰彇鐖惰妭鐐圭殑id - 閫氳繃 node 鍙傛暟鏇村噯纭湴鑾峰彇 - let parentId = null; - if (node && node.parent && node.parent.data) { - parentId = node.parent.data.id; - } + const parentId = node?.parent?.data?.id || null; const result = await addOrEditTree({ name: newValue, - parentId: parentId || null, // 濡傛灉娌℃湁鐖惰妭鐐癸紝鍒欎负 null + parentId, id: comeTreeData.id || null, }); - if (result.code === 200) { + + if (result.code === 200) { comeTreeData.name = newValue; if (!comeTreeData.id && result.data) { comeTreeData.id = result.data.id || result.data; } - ElMessage.success("淇濆瓨鎴愬姛"); + showSuccess("淇濆瓨鎴愬姛"); - // 鍒锋柊鏍戞暟鎹苟灞曞紑褰撳墠鑺傜偣 const currentNodeId = comeTreeData.id; await getList(); - // 绛夊緟DOM鏇存柊鍚庡睍寮�鑺傜偣 nextTick(() => { if (currentNodeId && treeRef.value) { const targetNode = treeRef.value.getNode(currentNodeId); if (targetNode) { - // 灞曞紑褰撳墠鑺傜偣 targetNode.expanded = true; - // 濡傛灉鏈夌埗鑺傜偣锛屼篃灞曞紑鐖惰妭鐐硅矾寰� expandParentNodes(targetNode); } } @@ -408,161 +451,65 @@ } } catch (error) { - console.error("淇濆瓨鑺傜偣澶辫触:", error); + handleError(error, "淇濆瓨鑺傜偣澶辫触"); comeTreeData.name = comeTreeData.name || "鏂拌妭鐐�"; - ElMessage.error("淇濆瓨澶辫触锛岃绋嶅悗閲嶈瘯"); } }; -onMounted(async () => { - await getList(); +// ===== 鑺傜偣鏂板鍑芥暟 ===== +const createNewNode = (name, isEdit = true) => ({ + name, + isEdit, }); -const props = { - label: "name", - children: "children", // 鏀逛负 children 浠ュ尮閰嶆爣鍑嗙粨鏋� - isLeaf: "leaf", -}; -// 灞曞紑鐖惰妭鐐硅矾寰� -const expandParentNodes = (node) => { - if (node && node.parent && node.parent.data) { - // 閫掑綊灞曞紑鎵�鏈夌埗鑺傜偣 - node.parent.expanded = true; - expandParentNodes(node.parent); - } -}; - -// 鍒犻櫎鏍戣妭鐐� -const remove = async (node, data) => { - if (!data || !data.id) { - ElMessage.warning("鏃犳硶鍒犻櫎姝よ妭鐐�"); - return; - } - - try { - await ElMessageBox.confirm( - `纭畾瑕佸垹闄よ妭鐐� "${data.name}" 鍚楋紵`, - '鍒犻櫎纭', - { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ); - - const { code, msg } = await delTree([data.id]); - - if (code !== 200) { - ElMessage.error("鍒犻櫎澶辫触: " + msg); - return; +const focusInput = (nodeData, delay = 50) => { + setTimeout(() => { + const inputEl = inputRefs.value.get(nodeData.id || nodeData); + if (inputEl) { + inputEl.focus(); + inputEl.select(); + inputEl.$el?.scrollIntoView?.({ + behavior: "smooth", + block: "nearest", + }); } - - ElMessage.success("鍒犻櫎鎴愬姛"); - await getList(); - - } catch (error) { - if (error !== 'cancel') { - console.error("鍒犻櫎鑺傜偣澶辫触:", error); - ElMessage.error("鍒犻櫎澶辫触锛岃绋嶅悗閲嶈瘯"); - } - } + }, delay); }; const append = async (data) => { if (data === "") { // 鏂板鏍硅妭鐐� - const newNode = { - name: "鏂拌妭鐐�", - isEdit: true, - }; + const newNode = createNewNode("鏂拌妭鐐�"); treeData.value.push(newNode); newName.value = "鏂拌妭鐐�"; - nextTick(() => { - const inputEl = inputRefs.value.get(newNode.id || newNode); - if (inputEl) { - inputEl.focus(); - inputEl.select(); - } - }); + nextTick(() => focusInput(newNode)); } else { const hasChildren = data.children; const nodeKey = data.id || data; const node = treeRef.value?.getNode(nodeKey); - const isExpanded = node?.expanded; // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣 - if (hasChildren && !isExpanded) { - if ( - treeRef.value && - treeRef.value.store && - treeRef.value.store.nodesMap[nodeKey] - ) { - treeRef.value.store.nodesMap[nodeKey].expanded = true; - } + const isExpanded = node?.expanded; + + // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣 + if (hasChildren && !isExpanded && treeRef.value?.store?.nodesMap[nodeKey]) { + treeRef.value.store.nodesMap[nodeKey].expanded = true; } - const newNode = { - name: "鏂板瓙鑺傜偣", - isEdit: true, - }; - + + const newNode = createNewNode("鏂板瓙鑺傜偣"); + if (!data.children) { data.children = []; } data.children.push(newNode); newName.value = "鏂板瓙鑺傜偣"; - // 鏍规嵁鏄惁闇�瑕佸睍寮�鏉ュ喅瀹氬欢杩熸椂闂� const delay = hasChildren && !isExpanded ? 200 : 50; - - // 绛夊緟DOM鏇存柊瀹屾垚鍚庡啀鑱氱劍 - nextTick(() => { - setTimeout(() => { - const inputEl = inputRefs.value.get(newNode.id || newNode); - if (inputEl) { - inputEl.focus(); - inputEl.select(); - - // 婊氬姩鍒版柊澧炵殑鑺傜偣浣嶇疆 - inputEl.$el?.scrollIntoView?.({ - behavior: "smooth", - block: "nearest", - }); - } - }, delay); - }); + nextTick(() => focusInput(newNode, delay)); } }; -// 缂栬緫褰掓。 -const handleEdit = (rows) => { - try { - row.value = { ...rows }; // 浣跨敤娣辨嫹璐濋伩鍏嶅紩鐢ㄩ棶棰� - dialogVisible.value = true; - - // 纭繚缁勪欢寮曠敤瀛樺湪鍚庡啀璋冪敤鏂规硶 - nextTick(() => { - if (archiveDialogs.value && typeof archiveDialogs.value.editForm === 'function') { - archiveDialogs.value.editForm(rows); // 璋冪敤缂栬緫鏂规硶 - } - }); - } catch (error) { - console.error("缂栬緫褰掓。閿欒:", error); - ElMessage.error("鎵撳紑缂栬緫鐣岄潰澶辫触"); - } -}; - -// 绉婚櫎鎳掑姞杞斤紝鐩存帴鑾峰彇鏁版嵁 -const getList = async () => { - try { - let res = await getTree(); - if (res.code === 200) { - treeData.value = res.data?.records || res.data || []; - } else { - treeData.value = []; - } - } catch (error) { - treeData.value = []; - } -}; +// ===== 鐢熷懡鍛ㄦ湡 ===== +onMounted(getList); </script> <style lang="scss" scoped> .custom-tree-node { -- Gitblit v1.9.3