From 10903aca3b8fd5dd7cd8573fa5c99ccf19cb8f29 Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期四, 10 四月 2025 13:06:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/radio-frequency-cable' into radio-frequency-cable --- src/views/standard/standardLibrary/index.vue | 315 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 224 insertions(+), 91 deletions(-) diff --git a/src/views/standard/standardLibrary/index.vue b/src/views/standard/standardLibrary/index.vue index 377a29f..d6ea973 100644 --- a/src/views/standard/standardLibrary/index.vue +++ b/src/views/standard/standardLibrary/index.vue @@ -8,7 +8,8 @@ </el-col> <el-col v-if="checkPermi(['standard:standardLibrary:add'])" :span="4" style="text-align: center; line-height: 30px"> - <el-button circle icon="el-icon-plus" size="mini" type="primary" @click="openAddDia"></el-button> + <el-button circle icon="el-icon-plus" size="mini" type="primary" @click="openAddDia" + v-if="!auditId"></el-button> </el-col> </el-row> <el-tree ref="tree" v-loading="treeLoad" :allow-drop="allowDrop" :data="list" @@ -17,8 +18,7 @@ height: calc(100% - 30px); overflow-y: scroll; scrollbar-width: none; - " @node-click="handleNodeClick" - @node-drop="handleDrop"> + " @node-click="handleNodeClick" @node-drop="handleDrop"> <div slot-scope="{ node, data }" class="custom-tree-node"> <el-row style="width: 100%"> <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left"> @@ -34,19 +34,17 @@ </el-col> <el-col v-if=" checkPermi(['standard:standardLibrary:delStandardTree']) && - (node.data.children === null || - node.data.children === undefined) + data.level == 7 " :span="2" style="text-align: right"> - <el-button size="mini" type="text" @click.stop="editTreeName(node.data)"> + <el-button size="mini" type="text" @click.stop="editTreeName(node.data)" v-if="!auditId"> <i class="el-icon-edit"></i> </el-button> </el-col> <el-col v-if=" checkPermi(['standard:standardLibrary:delStandardTree']) && - (node.data.children === null || - node.data.children === undefined) + data.level == 7 " :span="2" style="text-align: right"> - <el-button size="mini" type="text" @click.stop="remove(node, data)"> + <el-button size="mini" type="text" @click.stop="remove(node, data)" v-if="!auditId"> <i class="el-icon-delete"></i> </el-button> </el-col> @@ -56,19 +54,18 @@ </div> <div class="right"> <el-row class="title" style="width: 100%"> - <el-col :span="20" style="font-size: 14px; color: #999">{{ + <el-col :span="19" style="font-size: 14px; color: #999"><span>{{ selectTree - }}</el-col> - <el-col :span="4"> - <el-button v-if="isShowCopy" size="small" style="position: absolute; right: 20px; top: 1px" type="primary" - @click="openCopyDia">鎵归噺澶嶅埗</el-button> + }} </span></el-col> + <el-col :span="5" style="position: absolute;top: -3px;right: -25px;" v-if="!auditId && !standardCkeck"> + <el-button size="small" type="primary" @click="submitReview" :loading="submitReviewLoad">鎻愪氦鍙樻洿</el-button> + <el-button v-if="isShowCopy" size="small" type="primary" @click="openCopyDia">鎵归噺澶嶅埗</el-button> </el-col> </el-row> <el-row v-loading="tableLoad" class="standard_table"> <el-table ref="standard" :data="standardList" class="el-table" header-row-class-name="header-class" height="220" - :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border - highlight-current-row style="width: 100%; height: 220px !important" tooltip-effect="dark" - @row-click="rowClick"> + :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border highlight-current-row + style="width: 100%; height: 220px !important" tooltip-effect="dark" @row-click="rowClick"> <el-table-column label="鏍囧噯缂栧彿" prop="code" show-overflow-tooltip width="200"> <template slot-scope="scope"> <span style="color: red; font-size: 14px">{{ @@ -82,12 +79,11 @@ </el-row> <el-row v-loading="tableLoad2" class="product_table"> <el-table id="templateParamTable" ref="productTable" v-loading="productTableLoading" :data="productList" - :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border - :fit="true" :row-class-name="tableRowClassName" class="productTable" - header-row-class-name="header-class" height="100%" row-key="id" stripe style="width: 100%" - tooltip-effect="dark" @select="upProductSelect" @selection-change="handleSelectionChange" - @select-all="handleAll"> - <el-table-column type="selection" width="50"> </el-table-column> + :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border :fit="true" + :row-class-name="tableRowClassName" class="productTable" header-row-class-name="header-class" height="100%" + row-key="id" stripe style="width: 100%" tooltip-effect="dark" @select="upProductSelect" + @selection-change="handleSelectionChange" @select-all="handleAll" :header-cell-class-name="headerCellStyle"> + <el-table-column type="selection" width="50" :selectable="selectable"> </el-table-column> <el-table-column label="浜у搧" min-width="100" prop="sample" show-overflow-tooltip></el-table-column> <el-table-column label="鍨嬪彿" min-width="100" prop="model" show-overflow-tooltip></el-table-column> <el-table-column label="妫�楠岄」鍒嗙被" min-width="140" prop="inspectionItemClass" @@ -95,13 +91,22 @@ <el-table-column label="妫�楠岄」" min-width="140" prop="inspectionItem" show-overflow-tooltip></el-table-column> <el-table-column label="妫�楠岄」瀛愰」" min-width="140" prop="inspectionItemSubclass" show-overflow-tooltip></el-table-column> - <el-table-column label="瀛愬疄楠屽" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column> + <!-- checkStatusList --> + <el-table-column label="瀹℃牳鐘舵��" min-width="140" prop="checkStatus"> + <template slot-scope="scope"> + <el-tag :type="checkStatusList.find(m => m.value == scope.row.checkStatus).type" + v-if="checkStatusList.find(m => m.value == scope.row.checkStatus) && scope.row.checkStatus !== '' && scope.row.checkStatus !== null" + size="small">{{ + checkStatusList.find(m => m.value == scope.row.checkStatus).label }}</el-tag> + </template> + </el-table-column> <el-table-column label="瑕佹眰鍊�" min-width="200px" prop="ask"> <template slot-scope="scope"> <el-input v-if=" checkPermi(['standard:standardLibrary:upStandardProduct']) " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="瑕佹眰鍊�" size="small" - type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input> + type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)" + :disabled="!!auditId || standardCkeck"></el-input> <span v-else>{{ scope.row.ask }}</span> </template> </el-table-column> @@ -111,11 +116,12 @@ checkPermi(['standard:standardLibrary:upStandardProduct']) " v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="瑕佹眰鎻忚堪" size="small" type="textarea" @change="(value) => upStandardProductListOfTell(value, scope.row.id) - "></el-input> + " :disabled="!!auditId || standardCkeck"></el-input> <span v-else>{{ scope.row.ask }}</span> </template> </el-table-column> - <el-table-column label="璇曢獙鏂规硶" prop="method" width="200"> + <el-table-column label="瀛愬疄楠屽" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column> + <!-- <el-table-column label="璇曢獙鏂规硶" prop="method" width="200"> <template slot-scope="scope"> <el-select v-if=" checkPermi(['standard:standardLibrary:upStandardProduct']) @@ -126,13 +132,13 @@ </el-select> <span v-else>{{ scope.row.methodS }}</span> </template> - </el-table-column> - <el-table-column label="鏉′欢" min-width="140" prop="radius" show-overflow-tooltip> + </el-table-column> --> + <el-table-column label="璇曢獙鏉′欢" min-width="140" prop="radius" show-overflow-tooltip> <template slot-scope="scope"> <el-select v-if=" checkPermi(['standard:standardLibrary:upStandardProduct']) - " v-model="scope.row.radius" clearable placeholder="鏉′欢" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id) - "> + " v-model="scope.row.radius" clearable placeholder="璇曢獙鏉′欢" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id) + " :disabled="!!auditId || standardCkeck" allow-create filterable> <el-option v-for="(a, i) in scope.row.radiusList && JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option> </el-select> @@ -145,7 +151,7 @@ <el-input v-if=" checkPermi(['standard:standardLibrary:upStandardProduct']) " v-model="scope.row.price" placeholder="鍗曚环(鍏�)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id) - "> + " :disabled="!!auditId || standardCkeck"> </el-input> <span v-else>{{ scope.row.price }}</span> </template> @@ -155,7 +161,7 @@ <el-input v-if=" checkPermi(['standard:standardLibrary:upStandardProduct']) " v-model="scope.row.manHour" placeholder="鍗曚环(鍏�)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id) - "> + " :disabled="!!auditId || standardCkeck"> </el-input> <span v-else>{{ scope.row.manHour }}</span> </template> @@ -163,7 +169,7 @@ <el-table-column label="宸ユ椂鍒嗙粍" prop="manHourGroup" show-overflow-tooltip width="100"></el-table-column> <el-table-column label="妯℃澘" prop="templateId" width="200"> <template slot-scope="scope"> - <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) + <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) || !!auditId || standardCkeck " filterable size="small" @change="(value) => upStandardProductListOfTemplate(value, scope.row.id) "> @@ -172,7 +178,7 @@ </template> </el-table-column> <el-table-column label="鍖洪棿" prop="section" show-overflow-tooltip width="120"></el-table-column> - <el-table-column label="鎿嶄綔" prop="section" width="160"> + <el-table-column label="鎿嶄綔" prop="section" width="160" v-if="!auditId && !standardCkeck"> <template slot-scope="scope"> <el-button type="text" @click="sectionUp(scope.row)" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) ">鍖洪棿璁剧疆</el-button> @@ -220,7 +226,7 @@ <el-dialog :close-on-click-modal="false" :visible.sync="sectionUpDia" title="鍖洪棿璁剧疆" width="80%"> <div class="body" style="padding: 5px 0"> <el-table :data="sectionList" border height="350px" style="width: 100%" - :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"> + :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"> <el-table-column align="center" label="搴忓彿" type="index" width="70"> </el-table-column> <el-table-column align="center" label="鍖洪棿"> @@ -270,7 +276,7 @@ </el-dialog> <bindSupplierDensityDialogAsk v-if="bindSupplierDensityDialog" :bindSupplierDensityDialog="bindSupplierDensityDialog" :currentRow="currentSupplierDensityRow" - @closeBindPartDialog="closeBindSupplierDensityDialog"> + @closeBindPartDialog="closeBindSupplierDensityDialog" @refreshList="refreshList"> </bindSupplierDensityDialogAsk> <BatchCopy v-if="batchCopyDia" ref="BatchCopy" :selectTree1="selectTree" :standardId="standardId" @refreshList="refreshList"></BatchCopy> @@ -298,11 +304,14 @@ getStandardTemplate, selectStandardProductByMethodId, selectStandardProductEnumByMethodId, + productListSubmit, + standardProductListRecordRelPage, + existCheckingRecord, } from "@/api/standard/standardLibrary"; import bindSupplierDensityDialogAsk from "./components/bindSupplierDensityDialogAsk.vue"; import BatchCopy from "./components/BatchCopy.vue"; export default { - name: 'StandardLibrary', + // name: 'StandardLibrary', components: { BatchCopy, bindSupplierDensityDialogAsk, @@ -365,7 +374,6 @@ inspectionItem: null, inspectionItemSubclass: null, sonLaboratory: null, - token: null, fileList: [], uploading: false, isEquipment: true, @@ -377,9 +385,30 @@ batchCopyDia: false, VUE_APP_BASE_API: process.env.VUE_APP_BASE_API, moreSelects: [], + checkStatusList: [ + { + value: 0, + label: '鏈彁浜�', + type: 'danger' + }, + { + value: 1, + label: '瀹℃牳涓�', + type: 'warning' + }, + { + value: 2, + label: '宸叉洿鏂�', + type: 'success' + }, + ], + submitReviewLoad: false, + auditId: null,//鏍囧噯鍙樻洿璁板綍ID + standardCkeck: false,//褰撳墠鏄惁鏈夋鍦ㄥ鏍哥殑鍙樻洿 }; }, mounted() { + this.existCheckingRecord() this.selectEnumByCategoryForFactory(); this.selectStandardTreeList(); this.obtainItemParameterList(); @@ -389,11 +418,27 @@ this.selectEnumByCategoryForsampleType(); this.getStandardTemplate(); this.selectStandardMethodsSec(); - this.token = { - token: sessionStorage.getItem("token"), - }; + if (this.$route.query && this.$route.query.auditId) { + let { + auditId + } = this.$route.query + this.auditId = auditId + } else { + this.auditId = null + } }, methods: { + // 鏍囧噯搴撳彉鏇存椂绂佺敤鍏ㄩ�� + headerCellStyle({ columnIndex }) { + if (columnIndex === 0 && (this.auditId || this.standardCkeck)) { + return 'disable-select-all'; + } + return ''; + }, + // 鏍囧噯搴撳彉鏇存椂绂佺敤澶氶�� + selectable(row, index) { + return !this.auditId && !this.standardCkeck; + }, // 鎷栨嫿鏃跺垽瀹氱洰鏍囪妭鐐硅兘鍚﹁鏀剧疆 // 'prev'銆�'inner' 鍜� 'next'锛屽墠銆佹彃鍏ャ�佸悗 allowDrop(draggingNode, dropNode, type) { @@ -476,7 +521,7 @@ } }, // 璋冪敤tree杩囨护鏂规硶 涓枃鑻辫繃婊� - filterNode (value, data, node) { + filterNode(value, data, node) { if (!value) {銆�銆�銆�銆�//濡傛灉鏁版嵁涓虹┖锛屽垯杩斿洖true,鏄剧ず鎵�鏈夌殑鏁版嵁椤� return true } @@ -485,7 +530,7 @@ return this.chooseNode(val, data, node) // 璋冪敤杩囨护浜屽眰鏂规硶 }, // 杩囨护鐖惰妭鐐� / 瀛愯妭鐐� (濡傛灉杈撳叆鐨勫弬鏁版槸鐖惰妭鐐逛笖鑳藉尮閰嶏紝鍒欒繑鍥炶鑺傜偣浠ュ強鍏朵笅鐨勬墍鏈夊瓙鑺傜偣锛涘鏋滃弬鏁版槸瀛愯妭鐐癸紝鍒欒繑鍥炶鑺傜偣鐨勭埗鑺傜偣銆俷ame鏄腑鏂囧瓧绗︼紝enName鏄嫳鏂囧瓧绗�. - chooseNode (value, data, node) { + chooseNode(value, data, node) { if (data.label.indexOf(value) !== -1) { return true } @@ -569,7 +614,11 @@ this.selectTree = ""; // 鎷兼帴鏍戣矾寰� this.selectTree = this.getReversedTreePath(node); - delStandardTree({ tree: this.selectTree }).then((res) => { + delStandardTree({ + tree: this.selectTree, + level: data.level, + id: data.value + }).then((res) => { this.$message.success("宸插垹闄�"); let arr = this.selectTree.split(" - "); this.deleteStandard(this.list, arr[arr.length - 1]); @@ -657,7 +706,7 @@ }); }, // 鎵撳紑鏂板寮规 - openAddDia () { + openAddDia() { this.addDia = true this.addOb.modelName = '' }, @@ -726,6 +775,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, upStandardProductListOfTell(value, index) { @@ -736,6 +786,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, // 鏍囧噯搴撻�夋嫨瀹為獙鏂规硶鐨勫洖璋� @@ -747,6 +798,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, // 鏍囧噯搴撻�夋嫨鏉′欢鐨勫洖璋� @@ -758,6 +810,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, upStandardProductListOfPrice(value, index) { @@ -768,6 +821,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, upStandardProductListOfManHour(value, index) { @@ -778,6 +832,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, upStandardProductListOfTemplate(value, index) { @@ -788,6 +843,7 @@ }), }).then((res) => { this.$message.success("宸蹭繚瀛�"); + this.refreshList() }); }, handleSelectionChange(val) { @@ -810,45 +866,65 @@ this.currentPage = 1; this.tableLoad2 = true; this.standardId = row.id; - selectStandardProductListByMethodId({ - id: row.id, - tree: this.selectTree, - page: this.currentPage, - }).then((res) => { - this.productList = res.data.productList; - this.total = res.data.total; - setTimeout(() => { - this.productList.forEach((a) => { - if (a.state == 1) this.toggleSelection(a); - }); - }, 300); - this.tableLoad2 = false; - const tree = this.selectTree.split(" - "); - // 閫夋嫨鏈�鍚庝竴灞傛爲鎵嶅彲浠ユ嫋鎷芥帓搴� - if (tree.length === 4) { - const name = tree[3] + "[4]"; - this.hasChildWithId(this.list, name); - if ( - this.isHaveChildren.children && - this.isHaveChildren.children.length > 0 - ) { + if (this.auditId) { + // 鏍囧噯搴撳彉鏇寸殑妫�楠岄」鏌ヨ + standardProductListRecordRelPage({ + standardMethodListId: row.id, + tree: this.selectTree, + standardProductListUpdateRecordId: this.auditId, + }).then((res) => { + this.productList = res.data.productList; + this.total = res.data.total; + setTimeout(() => { + this.productList.forEach((a) => { + if (a.state == 1) this.toggleSelection(a); + }); + }, 300); + this.tableLoad2 = false; + }); + } else { + // 姝e父鎯呭喌涓嬬殑鏍囧噯鏌ヨ + selectStandardProductListByMethodId({ + id: row.id, + tree: this.selectTree, + page: this.currentPage, + }).then((res) => { + this.productList = res.data.productList; + this.total = res.data.total; + setTimeout(() => { + this.productList.forEach((a) => { + if (a.state == 1) this.toggleSelection(a); + }); + }, 300); + this.tableLoad2 = false; + const tree = this.selectTree.split(" - "); + // 閫夋嫨鏈�鍚庝竴灞傛爲鎵嶅彲浠ユ嫋鎷芥帓搴� + if (tree.length === 4) { + const name = tree[3] + "[4]"; + this.hasChildWithId(this.list, name); + if ( + this.isHaveChildren.children && + this.isHaveChildren.children.length > 0 + ) { + if (this.sortTable) { + this.sortTable.destroy(); + this.sortTable = null; + } + return; + } + } else if (tree.length < 4) { if (this.sortTable) { this.sortTable.destroy(); this.sortTable = null; } return; } - } else if (tree.length < 4) { - if (this.sortTable) { - this.sortTable.destroy(); - this.sortTable = null; - } - return; - } - this.$nextTick(() => { - this.rowDrop(row.id); + this.$nextTick(() => { + this.rowDrop(row.id); + }); }); - }); + } + }, toggleSelection(row) { this.$refs.productTable.toggleRowSelection(row, true); @@ -868,6 +944,7 @@ }), }).then((res) => { this.$message.success('宸蹭繚瀛�') + this.refreshList() }); }, filterHandler(value) { @@ -1019,6 +1096,7 @@ this.sectionLoad = false; this.$message.success("宸蹭繚瀛�"); this.sectionUpDia = false; + this.refreshList() }); } else { upStandardProducts({ @@ -1064,19 +1142,36 @@ handleCurrentChange(val) { this.currentPage = val; this.tableLoad2 = true; - selectStandardProductListByMethodId({ - id: this.standardId, - tree: this.selectTree, - page: val, - }).then((res) => { - this.productList = res.data.productList; - setTimeout(() => { - this.productList.forEach((a) => { - if (a.state == 1) this.toggleSelection(a); - }); - }, 200); - this.tableLoad2 = false; - }); + if (this.auditId) { + // 鏍囧噯搴撳彉鏇存煡璇 + standardProductListRecordRelPage({ + standardMethodListId: this.standardId, + tree: this.selectTree, + standardProductListUpdateRecordId: this.auditId, + }).then((res) => { + this.productList = res.data.productList; + setTimeout(() => { + this.productList.forEach((a) => { + if (a.state == 1) this.toggleSelection(a); + }); + }, 200); + this.tableLoad2 = false; + }); + } else { + selectStandardProductListByMethodId({ + id: this.standardId, + tree: this.selectTree, + page: val, + }).then((res) => { + this.productList = res.data.productList; + setTimeout(() => { + this.productList.forEach((a) => { + if (a.state == 1) this.toggleSelection(a); + }); + }, 200); + this.tableLoad2 = false; + }); + } }, openCopyDia() { this.batchCopyDia = true; @@ -1171,6 +1266,39 @@ }); }); }, + // 鎻愪氦鍙樻洿鐢宠 + submitReview() { + this.$prompt('璇疯緭鍏ュ彉鏇村師鍥�', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + inputValidator: (value) => { + if (!value || value.trim() === '') { + return '璇疯緭鍏ュ彉鏇村師鍥�'; + } + return true; + } + }).then(({ value }) => { + this.submitReviewLoad = true + productListSubmit({ + remark: value + }).then(res => { + this.submitReviewLoad = false + this.selectsStandardMethodByFLSSM(); + this.existCheckingRecord() + this.refreshList() + this.$refs.productTable.doLayout() + }).catch(err => { + this.submitReviewLoad = false + }) + }).catch(() => { + }); + }, + // 鑾峰彇褰撳墠鏈夋病鏈夋鍦ㄥ鏍哥殑鍙樻洿 + existCheckingRecord() { + existCheckingRecord().then(res => { + this.standardCkeck = res.data + }) + } }, }; </script> @@ -1356,4 +1484,9 @@ align-items: center; justify-content: center; } + +/* 闅愯棌鍏ㄩ�夊閫夋 */ +>>>.disable-select-all .el-checkbox { + display: none !important; +} </style> -- Gitblit v1.9.3