Fixiaobai
2023-09-20 039d01c3ee6217e18ef3bcaec263fd2ad59e6f68
src/components/view/standard-table/technology.vue
@@ -1,7 +1,225 @@
<template>
  <div class="standard">
    <div style="width: 100%;height: 68vh;overflow-x: auto;">
          <el-table :data="tableData"  row-key="rowId" border height="calc(90vh - 200px)"
          @select-all="selectAll" @select="selectTr" ref="multipleTable"
          :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' }">
            <el-table-column type="selection" width="55">
            </el-table-column>
            <el-table-column type="index" width="60" label="序号" :resizable="false">
            </el-table-column>
            <el-table-column prop="father" label="工序" width="200" :resizable="false">
              <template slot-scope="scope">
                    <el-tag class="tag" v-if="scope.row.children" type="primary">01</el-tag>
                    <span style="color: black">
                      {{ scope.row.father }}
                    </span>
            </template>
            </el-table-column>
            <el-table-column label="工艺名称" width="200" :resizable="false">
              <template slot-scope="scope">
                <el-tag class="tag" type="success" v-if="!scope.row.children">02</el-tag>
                <span style="color: black">{{ scope.row.name  }}</span>
              </template>
            </el-table-column>
            <el-table-column prop="dg" label="设备组" width="200" :resizable="false">
              <template slot-scope="scope">
                <div class="showDiv">
                  <span>{{scope.row.dg}}</span>
                  <div @click="showDialog(scope.row)">选择</div>
                </div>
              </template>
            </el-table-column>
            <el-table-column prop="pq" label="生产定额(个/天)" :resizable="false">
              <template slot-scope="scope">
                  <el-input v-model="scope.row.pq"
                  v-if="scope.row.dg != null" size="small"
                  @blur="updatePq(scope.row)"
                  ></el-input>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <el-dialog
          title="选择设备组"
          :visible.sync="deviceGroupDialog"
          width="30%">
          <el-form :model="formData">
            <el-form-item prop="deviceGroup" label="设备组:"
            :rules="{required:true,message:'设备组不能为空',trigger:'change'}">
                <el-select placeholder="请选择设备组" size="small"
                v-model="formData.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>
          <span slot="footer" class="dialog-footer">
            <el-button type="primary" @click="confirmUpdate()">确 定</el-button>
            <el-button @click="deviceGroupDialog = false">取 消</el-button>
          </span>
        </el-dialog>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        deviceGroupDialog:false,
        formData:{
          deviceGroup:''
        },
        row:{},
        selects: [],
        deviceList:[],
        isAllSelect:false,
      }
    },
    props:['tableData','tableType'],
    created() {},
    mounted() {
    },
    methods: {
      //工艺路线--获取设备组列表
      getDeviceList(){
        this.$axios.get(this.$api.url.chooseDevice).then(res=>{
          this.deviceList = res.data;
        }).catch(error=>{
          this.$message.error(error.message);
        })
      },
      showDialog(row){
          this.getDeviceList();
          this.formData.deviceGroup = row.dg;
          this.row = row;
          this.deviceGroupDialog = true
      },
      confirmUpdate(){
        this.$axios.post(this.$api.url.writeDevice,{
          id : this.row.id,
          deviceGroup : this.formData.deviceGroup
        }).then(res=>{
          this.$emit("updateDevice",true);
          this.$message.success(res.message);
          this.deviceGroupDialog = false
        }).catch(error=>{
        })
      },
      // 表格树全部选中配置
      // 全选/取消选操作
      //选择某行
        selectTr(selection, row) {
        this.$set(row, "isChecked", !row.isChecked);
        this.$nextTick(() => {
          this.isAllSelect = row.isChecked;
          this.toggleSelect(row, row.isChecked, "tr");
        });
      },
      //递归子级
      toggleSelect(data, flag, type) {
        if (type === "all") {
          if (data.length > 0) {
            data.forEach((item) => {
              this.toggleSelection(item, flag);
              if (item.children && item.children.length > 0) {
                this.toggleSelect(item.children, flag, type);
              }
            });
          }
        } else {
          if (data.children && data.children.length > 0) {
            data.children.forEach((item) => {
              item.isChecked = !item.isChecked;
              this.$refs.multipleTable.toggleRowSelection(item, flag);
              this.toggleSelect(item, flag, type);
            });
          }
        }
      },
      //改变选中
      toggleSelection(row, flag) {
        this.$set(row, "isChecked", flag);
        this.$nextTick(() => {
          if (flag) {
            this.$refs.multipleTable.toggleRowSelection(row, flag);
          } else {
            this.$refs.multipleTable.clearSelection();
          }
        });
      },
      selectAll(val) {
        this.isAllSelect = !this.isAllSelect;
        let data = this.tableData;
        this.toggleSelect(data, this.isAllSelect, "all");
      },
      handleSelectionChange(val) {
        this.deleteList = [];
        val.forEach((v) => {
          this.searchIdFun(v);
        });
        this.$emit("childData",this.deleteList);
      },
      //递归查找选中数据id
      searchIdFun(data){
        let obj = data;
        if(obj.children != undefined){
          this.searchIdFun(obj.children);
        }else{
          this.deleteList.push(obj.id);
        }
      },
      // 表格树全部选中配置  结束
      updatePq(row){
        this.$axios.post(this.$api.url.technologyWrite,{
            id : row.id,
            productionQuota : row.pq
        }).then(res=>{
          this.$message.success(res.message);
        }).catch(error=>{
          this.$message.error(error.message);
        })
      },
    }
  }
</script>
<style scoped>
  .standard {
    width: 100%;
    height: 100%;
  }
  .tag{
      line-height:24px;
      text-align:center;
      width:36px;
      height:24px;
      border-radius:12px;
    }
    .tag:nth-child(1){
      margin-left:20px;
    }
  .standard .showDiv{
    cursor: pointer;
  }
  .standard .showDiv div{
    color:#407ab9;
    display: none;
  }
  .showDiv span{
    cursor: pointer;
    display: block;
    width: 100%;
  }
  .showDiv:hover span{
    display: none;
  }
  .showDiv:hover div{
    display: block;
  }
</style>
<style>
@@ -30,78 +248,14 @@
    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){
  } */
  /* .standard .el-table .el-table__row:not([class*="el-table__row--level-"]) td:nth-child(3){
    padding-left: 23px !important;
   }
   } */
</style>
<template>
  <div class="standard">
    <el-table  :data="tableData" border style="width: 100%"  row-key="id"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
      <el-table-column type="selection" width="50">
      </el-table-column>
      <template v-if="tableType==1">
        <el-table-column type="index" label="序号" width="70">
        <template slot-scope="scope">
                {{ scope.row.index }}
        </template>
      </el-table-column>
      <el-table-column prop="name" label="项目">
        <template slot-scope="scope">
                <el-tag size="mini" :type="scope.row.index? '':'success'" :style="{borderRadius: '40%',marginRight: '12px'}">{{ scope.row.index? '01':'02'}}</el-tag>
                {{scope.row.name}}
        </template>
      </el-table-column>
      <el-table-column prop="unit" label="单位">
      </el-table-column>
      <el-table-column prop="required" label="标准值">
      </el-table-column>
      <el-table-column prop="internal" label="内控值">
      </el-table-column>
      </template>
      <template v-else>
        <el-table-column prop="name" label="工艺名称">
        </el-table-column>
        <el-table-column prop="device_group" label="设备组">
        </el-table-column>
        <el-table-column  label="匹配设备">
          <template>
            <el-button type="text">选择</el-button>
          </template>
        </el-table-column>
        <el-table-column prop="quota" label="工时定额">
        </el-table-column>
      </template>
    </el-table>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        selects: []
      }
    },
    props:['tableData','tableType'],
    created() {
      console.log(this.tableData,this.tableType)
    },
    mounted() {
    },
    methods: {
      handleSelectionChange(val) {
        this.selects = val;
      }
    }
  }
</script>