| | |
| | | <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 icon="el-icon-edit-outline">ä¿®æ¹</el-button> |
| | | <el-button icon="el-icon-delete">å é¤</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" default-expand-all :props="{ children: 'children', label: 'name' }" |
| | | <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 != '[5]' ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> |
| | |
| | | <div class="contentTable" v-if="this.typeselect == 0"> |
| | | <technology :tableType="tableType" :tableData="tableData"></technology> |
| | | </div> |
| | | <div v-if="this.typeselect == 1">ææ¯ææ </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 class="bom-add-model"> |
| | | <el-dialog title="BOMæ°å¢" :visible.sync="bomAddModelVisible" width="30%"> |
| | | <el-form> |
| | | |
| | | </el-form> |
| | | <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> |
| | |
| | | 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 }, |
| | | components: { technology,material,bom,bomClickAdd }, |
| | | |
| | | data() { |
| | | return { |
| | |
| | | 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: { |
| | |
| | | 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]' |
| | |
| | | // console.log(val); |
| | | this.typeselect = val |
| | | |
| | | console.log(this.typeselect); |
| | | // console.log(this.typeselect); |
| | | this.selectVersion() |
| | | }, |
| | | handleNodeClick(val) {//æ çå¼ |
| | | // console.log(val); |
| | | this.returntree = val |
| | | if(val.code==='[5]'&&val.children===undefined){ |
| | | console.log(val); |
| | | this.returntree = val |
| | | this.typeselect=0 |
| | | this.selectVersion() |
| | | } |
| | | }, |
| | | async selectVersion() {//çæ¬ |
| | | let v=await this.$axios.get(this.$api.url.selectVersion, { |
| | |
| | | } |
| | | }).then(res => { |
| | | let arr = res.data; |
| | | console.log(arr); |
| | | for(var i=0;i<arr.length;i++){ |
| | | arr[i].id = "0" + i; |
| | | } |
| | | 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); |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | 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 { |
| | | |
| | | } |
| | | |
| | | .standard .contentTable{ |
| | | } |
| | |
| | | .thing .left { |
| | | width: 295px; |
| | | height: calc(100% - 32px); |
| | | overflow-y: auto; |
| | | border-right: 3px solid rgb(245, 247, 251); |
| | | padding: 16px; |
| | | } |