licp
2024-06-05 142ba3ed00220dcadf2a94e59664d5f1f027dbf4
src/components/view/b2-standard.vue
@@ -1,818 +1,1427 @@
<style scoped>
   .standard {
      padding: 20px 0;
      display: flex;
   }
  .standard {
    padding: 10px 0;
    display: flex;
  }
   .left {
      width: 270px;
      height: calc(100% - 40px - 30px);
      background-color: white;
      padding: 15px;
   }
  .left {
    width: 270px;
    height: calc(100% - 40px - 10px);
    background-color: white;
    padding: 15px;
  }
   .custom-tree-node {
      width: 100%;
      line-height: 32px;
   }
  .custom-tree-node {
    width: 100%;
    line-height: 32px;
  }
   .custom-tree-node .el-icon-delete {
      color: #3A7BFA;
      opacity: 0;
      font-size: 18px;
   }
  .custom-tree-node .el-icon-delete {
    color: #3A7BFA;
    opacity: 0;
    font-size: 18px;
  }
   .custom-tree-node:hover .el-icon-delete {
      opacity: 1;
   }
  .custom-tree-node:hover .el-icon-delete {
    opacity: 1;
  }
   .node_i {
      color: orange;
      font-size: 18px;
   }
  .node_i {
    color: orange;
    font-size: 18px;
  }
   .right {
      margin-left: 5px;
      width: calc(100% - 305px);
      height: calc(100% - 40px);
   }
  .right {
    margin-left: 5px;
    width: calc(100% - 305px);
    height: calc(100% - 40px);
  }
   .right .title {
      height: 50px;
      line-height: 50px;
      padding: 0 10px;
      background-color: white;
   }
  .right .title {
    height: 34px;
    line-height: 34px;
    padding: 0 10px;
    background-color: white;
  }
   .standard_table {
      border-top: 1px solid #ebeef5;
      background-color: white;
   }
  .standard_table {
    border-top: 1px solid #ebeef5;
    background-color: white;
  }
   .product_table {
      border-top: 1px solid #ebeef5;
      height: calc(100% - 275px);
      margin-top: 5px;
      background-color: white;
      user-select: none;
   }
  .product_table {
    border-top: 1px solid #ebeef5;
    height: calc(100% - 235px);
    margin-top: 5px;
    background-color: white;
    user-select: none;
  }
   .product_table .el-table {
      height: 100%;
   }
  .sort{
  .product_table .el-table {
    height: calc(100% - 35px) !important;
  }
  .sort {
    width: 80% !important;
    overflow: hidden;
  }
  >>>.el-table__body-wrapper {
    height: calc(100% - 46px) !important;
  }
  >>>.header-class {
    height: 40px !important;
  }
  >>>.header-class th.el-table__cell>.cell {
    line-height: 20px !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }
  >>>.el-table__row {
    height: 35px !important;
  }
  .search {
    height: 20%;
    border-bottom: 1px solid #ebeef5;
    margin-bottom: 16px;
    display: flex;
    align-items: center;
    box-sizing: border-box;
    padding-bottom: 10px;
  }
  .search-item {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
  }
  .search-item .el-row {
    display: flex;
    align-items: center;
  }
  .search-item .el-col {
    margin-left: 0;
  }
  .more-edit .dialog-footer {
    position: absolute;
    top: 15px;
    right: 70px;
  }
  >>>.is-disabled .el-textarea__inner {
    background: rgba(0, 0, 0, 0.05) !important;
  }
</style>
<style>
   .standard .el-tree-node__content {
      height: 32px;
      font-size: 14px;
      border-radius: 2px;
   }
  .standard .el-tree-node__content {
    height: 32px;
    font-size: 14px;
    border-radius: 2px;
  }
   .standard .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
      color: #3A7BFA;
   }
  .standard .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
    color: #3A7BFA;
  }
   .standard .has-gutter .el-table__cell .cell {
      line-height: 38px;
      background-color: #f8f8f8;
   }
  .standard .has-gutter .el-table__cell .cell {
    line-height: 34px;
    background-color: #f8f8f8;
  }
   .standard .has-gutter .el-table__cell {
      background-color: #fafafa !important;
   }
  .standard .has-gutter .el-table__cell {
    background-color: #fafafa !important;
  }
   .standard .standard_table .el-table__row .cell {
      font-size: 14px;
   }
  .standard .standard_table .el-table__row .cell {
    font-size: 14px;
  }
   .standard .el-table .warning-row .cell {
      color: #bababa;
   }
  .standard .el-table .warning-row .cell {
    color: #bababa;
  }
  .el-table-filter__list{
    max-height: 400px;
    overflow-y: auto;
  }
</style>
<template>
   <div class="standard">
      <div class="left">
         <el-row>
            <el-col :span="20">
               <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small"
                  style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input>
            </el-col>
            <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower">
               <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addDia = true"></el-button>
            </el-col>
         </el-row>
         <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label"
            :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
            @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false"
            :default-expanded-keys="expandedKeys"
        style="max-height: 500px;overflow-y: scroll;scrollbar-width: none;">
            <div class="custom-tree-node" slot-scope="{ node, data }">
               <el-row style="width: 100%;">
                  <el-col :span="21" :class="{sort:node.level>3}">
                     <span><i
                           :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
                        {{ data.code }} {{ data.label }}</span>
                  </el-col>
                  <el-col :span="2" style="text-align: right;" v-if="delStandardTree">
                     <el-button type="text" size="mini" @click.stop="remove(node, data)">
                        <i class="el-icon-delete"></i>
                     </el-button>
                  </el-col>
               </el-row>
            </div>
         </el-tree>
      </div>
      <div class="right">
         <el-row class="title">
            <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col>
            <!-- <el-col :span="selectTree==''?24:14" style="text-align: right;" v-if="selectTree!=''"> -->
               <!-- <el-button size="small" type="primary" @click="addStandardDia = true"
                  v-if="addStandardMethod">新增标准</el-button>
               <el-button size="small" type="primary" @click="addProductDia = true" v-if="addStandardProduct">新增项目</el-button>
               <el-button size="small" @click="delStandardProductByIds" v-if="delStandardProduct">
                  <i class="el-icon-delete" style="color: #3A7BFA;"></i>
                  <span style="color: #3A7BFA;">删除</span>
               </el-button> -->
            <!-- </el-col> -->
         </el-row>
         <el-row class="standard_table" v-loading="tableLoad">
            <el-table class="el-table" :data="standardList" style="width: 100%;" height="220px" tooltip-effect="dark"
               highlight-current-row @row-click="rowClick" ref="standard">
               <el-table-column prop="code" label="标准编号" show-overflow-tooltip>
                  <template slot-scope="scope">
                     <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span>
                  </template>
               </el-table-column>
               <el-table-column prop="name" label="标准名称" show-overflow-tooltip></el-table-column>
               <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
               <el-table-column prop="createUserName" label="创建人"></el-table-column>
               <el-table-column prop="createTime" label="创建时间" width="250px"></el-table-column>
               <!-- <el-table-column label="操作" width="100" align="center" v-if="delStandardMethod">
  <div class="standard">
    <div class="left">
      <el-row>
        <el-col :span="20">
          <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small"
            style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input>
        </el-col>
        <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower">
          <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addDia = true"></el-button>
        </el-col>
      </el-row>
      <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label"
        :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
        @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false"
        :default-expanded-keys="expandedKeys"
        style="height:calc(100% - 30px);overflow-y: scroll;scrollbar-width: none;">
        <div class="custom-tree-node" slot-scope="{ node, data }">
          <el-row style="width: 100%;">
            <el-col :span="21" :class="{sort:node.level>3}" :title="data.label">
              <span><i
                  :class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i>
                {{ data.code }} {{ data.label }}</span>
            </el-col>
            <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level==5">
              <el-button type="text" size="mini" @click.stop="remove(node, data)">
                <i class="el-icon-delete"></i>
              </el-button>
            </el-col>
          </el-row>
        </div>
      </el-tree>
    </div>
    <div class="right">
      <el-row class="title" style="width: 100%;">
        <el-col :span="20" style="font-size: 14px;color: #999;">{{selectTree}}</el-col>
        <el-button size="small" type="primary" @click="handleMore" style="position: absolute;right: 0px;top: 1px;"
          v-if="upStandardProduct">批量编辑</el-button>
      </el-row>
      <el-row class="standard_table" v-loading="tableLoad">
        <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220"
          tooltip-effect="dark" highlight-current-row @row-click="rowClick" ref="standard"
          header-row-class-name="header-class">
          <el-table-column prop="code" label="标准编号" show-overflow-tooltip width="200">
            <template slot-scope="scope">
              <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="name" label="标准名称" show-overflow-tooltip></el-table-column>
          <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
          <!-- <el-table-column prop="createUserName" label="创建人"></el-table-column>
          <el-table-column prop="createTime" label="创建时间" width="250px"></el-table-column> -->
          <!-- <el-table-column label="操作" width="100" align="center" v-if="delStandardMethod">
                  <template slot-scope="scope">
                     <el-button type="text" size="small" @click="delStandardMethodByFLSSM(scope.row.id)">删除</el-button>
                  </template>
               </el-table-column> -->
            </el-table>
         </el-row>
         <el-row class="product_table" v-loading="tableLoad2">
            <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe
               :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
               @select="upProductSelect">
               <el-table-column type="selection" width="65">
               </el-table-column>
               <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
               <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> -->
               <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
                  show-overflow-tooltip></el-table-column>
               <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
               <el-table-column prop="ask" label="要求值" min-width="200px">
                  <template slot-scope="scope">
                     <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable
                        @change="(value)=>upStandardProductList(value,scope.row.id)" v-if="upStandardProduct" type="textarea"
                        :autosize="{ minRows: 1, maxRows: 3}"></el-input>
                     <span v-else>{{scope.row.ask}}</span>
                  </template>
               </el-table-column>
               <el-table-column prop="tell" label="要求描述" min-width="220px">
                  <template slot-scope="scope">
                     <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable
                        @change="(value)=>upStandardProductListOfTell(value,scope.row.id)" v-if="upStandardProduct"
                        type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input>
                     <span v-else>{{scope.row.ask}}</span>
                  </template>
               </el-table-column>
               <el-table-column prop="method" label="试验方法" width="200">
        </el-table>
      </el-row>
      <el-row class="product_table" v-loading="tableLoad2">
        <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe
          :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
          @select="upProductSelect" @select-all="handleAll" class="productTable" header-row-class-name="header-class">
          <el-table-column type="selection" width="50">
          </el-table-column>
          <el-table-column prop="model" label="型号" min-width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
          <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> -->
          <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
            show-overflow-tooltip></el-table-column>
          <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
          <el-table-column prop="ask" label="要求值" min-width="200px">
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable
                @change="(value)=>upStandardProductList(value,scope.row.id)" v-if="upStandardProduct" type="textarea"
                :autosize="{ minRows: 1, maxRows: 3}"></el-input>
              <span v-else>{{scope.row.ask}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="tell" label="要求描述" min-width="220px">
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable
                @change="(value)=>upStandardProductListOfTell(value,scope.row.id)" v-if="upStandardProduct"
                type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input>
              <span v-else>{{scope.row.ask}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="method" label="试验方法" width="200">
            <template slot-scope="scope">
              <el-select v-model="scope.row.methodS" size="small" placeholder="试验方法"
               @change="(value)=>upStandardProductListOfMethodS(value,scope.row.id)" v-if="upStandardProduct">
                @change="(value)=>upStandardProductListOfMethodS(value,scope.row.id)" v-if="upStandardProduct">
                <el-option v-for="(a,i) in JSON.parse(scope.row.method)" :key="i" :label="a" :value="a"></el-option>
              </el-select>
              <span v-else>{{scope.row.methodS}}</span>
            </template>
          </el-table-column>
               <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="price" label="单价(元)" width="90" show-overflow-tooltip></el-table-column>
               <el-table-column prop="manHour" label="工时(H)" width="90" show-overflow-tooltip></el-table-column>
               <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column>
               <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
            </el-table>
         </el-row>
      </div>
      <el-dialog title="分类添加" :visible.sync="addDia" width="400px">
         <div class="body">
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  <span class="required-span">* </span>工厂:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-select v-model="addOb.factory" size="small" style="width: 100%;" clearable>
                     <el-option v-for="(a, ai) in factory" :key="ai" :value="a.value" :label="a.label"></el-option>
                  </el-select>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  <span class="required-span">* </span>实验室:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-select v-model="addOb.laboratory" size="small" style="width: 100%;" clearable>
                     <el-option v-for="(a, ai) in laboratory" :key="ai" :value="a.value" :label="a.label"></el-option>
                  </el-select>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  <span class="required-span">* </span>样品大类:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-select v-model="addOb.sampleType" size="small" style="width: 100%;" clearable>
                     <el-option v-for="(a, ai) in sampleType" :key="ai" :value="a.value" :label="a.label"></el-option>
                  </el-select>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  <span class="required-span">* </span>样品名称:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-input v-model="addOb.sample" placeholder="请输入样品名称" clearable size="small"></el-input>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  型号:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-input v-model="addOb.model" placeholder="请输入型号" clearable size="small"></el-input>
               </el-col>
            </el-row>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button @click="addDia = false">取 消</el-button>
            <el-button type="primary" @click="addStandardTree" :loading="addLoad">确 定</el-button>
         </span>
      </el-dialog>
      <el-dialog title="新增标准" :visible.sync="addStandardDia" width="400px">
         <div class="body">
            <el-row style="line-height: 50px;">
               <el-col :span="6" style="text-align: right;">
                  <span class="required-span">* </span>标准名称:
               </el-col>
               <el-col :span="16" :offset="1">
                  <el-select v-model="standardId" size="small" style="width: 100%;" clearable>
                     <el-option v-for="(a, ai) in standardEnum" :key="ai" :value="a.value" :label="a.label"></el-option>
                  </el-select>
               </el-col>
            </el-row>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button @click="addStandardDia = false">取 消</el-button>
            <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">确 定</el-button>
         </span>
      </el-dialog>
      <el-dialog title="新增项目" :visible.sync="addProductDia" width="70%">
         <div class="body" style="height: 60vh;" v-if="addProductDia">
            <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" />
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button @click="addProductDia = false">取 消</el-button>
            <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button>
         </span>
      </el-dialog>
   </div>
          <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="price" label="单价(元)" width="120">
            <template slot-scope="scope">
              <el-input v-model="scope.row.price" size="small" placeholder="单价(元)"
                @change="(value)=>upStandardProductListOfPrice(value,scope.row.id)" v-if="upStandardProduct">
              </el-input>
              <span v-else>{{scope.row.price}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="manHour" label="工时系数" width="120">
            <template slot-scope="scope">
              <el-input v-model="scope.row.manHour" size="small" placeholder="单价(元)"
                @change="(value)=>upStandardProductListOfManHour(value,scope.row.id)" v-if="upStandardProduct">
              </el-input>
              <span v-else>{{scope.row.manHour}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
          <el-table-column prop="templateId" label="模板" width="200">
            <template slot-scope="scope">
              <el-select v-model="scope.row.templateId" size="small" filterable :disabled="!upStandardProduct"
                @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)">
                <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option>
              </el-select>
            </template>
          </el-table-column>
          <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
          <el-table-column prop="section" label="操作" width="120">
            <template slot-scope="scope">
              <el-button type="text" @click="sectionUp(scope.row)">区间设置</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination style="position: absolute;right: 16px;bottom: 1px;" @current-change="handleCurrentChange"
          :current-page="currentPage" layout="total, prev, pager, next, jumper" :page-size="50" :total="total">
        </el-pagination>
      </el-row>
    </div>
    <el-dialog title="分类添加" :visible.sync="addDia" width="400px">
      <div class="body">
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">工厂:</el-col>
          <el-col :span="16" :offset="1">
            <el-input size="small" readonly v-model="addOb.factory"></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">实验室:</el-col>
          <el-col :span="16" :offset="1">
            <el-input size="small" readonly v-model="addOb.laboratory"></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">样品大类:</el-col>
          <el-col :span="16" :offset="1">
            <el-input size="small" readonly v-model="addOb.sampleType"></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">样品名称:</el-col>
          <el-col :span="16" :offset="1">
            <el-input v-model="addOb.sample" readonly size="small"></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="6" style="text-align: right;">
            <span class="required-span">* </span>型号:
          </el-col>
          <el-col :span="16" :offset="1">
            <el-input v-model="addOb.model" placeholder="请输入型号" clearable size="small"></el-input>
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDia = false">取 消</el-button>
        <el-button type="primary" @click="addStandardTree" :loading="addLoad">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="批量编辑" :visible.sync="moreEdit" width="90%" class="more-edit">
      <div class="body" style="display: flex;flex-direction: column;height: 80vh;">
        <div class="search">
          <div class="search-item">
            <el-row style="width: 25%;margin-bottom: 16px;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                要求值:</el-col>
              <el-col :span="16">
                <el-input size="small" v-model="moreInfo.ask" clearable :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;margin-bottom: 16px;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                要求描述:</el-col>
              <el-col :span="16" style="display: flex;align-items: flex-start;height: 100%;">
                <el-input size="small" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}"
                  v-model="moreInfo.tell" :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;margin-bottom: 16px;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                试验方法:</el-col>
              <el-col :span="16">
                <el-select v-model="moreInfo.methodS" size="small" filterable style="width: 100%;"
                  :disabled="moreSelects.length==0">
                  <el-option v-for="(a, ai) in methodList" :key="ai" :label="a.label" :value="a.value"></el-option>
                </el-select>
              </el-col>
            </el-row>
            <el-row style="width: 25%;margin-bottom: 16px;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                单价(元):</el-col>
              <el-col :span="16">
                <el-input size="small" v-model="moreInfo.price" clearable :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                工时系数:</el-col>
              <el-col :span="16">
                <el-input size="small" v-model="moreInfo.manHour" clearable
                  :disabled="moreSelects.length==0"></el-input>
              </el-col>
            </el-row>
            <el-row style="width: 25%;">
              <el-col :span="6" style="text-align: right;">
                <!-- <span class="required-span">* </span> -->
                模板:</el-col>
              <el-col :span="16">
                <el-select v-model="moreInfo.templateId" size="small" filterable placeholder="模板" style="width: 100%;"
                  :disabled="moreSelects.length==0">
                  <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option>
                </el-select>
              </el-col>
            </el-row>
            <el-row style="width: 50%;">
              <el-col :span="23" style="display: flex;align-items: center;justify-content: end;">
                <el-button type="primary" size="small" @click="sectionUp(moreSelects)">设置区间</el-button>
                <el-button @click="moreEdit = false" size="small">取 消</el-button>
                <el-button type="primary" @click="subMoreEdit" :loading="moreEditLoad" size="small">保 存</el-button>
              </el-col>
            </el-row>
          </div>
        </div>
        <div style="flex: 1;overflow-y: auto;" v-loading="productTableLoading0">
          <el-table :data="productList0" ref="productTable0" style="width: 100%;" height="94%" tooltip-effect="dark"
            stripe :fit="true" border @select-all="handleSelectAll0" @select="handleSelectionChange0"
            header-row-class-name="header-class" :row-key="row=>row.id" @filter-change="filterHandler">
            <el-table-column type="selection" width="50">
            </el-table-column>
            <el-table-column prop="model" label="型号" min-width="100" show-overflow-tooltip></el-table-column>
            <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip :filters="filters0"
              :filter-multiple="false" column-key="inspectionItem" filter-placement="bottom-start"></el-table-column>
            <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip
              :filters="filters1" :filter-multiple="false" column-key="inspectionItemSubclass" filter-placement="bottom-start"></el-table-column>
            <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters"
              :filter-multiple="false" column-key="sonLaboratory" filter-placement="bottom-start"></el-table-column>
            <el-table-column prop="ask" label="要求值" min-width="200px"></el-table-column>
            <el-table-column prop="tell" label="要求描述" min-width="220px"></el-table-column>
            <el-table-column prop="methodS" label="试验方法" width="200"></el-table-column>
            <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
            <el-table-column prop="price" label="单价(元)" width="120"></el-table-column>
            <el-table-column prop="manHour" label="工时系数" width="120"></el-table-column>
            <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column>
            <el-table-column prop="templateId" label="模板" width="200">
              <template slot-scope="scope">
                {{ templateList.find(item => item.id == scope.row.templateId)?templateList.find(item => item.id == scope.row.templateId).name:'' }}
              </template>
            </el-table-column>
            <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column>
          </el-table>
          <el-pagination style="position: absolute;right: 16px;bottom: 4px;" @current-change="handleCurrentChange0"
            :current-page="currentPage0" layout="total, prev, pager, next, jumper" :page-size="100" :total="total0">
          </el-pagination>
        </div>
      </div>
    </el-dialog>
    <el-dialog title="区间设置" :visible.sync="sectionUpDia" width="70%">
      <div class="body" style="padding: 5px 0;">
        <el-table :data="sectionList" border style="width: 100%" height="350px">
          <el-table-column type="index" label="序号" width="70" align="center">
          </el-table-column>
          <el-table-column label="区间" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.thing" clearable placeholder="区间"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="要求值" align="center">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.ask" clearable placeholder="要求值"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="要求描述" align="center">
            <template slot-scope="scope">
              <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable type="textarea"
                :autosize="{ minRows: 1, maxRows: 2}"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="单价" align="center" width="120">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.price" clearable placeholder="单价"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="工时系数" align="center" width="120">
            <template slot-scope="scope">
              <el-input size="small" v-model="scope.row.manHour" clearable placeholder="工时系数"></el-input>
            </template>
          </el-table-column>
          <el-table-column label="操作" width="70" align="center">
            <template slot-scope="scope">
              <el-button size="mini" type="danger" icon="el-icon-minus" circle
                @click="sectionList.splice(scope.$index, 1)"></el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="sectionUpDia = false">取 消</el-button>
        <el-button type="primary" @click="sectionLoadAdd" :loading="sectionLoad">保 存</el-button>
        <el-button type="primary" @click="sectionList.push({thing: ''})" icon="el-icon-plus"></el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
   import ValueTable from '../tool/value-table.vue'
   export default {
      components: {
         ValueTable
      },
      data() {
         return {
            search: null,
            list: [],
            selectTree: '',
            factory: [],
            addDia: false,
            addOb: {
               factory: null,
               laboratory: null,
               sampleType: null,
               sample: null,
               model: null
            },
            laboratory: [],
            addLoad: false,
            sampleType: [],
            sample: [],
            treeLoad: false,
            addPower: false,
            standardList: [],
            standardEnum: [],
            addStandardDia: false,
            standardId: null,
            addStandardMethod: true,
            addLoad2: false,
            productList: [],
            tableLoad: false,
            tableLoad2: false,
            upStandardProduct: false,
            delStandardMethod: false,
            selects: [],
            delStandardProduct: false,
            addProductDia: false,
            productId: null,
            addStandardProduct: false,
            addLoad3: false,
            productEnum: [],
            componentData: {
               entity: {
                  orderBy: {
                     field: 'id',
                     order: 'asc'
                  }
               },
               isIndex: true,
               showSelect: true,
               select: true,
               do: [],
               tagField: {
                  inspectionItemType: {
                     select: []
                  },
                  valueType: {
                     select: []
                  },
                  bsm: {
                     select: []
                  },
                  inspectionValueType: {
                     select: []
                  },
                  deviceGroup: {
                     select: []
                  }
               },
               selectField: {},
            },
            expandedKeys: []
         }
      },
      mounted() {
         this.getPower()
         this.selectEnumByCategoryForFactory()
         this.selectStandardTreeList()
         this.obtainItemParameterList()
         // this.selectEnumByCategoryForsampleType()
         this.selectTestObjectByName()
         this.selectStandardMethods()
         this.selectEnumByCategoryForDevice()
         this.selectEnumByCategory()
         this.selectEnumByCategoryForValue()
         this.selectEnumByCategoryForSpecial()
         this.selectEnumByCategoryForInspectionValueType()
      },
      methods: {
         filterNode(value, data) {
            if (!value) return true;
            return data.label.indexOf(value) !== -1;
         },
         searchFilter() {
            this.$refs.tree.filter(this.search)
         },
         refresh() {
            this.upIndex++
         },
         handleNodeClick(val, node, el) { //树的值
            this.selectTree = ''
            this.getNodeParent(node)
            this.selectTree = this.selectTree.replace(' - ', '')
            let data = this.selectTree.split(' - ')
            let data2 = ''
            for (let index = data.length - 1; index >= 0; index--) {
               data2 += " - " + data[index]
            }
            this.selectTree = data2.replace(' - ', '')
            this.selectsStandardMethodByFLSSM()
            let trees = this.selectTree.split(" - ")
            this.addOb.factory = trees[0]
            this.addOb.laboratory = trees[1]
            this.addOb.sampleType = trees[2]
            this.addOb.sample = trees[3]
         },
         getNodeParent(val) {
            if (val.parent != null) {
               this.selectTree += ' - ' + val.label
               this.getNodeParent(val.parent)
            }
         },
         remove(node, data) {
            this.$confirm("是否删除该层级", "提示", {
               type: "error"
            }).then(() => {
               this.treeLoad = true
               this.selectTree = ''
               this.getNodeParent(node)
               this.selectTree = this.selectTree.replace(' - ', '')
               let data = this.selectTree.split(' - ')
               let data2 = ''
               for (let index = data.length - 1; index >= 0; index--) {
                  data2 += " - " + data[index]
               }
               this.selectTree = data2.replace(' - ', '')
               this.$axios.post(this.$api.standardTree.delStandardTree, {
                  tree: this.selectTree
               }).then(res => {
                  if (res.code == 201) return
                  this.$message.success('已删除')
                  this.selectStandardTreeList()
                  this.selectTree = ''
                  this.standardList = []
                  this.productList = []
               })
            }).catch(e => {})
         },
         nodeOpen(data, node, el) {
            $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
         },
         nodeClose(data, node, el) {
            $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
         },
         selectEnumByCategoryForFactory() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "工厂"
            }).then(res => {
               this.factory = res.data
            })
         },
         selectEnumByCategoryForsampleType() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "样品大类"
            }).then(res => {
               this.sampleType = res.data
            })
         },
         selectEnumByCategoryForDevice() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "设备分类"
            }).then(res => {
               this.componentData.tagField.deviceGroup.select = res.data
            })
         },
         selectEnumByCategory() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "检验项类型"
            }).then(res => {
               res.data[1].type = 'info'
               this.componentData.tagField.inspectionItemType.select = res.data
            })
         },
         selectEnumByCategoryForValue() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "取值类型"
            }).then(res => {
               this.componentData.tagField.valueType.select = res.data
            })
         },
         selectEnumByCategoryForSpecial() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "是否"
            }).then(res => {
               this.componentData.tagField.bsm.select = res.data
            })
         },
         selectEnumByCategoryForInspectionValueType() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "检验值类型"
            }).then(res => {
               this.componentData.tagField.inspectionValueType.select = res.data
            })
         },
         selectStandardTreeList() {
            this.treeLoad = true
            this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => {
               this.list = res.data
               this.list.forEach(a => {
                  a.children.forEach(b => {
                     b.children.forEach(c => {
                        this.expandedKeys.push(c.label)
                     })
                     // this.expandedKeys.push(b.label)
                  })
               })
               this.treeLoad = false
            })
         },
         obtainItemParameterList() {
            this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
               let data = []
               res.data.forEach(a => {
                  data.push({
                     label: a.laboratoryName,
                     value: a.laboratoryName
                  })
               })
               this.laboratory = data
            })
         },
         selectTestObjectByName() {
            this.$axios.get(this.$api.capacityScope.selectTestObjectByName).then(res => {
               let data = []
               res.data.forEach(a => {
                  data.push({
                     label: a.specimenName,
                     value: a.specimenName
                  })
               })
               this.sampleType = data
            })
         },
         selectStandardMethods() {
            this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => {
               let data = []
               res.data.forEach(a => {
                  data.push({
                     label: a.name,
                     value: a.id
                  })
               })
               this.standardEnum = data
            })
         },
         addStandardMethodList() {
            if (this.standardId == null || this.standardId == '') {
               this.$message.error('标准方法未选择')
               return
            }
            this.addLoad2 = true
            this.$axios.post(this.$api.standardTree.addStandardMethodList, {
               standardId: this.standardId,
               tree: this.selectTree
            }).then(res => {
               this.addLoad2 = false
               this.addStandardDia = false
               this.$message.success('添加成功')
               this.selectsStandardMethodByFLSSM()
            })
         },
         addStandardTree() {
            if (this.addOb.factory == null || this.addOb.factory == '') {
               this.$message.error('工厂是必填项')
               return
            }
            if (this.addOb.laboratory == null || this.addOb.laboratory == '') {
               this.$message.error('实验室是必填项')
               return
            }
            if (this.addOb.sampleType == null || this.addOb.sampleType == '') {
               this.$message.error('样品大类是必填项')
               return
            }
            if (this.addOb.sample == null || this.addOb.sample == '') {
               this.$message.error('样品是必填项')
               return
            }
            this.addLoad = true
            this.$axios.post(this.$api.standardTree.addStandardTree, this.addOb, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               if (res.code === 201) {
                  this.addLoad = false
                  return
               }
               this.$message.success('添加成功')
               this.addDia = false
               this.selectStandardTreeList()
               this.addLoad = false
            }).catch(e => {
               this.addDia = false
               this.addLoad = false
            })
         },
         selectsStandardMethodByFLSSM() {
            this.tableLoad = true
            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
               tree: this.selectTree
            }).then(res => {
               this.tableLoad = false
               this.standardList = res.data.standardMethodList
          if(this.standardList&&this.standardList.length>0){
  import ValueTable from '../tool/value-table.vue'
  export default {
    components: {
      ValueTable
    },
    data() {
      return {
        search: null,
        list: [],
        selectTree: '',
        factory: [],
        addDia: false,
        addOb: {
          factory: null,
          laboratory: null,
          sampleType: null,
          sample: null,
          model: null
        },
        laboratory: [],
        addLoad: false,
        sampleType: [],
        sample: [],
        treeLoad: false,
        addPower: false,
        standardList: [],
        standardEnum: [],
        addStandardDia: false,
        standardId: null,
        addStandardMethod: true,
        addLoad2: false,
        productList: [],
        tableLoad: false,
        tableLoad2: false,
        upStandardProduct: false,
        delStandardMethod: false,
        selects: [],
        delStandardProduct: false,
        addProductDia: false,
        productId: null,
        addStandardProduct: false,
        addLoad3: false,
        productEnum: [],
        componentData: {
          entity: {
            orderBy: {
              field: 'id',
              order: 'asc'
            }
          },
          isIndex: true,
          showSelect: true,
          select: true,
          do: [],
          tagField: {
            inspectionItemType: {
              select: []
            },
            valueType: {
              select: []
            },
            bsm: {
              select: []
            },
            inspectionValueType: {
              select: []
            },
            deviceGroup: {
              select: []
            }
          },
          selectField: {},
        },
        expandedKeys: [],
        filters: [],
        sectionUpDia: false,
        sectionLoad: false,
        sectionRow: null,
        sectionList: [],
        templateList: [],
        total: 0,
        currentPage: 1,
        standardId: 0,
        moreEdit: false,
        moreEditLoad: false,
        moreSelects: [],
        total0: 0,
        currentPage0: 1,
        productList0: [],
        moreInfo: {
          ask: '',
          tell: '',
          methodS: '',
          price: '',
          manHour: '',
          templateId: ''
        },
        methodList: [],
        productTableLoading0: false,
        filters0: [],
        filters1: [],
        pages: 1,
        inspectionItem: null,
        inspectionItemSubclass: null,
        sonLaboratory: null
      }
    },
    watch: {
      moreEdit(val) {
        if (!val) {
          this.$refs.productTable0.clearSelection()
          this.moreSelects = []
          this.currentPage0 = 1;
          this.productList0 = []
          this.moreInfo = {
            ask: '',
            tell: '',
            methodS: '',
            price: '',
            manHour: '',
            templateId: ''
          }
        }
      }
    },
    mounted() {
      this.getPower()
      this.selectEnumByCategoryForFactory()
      this.selectStandardTreeList()
      this.obtainItemParameterList()
      // this.selectEnumByCategoryForsampleType()
      this.selectTestObjectByName()
      this.selectStandardMethods()
      this.selectEnumByCategoryForDevice()
      this.selectEnumByCategory()
      this.selectEnumByCategoryForValue()
      this.selectEnumByCategoryForSpecial()
      this.selectEnumByCategoryForInspectionValueType()
      this.selectEnumByCategoryForSonLaboratory()
      this.getStandardTemplate()
      this.selectStandardMethods()
    },
    methods: {
      filterNode(value, data) {
        if (!value) return true;
        return data.label.indexOf(value) !== -1;
      },
      searchFilter() {
        this.$refs.tree.filter(this.search)
      },
      refresh() {
        this.upIndex++
      },
      handleNodeClick(val, node, el) { //树的值
        this.total = 0
        this.currentPage = 1
        this.selectTree = ''
        this.getNodeParent(node)
        this.selectTree = this.selectTree.replace(' - ', '')
        let data = this.selectTree.split(' - ')
        let data2 = ''
        for (let index = data.length - 1; index >= 0; index--) {
          data2 += " - " + data[index]
        }
        this.selectTree = data2.replace(' - ', '')
        this.selectsStandardMethodByFLSSM()
        let trees = this.selectTree.split(" - ")
        this.addOb.factory = trees[0]
        this.addOb.laboratory = trees[1]
        this.addOb.sampleType = trees[2]
        this.addOb.sample = trees[3]
      },
      getNodeParent(val) {
        if (val.parent != null) {
          this.selectTree += ' - ' + val.label
          this.getNodeParent(val.parent)
        }
      },
      remove(node, data) {
        this.$confirm("是否删除该层级", "提示", {
          type: "error"
        }).then(() => {
          // this.treeLoad = true
          this.selectTree = ''
          this.getNodeParent(node)
          this.selectTree = this.selectTree.replace(' - ', '')
          let data = this.selectTree.split(' - ')
          let data2 = ''
          for (let index = data.length - 1; index >= 0; index--) {
            data2 += " - " + data[index]
          }
          this.selectTree = data2.replace(' - ', '')
          this.$axios.post(this.$api.standardTree.delStandardTree, {
            tree: this.selectTree
          }).then(res => {
            if (res.code == 201) return
            this.$message.success('已删除')
            let arr = this.selectTree.split(' - ');
            this.deleteStandard(this.list, arr[arr.length - 1])
            // this.selectStandardTreeList()
            this.selectTree = ''
            this.standardList = []
            this.productList = []
          })
        }).catch(e => {})
      },
      deleteStandard(arr, label) {
        arr.forEach((item, index) => {
          if (item.label == label) {
            arr.splice(index, 1);
          } else {
            item.children && this.deleteStandard(item.children, label);
          }
        })
      },
      nodeOpen(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
      },
      nodeClose(data, node, el) {
        $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
      },
      selectEnumByCategoryForFactory() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "工厂"
        }).then(res => {
          this.factory = res.data
        })
      },
      selectEnumByCategoryForSonLaboratory() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "子实验室"
        }).then(res => {
          this.factory = []
          res.data.forEach(a => {
            this.filters.push({
              text: a.label,
              value: a.value
            })
          })
        })
      },
      selectEnumByCategoryForsampleType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "样品大类"
        }).then(res => {
          this.sampleType = res.data
        })
      },
      selectEnumByCategoryForDevice() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "设备分类"
        }).then(res => {
          this.componentData.tagField.deviceGroup.select = res.data
        })
      },
      selectEnumByCategory() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验项类型"
        }).then(res => {
          res.data[1].type = 'info'
          this.componentData.tagField.inspectionItemType.select = res.data
        })
      },
      selectEnumByCategoryForValue() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "取值类型"
        }).then(res => {
          this.componentData.tagField.valueType.select = res.data
        })
      },
      selectEnumByCategoryForSpecial() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "是否"
        }).then(res => {
          this.componentData.tagField.bsm.select = res.data
        })
      },
      selectEnumByCategoryForInspectionValueType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验值类型"
        }).then(res => {
          this.componentData.tagField.inspectionValueType.select = res.data
        })
      },
      selectStandardTreeList() {
        this.treeLoad = true
        this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => {
          this.list = res.data
          this.list.forEach(a => {
            this.expandedKeys.push(a.label)
          })
          this.treeLoad = false
        })
      },
      obtainItemParameterList() {
        this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
          let data = []
          res.data.forEach(a => {
            data.push({
              label: a.laboratoryName,
              value: a.laboratoryName
            })
          })
          this.laboratory = data
        })
      },
      selectTestObjectByName() {
        this.$axios.get(this.$api.capacityScope.selectTestObjectByName).then(res => {
          let data = []
          res.data.forEach(a => {
            data.push({
              label: a.specimenName,
              value: a.specimenName
            })
          })
          this.sampleType = data
        })
      },
      selectStandardMethods() {
        this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => {
          let data = []
          res.data.forEach(a => {
            data.push({
              label: a.name,
              value: a.id
            })
          })
          this.standardEnum = data
        })
      },
      addStandardMethodList() {
        if (this.standardId == null || this.standardId == '') {
          this.$message.error('标准方法未选择')
          return
        }
        this.addLoad2 = true
        this.$axios.post(this.$api.standardTree.addStandardMethodList, {
          standardId: this.standardId,
          tree: this.selectTree
        }).then(res => {
          this.addLoad2 = false
          this.addStandardDia = false
          this.$message.success('添加成功')
          this.selectsStandardMethodByFLSSM()
        })
      },
      addStandardTree() {
        if (this.addOb.sample == null || this.addOb.sample == '') {
          this.$message.error('产品不存在')
          return
        }
        if (this.addOb.model == null || this.addOb.model == '') {
          this.$message.error('请填写型号')
          return
        }
        this.addLoad = true
        this.$axios.post(this.$api.standardTree.addStandardTree, this.addOb, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code === 201) {
            this.addLoad = false
            return
          }
          this.$message.success('添加成功')
          this.addDia = false
          this.list
            .find(a => a.label == this.addOb.factory).children
            .find(a => a.label == this.addOb.laboratory).children
            .find(a => a.label == this.addOb.sampleType).children
            .find(a => a.label == this.addOb.sample).children.push({
              code: '[5]',
              label: this.addOb.model,
              value: this.addOb.model,
            })
          this.addLoad = false
        }).catch(e => {
          this.addDia = false
          this.addLoad = false
        })
      },
      selectsStandardMethodByFLSSM() {
        this.tableLoad = true
        this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
          tree: this.selectTree
        }).then(res => {
          this.tableLoad = false
          this.standardList = res.data.standardMethodList
          if (this.standardList && this.standardList.length > 0) {
            this.$refs.standard.setCurrentRow(this.standardList[0])
            this.rowClick(this.standardList[0])
          }else{
          } else {
            this.productList = [];
          }
            })
         },
         getPower() {
            let power = JSON.parse(sessionStorage.getItem('power'))
            let add = false
            let addStandardMethod = false
            let upStandardProduct = false
            let delStandardMethod = false
            let delStandardProduct = false
            let addStandardProduct = false
            let delStandardTree = false
            for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'addStandardTree') {
                  add = true
               }
               if (power[i].menuMethod == 'addStandardMethodList') {
                  addStandardMethod = true
               }
               if (power[i].menuMethod == 'upStandardProductList') {
                  upStandardProduct = true
               }
               if (power[i].menuMethod == 'delStandardMethodByFLSSM') {
                  delStandardMethod = true
               }
               if (power[i].menuMethod == 'delStandardProductByIds') {
                  delStandardProduct = true
               }
               if (power[i].menuMethod == 'addStandardProduct') {
                  addStandardProduct = true
               }
               if (power[i].menuMethod == 'delStandardTree') {
                  delStandardTree = true
               }
            }
            this.addPower = add
            this.addStandardMethod = addStandardMethod
            this.upStandardProduct = upStandardProduct
            this.delStandardMethod = delStandardMethod
            this.delStandardProduct = delStandardProduct
            this.addStandardProduct = addStandardProduct
            this.delStandardTree = delStandardTree
         },
         upStandardProductList(value, index) {
            this.$axios.post(this.$api.standardTree.upStandardProductList, {
               id: index,
               ask: value
            }, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               if (res.code == 201) {
                  this.$message.error('未保存')
                  return
               }
               this.$message.success('已保存')
            })
         },
         upStandardProductListOfTell(value, index) {
            this.$axios.post(this.$api.standardTree.upStandardProductList, {
               id: index,
               tell: value
            }, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               if (res.code == 201) {
                  this.$message.error('未保存')
                  return
               }
               this.$message.success('已保存')
            })
         },
      upStandardProductListOfMethodS(value, index) {
         this.$axios.post(this.$api.standardTree.upStandardProductList, {
            id: index,
            methodS: value
         }, {
            headers: {
               'Content-Type': 'application/json'
            }
         }).then(res => {
            if (res.code == 201) {
               this.$message.error('未保存')
               return
            }
            this.$message.success('已保存')
         })
        })
      },
         delStandardMethodByFLSSM(id) {
            this.$confirm('是否删除当前数据?', "警告", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               type: "warning"
            }).then(() => {
               this.tableLoad = true
               this.$axios.post(this.$api.standardTree.delStandardMethodByFLSSM, {
                  id: id
               }).then(res => {
                  if (res.code == 201) {
                     return
                  }
                  this.$message.success('已删除')
                  this.selectsStandardMethodByFLSSM()
               })
            }).catch(() => {})
         },
         handleSelectionChange(val) {
            this.selects = []
            val.forEach(a => {
               this.selects.push(a.id)
            })
         },
         delStandardProductByIds() {
            if (this.selects.length == 0) {
               this.$message.error('未选中数据')
               return
            }
            this.$confirm('是否删除当前选中 ' + this.selects.length + ' 条数据?', "警告", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
               type: "warning"
            }).then(() => {
               this.tableLoad = true
               this.$axios.post(this.$api.standardTree.delStandardProductByIds, {
                  ids: JSON.stringify(this.selects)
               }).then(res => {
                  if (res.code == 201) {
                     return
                  }
                  this.$message.success('已删除')
                  this.selectsStandardMethodByFLSSM()
               })
            }).catch(() => {})
         },
         addStandardProductDo() {
            let selects = this.$refs.ValueTable.multipleSelection
            if (selects.length == 0) {
               this.$message.error('未选择数据')
               return
            }
            let select = []
            selects.forEach(a => {
               select.push(a.id)
            })
            this.tableLoad = true
            this.$axios.post(this.$api.standardTree.addStandardProduct, {
               ids: JSON.stringify(select),
               tree: this.selectTree
            }).then(res => {
               if (res.code == 201) {
                  return
               }
               this.$message.success('添加成功')
               this.selectsStandardMethodByFLSSM()
            })
            this.addProductDia = false
         },
         rowClick(row, column, event) {
            this.tableLoad2 = true
            this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, {
               id: row.id
            }).then(res => {
               this.productList = res.data
               setTimeout(() => {
                  this.productList.forEach(a => {
                     if (a.state == 1) this.toggleSelection(a)
                  })
               }, 300)
               this.tableLoad2 = false
            })
         },
         toggleSelection(row) {
            this.$refs.productTable.toggleRowSelection(row, true);
         },
         tableRowClassName({
            row,
            rowIndex
         }) {
            if (row.state === 0) {
               return 'warning-row';
            }
            return '';
         },
         upProductSelect(selection, row) {
            row.state = row.state == 1 ? 0 : 1
            this.$axios.post(this.$api.standardTree.upStandardProductList, {
               id: row.id,
               state: row.state
            }, {
               headers: {
                  'Content-Type': 'application/json'
               }
            }).then(res => {
               if (res.code == 201) {
                  this.$message.error('未保存')
                  return
               }
               this.$message.success('已保存')
            })
         },
      }
   }
      getPower() {
        let power = JSON.parse(sessionStorage.getItem('power'))
        let add = false
        let addStandardMethod = false
        let upStandardProduct = false
        let delStandardMethod = false
        let delStandardProduct = false
        let addStandardProduct = false
        let delStandardTree = false
        for (var i = 0; i < power.length; i++) {
          if (power[i].menuMethod == 'addStandardTree') {
            add = true
          }
          if (power[i].menuMethod == 'addStandardMethodList') {
            addStandardMethod = true
          }
          if (power[i].menuMethod == 'upStandardProductList') {
            upStandardProduct = true
          }
          if (power[i].menuMethod == 'delStandardMethodByFLSSM') {
            delStandardMethod = true
          }
          if (power[i].menuMethod == 'delStandardProductByIds') {
            delStandardProduct = true
          }
          if (power[i].menuMethod == 'addStandardProduct') {
            addStandardProduct = true
          }
          if (power[i].menuMethod == 'delStandardTree') {
            delStandardTree = true
          }
        }
        this.addPower = add
        this.addStandardMethod = addStandardMethod
        this.upStandardProduct = upStandardProduct
        this.delStandardMethod = delStandardMethod
        this.delStandardProduct = delStandardProduct
        this.addStandardProduct = addStandardProduct
        this.delStandardTree = delStandardTree
      },
      upStandardProductList(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          ask: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          this.$message.success('已保存')
        })
      },
      upStandardProductListOfTell(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          tell: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          this.$message.success('已保存')
        })
      },
      upStandardProductListOfMethodS(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          methodS: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      upStandardProductListOfPrice(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          price: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      upStandardProductListOfManHour(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          manHour: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      upStandardProductListOfTemplate(value, index) {
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: index,
          templateId: value
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      delStandardMethodByFLSSM(id) {
        this.$confirm('是否删除当前数据?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.tableLoad = true
          this.$axios.post(this.$api.standardTree.delStandardMethodByFLSSM, {
            id: id
          }).then(res => {
            if (res.code == 201) {
              return
            }
            this.$message.success('已删除')
            this.selectsStandardMethodByFLSSM()
          })
        }).catch(() => {})
      },
      handleSelectionChange(val) {
        this.selects = []
        val.forEach(a => {
          this.selects.push(a.id)
        })
      },
      delStandardProductByIds() {
        if (this.selects.length == 0) {
          this.$message.error('未选中数据')
          return
        }
        this.$confirm('是否删除当前选中 ' + this.selects.length + ' 条数据?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.tableLoad = true
          this.$axios.post(this.$api.standardTree.delStandardProductByIds, {
            ids: JSON.stringify(this.selects)
          }).then(res => {
            if (res.code == 201) {
              return
            }
            this.$message.success('已删除')
            this.selectsStandardMethodByFLSSM()
          })
        }).catch(() => {})
      },
      addStandardProductDo() {
        let selects = this.$refs.ValueTable.multipleSelection
        if (selects.length == 0) {
          this.$message.error('未选择数据')
          return
        }
        let select = []
        selects.forEach(a => {
          select.push(a.id)
        })
        this.tableLoad = true
        this.$axios.post(this.$api.standardTree.addStandardProduct, {
          ids: JSON.stringify(select),
          tree: this.selectTree
        }).then(res => {
          if (res.code == 201) {
            return
          }
          this.$message.success('添加成功')
          this.selectsStandardMethodByFLSSM()
        })
        this.addProductDia = false
      },
      rowClick(row, column, event) {
        this.currentPage = 1;
        this.tableLoad2 = true
        this.standardId = row.id
        this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, {
          id: row.id,
          tree: this.selectTree,
          page: this.currentPage
        }).then(res => {
          this.productList = res.data.productList
          this.total = res.data.total
          setTimeout(() => {
            this.productList.forEach(a => {
              if (a.state == 1) this.toggleSelection(a)
            })
          }, 300)
          this.tableLoad2 = false
        })
      },
      toggleSelection(row) {
        this.$refs.productTable.toggleRowSelection(row, true);
      },
      tableRowClassName({
        row,
        rowIndex
      }) {
        if (row.state === 0) {
          return 'warning-row';
        }
        return '';
      },
      upProductSelect(selection, row) {
        row.state = (row.state == 1 ? 0 : 1)
        this.$axios.post(this.$api.standardTree.upStandardProductList, {
          id: row.id,
          state: row.state
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          // this.$message.success('已保存')
        })
      },
      filterHandler(value) {
        for (let column in value) {
          if(value[column].length === 0){
            if(column==='inspectionItem'){
              this.inspectionItem = null
            }else if(column === 'inspectionItemSubclass'){
              this.inspectionItemSubclass = null
            }else if(column === 'sonLaboratory'){
              this.sonLaboratory = null
            }
          }else{
            if(column==='inspectionItem'){
              this.inspectionItem = value[column][0]
            }else if(column === 'inspectionItemSubclass'){
              this.inspectionItemSubclass = value[column][0]
            }else if(column === 'sonLaboratory'){
              this.sonLaboratory = value[column][0]
            }
          }
          this.getList()
        }
      },
      handleAll(e) {
        if (e.length > 0) {
          this.productList.map(m => {
            m.state = 0
            this.upProductSelect(null, m)
            return m
          })
        } else {
          this.productList.map(m => {
            m.state = 1
            this.upProductSelect(null, m)
            return m
          })
        }
      },
      sectionUp(row) {
        if (Array.isArray(row)) {
          // 值是一个数组
          if (row.length === 0) {
            return this.$message.error('请选择检验项')
          }
          this.sectionRow = {}
          this.sectionUpDia = true
        } else {
          // 值是一个对象
          this.sectionRow = row
          this.sectionUpDia = true
          this.sectionList = []
          if (this.sectionRow.section != null && this.sectionRow.section != '') {
            JSON.parse(this.sectionRow.section).forEach((a, ai) => {
              this.sectionList.push({
                thing: a,
                ask: JSON.parse(this.sectionRow.ask)[ai],
                tell: JSON.parse(this.sectionRow.tell)[ai],
                price: JSON.parse(this.sectionRow.price)[ai],
                manHour: JSON.parse(this.sectionRow.manHour)[ai]
              })
            })
          }
        }
      },
      sectionLoadAdd() {
        let sectionList = []
        let askList = []
        let tellList = []
        let priceList = []
        let manHourList = []
        this.sectionList.forEach(a => {
          if (a.thing !== '') {
            sectionList.push(a.thing)
            askList.push(a.ask)
            tellList.push(a.tell)
            priceList.push(a.price)
            manHourList.push(a.manHour)
          }
        })
        if (sectionList.length === 0) {
          this.sectionRow.section = null
          this.sectionRow.ask = null
          this.sectionRow.tell = null
          this.sectionRow.price = null
          this.sectionRow.manHour = null
        } else {
          this.sectionRow.section = JSON.stringify(sectionList)
          this.sectionRow.ask = JSON.stringify(askList)
          this.sectionRow.tell = JSON.stringify(tellList)
          this.sectionRow.price = JSON.stringify(priceList)
          this.sectionRow.manHour = JSON.stringify(manHourList)
        }
        this.sectionLoad = true
        if (this.moreSelects.length === 0) {
          this.$axios.post(this.$api.standardTree.upStandardProductList, {
            id: this.sectionRow.id,
            section: this.sectionRow.section,
            ask: this.sectionRow.ask,
            tell: this.sectionRow.tell,
            price: this.sectionRow.price,
            manHour: this.sectionRow.manHour
          }, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
            this.sectionLoad = false
            if (res.code == 201) {
              this.$message.error('未保存')
              return
            }
            this.$message.success('已保存')
            this.sectionUpDia = false
          })
        } else {
          this.$axios.post(this.$api.standardTree.upStandardProducts, {
            ids: this.moreSelects.map(a => a.id),
            standardProductList: {
              section: this.sectionRow.section,
              ask: this.sectionRow.ask,
              tell: this.sectionRow.tell,
              price: this.sectionRow.price,
              manHour: this.sectionRow.manHour
            }
          }, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
            this.sectionLoad = false
            if (res.code == 201) {
              this.$message.error('未保存')
              return
            }
            this.$message.success('已保存')
            this.sectionUpDia = false
            this.currentPage0 = 1;
            this.getList()
            this.rowClick({
              id: this.standardId
            })
          })
        }
      },
      getStandardTemplate() {
        this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => {
          this.templateList = res.data
        })
      },
      handleCurrentChange(val) {
        this.currentPage = val;
        this.tableLoad2 = true
        this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, {
          id: this.standardId,
          tree: this.selectTree,
          page: val
        }).then(res => {
          this.productList = res.data.productList
          setTimeout(() => {
            this.productList.forEach(a => {
              if (a.state == 1) this.toggleSelection(a)
            })
          }, 200)
          this.tableLoad2 = false
        })
      },
      async handleMore() {
        if ((!this.standardId && this.standardId != 0) || this.standardList.length == 0) {
          return this.$message.error('请选择实验室、样品')
        }
        await this.getList()
        this.moreEdit = true
      },
      selectStandardMethods() {
        this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => {
          let data = []
          res.data.forEach(a => {
            data.push({
              label: a.code,
              value: a.code
            })
          })
          this.methodList = data
        })
      },
      subMoreEdit() {
        if (this.moreSelects.length === 0) {
          return this.$message.error('请选择检验项')
        }
        this.moreEditLoad = true
        for(let a in this.moreInfo){
          if(this.moreInfo[a]==''){
            delete this.moreInfo[a]
          }
        }
        this.$axios.post(this.$api.standardTree.upStandardProducts, {
          ids: JSON.stringify(this.moreSelects.map(a => a.id)),
          standardProductList: this.moreInfo
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          this.moreEditLoad = false
          if (res.code == 201) {
            this.$message.error('未保存')
            return
          }
          this.$message.success('已保存')
          this.currentPage0 = 1;
          this.getList()
          this.rowClick({
            id: this.standardId
          })
          // this.moreInfo = {
          //   ask:'',
          //   tell:'',
          //   methodS:'',
          //   price:'',
          //   manHour:'',
          //   templateId:''
          // }
        })
      },
      handleSelectAll0(rows) {
        if (rows.length) {
          rows.forEach(a => {
            if (!this.moreSelects.find(b => a.id === b.id)) {
              this.moreSelects.push(a)
            }
          })
        } else {
          this.productList0.forEach(a => {
            this.moreSelects = this.moreSelects.filter(b => b.id != a.id)
          })
        }
      },
      handleSelectionChange0(val, row) {
        if (this.moreSelects.find(a => a.id === row.id)) {
          this.moreSelects = this.moreSelects.filter(a => a.id != row.id)
        } else {
          this.moreSelects.push(row)
        }
      },
      getList() {
        this.productTableLoading0 = true
        this.getItemEnum()
        this.$axios.post(this.$api.standardTree.selectStandardProductByMethodId, {
          id: this.standardId,
          tree: this.selectTree,
          page: this.currentPage0,
          laboratory: this.sonLaboratory,
          items: this.inspectionItemSubclass,
          item: this.inspectionItem
        }).then(res => {
          this.productList0 = res.data.records
          this.total0 = res.data.total
          this.productTableLoading0 = false
          this.page = res.data.pages
          this.$nextTick(() => {
            this.productList0.forEach((a, i) => {
              if (this.moreSelects.find(b => a.id == b.id)) {
                this.$refs.productTable0.toggleRowSelection(this.productList0[i], true)
              }
            })
          })
        })
      },
      handleCurrentChange0(e) {
        this.currentPage0 = e;
        this.getList()
      },
      getItemEnum(){
        this.$axios.post(this.$api.standardTree.selectStandardProductEnumByMethodId,{
          id: this.standardId,
          tree: this.selectTree
        }).then(res=>{
          this.filters0 = []
          this.filters1 = []
          res.data.item.forEach(a=>{
            this.filters0.push({
              text: a.inspectionItem,
              value: a.inspectionItem
            })
          })
          res.data.items.forEach(a=>{
            if(a!=null){
              this.filters1.push({
                text: a.inspectionItemSubclass,
                value: a.inspectionItemSubclass
              })
            }
          })
        })
      }
    }
  }
</script>