Fixiaobai
2023-09-14 fc89d746424577392fcec92cc8b8fea34006ce1c
src/components/view/standard.vue
@@ -13,15 +13,15 @@
    </div>
    <div class="thing">
      <div class="left">
        <el-row>
        <el-row :gutter="5">
          <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-button size="small" 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' }"
        <el-tree :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>
@@ -58,108 +58,135 @@
        <div class="contentTable" v-if="this.typeselect == 0">
          <technology @childData="getChildData"  :tableType="tableType" :tableData="tableData"></technology>
        </div>
        <div v-if="this.typeselect == 1">
        <div class="contentTable" v-if="this.typeselect == 1">
          <target @childData="getChildData" :tableType="tableType" :tableData="tableData"></target>
        </div>
        <div v-if="this.typeselect == 2">
        <div class="contentTable" v-if="this.typeselect == 2">
          <material @childData="getChildData" :tableType="tableType" :tableData="tableData"></material>
        </div>
        <div v-if="this.typeselect == 3">
        <div class="contentTable" v-if="this.typeselect == 3">
          <product @childData="getChildData" :tableType="tableType" :tableData="tableData"></product>
        </div>
      </div>
    </div>
    <div class="bom-add-model">
      <el-dialog title="BOM新增" :visible.sync="bomAddModelVisible" width="45%">
        <!-- 工艺路线 -->
        <div v-if="typeselect == 0">
      <!-- 工艺路线 -->
      <el-dialog title="BOM新增" :visible.sync="technologyVisible" width="45%">
          <el-form :model="technologyForm" :inline="true" label-position="right"
           ref="technologyForm" :rules="technologyRules" label-width="90px">
            <el-form-item label="工序:" prop="tefather">
              <el-select id="tefather" size="small"
              filterable allow-create default-first-option
              v-model="technologyForm.tefather" placeholder="请输入或选择工序">
                <el-option :value="item.father" :label="item.father" v-for="(item,index) in fatherList" :key="index"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="工艺名称:" prop="tename">
              <el-input id="tename" size="small" placeholder="请输入工艺名称"
              clearable v-model="technologyForm.tename"></el-input>
            </el-form-item>
            <el-form-item label="设备组:" prop="deviceGroup">
              <el-select id="deviceGroup" placeholder="请选择设备组" size="small"
              v-model="technologyForm.deviceGroup">
              <el-option :value="item.father"
              v-for="(item,index) in deviceList" :key="index" :label="item.father"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="生产定额:" prop="productionQuota">
              <el-input id="productionQuota" size="small" clearable v-model.number="technologyForm.productionQuota" placeholder="请输入生产定额" />
            </el-form-item>
           <el-row>
            <el-col :span="12">
              <el-form-item label="工序:" prop="tefather">
                <el-select size="small"
                filterable allow-create default-first-option
                v-model="technologyForm.tefather" placeholder="请输入或选择工序">
                  <el-option :value="item.father" :label="item.father" v-for="(item,index) in fatherList" :key="index"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="工艺名称:" prop="tename">
                <el-input size="small" placeholder="请输入工艺名称"
                clearable v-model="technologyForm.tename"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="12">
              <el-form-item label="设备组:" prop="deviceGroup">
                <el-select placeholder="请选择设备组" size="small"
                v-model="technologyForm.deviceGroup">
                <el-option :value="item.father"
                v-for="(item,index) in deviceList" :key="index" :label="item.father"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="生产定额:" prop="productionQuota">
                <el-input size="small" clearable v-model.number="technologyForm.productionQuota" placeholder="请输入生产定额" />
              </el-form-item>
            </el-col>
          </el-row>
          </el-form>
          <div style="width:100%;text-align: right;">
            <span slot="footer" class="dialog-footer" >
              <el-button type="primary" @click="confirmAdd('technologyForm')">确 定</el-button>
              <el-button @click="bomAddModelVisible = false">取 消</el-button>
            </span>
          </div>
        </div>
          <span slot="footer" class="dialog-footer" >
            <el-button type="primary" @click="confirmAdd('technologyForm')">确 定</el-button>
            <el-button @click="technologyVisible = false">取 消</el-button>
          </span>
      </el-dialog>
        <!-- 技术指标 -->
        <div v-if="typeselect == 1">
      <el-dialog title="BOM新增" :visible.sync="targetVisible" width="45%">
          <el-form :model="targetForm" :inline="true" label-position="right"
          :rules="targetRules" ref="targetForm" label-width="90px">
            <el-form-item label="工序:" prop="pfather">
              <el-select v-model="targetForm.pfather"
              @change="changeFather"
              style="width:200px;" placeholder="请选择工序">
                <el-option :value="item.name" :label="item.name" v-for="(item,index) in targetFormList" :key="index"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="工艺名称:" prop="technologyId">
              <el-select v-model="targetForm.technologyId"
              @change="changeTechnologyId"
              style="width:200px;" placeholder="请选择工艺名称">
                <el-option :value="item.id" :label="item.name" v-for="(item,index) in technologyIdList" :key="index"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="项目:" prop="father">
              <el-select v-model="targetForm.father"
              filterable allow-create default-first-option
              style="width:200px;" placeholder="请输入或选择项目">
                <el-option :value="item.father" :label="item.father" v-for="(item,index) in projectList" :key="index"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="指标名称:" prop="name">
              <el-input style="width:200px;" v-model="targetForm.name" placeholder="请输入指标名称"/>
            </el-form-item>
            <el-form-item label="单位:" prop="unit">
              <el-input style="width:200px;" v-model="targetForm.unit" placeholder="请输入单位"/>
            </el-form-item>
            <el-form-item label="内控值:" prop="internal">
              <el-input style="width:200px;" v-model="targetForm.internal" placeholder="请输入内控值"/>
            </el-form-item>
            <el-form-item label="标准值:" prop="required">
              <el-input style="width:200px;" v-model="targetForm.required" placeholder="请输入标准值"/>
            </el-form-item>
          <el-row>
            <el-col :span="12">
              <el-form-item label="工序:" prop="pfather">
                <el-select v-model="targetForm.pfather"
                @change="changeFather" size="small" placeholder="请选择工序">
                  <el-option :value="item.name" :label="item.name" v-for="(item,index) in targetFormList" :key="index"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="工艺名称:" prop="technologyId">
                <el-select v-model="targetForm.technologyId"
                @change="changeTechnologyId" size="small" placeholder="请选择工艺名称">
                  <el-option :value="item.id" :label="item.name" v-for="(item,index) in technologyIdList" :key="index"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="12">
              <el-form-item label="项目:" prop="father">
                <el-select v-model="targetForm.father"
                filterable allow-create default-first-option
                size="small" placeholder="请输入或选择项目">
                  <el-option :value="item.father" :label="item.father" v-for="(item,index) in projectList" :key="index"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="指标名称:" prop="name">
                <el-input size="small" v-model="targetForm.name" placeholder="请输入指标名称"/>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="12">
              <el-form-item label="单位:" prop="unit">
                <el-input size="small" v-model="targetForm.unit" placeholder="请输入单位"/>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="内控值:" prop="internal">
                <el-input size="small" v-model="targetForm.internal" placeholder="请输入内控值"/>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="12">
              <el-form-item label="标准值:" prop="required">
                <el-input size="small" v-model="targetForm.required" placeholder="请输入标准值"/>
              </el-form-item>
            </el-col>
            <el-col :span="12"></el-col>
          </el-row>
          </el-form>
          <div style="width:100%;text-align: right;">
            <span slot="footer" class="dialog-footer" >
              <el-button type="primary" @click="confirmAdd('targetForm')">确 定</el-button>
              <el-button @click="bomAddModelVisible = false">取 消</el-button>
            </span>
          </div>
        </div>
          <span slot="footer" class="dialog-footer" >
            <el-button type="primary" @click="confirmAdd('targetForm')">确 定</el-button>
            <el-button @click="targetVisible = false">取 消</el-button>
          </span>
      </el-dialog>
        <!-- 物料清单 -->
        <div v-if="typeselect == 2">
      <el-dialog title="BOM新增" :visible.sync="materialVisible" width="45%">
          <el-form :model="materialForm" label-position="right"
          :rules="materialRules" ref="materialForm" label-width="90px">
          <el-row :gutter="100">
            <el-col :span="12">
              <el-form-item label="工序:" prop="mfather">
                <el-select placeholder="请选择工序" @change="changeMName"
                  style="width:100%;" v-model="materialForm.mfather">
                  style="width:100%;" v-model="materialForm.mfather" size="small">
                  <el-option v-for="(item,index) in materialFormList" :key="index"
                  :label="item.name" :value="item.name" ></el-option>
                  </el-select>              
@@ -168,7 +195,7 @@
              <el-col :span="12">
              <el-form-item label="工艺名称:" prop="mtechnologyId">
                <el-select placeholder="请选择工艺名称" style="width:100%;" 
                v-model="materialForm.mtechnologyId">
                v-model="materialForm.mtechnologyId" size="small">
                <el-option v-for="(item,index) in mIdList" :key="index" 
                :value="item.id" :label="item.name"></el-option>
                </el-select>            
@@ -180,13 +207,12 @@
              <el-form-item label="材料信息" style="font-weight: bold;"></el-form-item>
            </el-col>
            <el-col :span="12" style="text-align: right;">
              <el-button size="mini" @click="addRowByMaterial">添加行</el-button>
              <el-button size="small" @click="addRowByMaterial">添加行</el-button>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="24">
              <el-table :data="materialForm.tableList" border max-height="470"
              style="width:100%;text-align: left;margin: 0;padding: 0;"
              :cell-style="{height:'20px',textAlign:'left'}"
              :header-cell-style="{height:'20px'}">
                <el-table-column label="供应商名称">
@@ -229,69 +255,78 @@
            </el-col>
          </el-row>
          </el-form>
          <div style="width:100%;margin-top: 20px;margin-left:75%">
            <span slot="footer" class="dialog-footer" >
              <el-button type="primary" @click="confirmAdd('materialForm')">确 定</el-button>
              <el-button @click="bomAddModelVisible = false">取 消</el-button>
            </span>
          </div>
        </div>
          <span slot="footer" class="dialog-footer" >
            <el-button type="primary" @click="confirmAdd('materialForm')">确 定</el-button>
            <el-button @click="materialVisible = false">取 消</el-button>
          </span>
      </el-dialog>
        <!-- 生产工艺 -->
        <div v-if="typeselect == 3">
      <el-dialog title="BOM新增" :visible.sync="productVisible" width="45%">
          <el-form :model="productForm" :inline="true" label-position="right"
          :rules="productRules" ref="productForm" label-width="90px">
            <el-form-item label="工序:" prop="profather">
              <el-select v-model="productForm.profather"
              style="width:200px;" @change="changeProduct"
              placeholder="请选择工序">
                <el-option v-for="(item,index) in productFormList" :key="index"
                :value="item.name" :label="item.name"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="工艺名称:" prop="protechnologyId">
              <el-select placeholder="请选择工艺名称"
              style="width:200px;" @change="getProductDeviceList"
              v-model="productForm.protechnologyId">
              <el-option v-for="(item,index) in proIdList" :key="index"
                :value="item.id" :label="item.name"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="设备:" prop="device">
              <el-select placeholder="请选择设备"
              style="width:200px;"
              v-model="productForm.device">
              <el-option v-for="(item,index) in productDeviceList" :key="index"
                :value="item.device" :label="item.device"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="项目:" prop="productFather">
              <el-select placeholder="请选择项目"
              style="width:200px;" @change="changeProductFather"
              v-model="productForm.productFather">
              <el-option v-for="(item,index) in productProjectList" :key="index"
                :value="item.name" :label="item.name"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="指标:" prop="product">
              <el-select placeholder="请选择指标"
                style="width:200px;" @change="changeProProduct"
                v-model="productForm.product">
                <el-option v-for="(item,index) in proProductList" :key="index"
                :value="item.name" :label="item.name"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="单位:" prop="unit">
              <el-input style="width:200px;" disabled v-model="productForm.unit"/>
            </el-form-item>
            <el-row>
              <el-col :span="12">
                <el-form-item label="工序:" prop="profather">
                  <el-select v-model="productForm.profather"
                   @change="changeProduct" placeholder="请选择工序" size="small">
                    <el-option v-for="(item,index) in productFormList" :key="index"
                    :value="item.name" :label="item.name"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="工艺名称:" prop="protechnologyId">
                  <el-select placeholder="请选择工艺名称" @change="getProductDeviceList"
                  v-model="productForm.protechnologyId" size="small">
                  <el-option v-for="(item,index) in proIdList" :key="index"
                    :value="item.id" :label="item.name"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row>
              <el-col :span="12">
                <el-form-item label="设备:" prop="device">
                  <el-select placeholder="请选择设备" size="small"
                  v-model="productForm.device">
                  <el-option v-for="(item,index) in productDeviceList" :key="index"
                    :value="item.device" :label="item.device"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="项目:" prop="productFather">
                  <el-select placeholder="请选择项目" size="small"  @change="changeProductFather"
                  v-model="productForm.productFather">
                  <el-option v-for="(item,index) in productProjectList" :key="index"
                    :value="item.name" :label="item.name"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
            <el-row>
              <el-col :span="12">
                <el-form-item label="指标:" prop="product">
                  <el-select placeholder="请选择指标" size="small" @change="changeProProduct"
                    v-model="productForm.product">
                    <el-option v-for="(item,index) in proProductList" :key="index"
                    :value="item.name" :label="item.name"></el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item label="单位:" prop="unit">
                  <el-input style="width:100%" size="small" disabled v-model="productForm.unit"/>
                </el-form-item>
              </el-col>
            </el-row>
          </el-form>
          <div style="width:100%;text-align: right;">
              <span slot="footer" class="dialog-footer" >
                <el-button type="primary" @click="confirmAdd('productForm')">确 定</el-button>
                <el-button @click="bomAddModelVisible = false">取 消</el-button>
              </span>
            </div>
          </div>
          <span slot="footer" class="dialog-footer" >
            <el-button type="primary" @click="confirmAdd('productForm')">确 定</el-button>
            <el-button @click="productVisible = false">取 消</el-button>
          </span>
      </el-dialog>
      <!-- 左侧点击+按钮 -->
      <el-dialog title="BOM新增" :visible.sync="bomLeftAdd" width="29%">
        <el-form ref="leftAdd" :model="leftAdd">
@@ -357,7 +392,6 @@
      //子组件传的id列表
      childIds:[],
      //工序列表
      technologyIdList:[],
      fatherList:[],
      deviceList:[],
      technologyForm:{
@@ -374,6 +408,7 @@
      },
      //技术指标
      targetFormList:[],
      technologyIdList:[],
      projectList:[],
      targetForm:{
        pfather:'',
@@ -437,7 +472,10 @@
      searchName: "",// 查询条件-名称
      checkTreeNode: {},// 点击选中树节点
      tableData: [],
      bomAddModelVisible: false,// 控制bom新增模态框是否显示
      technologyVisible: false,// 控制工艺路线新增模态框是否显示
      targetVisible: false,// 控制技术指标新增模态框是否显示
      materialVisible: false,// 控制物料清单新增模态框是否显示
      productVisible: false,// 控制生产工艺新增模态框是否显示
      bomLeftAdd: false,
      bomRightUp: false,
      bomRightDl: false,
@@ -687,16 +725,27 @@
      }).catch(error=>{
        this.$message.error(error.message);
      })
      this.bomAddModelVisible = false;
      this.technologyVisible = false;
      this.targetVisible = false;
      this.materialVisible = false;
      this.productVisible = false;
    },
    clearBomAddModel(){
      if(this.typeselect == 0){
        this.deviceList=[];
        this.$refs["technologyForm"].resetFields();
      }else if(this.typeselect == 1){
        this.technologyIdList = [];
        this.projectList = [];
        this.$refs["targetForm"].resetFields();
      }else if(this.typeselect == 2){
        this.mIdList = [];
        this.$refs["materialForm"].resetFields();
      }else{
        this.productDeviceList=[];
        this.proIdList=[];
        this.productProjectList=[];
        this.proProductList=[];
        this.$refs["productForm"].resetFields();
      }
    },
@@ -826,12 +875,20 @@
      })
    },
    showBomAddModel(){
      this.getFatherList();
      this.getDeviceList();
      this.getTargetFormList();
      this.getMaterialFormList();
      this.getProductFormList();
      this.bomAddModelVisible = true
      if(this.typeselect == 0){
        this.getFatherList();
        this.getDeviceList();
        this.technologyVisible = true
      }else if(this.typeselect == 1){
        this.getTargetFormList();
        this.targetVisible = true
      }else if(this.typeselect == 2){
        this.getMaterialFormList();
        this.materialVisible = true
      }else{
        this.getProductFormList();
        this.productVisible = true
      }
    },
    startLeftAdd(){
      
@@ -906,9 +963,7 @@
    },
    handleNodeClick(val) {//树的值
      if(val.code==='[5]'&&val.children===undefined){
        console.log(val);
        this.returntree = val
        this.typeselect=0
        this.selectVersion()
      }
    },
@@ -927,7 +982,9 @@
        return this.verdata[0]
      })
      this.character=v
      this.version2="v"+v
      if(this.character != undefined){
        this.version2="v"+v
      }
      this.selectAll()
    },
    //右侧数据
@@ -942,12 +999,14 @@
        let arr = res.data;
        this.formatData(arr)
        this.tableData = arr;
        console.log("arr--",arr);
      })
    },
    formatData(data){
      let arr = data;
      for(var i=0;i<arr.length;i++){
            arr[i].rowId = Math.random();
            arr[i].indents = 1;
            if(arr[i].children != undefined){
              this.formatData(arr[i].children);
            }
@@ -1005,10 +1064,10 @@
      },
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
      return data.name.indexOf(value) !== -1;
    },
    remove(node, data) {
      this.$confirm("是否删除", "警告", {
      this.$confirm("是否删除", "提示", {
        type: "warning"
      }).then(res => {
        const parent = node.parent;
@@ -1060,6 +1119,9 @@
    }
  },
  watch:{
    search(val) {
        this.$refs.tree.filter(val);
    },
    leftAdd: {
    handler(newVal, oldVal) {
    if(this.isLeftAdd){
@@ -1100,37 +1162,42 @@
      }
    },
     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()
    },
    bomLeftAdd:{
      handler(newval,oldVal){
        if(newval){
        let treeOptions = JSON.parse(JSON.stringify(this.list));
        this.replaceProp(treeOptions)
        this.formTypeOptions=treeOptions
        this.restaurants=this.loadFatherType()
        }
      }
    },
    technologyVisible(newVal){
      if(!newVal){
        this.clearBomAddModel();
      }
    },
    targetVisible(newVal){
      if(!newVal){
        this.clearBomAddModel();
      }
    },
    materialVisible(newVal){
      if(!newVal){
        this.clearBomAddModel();
      }
    },
    productVisible(newVal){
      if(!newVal){
        this.clearBomAddModel();
      }
    }
  },
  bomAddModelVisible(newVal){
    if(!newVal){
      this.clearBomAddModel();
    }
  }
  }
}
</script>
<style scoped>
.standard .bom-add-model{
  width: 100%;
}
.standard .bom-add-model form{
  width: 90%;
  margin-left: 5%;
}
.standard .title .el-button {
  height: 32px;
@@ -1139,6 +1206,11 @@
  padding: 0 12px;
}
.standard .right .contentTable{
  width:98%;
  margin-left:1%;
}
.standard .title {
  margin-bottom: 10px;
  padding: 0 20px;