From 2819fa5d3308e2e60864488cc588df5bb9cb1a13 Mon Sep 17 00:00:00 2001 From: Fixiaobai <fixiaobai@163.com> Date: 星期一, 11 九月 2023 18:00:11 +0800 Subject: [PATCH] modified: src/assets/api/controller.js modified: src/components/view/standard.vue --- src/components/view/standard.vue | 879 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 645 insertions(+), 234 deletions(-) diff --git a/src/components/view/standard.vue b/src/components/view/standard.vue index 883e3f1..0a0bdc6 100644 --- a/src/components/view/standard.vue +++ b/src/components/view/standard.vue @@ -1,166 +1,131 @@ -<style scoped> - .standard {} - - .standard .title .el-button { - height: 32px; - border: 1px solid rgba(190, 190, 190, 0.44); - box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41); - padding: 0 12px; - } - - .standard .title { - margin-bottom: 10px; - padding: 0 20px; - } - - .standard .title *{ - font-size: 16px; - } - - .thing { - width: 100%; - height: calc(100% - 48px); - background-color: #fff; - display: flex; - } - - .thing .left { - width: 295px; - height: calc(100% - 32px); - border-right: 3px solid rgb(245, 247, 251); - padding: 16px; - } - - .thing .left .custom-tree-node span { - font-size: 14px; - } - - .thing .left .custom-tree-node { - flex: 1; - display: flex; - align-items: center; - justify-content: space-between; - font-size: 14px; - padding-right: 8px; - } - - .node_i { - color: orange; - } - - .el-icon-delete { - display: none; - color: #004EA2; - } - - .custom-tree-node:hover .el-icon-delete { - display: inline; - } - - .thing .right { - width: calc(100% - 295px); - height: 100%; - overflow: hidden; - } - - .thing .right .choose { - padding: 21px 24px; - display: flex; - align-items: center; - } - - .thing .right .choose * { - font-size: 14px; - } - - .thing .right .choose .el-button { - height: 32px; - border: 1px solid rgba(190, 190, 190, 0.44); - box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41); - padding: 0 12px; - } - - .thing .right .table{ - margin-right: 24px; - height: calc(100% - 74px); - } -</style> -<style> - .standard .title .el-button * { - font-size: 14px; - } - - .standard .title .el-button--default{ - color: #004EA2; - } - - .standard .thing .left .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { - background: rgba(58, 124, 253, 0.3); - color: #004EA2; - } - - .el-tree-node__content { - height: 30px; - border-radius: 2px; - } -</style> - <template> <div class="standard"> <div class="title"> <el-row> <el-col :span="12" style="line-height: 32px;">鏍囧噯BOM</el-col> <el-col :span="12" style="text-align: right;"> - <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" @click="bomAddModelVisible= true">鏂板</el-button> - <el-button icon="el-icon-edit-outline">淇敼</el-button> - <el-button icon="el-icon-delete">鍒犻櫎</el-button> + <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" + @click="bomAddModelVisible = true">鏂板</el-button> + <el-button icon="el-icon-plus">鏂板鐗堟湰</el-button> + <el-button @click="bomRightUp=true" icon="el-icon-edit-outline">淇敼</el-button> + <el-button @click="bomRightDl=true" icon="el-icon-delete">鍒犻櫎</el-button> </el-col> </el-row> </div> <div class="thing"> <div class="left"> - <el-input v-model="search" suffix-icon="el-icon-search" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�" size="small" clearable></el-input> - <el-tree :data="list" ref="tree" :props="{children: 'children',label: 'name'}" node-key="id" default-expand-all - :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" - @node-collapse="nodeClose"> + <el-row> + <el-col :span="21"> + <el-input v-model="search" suffix-icon="el-icon-search" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�" size="small" clearable></el-input> + </el-col> + <el-col :span="2"> + <el-button size="mini" icon="el-icon-plus" @click="bomLeftAdd=true"></el-button> + </el-col> + </el-row> + <el-tree style="width: ;" :data="list" ref="tree" default-expand-all :props="{ children: 'children', label: 'name' }" + node-key="id" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current> <div class="custom-tree-node" slot-scope="{ node, data }"> - <span><i :class="`node_i ${data.code != '[4]'?'el-icon-folder-opened':'el-icon-tickets'}`"></i> - {{data.code}}{{ data.name }}</span> + <span><i :class="`node_i ${data.code != '[5]' ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> + {{ data.code }}{{ data.name }}</span> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> </div> </el-tree> </div> + + <div class="right"> <div class="choose"> <span>绫诲瀷锛�</span> - <el-select v-model="tableType" size="small" placeholder="璇烽�夋嫨" style="width: 224px;margin-right: 52px;"> - <el-option :value="0" label="宸ヨ壓鏂囦欢"></el-option> + <el-select v-model="tableType" size="small" placeholder="璇烽�夋嫨" @change="TYPE" + style="width: 224px;margin-right: 52px;"> + <el-option :value="0" label="宸ヨ壓璺嚎"></el-option> <el-option :value="1" label="鎶�鏈寚鏍�"></el-option> + <el-option :value="2" label="鐗╂枡娓呭崟"></el-option> + <el-option :value="3" label="鐢熶骇宸ヨ壓"></el-option> </el-select> - <span>{{tableType==1?'椤圭洰锛�':'宸ヨ壓鍚嶇О锛�'}}</span> - <el-input v-model="searchName" size="small" placeholder="璇疯緭鍏�" style="width: 224px;margin-right: 24px;" clearable></el-input> - <el-button size="mini" @click="()=>{searchName='';selectProductTableData()}"><span>閲� 缃�</span></el-button> - <el-button size="mini" type="primary" style="background: #004EA2;" @click="selectProductTableData"><span>鏌� 璇�</span></el-button> + <span>{{ tableType == 1 ? '椤圭洰锛�' : '宸ヨ壓鍚嶇О锛�' }}</span> + <el-input v-model="searchName" size="small" placeholder="璇疯緭鍏�" style="width: 224px;margin-right: 24px;" + clearable></el-input> + <span>{{ tableType == 1 ? '鐗堟湰锛�' : '鐗堟湰锛�' }}</span> + <el-select v-model="VER" @change="verevent" style="width: 280px;" placeholder="璇烽�夋嫨"> + <el-option v-for="item in version" :key="item" :label="item" :value="item"> + </el-option> + </el-select> + <el-button size="mini" @click="() => { searchName = ''; selectProductTableData() }"><span>閲� 缃�</span></el-button> + <el-button size="mini" type="primary" style="background: #004EA2;" @click="selectProductTableData"><span>鏌� + 璇�</span></el-button> </div> - <div class="table"> - <technology v-if="tableData.length!==0" :tableType="tableType" :tableData="tableData"></technology> + + <div class="contentTable" v-if="this.typeselect == 0"> + <technology :tableType="tableType" :tableData="tableData"></technology> </div> + <div v-if="this.typeselect == 1"> + <target :tableType="tableType" :tableData="tableData"></target> + </div> + <div v-if="this.typeselect == 2"> + <bom :tableType="tableType" :tableData="tableData"></bom> + </div> + <div v-if="this.typeselect == 3">鐢熶骇宸ヨ壓</div> + </div> </div> + + <div class="bom-add-model"> - <el-dialog - title="BOM鏂板" - :visible.sync="bomAddModelVisible" - width="30%" - :before-close="handleClose"> - <el-form> - - </el-form> + <el-dialog title="BOM鏂板" :visible.sync="bomAddModelVisible" width="30%"> + <div> + <!-- 鐗╂枡娓呭崟鏂板 --> + <bomClickAdd v-if="typeselect===2"/> + </div> <span slot="footer" class="dialog-footer"> <el-button @click="bomAddModelVisible = false">鍙� 娑�</el-button> <el-button type="primary" @click="bomAddModelVisible = false">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 宸︿晶鐐瑰嚮+鎸夐挳 --> + <el-dialog title="BOM鏂板" :visible.sync="bomLeftAdd" width="29%"> + <el-form ref="leftAdd" :model="leftAdd"> + <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨浜у搧绫诲瀷', trigger: 'blur' }]" label="浜у搧绫诲瀷" prop="type"> + <el-cascader @change="changeLeftAdd" v-model="leftAdd.type" style="width: 86%;" :options="formTypeOptions" :props="{ checkStrictly: true }" clearable></el-cascader> + </el-form-item> + <el-form-item v-if="leftAdd.type.length<2" label="浜у搧澶х被" prop="father"> + <el-autocomplete class="inline-input" style="width: 88%;" v-model="leftAdd.father" :fetch-suggestions="querySearch" placeholder="璇烽�夋嫨浜у搧澶х被" @select="handleSelect"></el-autocomplete> + </el-form-item> + <el-form-item v-if="leftAdd.type.length<3" label="浜у搧鍚嶇О" prop="name"> + <el-autocomplete class="inline-input" style="width: 88%;" v-model="leftAdd.name" :fetch-suggestions="querySearchName" placeholder="璇烽�夋嫨浜у搧鍚嶇О" @select="handleSelect"></el-autocomplete> + </el-form-item> + <el-form-item v-if="leftAdd.type.length<4" label="浜у搧鏍囧噯" prop="standard"> + <el-autocomplete class="inline-input" style="width: 88%;" v-model="leftAdd.standard" :fetch-suggestions="querySearchStandar" placeholder="璇烽�夋嫨浜у搧鏍囧噯" @select="handleSelect"></el-autocomplete> + </el-form-item> + <el-form-item label="浜у搧鍨嬪彿" prop="specifications"> + <el-input v-model="leftAdd.specifications" style="width: 88%;" placeholder="璇疯緭鍏ヤ骇鍝佸瀷鍙�"></el-input> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="resetForm('leftAdd')">鍙� 娑�</el-button> + <el-button type="primary" @click="submitForm('leftAdd')">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 鍙充笂渚х偣鍑讳慨鏀规寜閽� --> + <el-dialog title="BOM淇敼" :visible.sync="bomRightUp" width="30%"> + <el-form> + 淇敼 + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="bomRightUp = false">鍙� 娑�</el-button> + <el-button type="primary" @click="bomRightUp = false">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 鍙充笂渚х偣鍑诲垹闄ゆ寜閽� --> + <el-dialog title="BOM鍒犻櫎" :visible.sync="bomRightDl" width="30%"> + <el-form> + 鍒犻櫎 + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="bomRightDl=false">鍙� 娑�</el-button> + <el-button type="primary" @click="bomRightDl = false">纭� 瀹�</el-button> </span> </el-dialog> </div> @@ -168,115 +133,561 @@ </template> <script> - import technology from "./standard-table/technology.vue" - export default { - components: {technology}, - data() { - return { - // BOM鏍戞暟鎹粨鏋� - list: [{ - id: 0, - name: "鍘熸潗鏂�", - code: "[1]", - children: [] - }, { - id: 1, - name: "鎴愬搧", - code: "[1]", - children: [] - }, { - id: 2, - name: "鍗婃垚鍝�", - code: "[1]", - children: [] - }], - search: null, - // 琛ㄦ牸绫诲瀷 1锛氭妧鏈寚鏍囷紝0锛氬伐鑹鸿矾绾� - tableType: 1, - // 鏌ヨ鏉′欢-鍚嶇О - searchName: "", - // 鐐瑰嚮閫変腑鏍戣妭鐐� - checkTreeNode: {}, - tableData:[], - // 鎺у埗bom鏂板妯℃�佹鏄惁鏄剧ず - bomAddModelVisible: false +import technology from "./standard-table/technology.vue" +import material from "./standard-table/material.vue" +import bom from "./standard-table/bom.vue" +import bomClickAdd from '@/components/view/standard-box/bomClickAdd' +export default { + components: { technology,material,bom,bomClickAdd }, + + data() { + return { + // BOM鏍戞暟鎹粨鏋� + list: [], + search: null, + tableType: 1, // 琛ㄦ牸绫诲瀷 1锛氭妧鏈寚鏍囷紝0锛氬伐鑹鸿矾绾� + searchName: "",// 鏌ヨ鏉′欢-鍚嶇О + checkTreeNode: {},// 鐐瑰嚮閫変腑鏍戣妭鐐� + tableData: [], + bomAddModelVisible: false,// 鎺у埗bom鏂板妯℃�佹鏄惁鏄剧ず + bomLeftAdd: false, + bomRightUp: false, + bomRightDl: false, + formTypeOptions: null, + typeselect: 0, + returntree: { + id:28, + }, + version: {}, + leftAdd:{ + type: [], + father: null, + standard: null, + name: null, + specifications: null + }, + VER: {}, + verdata: {}, + character: 0, + restaurants: [], + bomName:[], + bomStandard:[], + isLeftAdd: true + } + }, + // watch: { + // search(val) { + // this.$refs.tree.filter(val); + // }, + // tableType(val){ + // this.selectProductTableData() + // } + // }, + mounted() { + this.tableType=0 + this.selectMaterialTree() + this.selectVersion() + }, + methods: { + changeLeftAdd(){ + if(this.leftAdd.type.length===2){ + this.leftAdd.father=null + this.leftAdd.father=this.leftAdd.type[1] + } + if(this.leftAdd.type.length===3){ + this.leftAdd.name=null + this.leftAdd.father=this.leftAdd.type[1] + this.leftAdd.name=this.leftAdd.type[2] + } + if(this.leftAdd.type.length===4){ + this.leftAdd.standard=null + this.leftAdd.father=this.leftAdd.type[1] + this.leftAdd.name=this.leftAdd.type[2] + this.leftAdd.standard=this.leftAdd.type[3] + } + }, + submitForm(formName) { + this.$refs[formName].validate((valid) => { + if (valid) { + let obj=JSON.parse(JSON.stringify(this.leftAdd)) + console.log(obj); + let one=this.list.filter(item=>{ + return item.name===obj.type[0] + })[0] + let two=one.children.filter(item=>{ + return item.name===obj.father + })[0] + console.log("two",two); + //鎵ц涓�浜岀骇鏂板 + if(two===undefined||two===null){ + obj.type=this.getType(obj.type[0]) + this.$axios.post(this.$api.url.leftAddOneTwo,obj,{ + headers: { "Content-Type": "application/json" } + }).then(res=>{ + this.$message({ + message: res.message, + type: 'success' + }); + this.selectMaterialTree() + }) + }else{ + let three=two.children.filter(item=>{ + return item.name===obj.name + })[0] + console.log("three",three); + if(three===undefined||three===null){ + obj.type=this.getType(obj.type[0]) + this.$axios.post(this.$api.url.leftAddOneTwo,obj,{ + headers: { "Content-Type": "application/json" } + }).then(res=>{ + this.$message({ + message: res.message, + type: 'success' + }); + this.selectMaterialTree() + }) + }else{ + //鏂板鏍囧噯鍨嬪彿 + let four=three.children.filter(item=>{ + return item.name===obj.standard + })[0] + if(four===undefined||four===null){ + let StandardDto={ + "id": three.id, + "specifications": obj.specifications, + "standard": obj.standard + } + this.$axios.post(this.$api.url.leftAddThree,StandardDto,{ + headers: { "Content-Type": "application/json" } + }).then(res=>{ + this.$message({ + message: res.message, + type: 'success' + }); + this.selectMaterialTree() + }) + }else{ + let specificationsDto={ + "id": four.id, + "specifications": obj.specifications + } + this.$axios.post(this.$api.url.leftAddFour,specificationsDto,{ + headers: { "Content-Type": "application/json" } + }).then(res=>{ + this.$message({ + message: res.message, + type: 'success' + }); + this.selectMaterialTree() + this.selectVersion() + }) + } + } + } + this.resetForm('leftAdd') + } else { + console.log('error submit!!'); + return false; + } + }); + }, + resetForm(formName) { + this.bomLeftAdd=false + this.$refs[formName].resetFields(); + }, + leftAddBom(){ + + }, + getType(typeName){ + return typeName==="鎴愬搧"?1:2 + }, + handleSelect(item) { + console.log(item); + }, + querySearch(queryString, cb) { + var restaurants = this.restaurants; + var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants; + // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� + cb(results); + }, + querySearchName(queryString, cb) { + var restaurants = this.bomName; + var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants; + // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� + cb(results); + }, + querySearchStandar(queryString, cb) { + var restaurants = this.bomStandard; + var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants; + // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹� + cb(results); + }, + loadFatherType(){ + return [{label:"姗¤兌杩炴帴鍣�",value: "姗¤兌杩炴帴鍣�"},{label:"閲戝睘杩炴帴鍣�",value: "閲戝睘杩炴帴鍣�"}, + {label:"婀挎彃鎷旂數杩炴帴鍣�",value: "婀挎彃鎷旂數杩炴帴鍣�"},{label:"鍒嗘敮缁勪欢",value: "鍒嗘敮缁勪欢"}] + }, + createFilter(queryString) { + return (restaurant) => { + return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); + }; + }, + selectDataList() { + this.list.forEach(a => { + a.code = '[1]' + if (a.children != undefined) { + a.children.forEach(b => { + b.code = '[2]' + if (b.children != undefined) { + b.children.forEach(c => { + c.code = '[3]' + if (c.children != undefined) { + c.children.forEach(d => { + d.code = '[4]' + if (d.children != undefined) { + d.children.forEach(e => { + e.code = '[5]' + }) + } + }) + } + }) + } + }) + } + }) + }, + handleSelectionChange() { + + }, + TYPE(val) {//绫诲瀷.鏁版嵁 + // console.log(val); + this.typeselect = val + + // console.log(this.typeselect); + this.selectVersion() + }, + handleNodeClick(val) {//鏍戠殑鍊� + if(val.code==='[5]'&&val.children===undefined){ + console.log(val); + this.returntree = val + this.typeselect=0 + this.selectVersion() } }, - watch: { - search(val) { - this.$refs.tree.filter(val); - }, - tableType(val){ - console.log(val) - this.selectProductTableData() - } - }, - mounted() { - this.selectMaterialTree() - }, - methods: { - handleNodeClick(data) { - // console.log(data); - this.checkTreeNode = data - // this.selectMaterialTree() - this.selectProductTableData() - }, - filterNode(value, data) { - if (!value) return true; - return data.label.indexOf(value) !== -1; - }, - remove(node, data) { - this.$confirm("鏄惁鍒犻櫎", "璀﹀憡", { - type: "warning" - }).then(res => { - const parent = node.parent; - const children = parent.data.children || parent.data; - const index = children.findIndex(d => d.id === data.id); - children.splice(index, 1); - }).catch(e => {}) - }, - nodeOpen(data, node, el) { - $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') - }, - nodeClose(data, node, el) { - $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') - }, - selectMaterialTree() { - this.$axios.get(this.$api.url.selectTreeByMaterial).then(res => { - res.data.forEach(a => { - this.list.forEach(b => { - if (a.type == b.id) b.children = [a] - }) - }) - this.$nextTick().then(() => { - const firstNode = document.querySelector('.el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node') - firstNode.click() - // console.log(firstNode) - }) + async selectVersion() {//鐗堟湰 + let v=await this.$axios.get(this.$api.url.selectVersion, { + params: { + specificationsId: this.returntree.id, + type: this.typeselect, + } + }).then(res => { + this.verdata = res.data + this.version = this.verdata.map(el => { + return el = `v${el}` }) - - }, - async selectProductTableData() { - switch (this.tableType) { - case 0: - const {data:technologyList} = await this.$axios.get(this.$api.url.selectTechnologyByMaterial,{params:{specificationId:this.checkTreeNode.id,technologyName:this.searchName}}) - this.tableData = technologyList - break; - case 1: - const {data:productList} = await this.$axios.get(this.$api.url.selectProductByMaterial,{params:{specifications:this.checkTreeNode.id,project:this.searchName}}) - productList.forEach((item,index)=>{ - item.name = item.father - item.index = index+1 - item.id = item.father - if(item.children.length===1){ - productList[index] = {...item.children[0],index: index+1,name:item.father} + // console.log("鐗堟湰"); + return this.verdata[0] + }) + this.character=v + this.VER="v"+v + this.selectAll() + }, + //鍙充晶鏁版嵁 + selectAll() { + this.$axios.get(this.$api.url.selectAll, { + params: { + specificationsId: this.returntree.id,//tree鐨勭偣鍑诲弽棣� + type: this.typeselect,//绫诲瀷 + version: this.character,//鐗堟湰 + } + }).then(res => { + let arr = res.data; + this.formatData(arr) + this.tableData = arr; + }) + }, + formatData(data){ + let arr = data; + for(var i=0;i<arr.length;i++){ + arr[i].rowId = Math.random(); + if(arr[i].children != undefined){ + this.formatData(arr[i].children); + } + } + }, + verevent(val) { + // console.log(val); + let cc = val.replace('v', '') + // console.log(cc); + this.character = cc + this.selectAll() + // const { v, ...newObj } = val; + // delete newObj.v + // console.log(newObj); + }, + //浜旂骇鏍� + selectMaterialTree() { + this.$axios.get(this.$api.url.selectTreeByMaterial).then( res => { + this.list=res.data + this.list.forEach((el, idx, arr) => { + if (idx == 0) { + arr[idx].name = '鎴愬搧' + } + if (idx == 1) { + arr[idx].name = '鍗婃垚鍝�' } }) - this.tableData = productList - break; + this.selectDataList() + // 榛樿绗竴涓簲绾ц妭鐐规悳绱紝鏂板閰嶇疆椤� + const treeOptions = JSON.parse(JSON.stringify(this.list)); + this.getDefault(treeOptions, 0); + this.formTypeOptions = treeOptions; + this.$nextTick().then(() => { + const firstNode = document.querySelector( + ".el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node" + ); + try { + firstNode.click(); + } catch (e) { + //TODO handle the exception + } + }); + }) + }, + getDefault(arr, index) { + for (const item of arr) { + if (item.children && item.children.length > 0) { + // 鏈夊瓙鑺傜偣 + this.getDefault(item.children, index + 1); + if (index === 2) { + item.children = null; + } + } + } + }, + filterNode(value, data) { + if (!value) return true; + return data.label.indexOf(value) !== -1; + }, + remove(node, data) { + this.$confirm("鏄惁鍒犻櫎", "璀﹀憡", { + type: "warning" + }).then(res => { + const parent = node.parent; + const children = parent.data.children || parent.data; + const index = children.findIndex(d => d.id === data.id); + children.splice(index, 1); + }).catch(e => { }) + }, + nodeOpen(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') + }, + nodeClose(data, node, el) { + $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') + }, + async selectProductTableData() { + switch (this.tableType) { + case 0: + const { data: technologyList } = await this.$axios.get(this.$api.url.selectTechnologyByMaterial, { params: { specificationId: this.checkTreeNode.id, technologyName: this.searchName } }) + this.tableData = technologyList + break; + case 1: + const { data: productList } = await this.$axios.get(this.$api.url.selectProductByMaterial, { params: { specifications: this.checkTreeNode.id, project: this.searchName } }) + productList.forEach((item, index) => { + item.name = item.father + item.index = index + 1 + item.id = item.father + if (item.children.length === 1) { + productList[index] = { ...item.children[0], index: index + 1, name: item.father } + } + }) + this.tableData = productList + break; + } + }, + // 閫掑綊鏇存敼娣诲姞绾ц仈鎵�闇�灞炴�� + replaceProp(arr){ + for (let index = 0; index < arr.length; index++) { + let element = arr[index]; + element.label=element.name + element.value=element.name + if(element.children!=undefined){ + if(element.code==='[4]'){ + delete element['children'] + continue + } + this.replaceProp(element.children) } - console.log(this.tableData) + } + } + }, + watch:{ + leftAdd: { + handler(newVal, oldVal) { + if(this.isLeftAdd){ + let tree=JSON.parse(JSON.stringify(this.list)) + let father=null; + if(newVal.father!=null&&newVal.father!=''&&newVal.type.length>0){ + let one=tree.filter(item=>{ + return item.name===newVal.type[0] + })[0] + console.log(one); + let two=one.children.filter(item=>{ + return item.name===newVal.father + })[0] + if(two!=undefined){ + this.bomName=[] + father=JSON.parse(JSON.stringify(two)) + two.children.forEach(item=>{ + let obj={label: item.name,value: item.name} + this.bomName.push(obj) + }) + } + } + if(newVal.name!=null&&newVal!=''&&newVal.father!=null&&newVal.father!=''&&newVal.type.length>0){ + let three=null + if(father!=undefined&&father!=null){ + three=father.children.filter(item=>{ + return item.name===newVal.name + })[0] + } + if(three!=undefined&&three!=null){ + this.bomStandard=[] + three.children.forEach(item=>{ + let obj={label: item.name,value: item.name} + this.bomStandard.push(obj) + }) + } + } + } + }, + deep: true // 娣卞害鐩戝惉瀵硅薄鍐呴儴灞炴�х殑鍙樺寲锛屽彲閫夌殑 + }, + bomLeftAdd:{ + handler(newval,oldVal){ + if(newval){ + let treeOptions = JSON.parse(JSON.stringify(this.list)); + this.replaceProp(treeOptions) + this.formTypeOptions=treeOptions + this.restaurants=this.loadFatherType() } } } + } +} </script> + + +<style scoped> +.standard { + +} + +.standard .contentTable{ +} + +.standard .title .el-button { + height: 32px; + border: 1px solid rgba(190, 190, 190, 0.44); + box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41); + padding: 0 12px; +} + +.standard .title { + margin-bottom: 10px; + padding: 0 20px; +} + +.standard .title * { + font-size: 16px; +} + +.thing { + width: 100%; + height: calc(100% - 48px); + background-color: #fff; + display: flex; +} + +.thing .left { + width: 295px; + height: calc(100% - 32px); + overflow-y: auto; + border-right: 3px solid rgb(245, 247, 251); + padding: 16px; +} + +.thing .left .custom-tree-node span { + font-size: 14px; +} + +.thing .left .custom-tree-node { + flex: 1; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; + padding-right: 8px; +} + +.node_i { + color: orange; +} + +.el-icon-delete { + display: none; + color: #004EA2; +} + +.custom-tree-node:hover .el-icon-delete { + display: inline; +} + +.thing .right { + width: calc(100% - 295px); + height: 100%; + overflow: hidden; +} + +.thing .right .choose { + padding: 21px 24px; + display: flex; + align-items: center; +} + +.thing .right .choose * { + font-size: 14px; +} + +.thing .right .choose .el-button { + height: 32px; + border: 1px solid rgba(190, 190, 190, 0.44); + box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41); + padding: 0 12px; +} + +.thing .right .table { + margin-right: 24px; + height: calc(100% - 74px); +} +</style> +<style> +.standard .title .el-button * { + font-size: 14px; +} + +.standard .title .el-button--default { + color: #004EA2; +} + +.standard .thing .left .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background: rgba(58, 124, 253, 0.3); + color: #004EA2; +} + +.el-tree-node__content { + height: 30px; + border-radius: 2px; +} +</style> + -- Gitblit v1.9.3