From 781e1ea65273cf10d6e5ed39e435107d67a8c667 Mon Sep 17 00:00:00 2001 From: 晏有为 <13214124+yan-youwei@user.noreply.gitee.com> Date: 星期四, 16 五月 2024 17:21:59 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/view/b2-standard.vue | 367 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 337 insertions(+), 30 deletions(-) diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue index 986d535..bcfa0ab 100644 --- a/src/components/view/b2-standard.vue +++ b/src/components/view/b2-standard.vue @@ -79,6 +79,38 @@ >>>.el-table__row{ height: 35px !important; } + .search{ + height: 20%; + border-bottom: 1px solid #ebeef5; + margin-bottom: 16px; + display: flex; + align-items: center; + box-sizing: border-box; + padding-bottom: 10px; + } + .search-item{ + display: flex; + align-items: center; + flex-wrap: wrap; + } + .search-item .el-row{ + display: flex; + align-items: center; + } + .search-item .el-col{ + margin-left: 0; + } + .more-edit .dialog-footer{ + position: absolute; + top: 15px; + right: 70px; + } + >>>.more-edit .el-dialog__body{ + height: calc(100vh - 90px); + } + >>>.is-disabled .el-textarea__inner{ + background: rgba(0, 0, 0, 0.05) !important; + } </style> <style> .standard .el-tree-node__content { @@ -133,7 +165,7 @@ :class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> - <el-col :span="2" style="text-align: right;" v-if="delStandardTree"> + <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level==5"> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> @@ -143,8 +175,9 @@ </el-tree> </div> <div class="right"> - <el-row class="title"> - <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> + <el-row class="title" style="width: 100%;"> + <el-col :span="20" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> + <el-button size="small" type="primary" @click="handleMore" style="position: absolute;right: 0px;top: 1px;" v-if="upStandardProduct">鎵归噺缂栬緫</el-button> </el-row> <el-row class="standard_table" v-loading="tableLoad"> <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220" tooltip-effect="dark" @@ -227,7 +260,7 @@ <el-table-column prop="manHourGroup" label="宸ユ椂鍒嗙粍" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="templateId" label="妯℃澘" width="200"> <template slot-scope="scope"> - <el-select v-model="scope.row.templateId" size="small" filterable + <el-select v-model="scope.row.templateId" size="small" filterable :disabled="!upStandardProduct" @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)"> <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> </el-select> @@ -244,8 +277,8 @@ style="position: absolute;right: 16px;bottom: 1px;" @current-change="handleCurrentChange" :current-page="currentPage" - :page-size="pageSize" layout="total, prev, pager, next, jumper" + :page-size="50" :total="total"> </el-pagination> </el-row> @@ -289,6 +322,113 @@ <el-button @click="addDia = false">鍙� 娑�</el-button> <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> </span> + </el-dialog> + <el-dialog title="鎵归噺缂栬緫" :visible.sync="moreEdit" width="90%" style="height: 100vh;" class="more-edit"> + <div class="body" style="height: 100%;display: flex;flex-direction: column;"> + <div class="search"> + <div class="search-item"> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 瑕佹眰鍊硷細</el-col> + <el-col :span="16"> + <el-input size="small" v-model="moreInfo.ask" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 瑕佹眰鎻忚堪锛�</el-col> + <el-col :span="16" style="display: flex;align-items: flex-start;height: 100%;"> + <el-input size="small" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}" v-model="moreInfo.tell" :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 璇曢獙鏂规硶锛�</el-col> + <el-col :span="16"> + <el-select v-model="moreInfo.methodS" size="small" filterable style="width: 100%;" :disabled="moreSelects.length==0"> + <el-option v-for="(a, ai) in methodList" :key="ai" :label="a.label" :value="a.value"></el-option> + </el-select> + </el-col> + </el-row> + <el-row style="width: 25%;margin-bottom: 16px;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 鍗曚环(鍏�)锛�</el-col> + <el-col :span="16" > + <el-input size="small" v-model="moreInfo.price" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 宸ユ椂绯绘暟锛�</el-col> + <el-col :span="16"> + <el-input size="small" v-model="moreInfo.manHour" clearable :disabled="moreSelects.length==0"></el-input> + </el-col> + </el-row> + <el-row style="width: 25%;"> + <el-col :span="6" style="text-align: right;"> + <!-- <span class="required-span">* </span> --> + 妯℃澘锛�</el-col> + <el-col :span="16"> + <el-select v-model="moreInfo.templateId" size="small" filterable placeholder="妯℃澘" style="width: 100%;" :disabled="moreSelects.length==0"> + <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> + </el-select> + </el-col> + </el-row> + <el-row style="width: 50%;"> + <el-col :span="23" style="display: flex;align-items: center;justify-content: end;"> + <el-button type="primary" size="small" @click="sectionUp(moreSelects)">璁剧疆鍖洪棿</el-button> + <el-button @click="moreEdit = false" size="small">鍙� 娑�</el-button> + <el-button type="primary" @click="subMoreEdit" :loading="moreEditLoad" size="small">淇� 瀛�</el-button> + </el-col> + </el-row> + </div> + </div> + <div style="flex: 1;overflow-y: auto;" v-loading="productTableLoading0"> + <el-table :data="productList0" ref="productTable0" style="width: 100%;" height="94%" tooltip-effect="dark" + stripe + :fit="true" border + @select-all="handleSelectAll0" + @select="handleSelectionChange0" + header-row-class-name="header-class" + :row-key="row=>row.id" + > + <el-table-column type="selection" width="50" > + </el-table-column> + <el-table-column prop="model" label="鍨嬪彿" min-width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="inspectionItem" label="妫�楠岄」" min-width="140" show-overflow-tooltip></el-table-column> + <el-table-column prop="inspectionItemSubclass" label="妫�楠岄」瀛愰」" min-width="140" + show-overflow-tooltip></el-table-column> + <el-table-column prop="sonLaboratory" label="瀛愬疄楠屽" width="130" show-overflow-tooltip :filters="filters" + :filter-method="filterHandler"></el-table-column> + <el-table-column prop="ask" label="瑕佹眰鍊�" min-width="200px"></el-table-column> + <el-table-column prop="tell" label="瑕佹眰鎻忚堪" min-width="220px"></el-table-column> + <el-table-column prop="method" label="璇曢獙鏂规硶" width="200"></el-table-column> + <el-table-column prop="unit" label="璁¢噺鍗曚綅" width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="price" label="鍗曚环(鍏�)" width="120"></el-table-column> + <el-table-column prop="manHour" label="宸ユ椂绯绘暟" width="120"></el-table-column> + <el-table-column prop="manHourGroup" label="宸ユ椂鍒嗙粍" width="100" show-overflow-tooltip></el-table-column> + <el-table-column prop="templateId" label="妯℃澘" width="200"> + <template slot-scope="scope"> + {{ templateList.find(item => item.id == scope.row.templateId)?templateList.find(item => item.id == scope.row.templateId).name:'' }} + </template> + </el-table-column> + <el-table-column prop="section" label="鍖洪棿" width="120" show-overflow-tooltip></el-table-column> + </el-table> + <el-pagination + style="position: absolute;right: 16px;bottom: 4px;" + @current-change="handleCurrentChange0" + :current-page="currentPage0" + layout="total, prev, pager, next, jumper" + :page-size="50" + :total="total0"> + </el-pagination> + </div> + </div> </el-dialog> <!-- <el-dialog title="鏂板鏍囧噯" :visible.sync="addStandardDia" width="400px"> <div class="body"> @@ -447,9 +587,42 @@ sectionList: [], templateList: [], total:0, - pageSize:100, currentPage:1, - standardId: 0 + standardId: 0, + moreEdit:false, + moreEditLoad:false, + moreSelects:[], + total0:0, + currentPage0:1, + productList0: [], + moreInfo:{ + ask:'', + tell:'', + methodS:'', + price:'', + manHour:'', + templateId:'' + }, + methodList:[], + productTableLoading0:false + } + }, + watch: { + moreEdit(val) { + if(!val){ + this.$refs.productTable0.clearSelection() + this.moreSelects = [] + this.currentPage0 = 1; + this.productList0 = [] + this.moreInfo = { + ask:'', + tell:'', + methodS:'', + price:'', + manHour:'', + templateId:'' + } + } } }, mounted() { @@ -480,6 +653,8 @@ this.upIndex++ }, handleNodeClick(val, node, el) { //鏍戠殑鍊� + this.total = 0 + this.currentPage = 1 this.selectTree = '' this.getNodeParent(node) this.selectTree = this.selectTree.replace(' - ', '') @@ -993,19 +1168,29 @@ } }, sectionUp(row) { - this.sectionRow = row - this.sectionUpDia = true - this.sectionList = [] - if (this.sectionRow.section != null && this.sectionRow.section != '') { - JSON.parse(this.sectionRow.section).forEach((a, ai) => { - this.sectionList.push({ - thing: a, - ask: JSON.parse(this.sectionRow.ask)[ai], - tell: JSON.parse(this.sectionRow.tell)[ai], - price: JSON.parse(this.sectionRow.price)[ai], - manHour: JSON.parse(this.sectionRow.manHour)[ai] + if (Array.isArray(row)) { + // 鍊兼槸涓�涓暟缁� + if(row.length === 0){ + return this.$message.error('璇烽�夋嫨妫�楠岄」') + } + this.sectionRow = {} + this.sectionUpDia = true + } else { + // 鍊兼槸涓�涓璞� + this.sectionRow = row + this.sectionUpDia = true + this.sectionList = [] + if (this.sectionRow.section != null && this.sectionRow.section != '') { + JSON.parse(this.sectionRow.section).forEach((a, ai) => { + this.sectionList.push({ + thing: a, + ask: JSON.parse(this.sectionRow.ask)[ai], + tell: JSON.parse(this.sectionRow.tell)[ai], + price: JSON.parse(this.sectionRow.price)[ai], + manHour: JSON.parse(this.sectionRow.manHour)[ai] + }) }) - }) + } } }, sectionLoadAdd() { @@ -1037,18 +1222,42 @@ this.sectionRow.manHour = JSON.stringify(manHourList) } this.sectionLoad = true - this.$axios.post(this.$api.standardTree.upStandardProductList, { - id: this.sectionRow.id, - section: this.sectionRow.section, - ask: this.sectionRow.ask, - tell: this.sectionRow.tell, - price: this.sectionRow.price, - manHour: this.sectionRow.manHour - }, { - headers: { - 'Content-Type': 'application/json' + if(this.moreSelects.length === 0){ + this.$axios.post(this.$api.standardTree.upStandardProductList, { + id: this.sectionRow.id, + section: this.sectionRow.section, + ask: this.sectionRow.ask, + tell: this.sectionRow.tell, + price: this.sectionRow.price, + manHour: this.sectionRow.manHour + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.sectionLoad = false + if (res.code == 201) { + this.$message.error('鏈繚瀛�') + return + } + this.$message.success('宸蹭繚瀛�') + this.sectionUpDia = false + }) + }else{ + this.$axios.post(this.$api.standardTree.upStandardProducts, { + ids:this.moreSelects.map(a=>a.id), + standardProductList:{ + section: this.sectionRow.section, + ask: this.sectionRow.ask, + tell: this.sectionRow.tell, + price: this.sectionRow.price, + manHour: this.sectionRow.manHour } - }).then(res => { + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { this.sectionLoad = false if (res.code == 201) { this.$message.error('鏈繚瀛�') @@ -1056,7 +1265,10 @@ } this.$message.success('宸蹭繚瀛�') this.sectionUpDia = false + this.currentPage0 = 1; + this.getList() }) + } }, getStandardTemplate() { this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => { @@ -1080,6 +1292,101 @@ this.tableLoad2 = false }) }, + async handleMore(){ + if((!this.standardId&&this.standardId!=0)||this.standardList.length==0){ + return this.$message.error('璇烽�夋嫨瀹為獙瀹ゃ�佹牱鍝�') + } + await this.getList() + this.selectStandardMethods() + this.moreEdit = true + }, + selectStandardMethods() { + this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.code, + value: a.code + }) + }) + this.methodList = data + }) + }, + subMoreEdit(){ + if(this.moreSelects.length===0){ + return this.$message.error('璇烽�夋嫨妫�楠岄」') + } + this.moreEditLoad = true + this.$axios.post(this.$api.standardTree.upStandardProducts, { + ids:this.moreSelects.map(a=>a.id), + standardProductList:this.moreInfo + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.moreEditLoad = false + if (res.code == 201) { + this.$message.error('鏈繚瀛�') + return + } + this.$message.success('宸蹭繚瀛�') + this.currentPage0 = 1; + this.getList() + // this.moreInfo = { + // ask:'', + // tell:'', + // methodS:'', + // price:'', + // manHour:'', + // templateId:'' + // } + }) + }, + handleSelectAll0(rows){ + if(rows.length){ + rows.forEach(a=>{ + if(!this.moreSelects.find(b=>a.id===b.id)){ + this.moreSelects.push(a) + } + }) + }else{ + this.productList0.forEach(a=>{ + this.moreSelects = this.moreSelects.filter(b=>b.id!=a.id ) + }) + } + }, + handleSelectionChange0(val,row){ + if(this.moreSelects.find(a=>a.id===row.id)){ + this.moreSelects = this.moreSelects.filter(a=>a.id!=row.id) + }else{ + this.moreSelects.push(row) + } + }, + getList(){ + this.productTableLoading0 = true + this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { + id: this.standardId, + tree: this.selectTree, + page: this.currentPage0 + }).then(res => { + this.productList0 = res.data.productList + this.total0 = res.data.total + this.productTableLoading0 = false + this.$nextTick(()=>{ + this.productList0.forEach((a,i) => { + if(this.moreSelects.find(b=>a.id==b.id)){ + // console.log(111111111,a) + this.$refs.productTable0.toggleRowSelection(this.productList0[i],true) + } + }) + }) + }) + }, + handleCurrentChange0(e){ + this.currentPage0 = e; + this.getList() + } } } </script> -- Gitblit v1.9.3