spring
2025-03-06 b0f1b188a9c5a56df39bb957e8c9373ee126e07a
标准库重新搬迁
已添加1个文件
已修改3个文件
1754 ■■■■■ 文件已修改
public/js/clipboard.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/standard/standardLibrary.js 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standard/standardLibrary/index.vue 1432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capability/index.vue 187 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/js/clipboard.min.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
/*!
 * clipboard.js v2.0.11
 * https://clipboardjs.com/
 *
 * Licensed MIT Â© Zeno Rocha
 */
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof t?n=o(t,e):t instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==t?void 0:t.type)?n=o(t.value,e):(n=r()(t),c("copy")),n};function l(t){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var s=function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},e=t.action,n=void 0===e?"copy":e,o=t.container,e=t.target,t=t.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==e){if(!e||"object"!==l(e)||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return t?f(t,{container:o}):e?"cut"===n?a(e):f(e,{container:o}):void 0};function p(t){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function d(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function y(t,e){return(y=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(n){var o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}();return function(){var t,e=v(n);return t=o?(t=v(this).constructor,Reflect.construct(e,arguments,t)):e.apply(this,arguments),e=this,!(t=t)||"object"!==p(t)&&"function"!=typeof t?function(t){if(void 0!==t)return t;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}}function v(t){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function m(t,e){t="data-clipboard-".concat(t);if(e.hasAttribute(t))return e.getAttribute(t)}var b=function(){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&y(t,e)}(r,i());var t,e,n,o=h(r);function r(t,e){var n;return function(t){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this),(n=o.call(this)).resolveOptions(e),n.listenClick(t),n}return t=r,n=[{key:"copy",value:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(t,e)}},{key:"cut",value:function(t){return a(t)}},{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof t?[t]:t,e=!!document.queryCommandSupported;return t.forEach(function(t){e=e&&!!document.queryCommandSupported(t)}),e}}],(e=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===p(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=u()(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget,n=this.action(e)||"copy",t=s({action:n,container:this.container,target:this.target(e),text:this.text(e)});this.emit(t?"success":"error",{action:n,text:t,trigger:e,clearSelection:function(){e&&e.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(t){return m("action",t)}},{key:"defaultTarget",value:function(t){t=m("target",t);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(t){return m("text",t)}},{key:"destroy",value:function(){this.listener.destroy()}}])&&d(t.prototype,e),n&&d(t,n),r}()},828:function(t){var e;"undefined"==typeof Element||Element.prototype.matches||((e=Element.prototype).matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector),t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var u=n(828);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=u(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},879:function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var f=n(879),l=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!f.string(e))throw new TypeError("Second argument must be a String");if(!f.fn(n))throw new TypeError("Third argument must be a Function");if(f.node(t))return c=e,a=n,(u=t).addEventListener(c,a),{destroy:function(){u.removeEventListener(c,a)}};if(f.nodeList(t))return o=t,r=e,i=n,Array.prototype.forEach.call(o,function(t){t.addEventListener(r,i)}),{destroy:function(){Array.prototype.forEach.call(o,function(t){t.removeEventListener(r,i)})}};if(f.string(t))return t=t,e=e,n=n,l(document.body,t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,u,c,a}},817:function(t){t.exports=function(t){var e,n="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),n=window.getSelection(),(e=document.createRange()).selectNodeContents(t),n.removeAllRanges(),n.addRange(e),n.toString());return n}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,u=o.length;i<u;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},r={},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o(686).default;function o(t){if(r[t])return r[t].exports;var e=r[t]={exports:{}};return n[t](e,e.exports,o),e.exports}var n,r});
src/api/standard/standardLibrary.js
@@ -1,29 +1,11 @@
import request from "@/utils/request";
// æ ‡å‡†åº“树排序
export function updateTreeSort(data) {
  return request({
    url: "/standardTree/updateTreeSort",
    method: "post",
    data: data,
  });
}
// æ ‡å‡†åº“检验项排序保存接口
export function resetTreeDragBatch(data) {
  return request({
    url: "/standardTree/resetTreeDragBatch",
    method: "post",
    data: data,
  });
}
// åˆ é™¤æ ‡å‡†æ ‘的层级
export function delStandardTree(data) {
export function delStandardTree(query) {
  return request({
    url: "/standardTree/delStandardTree",
    method: "post",
    data: data,
    method: "delete",
    params: query,
  });
}
@@ -54,6 +36,15 @@
  });
}
// èŽ·å–æ ‡å‡†æ–¹æ³•æžšä¸¾
export function selectStandardMethods(query) {
  return request({
    url: "/standardMethod/selectStandardMethods",
    method: "get",
    params: query,
  });
}
// ç»™æ ‡å‡†æ ‘添加检验标准
export function addStandardMethodList(data) {
  return request({
@@ -72,24 +63,6 @@
  });
}
// ä¿®æ”¹æ ‡å‡†æ ‘
export function updateStandardTree(data) {
  return request({
    url: "/standardTree/updateStandardTree",
    method: "post",
    data: data,
  });
}
// æ ¹æ®æ ‡å‡†æ ‘进行标准查询
export function selectsStandardMethodByFLSSM(query) {
  return request({
    url: "/standardTree/selectsStandardMethodByFLSSM",
    method: "get",
    params: query,
  });
}
// ä¿®æ”¹æ ‡å‡†åº“中的要求值
export function upStandardProductList(data) {
  return request({
@@ -100,29 +73,20 @@
}
// åˆ é™¤æ ‡å‡†æ ‘下的检验标准
export function delStandardMethodByFLSSM(data) {
export function delStandardMethodByFLSSM(query) {
  return request({
    url: "/standardTree/delStandardMethodByFLSSM",
    method: "post",
    data: data,
    method: "delete",
    params: query,
  });
}
// åˆ é™¤æ ‡å‡†æ ‘下的检验标准
export function delStandardProductByIds(data) {
// åˆ é™¤æ ‡å‡†æ ‘下的检验项目
export function delStandardProductByIds(query) {
  return request({
    url: "/standardTree/delStandardProductByIds",
    method: "post",
    data: data,
  });
}
// æ–°å¢žæ ‡å‡†æ ‘下的检验项目
export function addStandardProduct(data) {
  return request({
    url: "/standardTree/addStandardProduct",
    method: "post",
    data: data,
    method: "delete",
    params: query,
  });
}
@@ -135,57 +99,12 @@
  });
}
// ä¿®æ”¹æ ‡å‡†åº“中的区间设置
export function updateSection(data) {
  return request({
    url: "/standardTree/updateSection",
    method: "post",
    data: data,
  });
}
// èŽ·å–äº§å“æž¶æž„
export function upStandardProducts(data) {
  return request({
    url: "/standardTree/upStandardProducts",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢åŽŸå§‹è®°å½•æ¨¡æ¿æžšä¸¾
export function getStandardTemplate(query) {
  return request({
    url: "/StandardTemplate/getStandardTemplate",
    method: "get",
    params: query,
  });
}
// èŽ·å–æ ‡å‡†æ–¹æ³•æžšä¸¾
export function selectStandardMethods(query) {
  return request({
    url: "/standardMethod/selectStandardMethods",
    method: "get",
    params: query,
  });
}
// æ‰¹é‡ç¼–辑查询检验项目
export function selectStandardProductByMethodId(data) {
  return request({
    url: "/standardTree/selectStandardProductByMethodId",
    method: "post",
    data: data,
  });
}
// æ‰¹é‡ç¼–辑查询所有检验项目和检验子项枚举
export function selectStandardProductEnumByMethodId(data) {
  return request({
    url: "/standardTree/selectStandardProductEnumByMethodId",
    method: "post",
    data: data,
  });
}
@@ -206,3 +125,12 @@
    data: data,
  });
}
// æ ¹æ®æ ‡å‡†æ ‘进行标准查询
export function selectsStandardMethodByFLSSM(query) {
  return request({
    url: "/standardTree/selectsStandardMethodByFLSSM",
    method: "get",
    params: query,
  });
}
src/views/standard/standardLibrary/index.vue
@@ -27,16 +27,6 @@
  opacity: 1;
}
.custom-tree-node .el-icon-edit {
  color: #3a7bfa;
  opacity: 0;
  font-size: 18px;
}
.custom-tree-node:hover .el-icon-edit {
  opacity: 1;
}
.node_i {
  color: orange;
  font-size: 18px;
@@ -129,6 +119,10 @@
  background: rgba(0, 0, 0, 0.05) !important;
}
>>>.is-disabled .el-textarea__inner {
  background: rgba(0, 0, 0, 0.05) !important;
}
>>>.el-table__body-wrapper::-webkit-scrollbar {
  height: 14px;
  /* è®¾ç½®æ»šåŠ¨æ¡å®½åº¦ */
@@ -192,24 +186,23 @@
    <div class="left">
      <el-row>
        <el-col :span="20">
          <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small" style="margin-bottom: 5px"
            suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"></el-input>
          <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 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="addDia = true"></el-button>
        <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 ref="tree" v-loading="treeLoad" :data="list" :default-expanded-keys="expandedKeys"
        :filter-node-method="filterNode" :props="{ children: 'children', label: 'label' }" highlight-current
        node-key="label" style="
      <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label"
        :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current v-loading="treeLoad"
        :expand-on-click-node="false" :default-expanded-keys="expandedKeys" style="
          height: calc(100% - 30px);
          overflow-y: scroll;
          scrollbar-width: none;
        " @node-click="handleNodeClick">
        <div slot-scope="{ node, data }" class="custom-tree-node">
        ">
        <div class="custom-tree-node" slot-scope="{ node, data }">
          <el-row style="width: 100%">
            <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left">
            <el-col :span="21" :class="{ sort: node.level > 3 }" :title="data.label" style="text-align: left">
              <span>
                <i :class="`node_i ${data.children != undefined
                  ? data.code === '[1]'
@@ -220,21 +213,11 @@
                {{ data.label }}
              </span>
            </el-col>
            <el-col v-if="
              checkPermi(['standard:standardLibrary:delStandardTree']) &&
            <el-col :span="2" style="text-align: right" v-if="
              (node.data.children === null ||
                node.data.children === undefined)
            " :span="2" style="text-align: right">
              <el-button size="mini" type="text" @click.stop="editTreeName(node.data)">
                <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)
            " :span="2" style="text-align: right">
              <el-button size="mini" type="text" @click.stop="remove(node, data)">
            ">
              <el-button type="text" size="mini" @click.stop="remove(node, data)">
                <i class="el-icon-delete"></i>
              </el-button>
            </el-col>
@@ -244,213 +227,315 @@
    </div>
    <div class="right">
      <el-row class="title" style="width: 100%">
        <el-col :span="24" style="font-size: 14px; color: #999">{{
        <el-col :span="20" style="font-size: 14px; color: #999">{{
          selectTree
        }}</el-col>
        <el-button size="small" type="primary" style="position: absolute; right: 100px; top: 1px"
          @click="uploadDia = true" v-if="inExcelOfTreePower">导入</el-button>
        <el-button size="small" type="primary" @click="handleMore" style="position: absolute; right: 5px; top: 1px"
          v-if="upStandardProduct">批量编辑</el-button>
      </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"
          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">
      <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 label="标准名称" prop="name" show-overflow-tooltip></el-table-column>
          <el-table-column label="备注" prop="remark" show-overflow-tooltip></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>
      </el-row>
      <el-row v-loading="tableLoad2" class="product_table">
        <el-table id="templateParamTable" ref="productTable" v-loading="productTableLoading" :data="productList"
          :fit="true" :row-class-name="tableRowClassName" border 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-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 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 label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass"
          <el-table-column prop="sample" label="产品" min-width="100" show-overflow-tooltip></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 label="子实验室" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column>
          <el-table-column label="要求值" min-width="200px" prop="ask">
          <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 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>
              <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 label="要求描述" min-width="220px" prop="tell">
          <el-table-column prop="tell" label="要求描述" min-width="220px">
            <template slot-scope="scope">
              <el-input v-if="
                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>
              <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 label="试验方法" prop="method" width="200">
          <el-table-column prop="method" label="试验方法" width="200">
            <template slot-scope="scope">
              <el-select v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.methodS" clearable placeholder="试验方法" size="small" @change="(value) => upStandardProductListOfMethodS(value, scope.row.id)
                ">
                <el-option v-for="(a, i) in scope.row.method &&
                  JSON.parse(scope.row.method)" :key="i" :label="a" :value="a"></el-option>
              <el-select v-model="scope.row.methodS" size="small" placeholder="试验方法" @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 label="条件" min-width="140" prop="radius" show-overflow-tooltip>
          <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-select v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.radius" clearable placeholder="条件" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id)
                ">
                <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>
              <span v-else>{{ scope.row.radius }}</span>
            </template>
          </el-table-column>
          <el-table-column label="计量单位" prop="unit" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="单价(元)" prop="price" width="120">
            <template slot-scope="scope">
              <el-input v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.price" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id)
                ">
              <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 label="工时系数" prop="manHour" width="120">
          <el-table-column prop="manHour" label="工时系数" width="120">
            <template slot-scope="scope">
              <el-input v-if="
                checkPermi(['standard:standardLibrary:upStandardProduct'])
              " v-model="scope.row.manHour" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id)
                ">
              <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 label="工时分组" prop="manHourGroup" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="模板" prop="templateId" width="200">
          <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" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct'])
                " filterable size="small" @change="(value) =>
                  upStandardProductListOfTemplate(value, scope.row.id)
                  ">
              <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 label="区间" prop="section" show-overflow-tooltip width="160"></el-table-column>
          <el-table-column label="操作" prop="section" width="120">
          <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)" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct'])
                ">区间设置</el-button>
              <el-button type="text" @click="sectionUp(scope.row)">区间设置</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="currentPage" :page-size="300" :total="total" layout="total"
          style="position: absolute; right: 16px; bottom: 1px" @current-change="handleCurrentChange">
        <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>
        <!-- <p style="text-align: right;margin-right: 20px;color: #333;">共{{ total }}条</p> -->
      </el-row>
    </div>
    <el-dialog :visible.sync="addDia" title="分类添加" width="400px">
    <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 :offset="1" :span="16">
            <el-input v-model="addOb.model" clearable placeholder="请输入型号" size="small"
          <el-col :span="16" :offset="1">
            <el-input v-model="addOb.model" placeholder="请输入型号" clearable size="small"
              @keyup.enter.native="addStandardTree"></el-input>
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="addLoad" type="primary" @click="addStandardTree">ç¡® å®š</el-button>
        <el-button type="primary" @click="addStandardTree" :loading="addLoad">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="updateDia" title="分类修改" 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 :offset="1" :span="16">
            <el-input v-model="addOb.model" clearable placeholder="请输入型号" size="small"
              @keyup.enter.native="updateStandardTree"></el-input>
          </el-col>
        </el-row>
    <el-dialog title="批量编辑" top="5vh" :visible.sync="moreEdit" width="90%" class="more-edit">
      <div class="body" style="display: flex; flex-direction: column; height: 85vh">
        <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" clearable>
                  <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: 25%">
              <el-col :span="6" style="text-align: right"> æ˜¯å¦å¯ç”¨ï¼š</el-col>
              <el-col :span="16">
                <el-select v-model="moreInfo.state" size="small" filterable placeholder="是否启用" style="width: 100%"
                  :disabled="moreSelects.length == 0" clearable>
                  <el-option label="启用" :value="1"></el-option>
                  <el-option label="不启用" :value="0"></el-option>
                </el-select>
              </el-col>
            </el-row>
            <el-row style="width: 100%; margin-top: 8px">
              <el-col :span="24" style="display: flex; align-items: center; justify-content: end">
                <el-button @click="clearProduct(1)" size="small" type="danger">重置单价</el-button>
                <el-button @click="clearProduct(2)" size="small" type="danger">重置工时系数</el-button>
                <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="96%" 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"
            highlight-current-row>
            <el-table-column type="selection" width="50"> </el-table-column>
            <el-table-column prop="sample" label="产品" min-width="100" show-overflow-tooltip></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="dict.type.sys_sub_lab" :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>
      <span slot="footer" class="dialog-footer">
        <el-button @click="updateDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="updateLoad" type="primary" @click="updateStandardTree">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :visible.sync="sectionUpDia" title="区间设置" width="80%">
    <el-dialog title="区间设置" :visible.sync="sectionUpDia" width="70%" :close-on-click-modal="false">
      <div style="width: 100%; text-align: left">
        <el-button id="copyBtn" v-if="sectionList.length > 0" :data-clipboard-text="JSON.stringify(sectionList)"
          type="primary" size="mini" @click="copySectionConfig">复制区间设置</el-button>
        <el-button type="primary" size="mini" @click="openImportSectionsConfig">导入区间设置</el-button>
        <el-dialog :visible.sync="importSectionsConfigDia" width="30%" title="导入区间配置">
          <el-input type="textarea" :rows="3" v-model="sectionsConfigText"></el-input>
          <span slot="footer" class="dialog-footer">
            <el-button @click="importSectionsConfigDia = false">取 æ¶ˆ</el-button>
            <el-button type="primary" @click="confirmImportConfig">确认</el-button>
          </span>
        </el-dialog>
      </div>
      <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 :data="sectionList" border style="width: 100%" height="350px">
          <el-table-column type="index" label="序号" width="70" align="center">
          </el-table-column>
          <el-table-column align="center" label="区间">
          <el-table-column label="区间" align="center">
            <template slot-scope="scope">
              <el-input v-model="scope.row.thing" clearable placeholder="区间" size="small"></el-input>
              <el-input size="small" v-model="scope.row.thing" clearable placeholder="区间"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="芯数">
          <el-table-column label="要求值" align="center">
            <template slot-scope="scope">
              <el-input v-model="scope.row.cores" clearable placeholder="芯数" size="small"></el-input>
              <el-input size="small" v-model="scope.row.ask" clearable placeholder="要求值"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="要求值">
          <el-table-column label="要求描述" align="center">
            <template slot-scope="scope">
              <el-input v-model="scope.row.ask" clearable placeholder="要求值" size="small"></el-input>
              <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 align="center" label="要求描述">
          <el-table-column label="单价" align="center" width="120">
            <template slot-scope="scope">
              <el-input v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 2 }" clearable placeholder="要求描述"
                size="small" type="textarea"></el-input>
              <el-input size="small" v-model="scope.row.price" clearable placeholder="单价"></el-input>
            </template>
          </el-table-column>
          <!-- <el-table-column align="center" label="导体材质">
          <el-table-column label="工时系数" align="center" width="120">
            <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>
              <el-input size="small" v-model="scope.row.manHour" clearable placeholder="工时系数"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="工时系数" width="120">
          <el-table-column label="操作" width="70" align="center">
            <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"
              <el-button size="mini" type="danger" icon="el-icon-minus" circle
                @click="sectionList.splice(scope.$index, 1)"></el-button>
            </template>
          </el-table-column>
@@ -458,51 +543,64 @@
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="sectionUpDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="sectionLoad" type="primary" @click="sectionLoadAdd">保 å­˜</el-button>
        <el-button icon="el-icon-plus" type="primary" @click="sectionList.push({ thing: '' })"></el-button>
        <el-button type="primary" @click="sectionLoadAdd" :loading="sectionLoad">保 å­˜</el-button>
        <el-button type="primary" @click="
          sectionList.push({
            thing: '',
            price: sectionRow.price,
            manHour: sectionRow.manHour,
          })
          " icon="el-icon-plus"></el-button>
      </span>
    </el-dialog>
    <el-dialog title="数据导入" :visible.sync="uploadDia" width="500px">
      <div style="margin: 0 auto">
        <el-upload ref="upload" drag :action="javaApi + '/standardTree/inExcelOfTree' + '/' + 'false'
          " :headers="uploadHeader" :file-list="fileList" name="file" :auto-upload="false" accept=".xlsx" :limit="1"
          :on-change="beforeUpload" :on-success="onSuccess" :on-error="onError">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="uploadDia = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitUpload()" :loading="uploading">上 ä¼ </el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import Sortable from "sortablejs";
import draggable from "vuedraggable";
import Clipboard from "../../../../public/js/clipboard.min.js";
import {
  updateTreeSort,
  resetTreeDragBatch,
  delStandardTree,
  selectStandardTreeList,
  obtainItemParameterList,
  selectTestObjectByName,
  selectStandardMethods,
  addStandardMethodList,
  addStandardTree,
  updateStandardTree,
  selectsStandardMethodByFLSSM,
  upStandardProductList,
  delStandardMethodByFLSSM,
  delStandardProductByIds,
  selectStandardProductListByMethodId,
  updateSection,
  upStandardProducts,
  getStandardTemplate,
  selectStandardProductByMethodId,
  selectStandardProductEnumByMethodId,
} from "@/api/standard/standardLibrary";
  resetTreeOfPrice,
  resetTreeOfHour,
  selectsStandardMethodByFLSSM,
} from '@/api/standard/standardLibrary.js'
export default {
  name: 'StandardLibrary',
  components: {
    draggable,
  },
  dicts: ["sys_factory", "sys_sub_lab", "sys_samp_type"],
  dicts: ['sys_sub_lab'],
  data() {
    return {
      tableKey: "productList",
      importSectionsConfigDia: false,
      sectionsConfigText: "", //导入的区间配置文本
      search: null,
      list: [],
      selectTree: "",
      factory: [],
      // factory: [],
      addDia: false,
      updateDia: false, // ä¿®æ”¹æ ‘名字弹框
      oldModel: "",
      addOb: {
        factory: null,
        laboratory: null,
@@ -512,26 +610,30 @@
      },
      laboratory: [],
      addLoad: false,
      updateLoad: false,
      sampleType: [],
      // sampleType: [],
      sample: [],
      treeLoad: false,
      addPower: false,
      addPower: true,
      standardList: [],
      standardEnum: [],
      addStandardDia: false,
      standardId: null,
      addStandardMethod: true,
      addLoad2: false,
      productList: [],
      productTableLoading: false,
      tableLoad: false,
      tableLoad2: false,
      upStandardProduct: false,
      delStandardMethod: false,
      selects: [],
      delStandardProduct: false,
      addProductDia: false,
      productId: null,
      addStandardProduct: false,
      addLoad3: false,
      productEnum: [],
      expandedKeys: [],
      filters: [],
      // filters: [],
      sectionUpDia: false,
      sectionLoad: false,
      sectionRow: null,
@@ -540,9 +642,21 @@
      total: 0,
      currentPage: 1,
      standardId: 0,
      moreEdit: false,
      moreEditLoad: false,
      moreSelects: [],
      total0: 0,
      currentPage0: 1,
      productList0: [],
      moreInfo: {
        ask: "",
        tell: "",
        methodS: "",
        price: "",
        manHour: "",
        templateId: "",
        state: null,
      },
      methodList: [],
      productTableLoading0: false,
      filters0: [],
@@ -551,154 +665,104 @@
      inspectionItem: null,
      inspectionItemSubclass: null,
      sonLaboratory: null,
      token: null,
      uploadDia: false,
      fileList: [],
      inExcelOfTreePower: true,
      uploading: false,
      isEquipment: true,
      isHaveChildren: {},
      sortTable: null,
      isShowCopy: false,
      VUE_APP_BASE_API: process.env.VUE_APP_BASE_API,
      moreSelects: [],
      isEquipment: false,
    };
  },
  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.selectEnumByCategoryForFactory();
    // this.getPower();
    // this.selectEnumByCategoryForFactory();
    this.selectStandardTreeList();
    this.obtainItemParameterList();
    // this.selectEnumByCategoryForsampleType()
    this.selectTestObjectByName();
    this.selectStandardMethods();
    this.selectEnumByCategoryForSonLaboratory();
    this.selectEnumByCategoryForsampleType();
    // this.selectEnumByCategoryForDevice();
    // this.selectEnumByCategory();
    // this.selectEnumByCategoryForValue();
    // this.selectEnumByCategoryForSpecial();
    // this.selectEnumByCategoryForInspectionValueType();
    // this.selectEnumByCategoryForSonLaboratory();
    this.getStandardTemplate();
    this.selectStandardMethodsSec();
    this.token = {
      token: sessionStorage.getItem("token"),
    };
    this.selectStandardMethods();
  },
  methods: {
    // ä¿®æ”¹æœ€å­çº§åå­—
    editTreeName(info) {
      this.updateDia = true;
      this.oldModel = info.label;
    },
    // æ‹–拽时判定目标节点能否被放置
    // 'prev'、'inner' å’Œ 'next',前、插入、后
    allowDrop(draggingNode, dropNode, type) {
      if (draggingNode.level !== 3) return;
      if (draggingNode.data.level === dropNode.data.level) {
        if (draggingNode.data.parentId === dropNode.data.parentId) {
          return type === "prev" || type === "next";
        } else {
          return false;
        }
      } else {
        // ä¸åŒçº§è¿›è¡Œå¤„理
        return false;
      }
    },
    // tree拖拽成功完成时触发的事件
    handleDrop(draggingNode, dropNode, dropType, ev) {
      try {
        this.treeLoad = true;
        updateTreeSort(this.list).then((res) => {
          if (res.code === 200) {
            this.$message.success("操作成功");
    confirmImportConfig() { },
    openImportSectionsConfig() {
      // this.importSectionsConfigDia = true
      this.$confirm("确认导入复制的区间配置?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          if (
            this.sectionsConfigText == null ||
            this.sectionsConfigText == "" ||
            this.sectionsConfigText == undefined
          ) {
            this.$message.error("未识别到剪切板的有效文本");
            return;
          } else {
            let parseConfig = JSON.parse(this.sectionsConfigText);
            if (!Array.isArray(parseConfig)) {
              this.$message.error("错误的数据格式");
              return;
            }
            parseConfig.forEach((ele) => {
              this.sectionList.push(ele);
            });
            this.$message.success("导入成功");
          }
          this.treeLoad = false;
        });
      } catch (e) {
        this.treeLoad = false;
        console.log("e----", e);
      }
        })
        .catch(() => { });
    },
    rowDrop(methodId) {
      const that = this;
      const tbody = document.querySelector(
        "#templateParamTable .el-table__body-wrapper tbody"
      );
      if (!this.sortTable) {
        this.sortTable = Sortable.create(tbody, {
          animation: 200, //动画时长
          handle: ".el-table__row", //可拖拽区域class
          //拖拽中事件
          onMove: ({ dragged, related }) => {
            const oldRow = that.productList[dragged.rowIndex]; //旧位置数据
            const newRow = that.productList[related.rowIndex]; //被拖拽的新数据
          },
          //拖拽结束事件
          onEnd: (evt) => {
            const curRow = that.productList.splice(evt.oldIndex, 1)[0]; // å½“前被拖拽的信息
            that.productList.splice(evt.newIndex, 0, curRow);
            let arr = [];
            this.productList.forEach((item, index) => {
              const obj = Object.assign({
                sort: index,
                id: item.id,
              });
              arr.push(obj);
            });
            this.productTableLoading = true;
            // æ‹–拽完成后传给后端保存数据
            resetTreeDragBatch({ params: arr }).then((res) => {
              if (res.code === 200) {
                this.$message.success("保存成功");
              }
              this.productTableLoading = false;
            });
          },
        });
      }
    //复制区间配置
    copySectionConfig() {
      // åˆ›å»º clipboard å®žä¾‹,获取按钮元素
      let clipboard = new Clipboard("#copyBtn");
      /* æ³¨æ„æ­¤äº‹ä»¶ç›‘听是异步的 */
      clipboard.on("success", (e) => {
        this.sectionsConfigText = e.text;
        e.clearSelection();
        // é‡Šæ”¾å†…å­˜
        clipboard.destroy();
        // å¤åˆ¶æˆåŠŸæç¤º
        this.$message.success("已复制到剪贴板");
      });
      // å¤åˆ¶å¤±è´¥
      clipboard.on("error", (e) => {
        // é‡Šæ”¾å†…å­˜
        clipboard.destroy();
        // å¤åˆ¶å¤±è´¥æç¤º
        this.$message.error("复制失败");
      });
    },
    hasChildWithId(nodes, name) {
      for (let node of nodes) {
        const comName = node.label + node.code;
        if (comName == name) {
          //判断递归结束条件
          this.isHaveChildren = node;
          return node;
        } else if (node.children && node.children.length > 0) {
          //判断children是否有数据
          this.hasChildWithId(node.children, name); //递归调用
        }
      }
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    // è°ƒç”¨tree过滤方法 ä¸­æ–‡è‹±è¿‡æ»¤
    filterNode(value, data, node) {
      if (!value) {    //如果数据为空,则返回true,显示所有的数据项
        return true
      }
      // æŸ¥è¯¢åˆ—表是否有匹配数据,将值小写,匹配英文数据
      let val = value.toLowerCase()
      return this.chooseNode(val, data, node) // è°ƒç”¨è¿‡æ»¤äºŒå±‚方法
    },
    // è¿‡æ»¤çˆ¶èŠ‚ç‚¹ / å­èŠ‚ç‚¹ (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
    chooseNode(value, data, node) {
      if (data.label.indexOf(value) !== -1) {
        return true
      }
      const level = node.level
      // å¦‚果传入的节点本身就是一级节点就不用校验了
      if (level === 1) {
        return false
      }
      // å…ˆå–当前节点的父节点
      let parentData = node.parent
      // éåŽ†å½“å‰èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹
      let index = 0
      while (index < level - 1) {
        // å¦‚果匹配到直接返回,此处name值是中文字符,enName是英文字符。判断匹配中英文过滤
        if (parentData.data.label.indexOf(value) !== -1) {
          return true
        }
        // å¦åˆ™çš„话再往上一层做匹配
        parentData = parentData.parent
        index++
      }
      // æ²¡åŒ¹é…åˆ°è¿”回false
      return false
    },
    searchFilter() {
      this.$refs.tree.filter(this.search);
    },
@@ -707,11 +771,6 @@
    },
    handleNodeClick(val, node, el) {
      //树的值
      if (node.childNodes.length === 0) {
        this.isShowCopy = true;
      } else {
        this.isShowCopy = false;
      }
      this.total = 0;
      this.currentPage = 1;
      this.selectTree = "";
@@ -723,9 +782,7 @@
        data2 += " - " + data[index];
      }
      this.selectTree = data2.replace(" - ", "");
      if (node.childNodes.length === 0) {
        this.selectsStandardMethodByFLSSM();
      }
      this.selectsStandardMethodByFLSSM();
      let trees = this.selectTree.split(" - ");
      this.addOb.factory = trees[0];
      this.addOb.laboratory = trees[1];
@@ -757,10 +814,12 @@
            data2 += " - " + data[index];
          }
          this.selectTree = data2.replace(" - ", "");
          delStandardTree({ tree: this.selectTree }).then((res) => {
          delStandardTree({ tree: this.selectTre }).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 = [];
@@ -777,28 +836,85 @@
        }
      });
    },
    selectEnumByCategoryForFactory() {
      this.getConfigKey("sys_factory").then((response) => {
        this.factory = response.msg;
      });
    },
    selectEnumByCategoryForSonLaboratory() {
      let arr = [];
      this.getConfigKey("sys_sub_lab").then((response) => {
        arr = response.msg;
      });
      arr.forEach((a) => {
        this.filters.push({
          text: a.label,
          value: a.value,
        });
      });
    },
    selectEnumByCategoryForsampleType() {
      this.getConfigKey("sys_samp_type").then((response) => {
        this.sampleType = response.msg;
      });
    },
    // 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;
      selectStandardTreeList().then((res) => {
@@ -845,7 +961,22 @@
        this.standardEnum = data;
      });
    },
    // æäº¤åˆ†ç±»æ·»åŠ 
    addStandardMethodList() {
      if (this.standardId == null || this.standardId == "") {
        this.$message.error("标准方法未选择");
        return;
      }
      this.addLoad2 = true;
      addStandardMethodList({
        standardId: this.standardId,
        tree: this.selectTree,
      }).then((res) => {
        this.addLoad2 = false;
        this.addStandardDia = false;
        this.$message.success("添加成功");
        this.selectsStandardMethodByFLSSM();
      });
    },
    addStandardTree() {
      if (this.addOb.sampleType == null || this.addOb.sampleType == "") {
        this.$message.error("对象不存在");
@@ -856,74 +987,92 @@
        return;
      }
      this.addLoad = true;
      addStandardTree(this.addOb)
        .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,
            });
      addStandardTree(this.addOb).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;
        this.$tab.refreshPage();
      })
        .catch((e) => {
          this.addDia = false;
          this.addLoad = false;
        });
    },
    // ä¿®æ”¹åž‹å·
    updateStandardTree() {
      if (this.addOb.sampleType == null || this.addOb.sampleType == "") {
        this.$message.error("对象不存在");
        return;
      }
      if (this.addOb.model == null || this.addOb.model == "") {
        this.$message.error("请填写型号");
        return;
      }
      this.addOb.oldModel = this.oldModel;
      this.updateLoad = true;
      updateStandardTree(this.addOb)
        .then((res) => {
          if (res.code === 201) {
            this.updateLoad = false;
            return;
          }
          this.$message.success("添加成功");
          this.$tab.refreshPage();
          // this.selectStandardTreeList();
          this.updateDia = false;
          this.updateLoad = false;
        })
        .catch((e) => {
          this.updateDia = false;
          this.updateLoad = false;
        });
    },
    selectsStandardMethodByFLSSM() {
      this.tableLoad = true;
      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 {
          this.productList = [];
      })
        .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 {
            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;
      let inExcelOfTreePower = 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;
        }
        if (power[i].menuMethod == "inExcelOfTree") {
          inExcelOfTreePower = true;
        }
      }
      this.addPower = add;
      this.addStandardMethod = addStandardMethod;
      this.upStandardProduct = upStandardProduct;
      this.delStandardMethod = delStandardMethod;
      this.delStandardProduct = delStandardProduct;
      this.addStandardProduct = addStandardProduct;
      this.delStandardTree = delStandardTree;
      this.inExcelOfTreePower = inExcelOfTreePower;
    },
    upStandardProductList(value, index) {
      upStandardProductList({
@@ -945,43 +1094,29 @@
          id: index,
          tell: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
      })
        .then((res) => {
          if (res.code == 201) {
            this.$message.error("未保存");
            return;
          }
          this.$message.success("已保存");
        });
    },
    // æ ‡å‡†åº“选择实验方法的回调
    upStandardProductListOfMethodS(value, index) {
      upStandardProductList({
        str: JSON.stringify({
          id: index,
          methodS: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
    },
    // æ ‡å‡†åº“选择条件的回调
    upStandardProductListOfRadius(value, index) {
      upStandardProductList({
        str: JSON.stringify({
          id: index,
          radius: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
      })
        .then((res) => {
          if (res.code == 201) {
            this.$message.error("未保存");
            return;
          }
          // this.$message.success('已保存')
        });
    },
    upStandardProductListOfPrice(value, index) {
      upStandardProductList({
@@ -989,13 +1124,14 @@
          id: index,
          price: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
      })
        .then((res) => {
          if (res.code == 201) {
            this.$message.error("未保存");
            return;
          }
          // this.$message.success('已保存')
        });
    },
    upStandardProductListOfManHour(value, index) {
      upStandardProductList({
@@ -1003,13 +1139,14 @@
          id: index,
          manHour: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
      })
        .then((res) => {
          if (res.code == 201) {
            this.$message.error("未保存");
            return;
          }
          // this.$message.success('已保存')
        });
    },
    upStandardProductListOfTemplate(value, index) {
      upStandardProductList({
@@ -1017,13 +1154,32 @@
          id: index,
          templateId: value,
        }),
      }).then((res) => {
        if (res.code == 201) {
          this.$message.error("未保存");
          return;
        }
        this.$message.success("已保存");
      });
      })
        .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;
          delStandardMethodByFLSSM({ id: id, }).then((res) => {
            if (res.code == 201) {
              return;
            }
            this.$message.success("已删除");
            this.selectsStandardMethodByFLSSM();
          });
        })
        .catch(() => { });
    },
    handleSelectionChange(val) {
      this.selects = [];
@@ -1031,15 +1187,59 @@
        this.selects.push(a.id);
      });
    },
    refreshList() {
      const index = this.standardList.findIndex(
        (item) => item.id == this.standardId
      );
      if (index > -1) {
        this.rowClick(this.standardList[index]);
    delStandardProductByIds() {
      if (this.selects.length == 0) {
        this.$message.error("未选中数据");
        return;
      }
      this.$confirm(
        "是否删除当前选中 " + this.selects.length + " æ¡æ•°æ®?",
        "警告",
        {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        }
      )
        .then(() => {
          this.tableLoad = true;
          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;
@@ -1057,31 +1257,6 @@
          });
        }, 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;
        // }
        // this.$nextTick(() => {
        //   this.rowDrop(row.id);
        // });
      });
    },
    toggleSelection(row) {
@@ -1145,7 +1320,6 @@
        });
      }
    },
    // è®¾ç½®åŒºé—´
    sectionUp(row) {
      if (Array.isArray(row)) {
        // å€¼æ˜¯ä¸€ä¸ªæ•°ç»„
@@ -1162,86 +1336,48 @@
        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],
              });
            }
            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 = [];
      // 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);
          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
        // this.sectionRow.cores = null;
        // this.sectionRow.conductorMaterial = null;
        // this.sectionRow.conductorType = 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.sectionRow.cores = JSON.stringify(coresList);
        // this.sectionRow.conductorMaterial = JSON.stringify(
        //   conductorMaterialList
        // );
        // this.sectionRow.conductorType = JSON.stringify(conductorTypeList);
        this.sectionRow.price = JSON.stringify(priceList);
        this.sectionRow.manHour = JSON.stringify(manHourList);
      }
      this.sectionLoad = true;
      if (this.moreSelects.length === 0) {
        updateSection({
        upStandardProductList({
          str: JSON.stringify({
            id: this.sectionRow.id,
            section: this.sectionRow.section,
@@ -1249,19 +1385,17 @@
            tell: this.sectionRow.tell,
            price: this.sectionRow.price,
            manHour: this.sectionRow.manHour,
            // cores: this.sectionRow.cores,
            // conductorMaterial: this.sectionRow.conductorMaterial,
            // conductorType: this.sectionRow.conductorType,
          }),
        }).then((res) => {
          this.sectionLoad = false;
          if (res.code == 201) {
            this.$message.error("未保存");
            return;
          }
          this.$message.success("已保存");
          this.sectionUpDia = false;
        });
        })
          .then((res) => {
            this.sectionLoad = false;
            if (res.code == 201) {
              this.$message.error("未保存");
              return;
            }
            this.$message.success("已保存");
            this.sectionUpDia = false;
          });
      } else {
        upStandardProducts({
          ids: JSON.stringify(this.moreSelects.map((a) => a.id)),
@@ -1271,9 +1405,6 @@
            tell: this.sectionRow.tell,
            price: this.sectionRow.price,
            manHour: this.sectionRow.manHour,
            // cores: this.sectionRow.cores,
            // conductorMaterial: this.sectionRow.conductorMaterial,
            // conductorType: this.sectionRow.conductorType,
          },
        }).then((res) => {
          this.sectionLoad = false;
@@ -1313,7 +1444,17 @@
        this.tableLoad2 = false;
      });
    },
    selectStandardMethodsSec() {
    async handleMore() {
      if (
        (!this.standardId && this.standardId != 0) ||
        this.standardList.length == 0
      ) {
        return this.$message.error("请选择实验室、样品");
      }
      await this.getList();
      this.moreEdit = true;
    },
    selectStandardMethods() {
      selectStandardMethods().then((res) => {
        let data = [];
        res.data.forEach((a) => {
@@ -1323,6 +1464,41 @@
          });
        });
        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];
        }
      }
      upStandardProducts({
        ids: JSON.stringify(this.moreSelects.map((a) => a.id)),
        standardProductList: this.moreInfo,
      },).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) {
@@ -1355,22 +1531,23 @@
        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
              );
            }
      })
        .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;
@@ -1381,24 +1558,103 @@
        id: this.standardId,
        tree: this.selectTree,
        item: this.inspectionItem,
      }).then((res) => {
        this.filters0 = [];
        this.filters1 = [];
        res.data.item.forEach((a) => {
          this.filters0.push({
            text: a.inspectionItem,
            value: a.inspectionItem,
      })
        .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,
              });
            }
          });
        });
        res.data.items.forEach((a) => {
          if (a != null) {
            this.filters1.push({
              text: a.inspectionItemSubclass,
              value: a.inspectionItemSubclass,
    },
    beforeUpload(file, fileList) {
      if (
        file.raw.type !=
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
      ) {
        this.$message.error("上传文件格式不正确");
        this.$refs.upload.clearFiles();
        return false;
      }
    },
    submitUpload() {
      if (this.$refs.upload.uploadFiles.length == 0) {
        this.$message.error("未选择文件");
        return;
      }
      this.uploading = true;
      this.$refs.upload.submit();
    },
    onSuccess(response, file, fileList) {
      this.$refs.upload.clearFiles();
      this.uploadDia = false;
      this.uploading = false;
      if (response.code == 201) {
        this.$message.error(response.message);
        return;
      }
      this.$message.success("上传成功");
      this.standardList = [];
      this.productList = [];
      this.selectStandardTreeList();
    },
    onError(err, file, fileList) {
      this.$message.error("上传失败");
      this.$refs.upload.clearFiles();
      this.uploading = false;
    },
    clearProduct(type) {
      this.$confirm("是否清空?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          if (type === 1) {
            resetTreeOfPrice({
              tree: this.selectTree,
              standardId: this.standardId,
            }).then((res) => {
              if (res.code == 201) {
                return;
              }
              this.$message.success("已清空");
              this.currentPage0 = 1;
              this.getList();
              this.rowClick({
                id: this.standardId,
              });
            });
          } else if (type === 2) {
            resetTreeOfHour({
              tree: this.selectTree,
              standardId: this.standardId,
            })
              .then((res) => {
                if (res.code == 201) {
                  return;
                }
                this.$message.success("已清空");
                this.currentPage0 = 1;
                this.getList();
                this.rowClick({
                  id: this.standardId,
                });
              });
          }
        });
      });
        })
        .catch(() => { });
    },
  },
};
src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -9,11 +9,9 @@
          </el-radio-group>
        </el-col>
        <el-col :span="12" style="text-align: right;">
          <el-upload v-if="radio === 0" ref='upload1'
                     style="display: inline;margin-right: 8px"
                     :action="uploadAction1"
                     :before-upload="beforeUpload1" :headers="token" :on-error="onError1"
                     :on-success="handleSuccessUp1" :show-file-list="false" accept='.doc,.docx,.xls,.xlsx'>
          <el-upload v-if="radio === 0" ref='upload1' style="display: inline;margin-right: 8px" :action="uploadAction1"
            :before-upload="beforeUpload1" :headers="token" :on-error="onError1" :on-success="handleSuccessUp1"
            :show-file-list="false" accept='.doc,.docx,.xls,.xlsx'>
            <el-button size="small" type="primary">导入</el-button>
          </el-upload>
          <el-button size="small" type="primary" v-if="radio === 1" @click="uploadDia = true">导入</el-button>
@@ -23,19 +21,19 @@
    </div>
    <div>
      <el-form :model="itemParameterForm" ref="itemParameterForm" size="small" :inline="true">
        <el-form-item label="检验项" prop="inspectionItem" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItem" @keyup.enter.native="refreshTable()">
        <el-form-item label="检验项" prop="inspectionItem" v-if="radio === 0">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.inspectionItem"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验子项" prop="inspectionItemSubclass" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItemSubclass" @keyup.enter.native="refreshTable()">
        <el-form-item label="检验子项" prop="inspectionItemSubclass" v-if="radio === 0">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.inspectionItemSubclass"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验对象" prop="specimenName">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.specimenName" @keyup.enter.native="refreshTable()">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.specimenName"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item>
@@ -43,23 +41,22 @@
          <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 ç½®</el-button>
        </el-form-item>
      </el-form>
<!--      æ£€éªŒé¡¹ç›®å‚数表格-->
      <div class="table" v-if="radio===0">
        <lims-table :tableData="tableData" :column="column" key="tableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="page" :tableLoading="tableLoading"></lims-table>
      <!--      æ£€éªŒé¡¹ç›®å‚数表格-->
      <div class="table" v-if="radio === 0">
        <lims-table :tableData="tableData" :column="column" key="tableData" @pagination="pagination"
          :height="'calc(100vh - 290px)'" :page="page" :tableLoading="tableLoading"></lims-table>
      </div>
<!--      æ£€éªŒå¯¹è±¡è¡¨æ ¼-->
      <div class="table" v-if="radio===1">
      <!--      æ£€éªŒå¯¹è±¡è¡¨æ ¼-->
      <div class="table" v-if="radio === 1">
        <lims-table :tableData="testObjectTableData" :column="testObjectColumn" key="testObjectTableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="testObjectPage" :tableLoading="tableLoading"></lims-table>
          @pagination="pagination" :height="'calc(100vh - 290px)'" :page="testObjectPage"
          :tableLoading="tableLoading"></lims-table>
      </div>
    </div>
    <!--产品维护弹框-->
    <el-dialog title="产品维护" :visible.sync="diaProduct" width="900px">
      <lims-table :tableData="productData" :column="productColumn" height="460"
                  :page="productPage" :tableLoading="productableLoading"></lims-table>
      <lims-table :tableData="productData" :column="productColumn" height="460" :page="productPage"
        :tableLoading="productableLoading"></lims-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaProduct = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="editProduct('add')" :loading="productLoad">新 å¢ž</el-button>
@@ -67,7 +64,8 @@
    </el-dialog>
    <!--产品维护编辑-->
    <el-dialog title="操作产品维护" :visible.sync="productEditDia" width="400px">
      <el-form :model="productEditForm" ref="productEditForm" :rules="productRules" label-position="right" label-width="100px">
      <el-form :model="productEditForm" ref="productEditForm" :rules="productRules" label-position="right"
        label-width="100px">
        <el-form-item label="产品名称" prop="name">
          <el-input size="small" placeholder="请输入" clearable v-model="productEditForm.name"></el-input>
        </el-form-item>
@@ -83,11 +81,9 @@
    </el-dialog>
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px">
      <div style="margin: 0 auto;">
        <el-upload ref="upload" :action="uploadAction"
                   :auto-upload="false" :file-list="fileList"
                   :headers="token" :limit="1"
                   :on-change="beforeUpload" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
                   name="file">
        <el-upload ref="upload" :action="uploadAction" :auto-upload="false" :file-list="fileList" :headers="token"
          :limit="1" :on-change="beforeUpload" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
          name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
@@ -112,11 +108,11 @@
import limsTable from "@/components/Table/lims-table.vue";
import EditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue";
import testObjectEditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue";
import {getToken} from "@/utils/auth";
import { getToken } from "@/utils/auth";
import { obtainItemParameterList } from '@/api/structural/laboratoryScope'
export default {
  components: {limsTable, EditForm, testObjectEditForm},
  components: { limsTable, EditForm, testObjectEditForm },
  data() {
    return {
      uploadAction: process.env.VUE_APP_BASE_API + '/capacityScope/importExcel',
@@ -124,24 +120,24 @@
      tableData: [],
      tableLoading: false,
      column: [
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验项EN', prop: 'inspectionItemEn'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '检验子项EN', prop: 'inspectionItemSubclassEn'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项分类EN', prop: 'inspectionItemClassEn'},
        {label: '检验对象', prop: 'sample'},
        {label: '单价(元)', prop: 'price'},
        {label: '试验室', prop: 'sonLaboratory'},
        {label: '要求描述', prop: 'askTell'},
        {label: '要求值', prop: 'ask'},
        {label: '计量单位', prop: 'unit'},
        {label: '工时(H)', prop: 'manHour'},
        {label: '预计时间(H)', prop: 'manDay'},
        {label: '工时分组', prop: 'manHourGroup'},
        {label: '创建时间', prop: 'createTime'},
        {label: '修改时间', prop: 'updateTime'},
        {label: '条件', prop: 'radiusList'},
        { label: '检验项', prop: 'inspectionItem' },
        { label: '检验项EN', prop: 'inspectionItemEn' },
        { label: '检验子项', prop: 'inspectionItemSubclass' },
        { label: '检验子项EN', prop: 'inspectionItemSubclassEn' },
        { label: '检验项分类', prop: 'inspectionItemClass' },
        { label: '检验项分类EN', prop: 'inspectionItemClassEn' },
        { label: '检验对象', prop: 'sample' },
        { label: '单价(元)', prop: 'price' },
        { label: '试验室', prop: 'sonLaboratory' },
        { label: '要求描述', prop: 'askTell' },
        { label: '要求值', prop: 'ask' },
        { label: '计量单位', prop: 'unit' },
        { label: '工时(H)', prop: 'manHour' },
        { label: '预计时间(H)', prop: 'manDay' },
        { label: '工时分组', prop: 'manHourGroup' },
        { label: '创建时间', prop: 'createTime' },
        { label: '修改时间', prop: 'updateTime' },
        { label: '条件', prop: 'radiusList' },
        {
          dataType: 'action',
          fixed: 'right',
@@ -166,9 +162,9 @@
        }
      ],
      page: {
        total:0,
        size:10,
        current:1
        total: 0,
        size: 10,
        current: 1
      },
      testObjectTableData: [],
      testObjectColumn: [
@@ -179,9 +175,9 @@
          minWidth: '130',
          formatData: (params) => {
            let index = this.laboratoryList.findIndex(item => item.value == params)
            if(index > -1) {
            if (index > -1) {
              return this.laboratoryList[index].label
            }else {
            } else {
              return null
            }
            // if (params == 1) {
@@ -210,11 +206,12 @@
            }
          }
        },
        {label: '检验对象', prop: 'specimenName'},
        {label: '检验对象EN', prop: 'specimenNameEn'},
        {label: '产品', prop: 'product'},
        {label: '对象代号', prop: 'code'},
        {label: '对象类型', prop: 'objectType',
        { label: '检验对象', prop: 'specimenName' },
        { label: '检验对象EN', prop: 'specimenNameEn' },
        { label: '产品', prop: 'product' },
        { label: '对象代号', prop: 'code' },
        {
          label: '对象类型', prop: 'objectType',
          dataType: 'tag',
          formatData: (params) => {
            if (params == 1) {
@@ -233,11 +230,12 @@
            } else {
              return 'warning'
            }
          }},
        {label: '创建人', prop: 'createUserName'},
        {label: '更新人', prop: 'updateUserName'},
        {label: '创建时间', prop: 'createTime'},
        {label: '更新时间', prop: 'updateTime'},
          }
        },
        { label: '创建人', prop: 'createUserName' },
        { label: '更新人', prop: 'updateUserName' },
        { label: '创建时间', prop: 'createTime' },
        { label: '更新时间', prop: 'updateTime' },
        {
          dataType: 'action',
          fixed: 'right',
@@ -269,9 +267,9 @@
        }
      ],
      testObjectPage: {
        total:0,
        size:10,
        current:0
        total: 0,
        size: 10,
        current: 0
      },
      addOrUpdate: '',
      tree: null,
@@ -285,8 +283,8 @@
      productLoad: false,
      diaProduct: false,
      productColumn: [
        {label: '产品名称', prop: 'name'},
        {label: '产品名称EN', prop: 'nameEn'},
        { label: '产品名称', prop: 'name' },
        { label: '产品名称EN', prop: 'nameEn' },
        {
          dataType: 'action',
          label: '操作',
@@ -310,9 +308,9 @@
      ],
      productData: [],
      productPage: {
        total:0,
        size:10,
        current:0,
        total: 0,
        size: 10,
        current: 0,
        layout: 'total, prev, pager, next'
      },
      productableLoading: false,
@@ -331,9 +329,9 @@
      },
      uploadDia: false,
      fileList: [],
      token: {Authorization: "Bearer " + getToken()},
      token: { Authorization: "Bearer " + getToken() },
      uploading: false,
      laboratoryList:[]
      laboratoryList: []
    }
  },
  created() {
@@ -394,7 +392,7 @@
        return true;
      }
    },
    handleSuccessUp1 (response, file, fileList) {
    handleSuccessUp1(response, file, fileList) {
      this.$refs.upload1.clearFiles()
      if (response.code !== 200) {
        this.$message.error(response.msg)
@@ -403,16 +401,16 @@
      this.$message.success('上传成功')
      this.refreshTable()
    },
    refreshList () {
    refreshList() {
      this.refreshTable()
    },
    refreshList1 () {
    refreshList1() {
      this.refreshTable()
    },
    refreshTable() {
      this.tableLoading = true
      if (this.radio === 0) {
        selectItemParameterList({...this.page, ...this.itemParameterForm}).then(res => {
        selectItemParameterList({ ...this.page, ...this.itemParameterForm }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.tableData = res.data.records
@@ -422,7 +420,7 @@
          this.tableLoading = false
        })
      } else {
        selectTestObjectList({...this.testObjectPage, ...this.itemParameterForm}).then(res => {
        selectTestObjectList({ ...this.testObjectPage, ...this.itemParameterForm }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.testObjectTableData = res.data.records
@@ -438,7 +436,7 @@
      this.page.current = 1
      this.refreshTable()
    },
    pagination (page) {
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable()
    },
@@ -451,17 +449,17 @@
      }
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-打开修改弹框
    editForm (row) {
    editForm(row) {
      this.$refs.editForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    delete (row) {
    delete(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delItemParameter({id:row.id}).then(res => {
        delItemParameter({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
@@ -475,17 +473,17 @@
      })
    },
    // æ£€éªŒå¯¹è±¡-打开修改弹框
    editTestObjectForm (row) {
    editTestObjectForm(row) {
      this.$refs.testObjectEditForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    deleteTest (row) {
    deleteTest(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delTestObject({id:row.id}).then(res => {
        delTestObject({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
@@ -504,12 +502,12 @@
      this.objectId = row.id
      this.getProductList(row)
    },
    getProductList () {
    getProductList() {
      const params = {
        objectId: this.objectId,
      }
      this.productableLoading = true
      selectProductListByObjectId({...params, ...this.productPage}).then(res => {
      selectProductListByObjectId({ ...params, ...this.productPage }).then(res => {
        this.productableLoading = false
        this.productData = res.data.records
        this.productPage.total = res.data.total
@@ -518,7 +516,7 @@
      })
    },
    // äº§å“ç»´æŠ¤-新增-编辑
    editProduct (type, row) {
    editProduct(type, row) {
      this.productEditDia = true
      this.operationType = type
      if (type === 'edit') {
@@ -526,7 +524,7 @@
      }
    },
    // æäº¤äº§å“ç»´æŠ¤ä¿®æ”¹
    submitProduct () {
    submitProduct() {
      this.$refs['productEditForm'].validate((valid) => {
        if (valid) {
          this.uploading = true
@@ -562,13 +560,13 @@
      this.productEditDia = false
    },
    // äº§å“ç»´æŠ¤-删除
    deleteProduct (row) {
    deleteProduct(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delProduct({id:row.id}).then(res => {
        delProduct({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.getProductList();
@@ -581,7 +579,7 @@
        });
      })
    },
    getItemParameterList(){
    getItemParameterList() {
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
@@ -601,6 +599,7 @@
.capacity-scope {
  padding: 20px;
}
.title {
  height: 40px;
  line-height: 40px;