XiaoRuby
2023-09-11 e55486041c7d948f0c9ca6d77d568a5c26f13267
Merge remote-tracking branch 'origin/master'
已修改4个文件
已添加2个文件
494 ■■■■■ 文件已修改
src/assets/api/controller.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard-box/bomClickAdd.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard-table/material.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard-table/target.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard-table/technology.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/standard.vue 328 ●●●●● 补丁 | 查看 | 原始文档 | 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-box/bomClickAdd.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<template>
    <div>
        1
    </div>
</template>
<script>
export default {
}
</script>
<style>
</style>
src/components/view/standard-table/material.vue
@@ -1,8 +1,8 @@
<template>
    <div class="standard">
      <div>
            <el-table :data="tableData" style="width: 100%;margin-bottom: 20px;" row-key="id" border
              @selection-change="handleSelectionChange" default-expand-all
            <el-table :data="tableData" max-height="675" style="width: 100%;margin-bottom: 20px;" row-key="rowId" border
            @selection-change="handleSelectionChange" default-expand-all
              :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
              <el-table-column type="selection" width="55">
              </el-table-column>
@@ -10,21 +10,29 @@
              </el-table-column>
              <el-table-column prop="father" label="工序" sortable width="200px">
                <template slot-scope="scope">
                      <el-tag v-if="scope.row.children" type="primary">01</el-tag>
                      <span style="color: #000000">
                        {{ scope.row.father }}
                      </span>
                  <el-tag v-if="scope.row.father != null" type="primary">01</el-tag>
                  <span style="color: #000000">
                    {{ scope.row.father }}
                  </span>
              </template>
              </el-table-column>
              <el-table-column prop="name" sortable label="工艺名称">
              <el-table-column prop="tname" sortable label="工艺名称">
                <template slot-scope="scope">
                          <el-tag type="success" v-if="!scope.row.children">02</el-tag>
                          <span style="color: black">
                            {{ scope.row.name  }}
                          </span>
                          </template>
                  <el-tag type="success" v-if="scope.row.tname != null">02</el-tag>
                  <span style="color: black">
                    {{ scope.row.tname  }}
                  </span>
                  </template>
              </el-table-column>
              <el-table-column prop="mname" label="材料名称">
                <template slot-scope="scope">
                  <el-tag type="info" color="#faf2ff" v-if="scope.row.mname != null">
                    <span style="color: #e1affb">03</span>
                  </el-tag>
                  <span>
                    {{scope.row.mname}}
                  </span>
                </template>
              </el-table-column>
              <el-table-column prop="specifications" label="规格">
              </el-table-column>
@@ -41,6 +49,7 @@
    export default {
      data() {
        return {
          hasChildren:true,
          selects: []
        }
      },
src/components/view/standard-table/target.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
<template>
    <div class="standard">
      <div>
        <el-table ref="table" :data="tableData" row-key="rowId" border max-height="675"
        @selection-change="handleSelectionChange" default-expand-all
        :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column type="index" width="60" label="序号"></el-table-column>
        <el-table-column prop="tfather" label="工序">
            <template slot-scope="scope">
                <el-tag type="primay" v-if="scope.row.tfather != null">01</el-tag>
                <span>{{scope.row.tfather}}</span>
            </template>
        </el-table-column>
        <el-table-column prop="tname" label="工艺名称">
            <template slot-scope="scope">
                <el-tag type="success" v-if="scope.row.tname != null">02</el-tag>
                <span>{{scope.row.tname}}</span>
            </template>
        </el-table-column>
        <el-table-column prop="pname" label="指标名称">
            <template slot-scope="scope">
                <el-tag type="info" color="#faf2ff" v-if="scope.row.pname != null">
                    <span style="color: #e1affb">03</span>
                </el-tag>
                <span>{{scope.row.pname}}</span>
            </template>
        </el-table-column>
        <el-table-column prop="unit" label="单位"></el-table-column>
        <el-table-column prop="internal" label="内控值"></el-table-column>
        <el-table-column prop="required" label="标准值"></el-table-column>
        </el-table>
      </div>
    </div>
  </template>
  <script>
    export default {
      data() {
        return {
          selects: [],
        }
      },
      props:['tableData','tableType'],
      created() {},
      mounted() {},
      methods: {
        handleSelectionChange(val) {
          this.selects = val;
        },
        aaaa(){
            console.log("aaaaa----",this.targetData);
        }
      }
    }
  </script>
  <style scoped>
  .expand-button {
  cursor: pointer;
  color: #1890ff;
}
    .standard {
      width: 100%;
      height: 100%;
    }
  </style>
  <style>
    .standard * {
      font-size: 14px;
    }
    .standard .has-gutter .el-table__cell {
      background-color: #F0F1F5 !important;
      color: #333;
    }
    .standard .has-gutter .el-table__cell .cell {
      font-size: 16px;
      font-weight: 500;
    }
    .standard .cell {
      color: #333;
      padding-left: 17px !important;
    }
    .standard {
      width: 100%;
      height: 100%;
      overflow: auto;
    }
    /* .standard .el-table__body-wrapper {
      height: 100%;
    } */
    /* .standard .el-table__body {
      height: 100%;
    } */
    .standard .el-table .el-table__row:not([class*="el-table__row--level-"]) td:nth-child(3){
      padding-left: 23px !important;
     }
  </style>
src/components/view/standard-table/technology.vue
@@ -1,7 +1,7 @@
<template>
  <div class="standard">
    <div>
          <el-table :data="tableData" height="800" row-key="id" border
          <el-table :data="tableData" max-height="675" row-key="rowId" border
          :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'left'}"
            @selection-change="handleSelectionChange" default-expand-all
            :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
@@ -89,13 +89,13 @@
    overflow: auto;
  }
  .standard .el-table__body-wrapper {
  /* .standard .el-table__body-wrapper {
    height: 100%;
  }
  } */
  .standard .el-table__body {
  /* .standard .el-table__body {
    height: 100%;
  }
  } */
  .standard .el-table .el-table__row:not([class*="el-table__row--level-"]) td:nth-child(3){
    padding-left: 23px !important;
   }
src/components/view/standard.vue
@@ -7,16 +7,22 @@
          <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>
@@ -55,7 +61,9 @@
        <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>
@@ -67,12 +75,57 @@
    <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>
@@ -83,8 +136,9 @@
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 {
@@ -96,14 +150,29 @@
      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: {
@@ -120,6 +189,148 @@
    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]'
@@ -152,12 +363,16 @@
      // 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, {
@@ -187,12 +402,18 @@
        }
      }).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);
@@ -283,14 +504,84 @@
          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{
}
@@ -321,6 +612,7 @@
.thing .left {
  width: 295px;
  height: calc(100% - 32px);
  overflow-y: auto;
  border-right: 3px solid rgb(245, 247, 251);
  padding: 16px;
}