Fixiaobai
2023-09-11 2819fa5d3308e2e60864488cc588df5bb9cb1a13
	modified:   src/assets/api/controller.js
modified: src/components/view/standard.vue
已修改2个文件
246 ■■■■■ 文件已修改
src/assets/api/controller.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard.vue 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -6,6 +6,9 @@
    selectProductByMaterial: "product/selectTreeByMaterial", //根据物料查询项目表格
    selectTechnologyByMaterial: "technology/select",
    selectAll:"/material/selectAll",//右侧数据
    leftAddOneTwo: "/material/add",//左侧新增1,2级
    leftAddThree: "/standard/add",//左侧三级新增
    leftAddFour: "/specifications/add",//左侧四级新增
    // 技术管理-技术文件
    selectAllOrder: "/orders/selectAllOrder", //查询所有订单列表
    selectOrderById: "/orders/selectOrderById", //根据订单id查询订单详情
src/components/view/standard.vue
@@ -22,7 +22,7 @@
            <el-button  size="mini" icon="el-icon-plus" @click="bomLeftAdd=true"></el-button>
          </el-col>
        </el-row>
        <el-tree :data="list" ref="tree" default-expand-all :props="{ children: 'children', label: 'name' }"
        <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>
@@ -87,13 +87,25 @@
      <!-- 左侧点击+按钮 -->
      <el-dialog title="BOM新增" :visible.sync="bomLeftAdd" width="29%">
        <el-form ref="leftAdd" :model="leftAdd">
            <el-form-item label="类型">
              <el-cascader v-model="leftAdd.type" size="mini" style="width: 93%;" :options="formTypeOptions" :props="{ checkStrictly: true }" clearable></el-cascader>
            <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="bomLeftAdd = false">取 消</el-button>
          <el-button type="primary" @click="bomLeftAdd = false">确 定</el-button>
          <el-button @click="resetForm('leftAdd')">取 消</el-button>
          <el-button type="primary" @click="submitForm('leftAdd')">确 定</el-button>
        </span>
      </el-dialog>
            <!-- 右上侧点击修改按钮 -->
@@ -112,7 +124,7 @@
            删除
        </el-form>
        <span slot="footer" class="dialog-footer">
          <el-button @click="bomRightDl = false">取 消</el-button>
          <el-button @click="bomRightDl=false">取 消</el-button>
          <el-button type="primary" @click="bomRightDl = false">确 定</el-button>
        </span>
      </el-dialog>
@@ -148,7 +160,7 @@
      },
      version: {},
      leftAdd:{
        type: null,
        type: [],
        father: null,
        standard: null,
        name: null,
@@ -156,7 +168,11 @@
      },
      VER: {},
      verdata: {},
      character: 0
      character: 0,
      restaurants: [],
      bomName:[],
      bomStandard:[],
      isLeftAdd: true
    }
  },
  // watch: {
@@ -173,9 +189,148 @@
    this.selectVersion()
  },
  methods: {
    startLeftAdd(){
    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]'
@@ -212,8 +367,12 @@
      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, {
@@ -296,7 +455,6 @@
      })
    },
    getDefault(arr, index) {
      console.log(arr);
            for (const item of arr) {
                if (item.children && item.children.length > 0) {
                    // 有子节点
@@ -347,29 +505,71 @@
          break;
      }
    },
    // 递归更改添加级联所需属性
    replaceProp(arr){
      for (let index = 0; index < arr.length; index++) {
        let element = arr[index];
        element.label=element.name
        element.value=element.name
        // if()
        if(element.children!=undefined){
          if(element.code==='[4]'){
            delete element['children']
            continue
          }
          this.replaceProp(element.children)
        }
      }
    }
  },
  watch:{
    leftAdd: {
      handler(newVal, oldVal) {
      console.log("新的",newVal);
      console.log("旧的",oldVal);
      },
    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));
       console.log(treeOptions);
       this.replaceProp(treeOptions)
             this.formTypeOptions=treeOptions
       this.restaurants=this.loadFatherType()
      }
    }
  }
@@ -379,7 +579,9 @@
<style scoped>
.standard {}
.standard {
}
.standard .contentTable{
}
@@ -410,6 +612,7 @@
.thing .left {
  width: 295px;
  height: calc(100% - 32px);
  overflow-y: auto;
  border-right: 3px solid rgb(245, 247, 251);
  padding: 16px;
}