src/views/standard/standardLibrary/index.vue
@@ -8,7 +8,8 @@
        </el-col>
        <el-col v-if="checkPermi(['standard:standardLibrary:add'])" :span="4"
          style="text-align: center; line-height: 30px">
          <el-button circle icon="el-icon-plus" size="mini" type="primary" @click="openAddDia"></el-button>
          <el-button circle icon="el-icon-plus" size="mini" type="primary" @click="openAddDia"
            v-if="!auditId"></el-button>
        </el-col>
      </el-row>
      <el-tree ref="tree" v-loading="treeLoad" :allow-drop="allowDrop" :data="list"
@@ -17,8 +18,7 @@
          height: calc(100% - 30px);
          overflow-y: scroll;
          scrollbar-width: none;
        " @node-click="handleNodeClick"
               @node-drop="handleDrop">
        " @node-click="handleNodeClick" @node-drop="handleDrop">
        <div slot-scope="{ node, data }" class="custom-tree-node">
          <el-row style="width: 100%">
            <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left">
@@ -34,19 +34,17 @@
            </el-col>
            <el-col v-if="
              checkPermi(['standard:standardLibrary:delStandardTree']) &&
              (node.data.children === null ||
                node.data.children === undefined)
              data.level == 7
            " :span="2" style="text-align: right">
              <el-button size="mini" type="text" @click.stop="editTreeName(node.data)">
              <el-button size="mini" type="text" @click.stop="editTreeName(node.data)" v-if="!auditId">
                <i class="el-icon-edit"></i>
              </el-button>
            </el-col>
            <el-col v-if="
              checkPermi(['standard:standardLibrary:delStandardTree']) &&
              (node.data.children === null ||
                node.data.children === undefined)
              data.level == 7
            " :span="2" style="text-align: right">
              <el-button size="mini" type="text" @click.stop="remove(node, data)">
              <el-button size="mini" type="text" @click.stop="remove(node, data)" v-if="!auditId">
                <i class="el-icon-delete"></i>
              </el-button>
            </el-col>
@@ -56,19 +54,18 @@
    </div>
    <div class="right">
      <el-row class="title" style="width: 100%">
        <el-col :span="20" style="font-size: 14px; color: #999">{{
        <el-col :span="19" style="font-size: 14px; color: #999"><span>{{
          selectTree
        }}</el-col>
        <el-col :span="4">
          <el-button v-if="isShowCopy" size="small" style="position: absolute; right: 20px; top: 1px" type="primary"
            @click="openCopyDia">批量复制</el-button>
        }} </span></el-col>
        <el-col :span="5" style="position: absolute;top: -3px;right: -25px;" v-if="!auditId && !standardCkeck">
          <el-button size="small" type="primary" @click="submitReview" :loading="submitReviewLoad">提交变更</el-button>
          <el-button v-if="isShowCopy" size="small" type="primary" @click="openCopyDia">批量复制</el-button>
        </el-col>
      </el-row>
      <el-row v-loading="tableLoad" class="standard_table">
        <el-table ref="standard" :data="standardList" class="el-table" header-row-class-name="header-class" height="220"
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
          highlight-current-row style="width: 100%; height: 220px !important" tooltip-effect="dark"
          @row-click="rowClick">
          :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border highlight-current-row
          style="width: 100%; height: 220px !important" tooltip-effect="dark" @row-click="rowClick">
          <el-table-column label="标准编号" prop="code" show-overflow-tooltip width="200">
            <template slot-scope="scope">
              <span style="color: red; font-size: 14px">{{
@@ -82,12 +79,11 @@
      </el-row>
      <el-row v-loading="tableLoad2" class="product_table">
        <el-table id="templateParamTable" ref="productTable" v-loading="productTableLoading" :data="productList"
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
          :fit="true" :row-class-name="tableRowClassName" class="productTable"
          header-row-class-name="header-class" height="100%" row-key="id" stripe style="width: 100%"
          tooltip-effect="dark" @select="upProductSelect" @selection-change="handleSelectionChange"
          @select-all="handleAll">
          <el-table-column type="selection" width="50"> </el-table-column>
          :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border :fit="true"
          :row-class-name="tableRowClassName" class="productTable" header-row-class-name="header-class" height="100%"
          row-key="id" stripe style="width: 100%" tooltip-effect="dark" @select="upProductSelect"
          @selection-change="handleSelectionChange" @select-all="handleAll" :header-cell-class-name="headerCellStyle">
          <el-table-column type="selection" width="50" :selectable="selectable"> </el-table-column>
          <el-table-column label="产品" min-width="100" prop="sample" show-overflow-tooltip></el-table-column>
          <el-table-column label="型号" min-width="100" prop="model" show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass"
@@ -95,13 +91,22 @@
          <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass"
            show-overflow-tooltip></el-table-column>
          <el-table-column label="子实验室" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column>
          <!-- checkStatusList -->
          <el-table-column label="审核状态" min-width="140" prop="checkStatus">
            <template slot-scope="scope">
              <el-tag :type="checkStatusList.find(m => m.value == scope.row.checkStatus).type"
                v-if="checkStatusList.find(m => m.value == scope.row.checkStatus) && scope.row.checkStatus !== '' && scope.row.checkStatus !== null"
                size="small">{{
                  checkStatusList.find(m => m.value == scope.row.checkStatus).label }}</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="要求值" min-width="200px" prop="ask">
            <template slot-scope="scope">
              <el-input v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求值" size="small"
                type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input>
                type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"
                :disabled="!!auditId || standardCkeck"></el-input>
              <span v-else>{{ scope.row.ask }}</span>
            </template>
          </el-table-column>
@@ -111,11 +116,12 @@
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求描述"
                size="small" type="textarea" @change="(value) => upStandardProductListOfTell(value, scope.row.id)
                  "></el-input>
                  " :disabled="!!auditId || standardCkeck"></el-input>
              <span v-else>{{ scope.row.ask }}</span>
            </template>
          </el-table-column>
          <el-table-column label="试验方法" prop="method" width="200">
          <el-table-column label="子实验室" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column>
          <!-- <el-table-column label="试验方法" prop="method" width="200">
            <template slot-scope="scope">
              <el-select v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
@@ -126,13 +132,13 @@
              </el-select>
              <span v-else>{{ scope.row.methodS }}</span>
            </template>
          </el-table-column>
          <el-table-column label="条件" min-width="140" prop="radius" show-overflow-tooltip>
          </el-table-column> -->
          <el-table-column label="试验条件" min-width="140" prop="radius" show-overflow-tooltip>
            <template slot-scope="scope">
              <el-select v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.radius" clearable placeholder="条件" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id)
                ">
              " v-model="scope.row.radius" clearable placeholder="试验条件" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id)
                " :disabled="!!auditId || standardCkeck" allow-create filterable>
                <el-option v-for="(a, i) in scope.row.radiusList &&
                  JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option>
              </el-select>
@@ -145,7 +151,7 @@
              <el-input v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.price" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id)
                ">
                " :disabled="!!auditId || standardCkeck">
              </el-input>
              <span v-else>{{ scope.row.price }}</span>
            </template>
@@ -155,7 +161,7 @@
              <el-input v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.manHour" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id)
                ">
                " :disabled="!!auditId || standardCkeck">
              </el-input>
              <span v-else>{{ scope.row.manHour }}</span>
            </template>
@@ -163,7 +169,7 @@
          <el-table-column label="工时分组" prop="manHourGroup" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="模板" prop="templateId" width="200">
            <template slot-scope="scope">
              <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct'])
              <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) || !!auditId || standardCkeck
                " filterable size="small" @change="(value) =>
                  upStandardProductListOfTemplate(value, scope.row.id)
                  ">
@@ -172,7 +178,7 @@
            </template>
          </el-table-column>
          <el-table-column label="区间" prop="section" show-overflow-tooltip width="120"></el-table-column>
          <el-table-column label="操作" prop="section" width="160">
          <el-table-column label="操作" prop="section" width="160" v-if="!auditId && !standardCkeck">
            <template slot-scope="scope">
              <el-button type="text" @click="sectionUp(scope.row)" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct'])
                ">区间设置</el-button>
@@ -220,7 +226,7 @@
    <el-dialog :close-on-click-modal="false" :visible.sync="sectionUpDia" title="区间设置" width="80%">
      <div class="body" style="padding: 5px 0">
        <el-table :data="sectionList" border height="350px" style="width: 100%"
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }">
          :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }">
          <el-table-column align="center" label="序号" type="index" width="70">
          </el-table-column>
          <el-table-column align="center" label="区间">
@@ -270,7 +276,7 @@
    </el-dialog>
    <bindSupplierDensityDialogAsk v-if="bindSupplierDensityDialog"
      :bindSupplierDensityDialog="bindSupplierDensityDialog" :currentRow="currentSupplierDensityRow"
      @closeBindPartDialog="closeBindSupplierDensityDialog">
      @closeBindPartDialog="closeBindSupplierDensityDialog" @refreshList="refreshList">
    </bindSupplierDensityDialogAsk>
    <BatchCopy v-if="batchCopyDia" ref="BatchCopy" :selectTree1="selectTree" :standardId="standardId"
      @refreshList="refreshList"></BatchCopy>
@@ -298,11 +304,14 @@
  getStandardTemplate,
  selectStandardProductByMethodId,
  selectStandardProductEnumByMethodId,
  productListSubmit,
  standardProductListRecordRelPage,
  existCheckingRecord,
} from "@/api/standard/standardLibrary";
import bindSupplierDensityDialogAsk from "./components/bindSupplierDensityDialogAsk.vue";
import BatchCopy from "./components/BatchCopy.vue";
export default {
  name: 'StandardLibrary',
  // name: 'StandardLibrary',
  components: {
    BatchCopy,
    bindSupplierDensityDialogAsk,
@@ -365,7 +374,6 @@
      inspectionItem: null,
      inspectionItemSubclass: null,
      sonLaboratory: null,
      token: null,
      fileList: [],
      uploading: false,
      isEquipment: true,
@@ -377,9 +385,30 @@
      batchCopyDia: false,
      VUE_APP_BASE_API: process.env.VUE_APP_BASE_API,
      moreSelects: [],
      checkStatusList: [
        {
          value: 0,
          label: '未提交',
          type: 'danger'
        },
        {
          value: 1,
          label: '审核中',
          type: 'warning'
        },
        {
          value: 2,
          label: '已更新',
          type: 'success'
        },
      ],
      submitReviewLoad: false,
      auditId: null,//标准变更记录ID
      standardCkeck: false,//当前是否有正在审核的变更
    };
  },
  mounted() {
    this.existCheckingRecord()
    this.selectEnumByCategoryForFactory();
    this.selectStandardTreeList();
    this.obtainItemParameterList();
@@ -389,11 +418,27 @@
    this.selectEnumByCategoryForsampleType();
    this.getStandardTemplate();
    this.selectStandardMethodsSec();
    this.token = {
      token: sessionStorage.getItem("token"),
    };
    if (this.$route.query && this.$route.query.auditId) {
      let {
        auditId
      } = this.$route.query
      this.auditId = auditId
    } else {
      this.auditId = null
    }
  },
  methods: {
    // 标准库变更时禁用全选
    headerCellStyle({ columnIndex }) {
      if (columnIndex === 0 && (this.auditId || this.standardCkeck)) {
        return 'disable-select-all';
      }
      return '';
    },
    // 标准库变更时禁用多选
    selectable(row, index) {
      return !this.auditId && !this.standardCkeck;
    },
    // 拖拽时判定目标节点能否被放置
    // 'prev'、'inner' 和 'next',前、插入、后
    allowDrop(draggingNode, dropNode, type) {
@@ -476,7 +521,7 @@
      }
    },
    // 调用tree过滤方法 中文英过滤
    filterNode (value, data, node) {
    filterNode(value, data, node) {
      if (!value) {    //如果数据为空,则返回true,显示所有的数据项
        return true
      }
@@ -485,7 +530,7 @@
      return this.chooseNode(val, data, node) // 调用过滤二层方法
    },
    // 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
    chooseNode (value, data, node) {
    chooseNode(value, data, node) {
      if (data.label.indexOf(value) !== -1) {
        return true
      }
@@ -569,7 +614,11 @@
        this.selectTree = "";
        // 拼接树路径
        this.selectTree = this.getReversedTreePath(node);
        delStandardTree({ tree: this.selectTree }).then((res) => {
        delStandardTree({
          tree: this.selectTree,
          level: data.level,
          id: data.value
        }).then((res) => {
          this.$message.success("已删除");
          let arr = this.selectTree.split(" - ");
          this.deleteStandard(this.list, arr[arr.length - 1]);
@@ -657,7 +706,7 @@
      });
    },
    // 打开新增弹框
    openAddDia () {
    openAddDia() {
      this.addDia = true
      this.addOb.modelName = ''
    },
@@ -726,6 +775,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    upStandardProductListOfTell(value, index) {
@@ -736,6 +786,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    // 标准库选择实验方法的回调
@@ -747,6 +798,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    // 标准库选择条件的回调
@@ -758,6 +810,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    upStandardProductListOfPrice(value, index) {
@@ -768,6 +821,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    upStandardProductListOfManHour(value, index) {
@@ -778,6 +832,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    upStandardProductListOfTemplate(value, index) {
@@ -788,6 +843,7 @@
        }),
      }).then((res) => {
        this.$message.success("已保存");
        this.refreshList()
      });
    },
    handleSelectionChange(val) {
@@ -810,45 +866,65 @@
      this.currentPage = 1;
      this.tableLoad2 = true;
      this.standardId = row.id;
      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;
        const tree = this.selectTree.split(" - ");
        // 选择最后一层树才可以拖拽排序
        if (tree.length === 4) {
          const name = tree[3] + "[4]";
          this.hasChildWithId(this.list, name);
          if (
            this.isHaveChildren.children &&
            this.isHaveChildren.children.length > 0
          ) {
      if (this.auditId) {
        // 标准库变更的检验项查询
        standardProductListRecordRelPage({
          standardMethodListId: row.id,
          tree: this.selectTree,
          standardProductListUpdateRecordId: this.auditId,
        }).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;
        });
      } else {
        // 正常情况下的标准查询
        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;
          const tree = this.selectTree.split(" - ");
          // 选择最后一层树才可以拖拽排序
          if (tree.length === 4) {
            const name = tree[3] + "[4]";
            this.hasChildWithId(this.list, name);
            if (
              this.isHaveChildren.children &&
              this.isHaveChildren.children.length > 0
            ) {
              if (this.sortTable) {
                this.sortTable.destroy();
                this.sortTable = null;
              }
              return;
            }
          } else if (tree.length < 4) {
            if (this.sortTable) {
              this.sortTable.destroy();
              this.sortTable = null;
            }
            return;
          }
        } else if (tree.length < 4) {
          if (this.sortTable) {
            this.sortTable.destroy();
            this.sortTable = null;
          }
          return;
        }
        this.$nextTick(() => {
          this.rowDrop(row.id);
          this.$nextTick(() => {
            this.rowDrop(row.id);
          });
        });
      });
      }
    },
    toggleSelection(row) {
      this.$refs.productTable.toggleRowSelection(row, true);
@@ -868,6 +944,7 @@
        }),
      }).then((res) => {
        this.$message.success('已保存')
        this.refreshList()
      });
    },
    filterHandler(value) {
@@ -1019,6 +1096,7 @@
          this.sectionLoad = false;
          this.$message.success("已保存");
          this.sectionUpDia = false;
          this.refreshList()
        });
      } else {
        upStandardProducts({
@@ -1064,19 +1142,36 @@
    handleCurrentChange(val) {
      this.currentPage = val;
      this.tableLoad2 = true;
      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;
      });
      if (this.auditId) {
        // 标准库变更查询\
        standardProductListRecordRelPage({
          standardMethodListId: this.standardId,
          tree: this.selectTree,
          standardProductListUpdateRecordId: this.auditId,
        }).then((res) => {
          this.productList = res.data.productList;
          setTimeout(() => {
            this.productList.forEach((a) => {
              if (a.state == 1) this.toggleSelection(a);
            });
          }, 200);
          this.tableLoad2 = false;
        });
      } else {
        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;
        });
      }
    },
    openCopyDia() {
      this.batchCopyDia = true;
@@ -1171,6 +1266,39 @@
        });
      });
    },
    // 提交变更申请
    submitReview() {
      this.$prompt('请输入变更原因', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        inputValidator: (value) => {
          if (!value || value.trim() === '') {
            return '请输入变更原因';
          }
          return true;
        }
      }).then(({ value }) => {
        this.submitReviewLoad = true
        productListSubmit({
          remark: value
        }).then(res => {
          this.submitReviewLoad = false
          this.selectsStandardMethodByFLSSM();
          this.existCheckingRecord()
          this.refreshList()
          this.$refs.productTable.doLayout()
        }).catch(err => {
          this.submitReviewLoad = false
        })
      }).catch(() => {
      });
    },
    // 获取当前有没有正在审核的变更
    existCheckingRecord() {
      existCheckingRecord().then(res => {
        this.standardCkeck = res.data
      })
    }
  },
};
</script>
@@ -1356,4 +1484,9 @@
  align-items: center;
  justify-content: center;
}
/* 隐藏全选复选框 */
>>>.disable-select-all .el-checkbox {
  display: none !important;
}
</style>