spring
2025-02-17 b25e5611ece8d25a6605a1ec66916db0942a5ed5
完成标准库联调
已修改2个文件
已添加2个文件
1276 ■■■■■ 文件已修改
src/api/standard/standardLibrary.js 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standard/standardLibrary/components/BatchCopy.vue 863 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standard/standardLibrary/components/bindSupplierDensityDialogAsk.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standard/standardLibrary/index.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/standard/standardLibrary.js
@@ -19,11 +19,11 @@
}
// åˆ é™¤æ ‡å‡†æ ‘的层级
export function delStandardTree(data) {
export function delStandardTree(query) {
  return request({
    url: "/standardTree/delStandardTree",
    method: "post",
    data: data,
    method: "delete",
    params: query,
  });
}
@@ -206,3 +206,84 @@
    data: data,
  });
}
// æ£€éªŒé¡¹å¤åˆ¶æŽ’序
export function copyStandardProductSort(data) {
  return request({
    url: "/standardTree/copyStandardProductSort",
    method: "post",
    data: data,
  });
}
// æäº¤éœ€è¦å¤åˆ¶çš„æ£€éªŒé¡¹
export function copyStandardProductOne(data) {
  return request({
    url: "/standardTree/copyStandardProductOne",
    method: "post",
    data: data,
  });
}
// å¤åˆ¶æ£€éªŒé¡¹
export function copyStandardProductList(data) {
  return request({
    url: "/standardTree/copyStandardProductList",
    method: "post",
    data: data,
  });
}
// æäº¤éœ€è¦å¤åˆ¶çš„æ£€éªŒé¡¹
export function updateStandardProductListBatch(data) {
  return request({
    url: "/standardTree/updateStandardProductListBatch",
    method: "post",
    data: data,
  });
}
// èŽ·å–æ ‡å‡†æ ‘
export function selectStandardTreeList2(query) {
  return request({
    url: "/standardTree/selectStandardTreeList2",
    method: "get",
    params: query,
  });
}
// æ ‡å‡†åº“绑定厂家
export function selectSupplierAsk(data) {
  return request({
    url: "/standardTree/selectSupplierAsk",
    method: "post",
    data: data,
  });
}
// æ–°å¢žæ ‡å‡†åº“绑定厂家
export function addProductSupplierAsk(data) {
  return request({
    url: "/standardTree/addProductSupplierAsk",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹æ ‡å‡†åº“绑定厂家
export function updateProductSupplierAsk(data) {
  return request({
    url: "/standardTree/updateProductSupplierAsk",
    method: "post",
    data: data,
  });
}
// åˆ é™¤æ ‡å‡†åº“绑定厂家
export function deleteProductSupplierAsk(query) {
  return request({
    url: "/standardTree/deleteProductSupplierAsk",
    method: "delete",
    params: query,
  });
}
src/views/standard/standardLibrary/components/BatchCopy.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,863 @@
<template>
  <div>
    <el-dialog
      :visible.sync="batchCopyDia"
      class="more-edit"
      title="批量编辑"
      width="90%"
    >
      <el-row>
        <el-col :span="6" class="search_thing">
          <div class="search_label">样品名称:</div>
          <div class="search_input">
            <el-input v-model="sample" disabled size="small">
              <template slot="append"
                ><el-button
                  slot="append"
                  icon="el-icon-search"
                  @click="selectStandardTree = true"
                ></el-button
              ></template>
            </el-input>
          </div>
        </el-col>
        <el-col :span="6" class="search_thing">
          <div class="search_label">检验标准:</div>
          <div class="search_input">
            <el-select
              v-model="standardMethodListId"
              :loading="methodLoad"
              clearable
              placeholder="请输入"
              size="small"
              @change="changeStandardMethodListId"
              @focus="methodFocus"
            >
              <el-option
                v-for="item in methods"
                :key="item.id"
                :label="item.code"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </div>
        </el-col>
        <el-col :span="12" style="text-align: right">
          <el-button size="small" type="primary" @click="sortCopy"
            >排序复制</el-button
          >
          <el-button size="small" type="primary" @click="compareAlone"
            >单独对比</el-button
          >
          <el-button size="small" type="primary" @click="compare"
            >复制</el-button
          >
        </el-col>
      </el-row>
      <div
        class="body"
        style="display: flex; flex-direction: row; height: 80vh"
      >
        <div v-loading="productTableLoading1" style="width: 50%">
          <div>需要复制的检验项</div>
          <el-table
            ref="productTable1"
            :data="productList1"
            :fit="true"
            :row-key="(row) => row.id"
            border
            header-row-class-name="header-class"
            height="90%"
            highlight-current-row
            stripe
            style="width: 98%"
            tooltip-effect="dark"
            @select="handleSelectionChange1"
            @select-all="handleSelectAll1"
          >
            <el-table-column type="selection" width="50"> </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"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              column-key="inspectionItem"
              label="检验项"
              min-width="140"
              prop="inspectionItem"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              column-key="inspectionItemSubclass"
              label="检验项子项"
              min-width="140"
              prop="inspectionItemSubclass"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              label="要求值"
              min-width="200px"
              prop="ask"
            ></el-table-column>
            <el-table-column
              label="要求描述"
              min-width="220px"
              prop="tell"
            ></el-table-column>
          </el-table>
        </div>
        <div v-loading="productTableLoading0" style="width: 50%">
          <div>当前检验项</div>
          <el-table
            ref="productTable0"
            :data="productList0"
            :fit="true"
            :row-key="(row) => row.id"
            border
            header-row-class-name="header-class"
            height="90%"
            highlight-current-row
            stripe
            style="width: 98%"
            tooltip-effect="dark"
            @select="handleSelectionChange0"
            @select-all="handleSelectAll0"
          >
            <el-table-column type="selection" width="50"> </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"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              column-key="inspectionItem"
              label="检验项"
              min-width="140"
              prop="inspectionItem"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              column-key="inspectionItemSubclass"
              label="检验项子项"
              min-width="140"
              prop="inspectionItemSubclass"
              show-overflow-tooltip
            ></el-table-column>
            <el-table-column
              label="要求值"
              min-width="200px"
              prop="ask"
            ></el-table-column>
            <el-table-column
              label="要求描述"
              min-width="220px"
              prop="tell"
            ></el-table-column>
          </el-table>
        </div>
      </div>
    </el-dialog>
    <el-dialog
      :visible.sync="selectStandardTree"
      title="选择样品"
      width="500px"
    >
      <div
        v-if="selectStandardTree"
        v-loading="selectStandardTreeLoading"
        class="body"
        style="height: 60vh; overflow-y: auto; user-select: none"
      >
        <el-row>
          <el-col :span="24">
            <el-input
              v-model="search"
              clearable
              placeholder="输入关键字进行搜索"
              size="small"
              style="margin-bottom: 5px"
              suffix-icon="el-icon-search"
              @blur="searchFilter"
              @clear="searchFilter"
              @keyup.enter.native="searchFilter"
            ></el-input>
          </el-col>
        </el-row>
        <el-tree
          ref="tree"
          :data="list"
          :default-expanded-keys="expandedKeys"
          :filter-node-method="filterNode"
          :props="{ children: 'children', label: 'label' }"
          highlight-current
          node-key="label"
          @node-click="handleNodeClick"
          @node-expand="nodeOpen"
          @node-collapse="nodeClose"
        >
          <div slot-scope="{ node, data }" class="custom-tree-node">
            <el-row>
              <el-col :span="24">
                <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-row>
          </div>
        </el-tree>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="selectStandardTree = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="activeStandardTree">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="compareDia" title="确认复制信息" width="80%">
      <div style="width: 100%">
        <el-table
          ref="compareList"
          :data="compareList"
          :fit="true"
          :row-key="(row) => row.id"
          border
          header-row-class-name="header-class"
          height="90%"
          highlight-current-row
          stripe
          style="width: 98%"
          tooltip-effect="dark"
        >
          <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"
            show-overflow-tooltip
          ></el-table-column>
          <el-table-column
            column-key="inspectionItem"
            label="检验项"
            min-width="140"
            prop="inspectionItem"
            show-overflow-tooltip
          ></el-table-column>
          <el-table-column
            column-key="inspectionItemSubclass"
            label="检验项子项"
            min-width="140"
            prop="inspectionItemSubclass"
            show-overflow-tooltip
          ></el-table-column>
          <el-table-column label="要求值" min-width="200px" prop="ask">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.ask"
                :autosize="{ minRows: 1, maxRows: 3 }"
                clearable
                placeholder="要求值"
                size="small"
                type="textarea"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column label="要求描述" min-width="220px" prop="tell">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.tell"
                :autosize="{ minRows: 1, maxRows: 3 }"
                clearable
                placeholder="要求描述"
                size="small"
                type="textarea"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column label="操作" prop="section" width="160">
            <template slot-scope="scope">
              <el-button type="text" @click="sectionUp(scope.row)"
                >区间设置</el-button
              >
            </template>
          </el-table-column>
        </el-table>
        <span slot="footer" class="dialog-footer">
          <el-button size="small" @click="compareDia = false">取 æ¶ˆ</el-button>
          <el-button
            :loading="handleCompareLoading"
            size="small"
            type="primary"
            @click="handleCompare"
            >ç¡® å®š</el-button
          >
        </span>
      </div>
    </el-dialog>
    <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%">
          <el-table-column align="center" label="序号" type="index" width="70">
          </el-table-column>
          <el-table-column align="center" label="区间">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.thing"
                clearable
                placeholder="区间"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="芯数">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.cores"
                clearable
                placeholder="芯数"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="要求值">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.ask"
                clearable
                placeholder="要求值"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="要求描述">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.tell"
                :autosize="{ minRows: 1, maxRows: 2 }"
                clearable
                placeholder="要求描述"
                size="small"
                type="textarea"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="导体材质">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.conductorMaterial"
                clearable
                placeholder="导体材质"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="导体类型">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.conductorType"
                clearable
                placeholder="导体类型"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="单价" width="120">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.price"
                clearable
                placeholder="单价"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="工时系数" width="120">
            <template slot-scope="scope">
              <el-input
                v-model="scope.row.manHour"
                clearable
                placeholder="工时系数"
                size="small"
              ></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="操作" width="70">
            <template slot-scope="scope">
              <el-button
                circle
                icon="el-icon-minus"
                size="mini"
                type="danger"
                @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">保 å­˜</el-button>
        <el-button
          icon="el-icon-plus"
          type="primary"
          @click="sectionList.push({ thing: '', price: '', manHour: '' })"
        ></el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  selectStandardProductListByMethodId,
  copyStandardProductSort,
  copyStandardProductOne,
  copyStandardProductList,
  updateStandardProductListBatch,
  selectStandardTreeList2,
  selectsStandardMethodByFLSSM,
} from "@/api/standard/standardLibrary";
export default {
  name: "BatchCopy",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  props: {
    selectTree1: {
      type: String,
      default: () => "",
    },
    standardId: {
      type: Number,
      default: () => null,
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      batchCopyDia: false,
      productTableLoading0: false,
      productList0: [],
      productList1: [],
      productTableLoading1: false,
      moreSelects: [],
      templateList: [],
      sample: "", // æ ·å“åç§°
      selectStandardTree: false,
      selectStandardTreeLoading: false,
      list: [],
      search: null,
      expandedKeys: [],
      selectTree: null,
      standardMethodListId: null,
      methodLoad: false,
      methods: [],
      oldStandardProductList: [],
      newStandardProductList: [],
      compareDia: false,
      compareList: [],
      sectionUpDia: false,
      sectionList: [],
      sectionRow: null,
      handleCompareLoading: false,
    };
  },
  mounted() {
    this.selectStandardTreeList();
  },
  // æ–¹æ³•集合
  methods: {
    // èŽ·å–å·¦è¾¹è¡¨æ ¼æ•°æ®
    getList() {
      this.batchCopyDia = true;
      this.productTableLoading0 = true;
      selectStandardProductListByMethodId({
        id: this.standardId,
        tree: this.selectTree1,
        page: 1,
      }).then((res) => {
        this.productList0 = res.data.productList;
        this.productTableLoading0 = false;
      });
    },
    // æŽ’序复制
    sortCopy() {
      const params = {
        oldStandardProductList: this.oldStandardProductList,
        newStandardProductList: this.newStandardProductList,
      };
      // æŽ’序复制
      copyStandardProductSort(params).then((res) => {
        if (res.code === 201) return;
        this.$message.success("复制成功");
        this.compareDia = false;
        this.batchCopyDia = false;
        this.$emit("refreshList");
      });
    },
    compareAlone() {
      const params = {
        oldStandardProductList: this.oldStandardProductList,
        newStandardProductList: this.newStandardProductList,
      };
      // è°ƒå–单独比较左右要求值的接口
      copyStandardProductOne(params).then((res) => {
        if (res.code === 201) return;
        this.compareDia = true;
        this.compareList = res.data;
      });
    },
    compare() {
      const params = {
        oldStandardProductList: this.oldStandardProductList,
        newStandardProductList: this.newStandardProductList,
      };
      // è°ƒå–比较左右要求值的接口
      copyStandardProductList(params).then((res) => {
        if (res.code === 201) return;
        this.compareDia = true;
        this.compareList = res.data;
      });
    },
    // æäº¤å¤åˆ¶ä¿¡æ¯
    handleCompare() {
      const params = {
        standardProductList: this.compareList,
      };
      this.handleCompareLoading = true;
      // è°ƒå–比较左右要求值的接口
      updateStandardProductListBatch(params)
        .then((res) => {
          this.handleCompareLoading = false;
          if (res.code === 201) return;
          this.$message.success("复制成功");
          this.compareDia = false;
          this.batchCopyDia = false;
          this.$emit("refreshList");
          this.compareList = res.data;
        })
        .catch((res) => {
          this.handleCompareLoading = false;
        });
    },
    // åŒºé—´è®¾ç½®
    sectionUp(row) {
      if (Array.isArray(row)) {
        // å€¼æ˜¯ä¸€ä¸ªæ•°ç»„
        if (row.length === 0) {
          return this.$message.error("请选择检验项");
        }
        this.sectionRow = {};
        this.sectionUpDia = true;
        this.sectionList = [];
      } 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) => {
            if (this.sectionRow.cores !== null) {
              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],
                cores: JSON.parse(this.sectionRow.cores)[ai],
                conductorMaterial:
                  this.sectionRow.conductorMaterial &&
                  JSON.parse(this.sectionRow.conductorMaterial)[ai],
                conductorType:
                  this.sectionRow.conductorType &&
                  JSON.parse(this.sectionRow.conductorType)[ai],
              });
            } else {
              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],
                conductorMaterial:
                  this.sectionRow.conductorMaterial &&
                  JSON.parse(this.sectionRow.conductorMaterial)[ai],
                conductorType:
                  this.sectionRow.conductorType &&
                  JSON.parse(this.sectionRow.conductorType)[ai],
              });
            }
          });
        }
      }
    },
    // åŒºé—´ä¿å­˜
    sectionLoadAdd() {
      let sectionList = [];
      let askList = [];
      let tellList = [];
      let priceList = [];
      let manHourList = [];
      let coresList = [];
      let conductorMaterialList = [];
      let conductorTypeList = [];
      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);
          coresList.push(a.cores);
          conductorMaterialList.push(a.conductorMaterial);
          conductorTypeList.push(a.conductorType);
        }
      });
      if (sectionList.length === 0) {
        this.sectionRow.section = null;
        this.sectionRow.ask = null;
        this.sectionRow.tell = null;
        this.sectionRow.price = null;
        this.sectionRow.manHour = null;
        this.sectionRow.cores = null;
        this.sectionRow.conductorMaterial = null;
        this.sectionRow.conductorType = 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.sectionRow.cores = JSON.stringify(coresList);
        this.sectionRow.conductorMaterial = JSON.stringify(
          conductorMaterialList
        );
        this.sectionRow.conductorType = JSON.stringify(conductorTypeList);
      }
      this.sectionUpDia = false;
    },
    // èŽ·å–æ ·å“åç§°æ ‘
    selectStandardTreeList() {
      this.selectStandardTreeLoading = true;
      selectStandardTreeList2().then((res) => {
        this.list = res.data;
        this.list.forEach((a) => {
          this.expandedKeys.push(a.label);
        });
        this.selectStandardTreeLoading = false;
      });
    },
    // é€‰æ‹©æ ·å“åç§°çš„回调
    handleNodeClick(val, node, el) {
      this.selectTree = "";
      this.getNodeParent(node);
      let flag = false;
      if (node.level == 3) {
        if (node.data.children.length > 0) {
          node.data.children.forEach((a) => {
            let key = Object.keys(a);
            if (!key.includes("level")) {
              flag = true;
            }
          });
        }
      }
      this.selectTree = this.selectTree.replace(" - ", "");
      if (flag) {
        this.selectTree = " -  - " + this.selectTree;
      }
      let data = this.selectTree.split(" - ");
      let data2 = "";
      for (let index = data.length - 1; index >= 0; index--) {
        data2 += " - " + data[index];
      }
      this.selectTree = data2.replace(" - ", "");
    },
    getNodeParent(val) {
      if (val.parent != null) {
        if (val.data.children === null) {
          this.selectTree += " - " + val.label + " - " + "null";
        } else {
          this.selectTree += " - " + val.label;
        }
        this.getNodeParent(val.parent);
      }
    },
    changeStandardMethodListId() {
      // æ ¹æ®æ£€éªŒæ ‡å‡†æŸ¥å³è¾¹table数据
      this.getRightList();
    },
    getRightList() {
      this.productTableLoading1 = true;
      selectStandardProductListByMethodId({
        id: this.standardMethodListId,
        tree: this.selectTree,
        page: 1,
      }).then((res) => {
        this.productList1 = res.data.productList;
        this.productTableLoading1 = false;
      });
    },
    // èšç„¦æ—¶ï¼ŒæŸ¥è¯¢æ£€éªŒæ ‡å‡†
    methodFocus() {
      this.selectsStandardMethodByFLSSM();
    },
    selectsStandardMethodByFLSSM() {
      this.methodLoad = true;
      selectsStandardMethodByFLSSM({
        tree: this.selectTree,
      }).then((res) => {
        this.methodLoad = false;
        try {
          if (
            res.data.standardMethodList.length == 0 &&
            this.selectTree.split("-").length == 5
          ) {
            let arr = this.selectTree.split("-");
            let arr0 = arr.slice(0, arr.length - 1);
            let selectTree = arr0
              .join("-")
              .substring(0, arr0.join("-").length - 1);
            selectsStandardMethodByFLSSM({
              tree: selectTree,
            }).then((ress) => {
              this.methods = ress.data.standardMethodList;
            });
          } else {
            this.methods = res.data.standardMethodList;
          }
        } catch (e) {}
      });
    },
    activeStandardTree() {
      let trees = this.selectTree.split(" - ");
      if (trees.length < 3) {
        this.$message.error("未选择对象");
        return;
      }
      if (trees[3] === undefined || trees[3] === "" || trees[3] === "- ") {
        this.sample = trees[2];
      } else {
        this.sample = trees[3];
      }
      this.selectStandardTree = false;
    },
    handleSelectionChange0(val) {
      this.oldStandardProductList = val;
    },
    handleSelectAll0(val) {
      this.oldStandardProductList = val;
    },
    handleSelectionChange1(val) {
      this.newStandardProductList = val;
    },
    handleSelectAll1(val) {
      this.newStandardProductList = val;
    },
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    searchFilter() {
      this.$refs.tree.filter(this.search);
    },
    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");
    },
  },
};
</script>
<style scoped>
.title {
  height: 60px;
  line-height: 60px;
}
.search {
  width: calc(100% - 40px);
  background-color: #fff;
  padding: 5px 40px 5px 0;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 70px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 80px);
}
.node_i {
  color: orange;
  font-size: 18px;
}
.dialog-footer {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  margin: 10px;
}
</style>
src/views/standard/standardLibrary/components/bindSupplierDensityDialogAsk.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,287 @@
<template>
  <div>
    <el-dialog
      title="厂家要求值绑定"
      :visible.sync="isShow"
      width="800px"
      @close="$emit('closeBindPartDialog')"
    >
      <div
        class="body"
        v-if="isShow"
        style="height: 500px; overflow-y: auto; padding: 5px 0"
      >
        <el-table
          ref="bindPartTable"
          :data="bindPartData"
          v-loading="bindPartTableLoading"
          highlight-current-row
          style="width: 100%"
        >
          <el-table-column
            type="index"
            width="70"
            label="序号"
          ></el-table-column>
          <el-table-column
            property="supplierName"
            label="厂家"
            width="200"
          ></el-table-column>
          <el-table-column property="ask" label="要求值"></el-table-column>
          <el-table-column property="tell" label="要求描述"></el-table-column>
          <el-table-column label="操作" width="100">
            <template slot-scope="scope">
              <el-button
                type="text"
                size="small"
                @click="updateBind(scope.row, 'edit')"
                >编辑</el-button
              >
              <el-button type="text" size="small" @click="deleteBind(scope.row)"
                >删除</el-button
              >
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!--      <div class="page" v-if="bindPartData.length > 0">-->
      <!--        <el-pagination @size-change="sizeChange" @current-change="currentChange" :current-page="page.current"-->
      <!--                       :page-size="20" layout="prev, pager, next, jumper"-->
      <!--                       :total="bindPartData.length">-->
      <!--        </el-pagination>-->
      <!--      </div>-->
      <span slot="footer" class="dialog-footer">
        <el-button @click="$emit('closeBindPartDialog')">取 æ¶ˆ</el-button>
        <el-button
          type="primary"
          @click="addBindPart('add')"
          :loading="addBindLoad"
          >新 å¢ž</el-button
        >
      </span>
    </el-dialog>
    <el-dialog
      title="厂家要求值绑定"
      :visible.sync="addBindSupplierDensityDialog"
      v-if="addBindSupplierDensityDialog"
      width="400px"
      @close="closeBindPartDialog"
      :close-on-click-modal="false"
    >
      <div class="body" v-if="addBindSupplierDensityDialog">
        <el-form
          label-position="right"
          label-width="100px"
          ref="bindSupplierDensityData"
          :rules="bindPartDataRules"
          :model="bindSupplierDensityData"
        >
          <el-form-item label="厂家:" prop="supplierName">
            <el-input
              v-model="bindSupplierDensityData.supplierName"
              size="small"
            ></el-input>
          </el-form-item>
          <el-form-item label="要求值:" prop="ask">
            <el-input
              v-model="bindSupplierDensityData.ask"
              size="small"
            ></el-input>
          </el-form-item>
          <el-form-item label="要求描述:" prop="tell">
            <el-input
              v-model="bindSupplierDensityData.tell"
              size="small"
            ></el-input>
          </el-form-item>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeBindPartDialog">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitBind" :loading="bindLoad"
          >ç¡® è®¤</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  selectSupplierAsk,
  addProductSupplierAsk,
  updateProductSupplierAsk,
  deleteProductSupplierAsk,
} from "@/api/standard/standardLibrary";
export default {
  name: "bindSupplierDensityDialogAsk",
  props: {
    bindSupplierDensityDialog: {
      type: Boolean,
      default: () => false,
    },
    currentRow: {
      // é€‰æ‹©æœ¬æ¡æ•°æ®çš„信息
      type: Object,
      default: () => {},
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.bindSupplierDensityDialog,
      bindPartData: [],
      addBindSupplierDensityDialog: false,
      bindSupplierDensityData: {
        supplierName: null, // åނ家
        ask: null,
        tell: null,
        supplierAskId: null,
      },
      bindPartDataRules: {
        supplierName: [
          { required: true, message: "请填写厂家名称", trigger: "blur" },
        ],
        ask: [{ required: true, message: "请填写要求值", trigger: "blur" }],
        tell: [{ required: true, message: "请填写要求描述", trigger: "blur" }],
      },
      bindLoad: false,
      upIndex: 0,
      addBindLoad: false,
      entity: {
        productListId: "",
      },
      page: {
        current: 1,
        size: 20,
      },
      bindPartTableLoading: false,
      buttonType: "",
    };
  },
  mounted() {
    console.log(22222, this.currentRow);
    this.entity.productListId = this.currentRow.id;
    this.searchTableData();
  },
  // æ–¹æ³•集合
  methods: {
    searchTableData() {
      this.bindPartTableLoading = true;
      selectSupplierAsk(this.entity)
        .then((res) => {
          if (res.code === 200) {
            this.bindPartData = res.data;
          }
          this.bindPartTableLoading = false;
        })
        .catch((err) => {
          console.log(err);
          this.bindPartTableLoading = false;
        });
    },
    updateBind(row, type) {
      this.buttonType = type;
      this.addBindSupplierDensityDialog = true;
      this.bindSupplierDensityData = { ...row };
    },
    deleteBind(row) {
      this.$confirm("是否删除当前数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          deleteProductSupplierAsk({ supplierAskId: row.supplierAskId })
            .then((res) => {
              if (res.code === 201) {
                return;
              }
              this.$message.success("删除成功");
              this.searchTableData();
            })
            .catch((e) => {
              this.$message.error("删除失败");
            });
        })
        .catch(() => {});
    },
    sizeChange(val) {
      this.page.size = val;
    },
    currentChange(val) {
      this.page.current = val;
    },
    addBindPart(type) {
      this.buttonType = type;
      this.addBindSupplierDensityDialog = true;
    },
    // æäº¤é›¶ä»¶ç»‘定
    submitBind() {
      this.$refs["bindSupplierDensityData"].validate((valid) => {
        if (valid) {
          // æ ¹æ®ç±»åž‹åˆ¤æ–­æ˜¯æ£€éªŒå¯¹è±¡é›¶ä»¶ç»‘定还是产品维护零件绑定
          const str = JSON.stringify({
            productListId: this.entity.productListId,
            supplierName: this.bindSupplierDensityData.supplierName,
            ask: this.bindSupplierDensityData.ask,
            tell: this.bindSupplierDensityData.tell,
            supplierAskId: this.bindSupplierDensityData.supplierAskId,
          });
          this.bindLoad = true;
          if (this.buttonType === "add") {
            addProductSupplierAsk({ str })
              .then((res) => {
                this.bindLoad = false;
                if (res.code === 200) {
                  this.$refs["bindSupplierDensityData"].resetFields();
                  this.addBindSupplierDensityDialog = false;
                  this.$message.success("操作成功");
                  this.searchTableData();
                }
              })
              .catch((err) => {
                this.bindLoad = false;
                console.log(err);
              });
          } else {
            updateProductSupplierAsk({ str })
              .then((res) => {
                this.bindLoad = false;
                if (res.code === 200) {
                  this.$refs["bindSupplierDensityData"].resetFields();
                  this.addBindSupplierDensityDialog = false;
                  this.$message.success("操作成功");
                  this.searchTableData();
                }
              })
              .catch((err) => {
                this.bindLoad = false;
                console.log(err);
              });
          }
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
    closeBindPartDialog() {
      this.$refs["bindSupplierDensityData"].resetFields();
      this.bindSupplierDensityData = {};
      this.addBindSupplierDensityDialog = false;
    },
  },
};
</script>
<style scoped>
.page {
  width: 100%;
  height: 30px;
  text-align: right;
  margin-top: 10px;
}
</style>
src/views/standard/standardLibrary/index.vue
@@ -575,11 +575,19 @@
          ></el-table-column>
          <el-table-column label="操作" prop="section" width="160">
            <template slot-scope="scope">
              <el-button type="text" @click="sectionUp(scope.row)"
              <el-button
                type="text"
                @click="sectionUp(scope.row)"
                :disabled="
                  !checkPermi(['standard:standardLibrary:upStandardProduct'])
                "
                >区间设置</el-button
              >
              <el-button
                type="text"
                :disabled="
                  !checkPermi(['standard:standardLibrary:upStandardProduct'])
                "
                @click="bindSupplierDensitySecond(scope.row)"
                >绑定厂家</el-button
              >
@@ -756,12 +764,19 @@
        ></el-button>
      </span>
    </el-dialog>
    <!-- <bindSupplierDensityDialogAsk v-if="bindSupplierDensityDialog"
                               :bindSupplierDensityDialog="bindSupplierDensityDialog"
                               :currentRow="currentSupplierDensityRow"
                               @closeBindPartDialog="closeBindSupplierDensityDialog"></bindSupplierDensityDialogAsk> -->
    <!-- <BatchCopy v-if="batchCopyDia" ref="BatchCopy" :selectTree1="selectTree"
               :standardId="standardId" @refreshList="refreshList"></BatchCopy> -->
    <bindSupplierDensityDialogAsk
      v-if="bindSupplierDensityDialog"
      :bindSupplierDensityDialog="bindSupplierDensityDialog"
      :currentRow="currentSupplierDensityRow"
      @closeBindPartDialog="closeBindSupplierDensityDialog"
    ></bindSupplierDensityDialogAsk>
    <BatchCopy
      v-if="batchCopyDia"
      ref="BatchCopy"
      :selectTree1="selectTree"
      :standardId="standardId"
      @refreshList="refreshList"
    ></BatchCopy>
  </div>
</template>
@@ -790,16 +805,14 @@
  getStandardTemplate,
  selectStandardProductByMethodId,
  selectStandardProductEnumByMethodId,
  resetTreeOfPrice,
  resetTreeOfHour,
} from "@/api/standard/standardLibrary";
import { checkPermi } from "@/utils/permission"; // æƒé™åˆ¤æ–­å‡½æ•°
//   import bindSupplierDensityDialogAsk from "../do/a5-capacity-scope/bindSupplierDensityDialogAsk.vue";
//   import BatchCopy from "../do/a5-capacity-scope/BatchCopy.vue";
import bindSupplierDensityDialogAsk from "./components/bindSupplierDensityDialogAsk.vue";
import BatchCopy from "./components/BatchCopy.vue";
export default {
  components: {
    //   BatchCopy,
    //   bindSupplierDensityDialogAsk,
    BatchCopy,
    bindSupplierDensityDialogAsk,
    draggable,
  },
  dicts: ["sys_factory", "sys_sub_lab", "sys_samp_type"],