From 4d97a259f3069f9b18d87ac3fab710618f2c6087 Mon Sep 17 00:00:00 2001 From: lishenao <3065849776@qq.com> Date: 星期四, 03 七月 2025 15:19:31 +0800 Subject: [PATCH] 库存管理数据修改 --- src/views/qualityManagement/metricMaintenance/index.vue | 416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 416 insertions(+), 0 deletions(-) diff --git a/src/views/qualityManagement/metricMaintenance/index.vue b/src/views/qualityManagement/metricMaintenance/index.vue new file mode 100644 index 0000000..bdc672d --- /dev/null +++ b/src/views/qualityManagement/metricMaintenance/index.vue @@ -0,0 +1,416 @@ +<template> + <div class="app-container product-view"> + <div class="left"> + <div> + <el-input + v-model="search" + style="width: 210px" + placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" + @change="searchFilter" + @clear="searchFilter" + clearable + prefix-icon="Search" + /> + </div> + <div ref="containerRef"> + <el-tree + ref="tree" + v-loading="treeLoad" + :data="list" + @node-click="handleNodeClick" + :expand-on-click-node="false" + default-expand-all + :default-expanded-keys="expandedKeys" + :draggable="true" + :filter-node-method="filterNode" + :props="{ children: 'children', label: 'label' }" + highlight-current + node-key="id" + style=" + height: calc(100vh - 190px); + overflow-y: scroll; + scrollbar-width: none; + " + > + <template #default="{ node, data }"> + <div class="custom-tree-node"> + <span class="tree-node-content"> + <el-icon class="orange-icon"> + <component :is="data.children && data.children.length > 0 + ? node.expanded ? 'FolderOpened' : 'Folder' : 'Tickets'" /> + </el-icon> + {{ data.label }} + </span> + </div> + </template> + </el-tree> + </div> + </div> + <div class="right"> + <div style="margin-bottom: 10px"> + <el-button type="primary" @click="openModelDia('add')"> + 鏂板妫�娴嬫寚鏍� + </el-button> + <el-button @click="handleOut">瀵煎嚭</el-button> + <el-button + type="danger" + @click="handleDelete" + style="margin-left: 10px" + plain + > + 鍒犻櫎 + </el-button> + </div> + <PIMTable + rowKey="id" + :column="tableColumn" + :tableData="tableData" + :page="page" + :isSelection="true" + @selection-change="handleSelectionChange" + :tableLoading="tableLoading" + @pagination="pagination" + :total="page.total" + ></PIMTable> + </div> + <el-dialog + v-model="modelDia" + title="妫�娴嬫寚鏍�" + width="400px" + @close="closeModelDia" + > + <el-form + :model="modelForm" + label-width="140px" + label-position="top" + :rules="modelRules" + ref="modelFormRef" + > + <el-row> + <el-col :span="24"> + <el-form-item label="鎸囨爣锛�" prop="parameterItem"> + <el-input + v-model="modelForm.parameterItem" + placeholder="璇疯緭鍏ユ寚鏍�" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="鍗曚綅锛�" prop="unit"> + <el-input + v-model="modelForm.unit" + placeholder="璇疯緭鍏ュ崟浣�" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="鏍囧噯鍊硷細" prop="standardValue"> + <el-input + v-model="modelForm.standardValue" + placeholder="璇疯緭鍏ユ爣鍑嗗��" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="鍐呮帶鍊硷細" prop="controlValue"> + <el-input + v-model="modelForm.controlValue" + placeholder="璇疯緭鍏ュ唴鎺у��" + clearable + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitModelForm">纭</el-button> + <el-button @click="closeModelDia">鍙栨秷</el-button> + </div> + </template> + </el-dialog> + </div> +</template> + +<script setup> +import {ref} from "vue"; +import {addOrEditProductModel, delProductModel, modelListPage, productTreeList} from "@/api/basicData/product.js"; +import ImportExcel from "@/views/basicData/product/ImportExcel/index.vue"; +import {ElMessageBox} from "element-plus"; +import { + qualityTestStandardAdd, qualityTestStandardDel, + qualityTestStandardListPage, + qualityTestStandardUpdate +} from "@/api/qualityManagement/metricMaintenance.js"; +const { proxy } = getCurrentInstance(); +// 鏍� +const search = ref(""); +const treeLoad = ref(false); +const list = ref([]); +const expandedKeys = ref([]); +const currentId = ref(""); +const currentParentId = ref(""); +// 鎸囨爣琛ㄦ牸 +const tableData = ref([]); +const tableLoading = ref(false); +const page = reactive({ + current: 1, + size: 10, +}); +const tableColumn = ref([ + { + label: "鎸囨爣", + prop: "parameterItem", + }, + { + label: "鍗曚綅", + prop: "unit", + }, + { + label: "鏍囧噯鍊�", + prop: "standardValue", + }, + { + label: "鍐呮帶鍊�", + prop: "controlValue", + }, + { + dataType: "action", + label: "鎿嶄綔", + align: "center", + operation: [ + { + name: "缂栬緫", + type: "text", + clickFun: (row) => { + openModelDia("edit", row); + }, + }, + ], + }, +]); +const selectedRows = ref([]); +// 鎸囨爣寮规 +const modelDia = ref(false); +const modelOperationType = ref(""); +const data = reactive({ + modelForm: { + parameterItem: "", + unit: "", + standardValue: "", + controlValue: "", + }, + modelRules: { + parameterItem: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + standardValue: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + controlValue: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + }, +}); +const { modelForm, modelRules } = toRefs(data); + +// 鏌ヨ浜у搧鏍� +const getProductTreeList = () => { + treeLoad.value = true; + productTreeList().then((res) => { + list.value = res; + list.value.forEach((a) => { + expandedKeys.value.push(a.label); + }); + treeLoad.value = false; + }).catch((err) => { + treeLoad.value = false; + }); +}; +// 杩囨护浜у搧鏍� +const searchFilter = () => { + proxy.$refs.tree.filter(search.value); +}; +// 閫夋嫨浜у搧 +const handleNodeClick = (val, node, el) => { + // 鍙湁鍙跺瓙鑺傜偣鎵嶆墽琛屼互涓嬮�昏緫 + currentId.value = val.id; + currentParentId.value = val.parentId; + getModelList(); +}; +// 琛ㄦ牸閫夋嫨鏁版嵁 +const handleSelectionChange = (selection) => { + selectedRows.value = selection; +}; +// 鏌ヨ鎸囨爣鏁版嵁 +const pagination = (obj) => { + page.current = obj.page; + page.size = obj.limit; + getModelList(); +}; +const getModelList = () => { + tableLoading.value = true; + qualityTestStandardListPage({ + productId: currentId.value, + current: page.current, + size: page.size, + }).then((res) => { + tableData.value = res.data.records; + page.total = res.data.total; + tableLoading.value = false; + }); +}; +// 璋冪敤tree杩囨护鏂规硶 涓枃鑻辫繃婊� +const filterNode = (value, data, node) => { + if (!value) { + //濡傛灉鏁版嵁涓虹┖锛屽垯杩斿洖true,鏄剧ず鎵�鏈夌殑鏁版嵁椤� + return true; + } + // 鏌ヨ鍒楄〃鏄惁鏈夊尮閰嶆暟鎹紝灏嗗�煎皬鍐欙紝鍖归厤鑻辨枃鏁版嵁 + let val = value.toLowerCase(); + return chooseNode(val, data, node); // 璋冪敤杩囨护浜屽眰鏂规硶 +}; +// 杩囨护鐖惰妭鐐� / 瀛愯妭鐐� (濡傛灉杈撳叆鐨勫弬鏁版槸鐖惰妭鐐逛笖鑳藉尮閰嶏紝鍒欒繑鍥炶鑺傜偣浠ュ強鍏朵笅鐨勬墍鏈夊瓙鑺傜偣锛涘鏋滃弬鏁版槸瀛愯妭鐐癸紝鍒欒繑鍥炶鑺傜偣鐨勭埗鑺傜偣銆俷ame鏄腑鏂囧瓧绗︼紝enName鏄嫳鏂囧瓧绗�. +const chooseNode = (value, data, node) => { + if (data.label.indexOf(value) !== -1) { + return true; + } + const level = node.level; + // 濡傛灉浼犲叆鐨勮妭鐐规湰韬氨鏄竴绾ц妭鐐瑰氨涓嶇敤鏍¢獙浜� + if (level === 1) { + return false; + } + // 鍏堝彇褰撳墠鑺傜偣鐨勭埗鑺傜偣 + let parentData = node.parent; + // 閬嶅巻褰撳墠鑺傜偣鐨勭埗鑺傜偣 + let index = 0; + while (index < level - 1) { + // 濡傛灉鍖归厤鍒扮洿鎺ヨ繑鍥烇紝姝ゅname鍊兼槸涓枃瀛楃锛宔nName鏄嫳鏂囧瓧绗︺�傚垽鏂尮閰嶄腑鑻辨枃杩囨护 + if (parentData.data.label.indexOf(value) !== -1) { + return true; + } + // 鍚﹀垯鐨勮瘽鍐嶅線涓婁竴灞傚仛鍖归厤 + parentData = parentData.parent; + index++; + } + // 娌″尮閰嶅埌杩斿洖false + return false; +}; +// 鎵撳紑鎸囨爣寮规 +const openModelDia = (type, data) => { + modelOperationType.value = type; + modelDia.value = true; + modelForm.value.model = ""; + modelForm.value.model = ""; + modelForm.value.id = ""; + if (type === "edit") { + modelForm.value = { ...data }; + } +}; +// 瀵煎嚭 +const handleOut = () => { + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + proxy.download("/quality/qualityTestStandard/export", {}, "妫�娴嬫寚鏍�.xlsx"); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; +// 鍒犻櫎鎸囨爣 +const handleDelete = () => { + let ids = []; + if (selectedRows.value.length > 0) { + ids = selectedRows.value.map((item) => item.id); + } else { + proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁"); + return; + } + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(() => { + tableLoading.value = true; + qualityTestStandardDel(ids).then((res) => { + proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + getModelList(); + }).finally(() => { + tableLoading.value = false; + }); + }).catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; + +// 鎻愪氦瑙勬牸鍨嬪彿淇敼 +const submitModelForm = () => { + proxy.$refs.modelFormRef.validate((valid) => { + if (valid) { + modelForm.value.productId = Number(currentId.value); + if(modelOperationType.value === 'add') { + qualityTestStandardAdd(modelForm.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeModelDia(); + getModelList(); + }); + } else { + qualityTestStandardUpdate(modelForm.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeModelDia(); + getModelList(); + }); + } + } + }); +}; +// 鍏抽棴鍨嬪彿寮规 +const closeModelDia = () => { + proxy.$refs.modelFormRef.resetFields(); + modelDia.value = false; +}; +getProductTreeList(); +</script> + +<style scoped> +.product-view { + display: flex; +} +.left { + width: 380px; + padding: 16px; + background: #ffffff; +} +.right { + width: calc(100% - 380px); + padding: 16px; + margin-left: 20px; + background: #ffffff; +} +.custom-tree-node { + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; + padding-right: 8px; +} +.tree-node-content { + display: flex; + align-items: center; /* 鍨傜洿灞呬腑 */ + height: 100%; +} +.orange-icon { + color: orange; + font-size: 18px; + margin-right: 8px; /* 鍥炬爣涓庢枃瀛椾箣闂村姞鐐归棿璺� */ +} +</style> \ No newline at end of file -- Gitblit v1.9.3