From 5ba37c953aa14ac2f08931699378995af88c98a5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 14 二月 2025 17:38:50 +0800
Subject: [PATCH] 能力范围页面迁移

---
 src/components/Table/lims-table.vue                               |    2 
 src/components/capability/bindSupplierDensityDialog.vue           |  165 ++++
 src/api/structural/laboratoryScope.js                             |    2 
 src/api/structural/structureTestObjectPart.js                     |   42 +
 src/components/capability/EditForm.vue                            |  469 ++++++++++++
 src/components/capability/bindPartDialog.vue                      |  227 ++++++
 src/components/capability/testObjectEditForm.vue                  |  143 +++
 src/views/structural/capabilityAndLaboratory/capability/index.vue | 1089 +++++++++++------------------
 src/api/structural/capability.js                                  |   64 +
 9 files changed, 1,525 insertions(+), 678 deletions(-)

diff --git a/src/api/structural/capability.js b/src/api/structural/capability.js
index f094d4c..7f61447 100644
--- a/src/api/structural/capability.js
+++ b/src/api/structural/capability.js
@@ -8,6 +8,14 @@
     params: query
   })
 }
+// 鑾峰彇妫�娴嬪璞�
+export function selectTestObjectList(query) {
+  return request({
+    url: '/capacityScope/selectTestObjectList',
+    method: 'post',
+    params: query
+  })
+}
 // 鏂板妫�楠岄」鐩弬鏁�
 export function addItemParameter(query) {
   return request({
@@ -39,3 +47,59 @@
     method: 'get'
   })
 }
+// 鏂板妫�娴嬪璞�
+export function addTestObject(query) {
+  return request({
+    url: '/capacityScope/addTestObject',
+    method: 'post',
+    params: query
+  })
+}
+// 鍒犻櫎妫�娴嬪璞�
+export function delTestObject(query) {
+  return request({
+    url: '/capacityScope/delTestObject',
+    method: 'post',
+    params: query
+  })
+}
+// 淇敼妫�娴嬪璞�
+export function upTestObject(query) {
+  return request({
+    url: '/capacityScope/upTestObject',
+    method: 'post',
+    params: query
+  })
+}
+// 鏌ヨ妫�楠屽璞$殑浜у搧
+export function selectProductListByObjectId(query) {
+  return request({
+    url: '/capacityScope/selectProductListByObjectId',
+    method: 'post',
+    params: query
+  })
+}
+// 鏂板浜у搧
+export function addProduct(query) {
+  return request({
+    url: '/capacityScope/addProduct',
+    method: 'post',
+    params: query
+  })
+}
+// 鍒犻櫎浜у搧
+export function delProduct(query) {
+  return request({
+    url: '/capacityScope/delProduct',
+    method: 'post',
+    params: query
+  })
+}
+// 淇敼浜у搧
+export function upProduct(query) {
+  return request({
+    url: '/capacityScope/upProduct',
+    method: 'post',
+    params: query
+  })
+}
diff --git a/src/api/structural/laboratoryScope.js b/src/api/structural/laboratoryScope.js
index d0b0c7c..4fa59a1 100644
--- a/src/api/structural/laboratoryScope.js
+++ b/src/api/structural/laboratoryScope.js
@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 鑾峰彇妫�楠岄」鐩弬鏁�
+// 鑾峰彇鍦烘墍鏋氫妇鍊�
 export function obtainItemParameterList() {
   return request({
     url: '/laboratoryScope/obtainItemParameterList',
diff --git a/src/api/structural/structureTestObjectPart.js b/src/api/structural/structureTestObjectPart.js
new file mode 100644
index 0000000..c6c8dd2
--- /dev/null
+++ b/src/api/structural/structureTestObjectPart.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+
+// 妫�楠屽璞℃牴鎹骇鍝乮d鏌ヨ闆朵欢
+export function selectByTestObjectId(query) {
+  return request({
+    url: '/structureTestObjectPart/selectByTestObjectId',
+    method: 'post',
+    params: query
+  })
+}
+// 妫�楠屽璞℃柊澧炰骇鍝侀浂浠�
+export function addTestObjectPart(query) {
+  return request({
+    url: '/structureTestObjectPart/addTestObjectPart',
+    method: 'post',
+    params: query
+  })
+}
+// 妫�楠屽璞′慨鏀逛骇鍝侀浂浠�
+export function updateTestObjectPart(query) {
+  return request({
+    url: '/structureTestObjectPart/updateTestObjectPart',
+    method: 'post',
+    params: query
+  })
+}
+// 妫�楠屽璞″垹闄や骇鍝侀浂浠�
+export function deleteTestObjectPart(query) {
+  return request({
+    url: '/structureTestObjectPart/deleteTestObjectPart',
+    method: 'post',
+    params: query
+  })
+}
+// 鏍规嵁浜у搧id鏌ヨ闆朵欢
+export function selectByProductId(query) {
+  return request({
+    url: 'ctPart/selectByProductId',
+    method: 'post',
+    params: query
+  })
+}
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index df1c423..7cc7d82 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -31,7 +31,7 @@
             :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
             :filters="item.filters" :fixed="item.fixed" :label="item.label"
             :min-width="item.minWidth" :prop="item.prop"
-            :show-overflow-tooltip="item.showOverflowTooltip"
+            show-overflow-tooltip
             :sortable="item.sortable ? true : false" :type="item.type" :width="item.width"
             align="center">
             <!-- <div class="123" v-if="item.type == ''"> -->
diff --git a/src/components/capability/EditForm.vue b/src/components/capability/EditForm.vue
new file mode 100644
index 0000000..10842ec
--- /dev/null
+++ b/src/components/capability/EditForm.vue
@@ -0,0 +1,469 @@
+<template>
+  <div>
+    <el-dialog :title="operationType === 'add' ? '鏂板' : '缂栬緫'" :visible.sync="editFormDia" width="60%" @close="closeDia">
+      <el-form ref="editForm" :model="editForm" :rules="editFormRules" label-width="140px">
+        <el-col :span="12">
+          <el-form-item label="妫�楠岄」锛�" prop="inspectionItem">
+            <el-input v-model="editForm.inspectionItem" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠岄」EN锛�" prop="inspectionItemEn">
+            <el-input v-model="editForm.inspectionItemEn" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠屽瓙椤癸細" prop="inspectionItemSubclass">
+            <el-input v-model="editForm.inspectionItemSubclass" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠屽瓙椤笶N锛�" prop="inspectionItemSubclassEn">
+            <el-input v-model="editForm.inspectionItemSubclassEn" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠屽璞★細" prop="sample">
+            <el-cascader v-model="editForm.sample" :options="itemParameterData.cascaderField.sample.tree"
+                         :props="{value:'name',label:'name',checkStrictly: true, multiple: true}"
+                         :show-all-levels="false"  clearable
+                         filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;"></el-cascader>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鍗曚环(鍏�)锛�" prop="price">
+            <el-input v-model="editForm.price" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鍦烘墍锛�" prop="laboratory">
+            <el-select v-model="editForm.laboratory" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in laboratoryList" :key="item.label" :label="item.label" :value="item.label"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="璇曢獙瀹わ細" prop="sonLaboratory">
+            <el-select v-model="editForm.sonLaboratory" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in sonLaboratoryList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瑕佹眰鎻忚堪锛�" prop="askTell">
+            <el-input v-model="editForm.askTell" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瑕佹眰鍊硷細" prop="ask">
+            <el-input v-model="editForm.ask" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="璁¢噺鍗曚綅锛�" prop="unit">
+            <el-select v-model="editForm.unit" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in unitList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="宸ユ椂(H)锛�" prop="manHour">
+            <el-input v-model="editForm.manHour" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="棰勮鏃堕棿(H)锛�" prop="manDay">
+            <el-input v-model="editForm.manDay" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="宸ユ椂鍒嗙粍锛�" prop="manHourGroup">
+            <el-input v-model="editForm.manHourGroup" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠岄」绫诲瀷锛�" prop="inspectionItemType">
+            <el-select v-model="editForm.inspectionItemType" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in inspectionItemTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠屽�肩被鍨嬶細" prop="inspectionValueType">
+            <el-select v-model="editForm.inspectionValueType" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in inspectionValueTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀛楀吀绫诲瀷锛�" prop="dic">
+            <el-select v-model="editForm.dic" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in dicList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鐗规畩鏍囪瘑锛�" prop="bsm">
+            <el-select v-model="editForm.bsm" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in bsmList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鍘熷璁板綍妯℃澘锛�" prop="templateId">
+            <el-select v-model="editForm.templateId" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in templateIdList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠岄」鍒嗙被锛�" prop="inspectionItemClass">
+            <el-input v-model="editForm.inspectionItemClass" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="妫�楠岄」鍒嗙被EN锛�" prop="inspectionItemClassEn">
+            <el-input v-model="editForm.inspectionItemClassEn" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="璇曢獙鏂规硶锛�" prop="method">
+            <el-select v-model="editForm.method" clearable multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in methodList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鏉′欢锛�" prop="radiusList">
+            <el-select v-model="editForm.radiusList" allow-create default-first-option filterable multiple
+                       placeholder="璇烽�夋嫨"
+                       size="small"
+                       style="width: 100%">
+              <el-option v-for="item in radiusListList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鏀惰垂鏍囧噯(鍏�/娆�)锛�" prop="rates">
+            <el-input v-model="editForm.rates" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDia">鍙� 娑�</el-button>
+        <el-button :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+export default {
+  name: "EditForm",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      editFormDia: false,
+      editLoad: false,
+      editForm: {
+        inspectionItem: '', // 妫�楠岄」
+        inspectionItemEn: '', // 妫�楠岄」EN
+        inspectionItemSubclass: '', // 妫�楠屽瓙椤�
+        inspectionItemSubclassEn: '', // 妫�楠屽瓙椤笶N
+        sample: [], // 妫�楠屽璞�
+        price: '', // 鍗曚环
+        laboratory: '', // 鍦烘墍
+        sonLaboratory: '', // 璇曢獙瀹�
+        askTell: '', // 瑕佹眰鎻忚堪
+        ask: '', // 瑕佹眰鍊�
+        unit: '', // 璁¢噺鍗曚綅
+        manHour: '', // 宸ユ椂
+        manDay: '', // 棰勮鏃堕棿
+        manHourGroup: '', // 宸ユ椂鍒嗙粍
+        inspectionItemType: '', // 妫�楠岄」绫诲瀷
+        inspectionValueType: '', // 妫�楠屽�肩被鍨�
+        dic: '', // 瀛楀吀绫诲瀷
+        bsm: '', // 鐗规畩鏍囪瘑
+        templateId: '', // 鍘熷璁板綍妯℃澘
+        inspectionItemClass: '', // 妫�楠岄」鍒嗙被
+        inspectionItemClassEn: '', // 妫�楠岄」鍒嗙被EN
+        method: '', // 璇曢獙鏂规硶
+        radiusList: [], // 鏉′欢
+        rates: '', // 鏉′欢
+      },
+      sampleList: [], // 妫�楠屽璞′笅鎷夋
+      laboratoryList: [], // 鍦烘墍涓嬫媺妗�
+      sonLaboratoryList: [], // 璇曢獙瀹や笅鎷夋
+      unitList: [], // 璁¢噺鍗曚綅涓嬫媺妗�
+      inspectionItemTypeList: [], // 妫�楠岄」绫诲瀷涓嬫媺妗�
+      inspectionValueTypeList: [], // 妫�楠屽�肩被鍨嬩笅鎷夋
+      dicList: [], // 瀛楀吀绫诲瀷涓嬫媺妗�
+      bsmList: [], // 鐗规畩鏍囪瘑涓嬫媺妗�
+      templateIdList: [], // 鍘熷璁板綍妯℃澘涓嬫媺妗�
+      methodList: [], // 璇曢獙鏂规硶涓嬫媺妗�
+      radiusListList: [], // 鏉′欢涓嬫媺妗�
+      itemParameterData: {
+        cascaderField: {
+          sample: {
+            tree: []
+          },
+        }
+      },
+      editFormRules: {
+        inspectionItem: [
+          { required: true, message: '璇烽�夋嫨妫�楠岄」', trigger: 'change' }
+        ],
+        sonLaboratory: [
+          { required: true, message: '璇烽�夋嫨璇曢獙瀹�', trigger: 'change' }
+        ],
+        unit: [
+          { required: true, message: '璇烽�夋嫨璁¢噺鍗曚綅', trigger: 'change' }
+        ],
+        inspectionItemType: [
+          { required: true, message: '璇烽�夋嫨妫�楠岄」绫诲瀷', trigger: 'change' }
+        ],
+        inspectionValueType: [
+          { required: true, message: '璇烽�夋嫨妫�楠屽�肩被鍨�', trigger: 'change' }
+        ],
+        templateId: [
+          { required: true, message: '璇烽�夋嫨鍘熷璁板綍妯℃澘', trigger: 'change' }
+        ]
+      },
+      operationType: ''
+    }
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia (type, row) {
+      this.operationType = type
+      this.editFormDia = true
+      this.selectEnumByCategory() // 妫�楠岄」绫诲瀷
+      this.selectEnumByCategoryForSpecial() // 鐗规畩鏍囪瘑
+      this.selectEnumByCategoryForInspectionValueType() // 妫�楠屽�肩被鍨�
+      this.obtainItemParameterList() // 鍦烘墍绫诲瀷
+      this.selectEnumByCategoryForSLaboratory() // 瀛愬疄楠屽
+      this.getStandardTemplate() // 鍘熷璁板綍妯℃澘涓嬫媺妗�
+      this.selectEnumByCategoryForUnit() // 璁¢噺鍗曚綅
+      this.selectStandardMethods() // 璇曢獙鏂规硶
+      this.selectDocUnit() // 瀛楀吀绫诲瀷
+      this.selectTestObjectByName() // 妫�楠屽璞�
+      if (type === 'add') {
+        this.editForm = {
+          inspectionItem: '', // 妫�楠岄」
+            inspectionItemEn: '', // 妫�楠岄」EN
+            inspectionItemSubclass: '', // 妫�楠屽瓙椤�
+            inspectionItemSubclassEn: '', // 妫�楠屽瓙椤笶N
+            sample: [], // 妫�楠屽璞�
+            price: '', // 鍗曚环
+            laboratory: '', // 鍦烘墍
+            sonLaboratory: '', // 璇曢獙瀹�
+            askTell: '', // 瑕佹眰鎻忚堪
+            ask: '', // 瑕佹眰鍊�
+            unit: '', // 璁¢噺鍗曚綅
+            manHour: '', // 宸ユ椂
+            manDay: '', // 棰勮鏃堕棿
+            manHourGroup: '', // 宸ユ椂鍒嗙粍
+            inspectionItemType: '', // 妫�楠岄」绫诲瀷
+            inspectionValueType: '', // 妫�楠屽�肩被鍨�
+            dic: '', // 瀛楀吀绫诲瀷
+            bsm: '', // 鐗规畩鏍囪瘑
+            templateId: '', // 鍘熷璁板綍妯℃澘
+            inspectionItemClass: '', // 妫�楠岄」鍒嗙被
+            inspectionItemClassEn: '', // 妫�楠岄」鍒嗙被EN
+            method: '', // 璇曢獙鏂规硶
+            radiusList: [], // 鏉′欢
+            rates: '', // 鏉′欢
+        }
+        this.$refs.editForm.resetFields()
+      } else {
+        this.editForm = this.HaveJson(row)
+        this.editForm.sample = JSON.parse(this.editForm.sample)
+        this.editForm.radiusList = JSON.parse(this.editForm.radiusList)
+        this.editForm.method = JSON.parse(this.editForm.method)
+      }
+    },
+    // 鎻愪氦缂栬緫
+    handleEdit () {
+      this.$refs.editForm.validate(valid => {
+        if (valid) {
+          this.editLoad = true
+          let obj = this.HaveJson(this.editForm)
+          obj.method = JSON.stringify(obj.method)
+          obj.sample = JSON.stringify(obj.sample)
+          console.log('obj.radiusList---', obj.radiusList)
+          if (obj.radiusList !== null && obj.radiusList.length > 0) {
+            obj.radiusList = JSON.stringify(obj.radiusList)
+          }
+          if(obj.id){
+            // 淇敼
+            this.$axios.post(this.$api.capacityScope.upItemParameter, obj, {
+              headers: {
+                'Content-Type': 'application/json'
+              }
+            }).then(res => {
+              this.editLoad = false
+              if (res.code === 201) {
+                return
+              }
+              this.$message.success('淇敼鎴愬姛')
+              this.editFormDia = false
+              this.$parent.refreshTable('page')
+            }).catch(e => {
+              this.editLoad = false
+              this.editFormDia = false
+            })
+          }else{
+            // 鏂板
+            this.$axios.post(this.$api.capacityScope.addItemParameter, obj, {
+              headers: {
+                'Content-Type': 'application/json'
+              }
+            }).then(res => {
+              this.editLoad = false
+              if (res.code === 201) {
+                return
+              }
+              this.$message.success('娣诲姞鎴愬姛')
+              this.editFormDia = false
+              this.$parent.refreshTable('page')
+            }).catch(e => {
+              this.editLoad = false
+              this.editFormDia = false
+            })
+          }
+        }
+      })
+    },
+    // 鍏抽棴寮规
+    closeDia () {
+      this.editFormDia = false
+      this.$refs.editForm.resetFields()
+    },
+    selectTestObjectByName() {
+      this.$axios.get(this.$api.capacityScope.getItemTree).then(res => {
+        res.data.forEach(a=>{
+          this.cascaderFieldData(a)
+        })
+        this.itemParameterData.cascaderField.sample.tree = res.data
+        // this.sampleTree = res.data
+        // console.log(2222,res.data)
+      })
+    },
+    cascaderFieldData(val){
+      if(val.children === undefined) {
+        return
+      }else if(val.children.length==0){
+        val.label = val.name
+        val.value = val.id
+        delete val.children
+      }else{
+        val.label = val.name
+        val.value = val.id
+        val.children.forEach(a=>{
+          a.label = a.name
+          a.value = a.id
+          this.cascaderFieldData(a)
+        })
+      }
+    },
+    selectStandardMethods() {
+      this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.code,
+            value: a.code
+          })
+        })
+        this.methodList = data
+      })
+    },
+    selectDocUnit() {
+      this.$axios.post(this.$api.enums.getDic).then(res => {
+        this.dicList = res.data.map(m => {
+          return {
+            label: m,
+            value: m
+          }
+        })
+      })
+    },
+    obtainItemParameterList() {
+      this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
+        let data = []
+        // let data0 = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.laboratoryName,
+            value: a.id
+          })
+          // data0.push({
+          //   label: a.laboratoryName,
+          //   value: a.laboratoryName
+          // })
+        })
+        this.laboratoryList = data
+      })
+    },
+    selectEnumByCategory() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "妫�楠岄」绫诲瀷"
+      }).then(res => {
+        res.data[1].type = 'info'
+        this.inspectionItemTypeList = res.data
+      })
+    },
+    selectEnumByCategoryForInspectionValueType() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "妫�楠屽�肩被鍨�"
+      }).then(res => {
+        this.inspectionValueTypeList = res.data
+      })
+    },
+    getStandardTemplate() {
+      this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id,
+            type: 'success'
+          })
+        })
+        this.templateIdList = data
+      })
+    },
+    selectEnumByCategoryForSpecial() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "鏄惁"
+      }).then(res => {
+        this.bsmList = res.data
+      })
+    },
+    selectEnumByCategoryForSLaboratory() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "瀛愬疄楠屽"
+      }).then(res => {
+        this.sonLaboratoryList = res.data
+      })
+    },
+    selectEnumByCategoryForUnit() {
+      this.$axios.post(this.$api.enums.selectEnumByCategory, {
+        category: "鍗曚綅"
+      }).then(res => {
+        this.unitList = res.data
+      })
+    },
+  },
+}
+</script>
+
+<style scoped>
+>>>.el-dialog__body {
+  height: 620px;
+  overflow-y: auto;
+}
+</style>
diff --git a/src/components/capability/bindPartDialog.vue b/src/components/capability/bindPartDialog.vue
new file mode 100644
index 0000000..8b876a3
--- /dev/null
+++ b/src/components/capability/bindPartDialog.vue
@@ -0,0 +1,227 @@
+<template>
+  <div>
+    <el-dialog title="闆朵欢缁戝畾" :visible.sync="isShow" width="800px" @close="$emit('closeBindPartDialog')">
+      <div class="body" v-if="isShow" style="height: 500px;overflow-y: auto;padding: 5px 0;">
+        <lims-table :tableData="tableData" :column="column"
+                    :page="page" :tableLoading="tableLoading"></lims-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="$emit('closeBindPartDialog')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="addBindPart" :loading="addBindLoad">鏂� 澧�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :title="dialogTitle" :visible.sync="addBindPartDialog" width="400px" @close="closeBindPartDialog"
+               :close-on-click-modal="false" >
+      <div class="body" v-if="addBindPartDialog">
+        <el-form label-position="right" label-width="80px"
+                 ref="bindPartData"
+                 :rules="bindPartDataRules"
+                 :model="bindPartData">
+          <el-form-item label="闆朵欢鍙凤細" prop="partNo">
+            <el-input v-model="bindPartData.partNo" size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="棰滆壊锛�">
+            <el-input v-model="bindPartData.color" size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="鑹叉爣锛�">
+            <el-input v-model="bindPartData.colorCode" size="small"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeBindPartDialog">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitBind" :loading="bindLoad">纭� 璁�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {selectByProductId, selectByTestObjectId} from "@/api/structural/structureTestObjectPart";
+
+export default {
+  name: "bindPartDialog",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {limsTable},
+  props: {
+    bindPartDialog: {
+      type: Boolean,
+      default: () => false
+    },
+    type: { // 闆朵欢缁戝畾鐨勭被鍨�--0锛氭楠屽璞★紝1锛氫骇鍝佺淮鎶�
+      type: Number,
+      default: () => null
+    },
+    currentRow : { // 閫夋嫨鏈潯鏁版嵁鐨勪俊鎭�
+      type: Object,
+      default: () => {}
+    }
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      isShow: this.bindPartDialog,
+      dialogTitle: '鏂板闆朵欢缁戝畾',
+      tableData: [],
+      tableLoading: false,
+      column: [
+        {label: '闆朵欢鍙�', prop: 'partNo'},
+        {label: '棰滆壊', prop: 'color'},
+        {label: '鑹叉爣', prop: 'colorCode'},
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.editForm(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              },
+            },
+          ]
+        }
+      ],
+      page: {
+        total:0,
+        size:10,
+        current:0
+      },
+      bindPartComponent: {
+        entity: {
+          orderBy: {
+            field: 'id',
+            order: 'asc'
+          }
+        },
+        isPage: true,
+        isIndex: true,
+        showSelect: false,
+        select: true,
+        do: [{
+          id: 'update',
+          font: '缂栬緫',
+          type: 'text',
+          method: 'doDiy',
+          field: []
+        }, {
+          id: 'delete',
+          font: '鍒犻櫎',
+          type: 'text',
+          method: 'doDiy'
+        }],
+        tagField: {},
+        selectField: {},
+        requiredAdd: ['partNo'],
+        requiredUp: ['partNo'],
+      },
+      addBindPartDialog: false,
+      bindPartData: {
+        partNo: '', // 闆朵欢鍙�
+        color: '', // 棰滆壊
+        colorCode: '', // 鑹叉爣
+      },
+      bindPartDataRules: {
+        partNo: [
+          { required: true, message: '璇峰~鍐欓浂浠跺彿', trigger: 'blur' }
+        ]
+      },
+      bindLoad: false,
+      upIndex: 0,
+      addBindLoad: false,
+    }
+  },
+  mounted() {
+    this.getList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    getList() {
+      this.tableLoading = true
+      // 鏍规嵁绫诲瀷鍒ゆ柇鏄楠屽璞¢浂浠剁粦瀹氳繕鏄骇鍝佺淮鎶ら浂浠剁粦瀹�
+      if (this.type === 0) {
+        selectByTestObjectId(this.currentRow.id).then(res => {
+          this.tableLoading = false
+          if (res.code === 200) {
+            this.tableData = res.data
+            this.page.total = res.total
+          }
+        }).catch(err => {
+          this.tableLoading = false
+        })
+      } else {
+        selectByProductId(this.currentRow.id).then(res => {
+          this.tableLoading = false
+          if (res.code === 200) {
+            this.tableData = res.data
+            this.page.total = res.total
+          }
+        }).catch(err => {
+          this.tableLoading = false
+        })
+      }
+    },
+    addBindPart () {
+      this.addBindPartDialog = true
+    },
+    // 鎻愪氦闆朵欢缁戝畾
+    submitBind () {
+      this.$refs['bindPartData'].validate((valid) => {
+        if (valid) {
+          // 鏍规嵁绫诲瀷鍒ゆ柇鏄楠屽璞¢浂浠剁粦瀹氳繕鏄骇鍝佺淮鎶ら浂浠剁粦瀹�
+          const params = this.type === 0 ? {
+            testObjectId: this.currentRow.id,
+            color: this.bindPartData.color,
+            colorCode: this.bindPartData.colorCode,
+            partNo: this.bindPartData.partNo,
+            } : {
+            productId: this.currentRow.id,
+            color: this.bindPartData.color,
+            colorCode: this.bindPartData.colorCode,
+            partNo: this.bindPartData.partNo,
+          }
+          this.bindLoad = true
+          if (this.type === 0) {
+
+          }
+          this.$axios.post(url, params, {
+            headers: {
+              'Content-Type': 'application/json'
+            }
+          }).then(res => {
+            this.bindLoad = false
+            if (res.code === 200) {
+              this.$refs['bindPartData'].resetFields();
+              this.addBindPartDialog = false
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.getList()
+            }
+          }).catch(err => {
+            this.bindLoad = false
+            console.log(err)
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      })
+    },
+    closeBindPartDialog () {
+      this.$refs['bindPartData'].resetFields();
+      this.addBindPartDialog = false
+    },
+  },
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/components/capability/bindSupplierDensityDialog.vue b/src/components/capability/bindSupplierDensityDialog.vue
new file mode 100644
index 0000000..b9afe36
--- /dev/null
+++ b/src/components/capability/bindSupplierDensityDialog.vue
@@ -0,0 +1,165 @@
+<template>
+  <div>
+    <el-dialog title="鍘傚瀵嗗害缁戝畾" :visible.sync="isShow" width="800px" @close="$emit('closeBindPartDialog')">
+      <div class="body" v-if="isShow" style="height: 500px;overflow-y: auto;padding: 5px 0;">
+<!--        <ValueTable ref="bindPartComponent"-->
+<!--                    :url="searchUrl"-->
+<!--                    :upUrl="upUrl"-->
+<!--                    :delUrl="delUrl"-->
+<!--                    :componentData="bindPartComponent"-->
+<!--                    :key="upIndex"/>-->
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="$emit('closeBindPartDialog')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="addBindPart" :loading="addBindLoad">鏂� 澧�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="鏂板鍘傚瀵嗗害缁戝畾" :visible.sync="addBindSupplierDensityDialog" width="400px" @close="closeBindPartDialog":close-on-click-modal="false" >
+      <div class="body" v-if="addBindSupplierDensityDialog">
+        <el-form label-position="right" label-width="80px"
+                 ref="bindSupplierDensityData"
+                 :rules="bindPartDataRules"
+                 :model="bindSupplierDensityData">
+          <el-form-item label="鍨嬪彿锛�" prop="model">
+            <el-input v-model="bindSupplierDensityData.model" size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="鍘傚锛�" prop="supplierName">
+            <el-input v-model="bindSupplierDensityData.supplierName" size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="瀵嗗害锛�" prop="densityValue">
+            <el-input v-model="bindSupplierDensityData.densityValue" size="small"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeBindPartDialog">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitBind" :loading="bindLoad">纭� 璁�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+// import ValueTable from "../../tool/value-table.vue";
+
+export default {
+  name: "bindSupplierDensityDialog",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  props: {
+    bindSupplierDensityDialog: {
+      type: Boolean,
+      default: () => false
+    },
+    currentRow : { // 閫夋嫨鏈潯鏁版嵁鐨勪俊鎭�
+      type: Object,
+      default: () => {}
+    }
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchUrl: '', // 鏌ヨ
+      upUrl: '', // 缂栬緫
+      delUrl: '',  // 鍒犻櫎
+      isShow: this.bindSupplierDensityDialog,
+      bindPartComponent: {
+        entity: {
+          orderBy: {
+            field: 'id',
+            order: 'asc'
+          }
+        },
+        isPage: true,
+        isIndex: true,
+        showSelect: false,
+        select: true,
+        do: [{
+          id: 'update',
+          font: '缂栬緫',
+          type: 'text',
+          method: 'doDiy',
+          field: []
+        }, {
+          id: 'delete',
+          font: '鍒犻櫎',
+          type: 'text',
+          method: 'doDiy'
+        }],
+        tagField: {},
+        selectField: {},
+        requiredAdd: ['supplierName', 'densityValue'],
+        requiredUp: ['supplierName', 'densityValue'],
+      },
+      addBindSupplierDensityDialog: false,
+      bindSupplierDensityData: {
+        model: '', // 鍨嬪彿
+        supplierName: '', // 鍘傚
+        densityValue: '', // 瀵嗗害
+      },
+      bindPartDataRules: {
+        supplierName: [
+          { required: true, message: '璇峰~鍐欏巶瀹跺悕绉�', trigger: 'blur' }
+        ],
+        densityValue: [
+          { required: true, message: '璇峰~鍐欏瘑搴�', trigger: 'blur' }
+        ],
+      },
+      bindLoad: false,
+      upIndex: 0,
+      addBindLoad: false,
+    }
+  },
+  mounted() {
+      this.$set(this.bindPartComponent.entity, 'productId', this.currentRow.id)
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    addBindPart () {
+      this.addBindSupplierDensityDialog = true
+    },
+    // 鎻愪氦闆朵欢缁戝畾
+    submitBind () {
+      this.$refs['bindSupplierDensityData'].validate((valid) => {
+        if (valid) {
+          // 鏍规嵁绫诲瀷鍒ゆ柇鏄楠屽璞¢浂浠剁粦瀹氳繕鏄骇鍝佺淮鎶ら浂浠剁粦瀹�
+          const params = {
+            productId: this.currentRow.id,
+            model: this.bindSupplierDensityData.model,
+            supplierName: this.bindSupplierDensityData.supplierName,
+            densityValue: this.bindSupplierDensityData.densityValue,
+            }
+          this.bindLoad = true
+          const url = this.$api.productSupplierDensity.addProductSupplierDensity
+          this.$axios.post(url, params, {
+            headers: {
+              'Content-Type': 'application/json'
+            }
+          }).then(res => {
+            this.bindLoad = false
+            if (res.code === 200) {
+              this.$refs['bindSupplierDensityData'].resetFields();
+              this.addBindSupplierDensityDialog = false
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.$refs.bindPartComponent.selectList()
+            }
+          }).catch(err => {
+            this.bindLoad = false
+            console.log(err)
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      })
+    },
+    closeBindPartDialog () {
+      this.$refs['bindSupplierDensityData'].resetFields();
+      this.addBindSupplierDensityDialog = false
+    },
+  },
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/components/capability/testObjectEditForm.vue b/src/components/capability/testObjectEditForm.vue
new file mode 100644
index 0000000..5b1a799
--- /dev/null
+++ b/src/components/capability/testObjectEditForm.vue
@@ -0,0 +1,143 @@
+<template>
+  <div>
+    <el-dialog :title="operationType === 'add' ? '鏂板' : '缂栬緫'" :visible.sync="editFormDia" width="500px" @close="closeDia">
+      <el-form ref="editForm" :model="editForm" :rules="editFormRules" label-width="120px" label-position="right">
+        <el-form-item label="鍦烘墍锛�" prop="laboratoryId">
+          <el-select v-model="editForm.laboratoryId" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+            <el-option v-for="item in laboratoryList" :key="item.label" :label="item.label" :value="item.label"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="妫�楠屽璞★細" prop="specimenName">
+          <el-input v-model="editForm.specimenName" clearable size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="妫�楠屽璞N锛�" prop="specimenNameEn">
+          <el-input v-model="editForm.specimenNameEn" clearable size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="瀵硅薄浠e彿锛�" prop="code">
+          <el-input v-model="editForm.code" clearable size="small"></el-input>
+        </el-form-item>
+        <el-form-item label="瀵硅薄绫诲瀷锛�" prop="objectType">
+          <el-select v-model="editForm.objectType" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+            <el-option v-for="item in dict.type.object_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDia">鍙� 娑�</el-button>
+        <el-button :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+import {obtainItemParameterList} from "@/api/structural/laboratoryScope";
+import {addTestObject, upTestObject} from "@/api/structural/capability";
+
+export default {
+  name: "EditForm",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  dicts: ['object_type'],
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      editFormDia: false,
+      editLoad: false,
+      editForm: {
+        laboratoryId: '', // 鍦烘墍
+        specimenName: '', // 妫�楠屽璞�
+        specimenNameEn: '', // 妫�楠屽璞N
+        code: '', // 瀵硅薄浠e彿
+        objectType: '', // 瀵硅薄绫诲瀷
+      },
+      laboratoryList: [],
+      editFormRules: {
+        laboratoryId: [
+          { required: true, message: '璇烽�夋嫨鍦烘墍', trigger: 'change' }
+        ],
+        specimenName: [
+          { required: true, message: '璇疯緭鍏ユ楠屽璞�', trigger: 'blur' }
+        ],
+        code: [
+          { required: true, message: '璇疯緭鍏ュ璞′唬鍙�', trigger: 'blur' }
+        ],
+      },
+      operationType: ''
+    }
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia (type, row) {
+      this.operationType = type
+      this.obtainItemParameterList()
+      this.editFormDia = true
+      if (type === 'add') {
+        this.$refs.editForm.resetFields()
+      } else {
+        this.editForm = this.HaveJson(row)
+      }
+    },
+    // 鎻愪氦缂栬緫
+    handleEdit () {
+      this.$refs.editForm.validate(valid => {
+        if (valid) {
+          this.editLoad = true
+          let obj = this.HaveJson(this.editForm)
+          if(obj.id){
+            // 淇敼
+            upTestObject(obj).then(res => {
+              this.editLoad = false
+              if (res.code === 201) {
+                return
+              }
+              this.$message.success('淇敼鎴愬姛')
+              this.closeDia()
+            }).catch(e => {
+              this.editLoad = false
+              this.editFormDia = false
+            })
+          }else{
+            // 鏂板
+            addTestObject(obj).then(res => {
+              this.editLoad = false
+              if (res.code === 201) {
+                return
+              }
+              this.$message.success('娣诲姞鎴愬姛')
+              this.closeDia()
+            }).catch(e => {
+              this.editLoad = false
+              this.editFormDia = false
+            })
+          }
+        }
+      })
+    },
+    // 鍏抽棴寮规
+    closeDia () {
+      this.editFormDia = false
+      this.$refs.editForm.resetFields()
+      this.$parent.refreshTable('page')
+    },
+    // 鑾峰彇鍦烘墍涓嬫媺妗嗙殑鍊�
+    obtainItemParameterList() {
+      obtainItemParameterList().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.laboratoryName,
+            value: a.id
+          })
+        })
+        this.laboratoryList = data
+      })
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/views/structural/capabilityAndLaboratory/capability/index.vue b/src/views/structural/capabilityAndLaboratory/capability/index.vue
index 085b188..072d09b 100644
--- a/src/views/structural/capabilityAndLaboratory/capability/index.vue
+++ b/src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -3,631 +3,348 @@
     <div>
       <el-row class="title">
         <el-col :span="12" style="text-align: left">
-          <el-radio-group v-model="radio" @input="selectorSwitch" size="medium" fill="#409EFF">
+          <el-radio-group v-model="radio" size="medium" fill="#409EFF">
             <el-radio-button :label="0">妫�楠岄」鐩弬鏁�</el-radio-button>
             <el-radio-button :label="1">妫�楠屽璞�</el-radio-button>
           </el-radio-group>
         </el-col>
         <el-col :span="12" style="text-align: right;">
-<!--          <el-button size="medium" @click="$refs.itemParameterTable.openUpload()" v-if="inPower">-->
-<!--            <i class="el-icon-upload2" style="color: #3A7BFA;"></i>-->
-<!--            <span style="color: #3A7BFA;">瀵煎叆</span></el-button>-->
-          <el-button size="medium" type="primary" v-if="radio == 1 && importExcel" @click="uploadDia = true">瀵煎叆</el-button>
-          <el-button size="medium" type="primary" @click="openAdd()" v-if="addPower">鏂板</el-button>
-          <!-- <el-button size="medium" icon="el-icon-delete">鍒犻櫎</el-button> -->
+          <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="handleSuccessUp" :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>
+          <el-button size="small" type="primary" @click="openAdd()">鏂板</el-button>
         </el-col>
       </el-row>
     </div>
-    <div v-if="radio==0" class="bodys">
-      <div class="search">
-        <div class="search_thing">
-          <div class="search_label">妫�楠岄」锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-                                              v-model="itemParameterForm.inspectionItem" @keyup.enter.native="refreshTable()"></el-input></div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">妫�楠屽瓙椤癸細</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-                                              v-model="itemParameterForm.inspectionItemSubclass" @keyup.enter.native="refreshTable()"></el-input>
-          </div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">妫�楠屽璞★細</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-                                              v-model="itemParameterForm.sample" @keyup.enter.native="refreshTable()"></el-input>
-          </div>
-        </div>
-        <div class="search_thing" style="padding-left: 30px;">
-          <el-button size="small" @click="refresh()">閲� 缃�</el-button>
-          <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
-        </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-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-input>
+        </el-form-item>
+        <el-form-item label="妫�楠屽璞�" prop="sample">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+                    v-model="itemParameterForm.sample" @keyup.enter.native="refreshTable()">
+          </el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+          <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"
+                    :page="page" :tableLoading="tableLoading"></lims-table>
       </div>
-      <div class="table">
-<!--        <ValueTable ref="itemParameterTable"-->
-<!--                    :url="$api.capacityScope.selectItemParameterList" v-if="PROJECT === '妫�娴嬩腑蹇�'"-->
-<!--                    :upUrl="$api.capacityScope.upItemParameter" :delUrl="$api.capacityScope.delItemParameter"-->
-<!--                    :inputUrl="$api.capacityScope.importData" :componentData="itemParameterData" :key="upIndex" />-->
-<!--        <ValueTable ref="itemParameterTable" :url="$api.capacityScope.selectItemParameterList" v-if="PROJECT === '瑁呭鐢电紗'"-->
-<!--                    :upUrl="$api.capacityScope.upItemParameter" :delUrl="$api.capacityScope.delItemParameter"-->
-<!--                    :inputUrl="$api.capacityScope.importEquipData" :componentData="itemParameterData" :key="upIndex" />-->
-      </div>
-    </div>
-    <div class="bodys">
-      <div class="search" v-if="radio==1">
-        <div class="search_thing">
-          <div class="search_label">妫�楠屽璞★細</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-                                              v-model="testObjectData.entity.specimenName" @keyup.enter.native="refreshTable()"></el-input></div>
-        </div>
-        <div class="search_thing" style="padding-left: 30px;">
-          <el-button size="small" @click="refresh()">閲� 缃�</el-button>
-          <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
-        </div>
-      </div>
-      <div class="table" v-if="radio==1">
-<!--        <ValueTable ref="testObjectTable" :url="$api.capacityScope.selectTestObjectList"-->
-<!--                    :upUrl="$api.capacityScope.upTestObject" :delUrl="$api.capacityScope.delTestObject"-->
-<!--                    :componentData="testObjectData" :key="upIndex" />-->
+      <div class="table" v-if="radio===1">
+        <lims-table :tableData="testObjectTableData" :column="testObjectColumn"
+                    :page="testObjectPage" :tableLoading="tableLoading"></lims-table>
       </div>
     </div>
     <el-dialog title="浜у搧缁存姢" :visible.sync="diaProduct" width="600px">
       <div class="body" v-if="diaProduct" style="height: 350px;overflow-y: auto;padding: 5px 0;">
-<!--        <ValueTable ref="productData" :url="$api.capacityScope.selectProductListByObjectId"-->
-<!--                    :upUrl="$api.capacityScope.upProduct" :delUrl="$api.capacityScope.delProduct"-->
-<!--                    :componentData="productData" :key="upIndex"/>-->
+        <lims-table :tableData="productData" :column="productColumn"
+                    :page="productPage" :tableLoading="productableLoading"></lims-table>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="diaProduct = false">鍙� 娑�</el-button>
         <el-button type="primary" @click="openAdd2" :loading="productLoad">鏂� 澧�</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 + $api.capacityScope.importExcel" :headers="token" :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>-->
+    <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">
+          <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>
+        <el-button :loading="uploading" type="primary" @click="submitUpload()">涓� 浼�</el-button>
       </span>
     </el-dialog>
-
-    <!-- 缂栬緫 鏂板 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="dialogVisible"
-      width="50%"
-      :before-close="handleClose">
-      <el-form :model="addOrupdateForm" label-width="120px" :rules="rules" inline ref="addOrupdateForm"  size="mini">
-        <el-form-item label="妫�楠岄」" prop="inspectionItem">
-          <el-input v-model="addOrupdateForm.inspectionItem" placeholder="璇疯緭鍏ユ楠岄」" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠岄」EN" >
-          <el-input v-model="addOrupdateForm.inspectionItemEn" placeholder="璇疯緭鍏ユ楠岄」EN" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠岄」瀛愰」" >
-          <el-input v-model="addOrupdateForm.inspectionItemSubclass" placeholder="璇疯緭鍏ユ楠岄」瀛愰」" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠屽瓙椤笶N" >
-          <el-input v-model="addOrupdateForm.inspectionItemSubclassEn" placeholder="璇疯緭鍏ユ楠屽瓙椤笶N" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠屽璞�" >
-          <el-cascader
-            size="mini" style="width: 220px;"
-            filterable
-            v-model="addOrupdateForm.sample"
-            :options="tree"
-            :props="{value:'name',label: 'name', multiple: true, checkStrictly: true }"
-            clearable></el-cascader>
-          <!-- <el-input v-model="addOrupdateForm.sample" placeholder="璇疯緭鍏ユ楠屽璞�" size="mini" style="width: 220px;"></el-input> -->
-        </el-form-item>
-        <el-form-item label="鍗曚环(鍏�)" >
-          <el-input v-model="addOrupdateForm.price" placeholder="璇疯緭鍏ュ崟浠�" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="鍦烘墍" >
-          <el-select v-model="addOrupdateForm.laboratory" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in laboratory"
-              :key="item.value"
-              :label="item.label"
-              :value="item.label">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="璇曢獙瀹�" prop="sonLaboratory">
-          <el-select v-model="addOrupdateForm.sonLaboratory" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.sonLaboratory"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="瑕佹眰鎻忚堪" >
-          <el-input v-model="addOrupdateForm.askTell" placeholder="璇疯緭鍏ヨ姹傛弿杩�" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="瑕佹眰鍊�" >
-          <el-input v-model="addOrupdateForm.ask" placeholder="璇疯緭鍏ヨ姹傚��" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="璁¢噺鍗曚綅" prop="unit">
-          <el-select v-model="addOrupdateForm.unit" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.unit"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="宸ユ椂(H)" >
-          <el-input v-model="addOrupdateForm.manHour" placeholder="璇疯緭鍏ュ伐鏃�" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="棰勮鏃堕棿(H)" prop="manDay">
-          <el-input v-model="addOrupdateForm.manDay" placeholder="璇疯緭鍏ラ璁℃椂闂�" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="宸ユ椂鍒嗙粍" >
-          <el-input v-model="addOrupdateForm.manHourGroup" placeholder="璇疯緭鍏ュ伐鏃跺垎缁�" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠岄」绫诲瀷" prop="inspectionItemType">
-          <el-select v-model="addOrupdateForm.inspectionItemType" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.inspectionItemType"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="妫�楠屽�肩被鍨�" prop="inspectionValueType">
-          <el-select v-model="addOrupdateForm.inspectionValueType" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.inspectionValueType"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="瀛楀吀绫诲瀷" >
-          <el-select v-model="addOrupdateForm.dic" clearable filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.dic"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鐗规畩鏍囪瘑绗�">
-          <el-select v-model="addOrupdateForm.bsm" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.bsm"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍘熷璁板綍妯℃澘" prop="templateId">
-          <el-select v-model="addOrupdateForm.templateId" filterable size="small" style="width: 220px;">
-            <el-option
-              v-for="item in dicList.templateId"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="妫�楠岄」鍒嗙被" >
-          <el-input v-model="addOrupdateForm.inspectionItemClass" placeholder="璇疯緭鍏ユ楠岄」鍒嗙被" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="妫�楠岄」鍒嗙被EN" >
-          <el-input v-model="addOrupdateForm.inspectionItemClassEn" placeholder="璇疯緭鍏ユ楠岄」鍒嗙被EN" size="mini" style="width: 220px;"></el-input>
-        </el-form-item>
-        <el-form-item label="璇曢獙鏂规硶" prop="method">
-          <el-select v-model="addOrupdateForm.method" filterable multiple  size="small" style="width: 220px;">
-            <el-option
-              v-for="(item,index) in dicList.method"
-              :key="index"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-      <el-button @click="handleClose">鍙� 娑�</el-button>
-      <el-button type="primary" @click="saveOrEnit">纭� 瀹�</el-button>
-    </span>
-    </el-dialog>
-
-
-
-
-
+    <!--妫�楠岄」鐩弬鏁�-缂栬緫寮规-->
+    <EditForm ref="editForm"></EditForm>
+    <testObjectEditForm ref="testObjectEditForm"></testObjectEditForm>
+    <BindPartDialog v-if="bindPartDialog" :bindPartDialog="bindPartDialog"
+                    :currentRow="currentRow"
+                    :type="type"
+                    @closeBindPartDialog="closeBindPartDialog"></BindPartDialog>
+    <BindSupplierDensityDialog v-if="bindSupplierDensityDialog"
+                               :bindSupplierDensityDialog="bindSupplierDensityDialog"
+                               :currentRow="currentSupplierDensityRow"
+                               @closeBindPartDialog="closeBindSupplierDensityDialog"></BindSupplierDensityDialog>
   </div>
 </template>
 
 <script>
-// import ValueTable from '../tool/value-table.vue'
-import {addItemParameter, getItemTree, upItemParameter} from "@/api/structural/capability";
-import {obtainItemParameterList} from "@/api/structural/laboratoryScope";
-import {selectStandardMethods} from "@/api/structural/standardMethod";
+import BindPartDialog from "@/components/capability/bindPartDialog.vue"
+import BindSupplierDensityDialog from "@/components/capability/bindSupplierDensityDialog.vue"
+import {
+  delItemParameter, delProduct, delTestObject, selectItemParameterList, selectProductListByObjectId,
+  selectTestObjectList,
+} from "@/api/structural/capability";
+import limsTable from "@/components/Table/lims-table.vue";
+import EditForm from "@/components/capability/EditForm.vue";
+import testObjectEditForm from "@/components/capability/testObjectEditForm.vue";
+import {getToken} from "@/utils/auth";
 
 export default {
+  components: {limsTable, EditForm, testObjectEditForm, BindPartDialog, BindSupplierDensityDialog},
   data() {
     return {
-      dicList: {
-        inspectionItemType: [],
-        inspectionValueType: [],
-        bsm: [],
-        sonLaboratory: [],
-        unit: [],
-        dic: [],
-        method: [],
+      uploadAction: process.env.VUE_APP_BASE_API + '/capacityScope/importExcel',
+      uploadAction1: process.env.VUE_APP_BASE_API + '/capacityScope/importEquipData',
+      tableData: [],
+      column: [
+        {label: '妫�楠岄」', prop: 'inspectionItem'},
+        {label: '妫�楠岄」EN', prop: 'inspectionItemEn'},
+        {label: '妫�楠屽瓙椤�', prop: 'inspectionItemSubclass'},
+        {label: '妫�楠屽瓙椤笶N', 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',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.editForm(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              },
+            },
+          ]
+        }
+      ],
+      page: {
+        total:0,
+        size:10,
+        current:0
       },
+      testObjectTableData: [],
+      testObjectColumn: [
+        {
+          dataType: 'tag',
+          label: '鍦烘墍',
+          prop: 'laboratoryId',
+          minWidth: '130',
+          formatData: (params) => {
+            if (params == 1) {
+              return '瑁呭鐢电紗璇曢獙瀹�'
+            } else if (params == 5) {
+              return '閫氫俊浜у搧瀹為獙瀹�'
+            } else if (params == 6) {
+              return '鐢靛姏浜у搧瀹為獙瀹�'
+            } else if (params == 8) {
+              return '鍌ㄨ兘浜у搧瀹為獙瀹�'
+            } else {
+              return '灏勯绾跨紗瀹為獙瀹�'
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return 'success'
+            } else if (params == 5) {
+              return 'info'
+            } else if (params == 6) {
+              return 'warning'
+            } else if (params == 8) {
+              return 'danger'
+            } else {
+              return ''
+            }
+          }
+        },
+        {label: '妫�楠屽璞�', prop: 'specimenName'},
+        {label: '妫�楠屽璞N', prop: 'specimenNameEn'},
+        {label: '浜у搧', prop: 'product'},
+        {label: '瀵硅薄浠e彿', prop: 'code'},
+        {label: '瀵硅薄绫诲瀷', prop: 'objectType',
+          dataType: 'tag',
+          formatData: (params) => {
+            if (params == 1) {
+              return '鍘熸潗鏂�'
+            } else if (params == 2) {
+              return '鎴愬搧'
+            } else {
+              return '杈呮潗'
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return 'success'
+            } else if (params == 2) {
+              return 'info'
+            } else {
+              return 'warning'
+            }
+          }},
+        {label: '鍒涘缓浜�', prop: 'createUserName'},
+        {label: '鏇存柊浜�', prop: 'updateUserName'},
+        {label: '鍒涘缓鏃堕棿', prop: 'createTime'},
+        {label: '鏇存柊鏃堕棿', prop: 'updateTime'},
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.editTestObjectForm(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.deleteTest(row);
+              },
+            },
+            {
+              name: '浜у搧缁存姢',
+              type: 'text',
+              clickFun: (row) => {
+                this.upProduct(row);
+              },
+            },
+            {
+              name: '闆朵欢缁戝畾',
+              type: 'text',
+              clickFun: (row) => {
+                this.bindPartFirst(row);
+              },
+            },
+          ]
+        }
+      ],
+      testObjectPage: {
+        total:0,
+        size:10,
+        current:0
+      },
+      tableLoading: false,
       addOrUpdate: '',
-      addOrupdateForm:{
-        inspectionItem: '',
-        inspectionItemEn: '',
-        inspectionItemSubclass: '',
-        inspectionItemSubclassEn: '',
-        sample: null,
-        price: '',
-        laboratory: '',
-        sonLaboratory: '',
-        askTell: '',
-        ask: '',
-        unit: '',
-        manHour: '',
-        manDay: '',
-        manHourGroup: '',
-        inspectionItemType: '',
-        inspectionValueType: '',
-        dic: '',
-        bsm: '',
-        templateId: '',
-        inspectionItemClass: '',
-        inspectionItemClassEn: '',
-        method: []
-      },
       tree: null,
-      rules:{
-        inspectionItem: [
-          { required: true, message: '璇疯緭鍏ユ楠岄」', trigger: 'blur' }
-        ],
-        sonLaboratory: [
-          { required: true, message: '璇疯緭鍏ヨ瘯楠屽', trigger: 'change' }
-        ],
-        unit: [
-          { required: true, message: '璇疯緭鍏ヨ閲忓崟浣�', trigger: 'change' }
-        ],
-        manDay: [
-          { required: true, message: '璇疯緭鍏ラ璁℃椂闂�', trigger: 'blur' }
-        ],
-        inspectionItemType: [
-          { required: true, message: '璇疯緭鍏ユ楠岄」绫诲瀷', trigger: 'change' }
-        ],
-        inspectionValueType: [
-          { required: true, message: '璇疯緭鍏ユ楠屽�肩被鍨�', trigger: 'change' }
-        ],
-        method: [
-          { required: true, message: '璇烽�夋嫨璇曢獙鏂规硶', trigger: 'change' }
-        ],
-        templateId: [
-          { required: true, message: '璇疯緭鍏ュ師濮嬭褰曟ā鏉�', trigger: 'change' }
-        ],
-      },
-      dialogVisible: false,
       loading: true,
       itemParameterForm: {
         inspectionItem: null,
         inspectionItemSubclass: null,
         sample: null
       },
-      logining:false,
       radio: 0,
-      showItemParameter: true,
-      showTestObject: false,
-      itemParameterData: {
-        entity: {
-          inspectionItem: null,
-          inspectionItemSubclass: null,
-          sample: null,
-          orderBy: {
-            field: 'id',
-            order: 'asc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: true,
-        row: 2,
-        do: [{
-          id: 'update',
-          font: '缂栬緫',
-          type: 'text',
-          method: 'openAdd',
-          field: []
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy'
-        }],
-        tagField: {
-        },
-        selectField: {
-          inspectionItemType: {
-            select: []
-          },
-          bsm: {
-            select: []
-          },
-          inspectionValueType: {
-            select: []
-          },
-          laboratory: {
-            select: []
-          },
-          templateId: {
-            select: []
-          },
-          method: {
-            select: [],
-            choose: true
-          },
-          sonLaboratory: {
-            select: []
-          },
-          unit: {
-            select: []
-          },
-          dic: {
-            select: []
-          },
-        },
-        cascaderField:{
-          sample:{
-            tree:[]
-          },
-          // 瀛楁閰嶇疆
-          props:{
-            value:'name',
-            label:'name',
-            checkStrictly: true,
-            multiple: true
-          }
-        },
-        requiredAdd: ['sonLaboratory', 'inspectionItem', 'inspectionItemType', 'inspectionValueType',
-          'unit', 'method', 'manDay', 'templateId'
-        ],
-        requiredUp: ['sonLaboratory', 'inspectionItem', 'inspectionItemType', 'inspectionValueType',
-          'unit', 'method', 'manDay', 'templateId'
-        ],
-        accept: '.xlsx',
-        inputType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-        needSort: ['createTime', 'updateTime', 'inspectionItem', 'inspectionItemSubclass', 'sample'],
-      },
-      testObjectData: {
-        entity: {
-          specimenName: null,
-          orderBy: {
-            field: 'id',
-            order: 'asc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: true,
-        do: [{
-          id: 'update',
-          font: '缂栬緫',
-          type: 'text',
-          method: 'doDiy',
-          field: ['createUserName', 'updateUserName', 'product']
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy'
-        }, {
-          font: '浜у搧缁存姢',
-          type: 'text',
-          method: 'upProduct'
-        }],
-        tagField: {
-          laboratoryId: {
-            select: []
-          }
-        },
-        selectField: {
-          laboratoryId: {
-            select: []
-          }
-        },
-        requiredAdd: ['specimenName', 'code', 'laboratoryId'],
-        requiredUp: ['specimenName', 'code', 'laboratoryId'],
-        needSort: ['createTime', 'updateTime', 'specimenName'],
-      },
-      itemParameterEntityCopy: {},
-      testObjectDataEntityCopy: {},
-      upIndex: 0,
-      addDia: false,
-      addPower: true,
-      select: 0,
-      laboratory: [],
       productLoad: false,
       diaProduct: false,
-      productData: {
-        entity: {
-          objectId: 0,
-          orderBy: {
-            field: 'id',
-            order: 'asc'
-          }
-        },
-        isPage: false,
-        isIndex: true,
-        showSelect: false,
-        select: true,
-        do: [{
-          id: 'update',
-          font: '缂栬緫',
-          type: 'text',
-          method: 'doDiy',
-          field: []
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy'
-        }],
-        tagField: {},
-        selectField: {},
-        requiredAdd: ['name','nameEn'],
-        requiredUp: ['name','nameEn'],
+      productColumn: [
+        {label: '浜у搧鍚嶇О', prop: 'name'},
+        {label: '浜у搧鍚嶇ОEN', prop: 'nameEn'},
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.editProduct(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.deleteProduct(row);
+              },
+            },
+            {
+              name: '闆朵欢缁戝畾',
+              type: 'text',
+              clickFun: (row) => {
+                this.bindPartSecond(row);
+              },
+            },
+            {
+              name: '鍘傚瀵嗗害缁戝畾',
+              type: 'text',
+              clickFun: (row) => {
+                this.bindSupplierDensitySecond(row);
+              },
+            },
+          ]
+        }
+      ],
+      productData: [],
+      productPage: {
+        total:0,
+        size:10,
+        current:0
       },
+      productableLoading: false,
       inPower: true,
-      importExcel: false,
       uploadDia: false,
       fileList: [],
-      token: null,
+      token: {Authorization: "Bearer " + getToken()},
       uploading: false,
+      currentRow: {}, // 閫夋嫨闆朵欢缁戝畾鏈潯鏁版嵁鐨勪俊鎭�
+      currentSupplierDensityRow: {}, // 閫夋嫨闆朵欢缁戝畾鏈潯鏁版嵁鐨勪俊鎭�
+      bindSupplierDensityDialog: false,
+      bindPartDialog: false,
+      type: null,  // 闆朵欢缁戝畾鐨勭被鍨�--0锛氭楠屽璞★紝1锛氫骇鍝佺淮鎶�
     }
   },
   created() {
-    if (this.PROJECT === '瑁呭鐢电紗') {
-      this.itemParameterData.requiredUp = ['sonLaboratory', 'inspectionItem', 'inspectionItemType', 'inspectionValueType',
-        'unit', 'manDay', 'templateId'
-      ]
-    }
+    this.refreshTable()
   },
   mounted() {
     this.token = {
       'token': sessionStorage.getItem('token')
     }
-    this.itemParameterEntityCopy = this.HaveJson(this.itemParameterData.entity)
-    this.testObjectDataEntityCopy = this.HaveJson(this.testObjectData.entity)
-    this.obtainItemParameterList() //鍦烘墍
-    this.selectStandardMethods()    // 璇曢獙鏂规硶
-    this.selectTestObjectByName()
-    this.getStandardTemplate() // 鍘熷璁板綍妯℃澘
-    this.selectDocUnit()
-
-    this.selectAllNeedEnum()
+    this.refreshTable()
   },
   computed: {
     title() {
-      return this.addOrUpdate == 1 ? '鏂板' : '缂栬緫'
+      return this.addOrUpdate === 1 ? '鏂板' : '缂栬緫'
     }
   },
   methods: {
-    //鏌ヨ闇�瑕佺殑鍏ㄩ儴鏋氫妇
-    selectAllNeedEnum(){
-      // this.$axios.post(this.$api.enums.selectEnumListByCategory,
-      //   {categoryList:['妫�楠岄」绫诲瀷','鍙栧�肩被鍨�','鏄惁','妫�楠屽�肩被鍨�','瀛愬疄楠屽','鍗曚綅']},{
-      //     headers: {
-      //       'Content-Type': 'application/json'
-      //     }
-      //   }).then(res => {
-      //   res.data['妫�楠岄」绫诲瀷'].forEach(ele => {
-      //     if(ele.label.indexOf('闈為噰闆�')==0)ele.type='info'
-      //   });
-      //   this.dicList.sonLaboratory = res.data['瀛愬疄楠屽']
-      //   this.dicList.unit = res.data['鍗曚綅']
-      //   this.dicList.inspectionItemType = res.data['妫�楠岄」绫诲瀷']
-      //   this.dicList.inspectionValueType = res.data['妫�楠屽�肩被鍨�']
-      //   this.dicList.bsm = res.data['鏄惁']
-      // })
-    },
-    saveOrEnit() {
-      console.log('this.addOrupdateForm', this.addOrupdateForm.sample);
-      let flag = true
-      this.$refs['addOrupdateForm'].validate((valid) => {
-        if (valid) {
-          flag = false
-          return false
-        }
-      });
-      if(flag) return
-      if(this.addOrupdateForm.sample != null && this.addOrupdateForm.sample != '' && this.addOrupdateForm.sample != undefined ) {
-        if(this.addOrupdateForm.sample.length > 0) {
-          this.addOrupdateForm.sample = JSON.stringify(this.addOrupdateForm.sample)
-        }else{
-          this.addOrupdateForm.sample = '[]'
-        }
-      }else{
-        this.addOrupdateForm.sample = '[]'
-      }
-
-      // 1鏄柊澧�
-      if(this.addOrUpdate == 1) {
-        this.addOrupdateForm.method = JSON.stringify(this.addOrupdateForm.method)
-        addItemParameter(this.addOrupdateForm).then(res => {
-          if(res.code == 200) {
-            this.$message.success('鏂板鎴愬姛')
-            this.refreshTable()
-            this.handleClose()
-            this.dialogVisible = false
-          } else {
-            // 鎶ラ敊 灏嗚浆鎹㈢殑method 浠ュ強 sample 杞崲鍥炴潵
-            this.addOrupdateForm.method = JSON.parse(this.addOrupdateForm.method)
-            this.addOrupdateForm.sample = JSON.parse(this.addOrupdateForm.sample)
-            this.$message.error(res.message)
-          }
-        })
-      }else{
-        this.addOrupdateForm.method = JSON.stringify(this.addOrupdateForm.method)
-        upItemParameter(this.addOrupdateForm).then(res => {
-          if(res.code == 200) {
-            this.$message.success('缂栬緫鎴愬姛')
-            this.refreshTable()
-            this.handleClose()
-            this.dialogVisible = false
-          } else {
-            // 鎶ラ敊 灏嗚浆鎹㈢殑method 浠ュ強 sample 杞崲鍥炴潵
-            this.addOrupdateForm.method = JSON.parse(this.addOrupdateForm.method)
-            this.addOrupdateForm.sample = JSON.parse(this.addOrupdateForm.sample)
-            this.$message.error(res.message)
-          }
-        })
-      }
-    },
-    handleClose() {
-      this.dialogVisible = false
-      this.addOrupdateForm = {
-        inspectionItem: '',
-        inspectionItemEn: '',
-        inspectionItemSubclass: '',
-        inspectionItemSubclassEn: '',
-        sample: null,
-        price: '',
-        laboratory: '',
-        sonLaboratory: '',
-        askTell: '',
-        ask: '',
-        unit: '',
-        manHour: '',
-        manDay: '',
-        manHourGroup: '',
-        inspectionItemType: '',
-        inspectionValueType: '',
-        dic: '',
-        bsm: '',
-        templateId: '',
-        inspectionItemClass: '',
-        inspectionItemClassEn: '',
-        method: null
-      }
-      this.$refs['addOrupdateForm'].resetFields();
-      this.addOrUpdate = ''
-    },
     submitUpload() {
       if (this.$refs.upload.uploadFiles.length == 0) {
         this.$message.error('鏈�夋嫨鏂囦欢')
@@ -645,7 +362,6 @@
         return
       }
       this.$message.success('涓婁紶鎴愬姛')
-      this.standardList = []
       this.productList = []
       this.refreshTable()
     },
@@ -655,142 +371,163 @@
       this.uploading = false
     },
     beforeUpload(file, fileList) {
-      if (file.raw.type != 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
-        this.$message.error('涓婁紶鏂囦欢鏍煎紡涓嶆纭�');
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
         this.$refs.upload.clearFiles()
         return false;
+      } else {
+        return true;
       }
     },
-    selectorSwitch(radio) {
-      if (this.radio === '0') {
-        this.showItemParameter = true;
-        this.showTestObject = false;
-        this.selectTestObjectByName()
-        /* this.$nextTick(() => {
-          this.$refs.itemParameterTable.selectList()
-        }) */
+    onError1(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload1.clearFiles()
+      this.uploading = false
+    },
+    beforeUpload1(file, fileList) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload1.clearFiles()
+        return false;
       } else {
-        this.showTestObject = true;
-        this.showItemParameter = false;
+        return true;
       }
+    },
+    handleSuccessUp (response, file, fileList) {
+      this.$refs.upload.clearFiles()
+      if (response.code == 201) {
+        this.$message.error(response.message)
+        return
+      }
+      this.$message.success('涓婁紶鎴愬姛')
+      this.refreshTable()
     },
     refreshTable() {
-      this.itemParameterData.entity.inspectionItem = this.itemParameterForm.inspectionItem
-      this.itemParameterData.entity.inspectionItemSubclass = this.itemParameterForm.inspectionItemSubclass
-      this.itemParameterData.entity.sample = this.itemParameterForm.sample
-      if (this.radio === '0') {
-        // this.$refs['itemParameterTable'].selectList()
+      this.tableLoading = true
+      if (this.radio === 0) {
+        selectItemParameterList({...this.page, ...this.itemParameterForm}).then(res => {
+          this.tableLoading = false
+          if (res.code === 200) {
+            this.tableData = res.data
+            this.page.total = res.total
+          }
+        }).catch(err => {
+          this.tableLoading = false
+        })
       } else {
-        // this.$refs['testObjectTable'].selectList()
+        selectTestObjectList({...this.testObjectPage, ...this.itemParameterForm}).then(res => {
+          this.tableLoading = false
+          if (res.code === 200) {
+            this.testObjectTableData = res.data
+            this.testObjectPage.total = res.total
+          }
+        }).catch(err => {
+          this.tableLoading = false
+        })
       }
     },
     refresh() {
-      this.itemParameterData.entity = this.HaveJson(this.itemParameterEntityCopy)
-      this.testObjectData.entity = this.HaveJson(this.testObjectDataEntityCopy)
-      this.upIndex++
+      this.resetForm('itemParameterForm')
+      this.refreshTable()
     },
-    openAdd(row) {
-      //0浠h〃妫�楠屽弬鏁皌ab
-      if (this.radio === '0') {
-        // this.$refs.itemParameterTable.openAddDia(this.$api.capacityScope.addItemParameter);
-        if(!row) {
-          this.addOrUpdate = 1
-        }else{
-          if(typeof row.sample == 'string') {
-            row.sample = JSON.parse(row.sample)
-          }
-          this.addOrUpdate = ''
-          this.addOrupdateForm = JSON.parse(JSON.stringify(row))
-        }
-        this.dialogVisible = true
+    // 妫�楠岄」鐩弬鏁版柊澧�
+    openAdd() {
+      if (this.radio === 0) {
+        this.$refs.editForm.openDia('add')
       } else {
-        // this.$refs.testObjectTable.openAddDia(this.$api.capacityScope.addTestObject);
+        this.$refs.testObjectEditForm.openDia('add')
       }
     },
-    selectDocUnit() {
-      // this.$axios.post(this.$api.enums.getDic).then(res => {
-      //   this.dicList.dic = res.data.map(m => {
-      //     return {
-      //       label: m,
-      //       value: m
-      //     }
-      //   })
-      // })
+    // 妫�楠岄」鐩弬鏁�-鎵撳紑淇敼寮规
+    editForm (row) {
+      this.$refs.editForm.openDia('edit', row)
     },
-    obtainItemParameterList() {
-      obtainItemParameterList().then(res => {
-        let data = []
-        let data0 = []
-        res.data.forEach(a => {
-          data.push({
-            label: a.laboratoryName,
-            value: a.id
-          })
-          data0.push({
-            label: a.laboratoryName,
-            value: a.laboratoryName
-          })
-        })
-        // this.itemParameterData.selectField.laboratory.select = data0
-        // this.itemParameterData.tagField.laboratory.select = data0
-        this.testObjectData.selectField.laboratoryId.select = data
-        this.testObjectData.tagField.laboratoryId.select = data
-        this.laboratory = data
-      })
+    // 妫�楠岄」鐩弬鏁�-鍒犻櫎
+    delete (row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎姝ゆ暟鎹」锛�').then(function() {
+        return delItemParameter(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
     },
-    selectStandardMethods() {
-      selectStandardMethods().then(res => {
-        let data = []
-        res.data.forEach(a => {
-          data.push({
-            label: a.code,
-            value: a.code
-          })
-        })
-        this.dicList.method = data
-      })
+    // 妫�楠屽璞�-鎵撳紑淇敼寮规
+    editTestObjectForm (row) {
+      this.$refs.testObjectEditForm.openDia('edit', row)
     },
-    selectTestObjectByName() {
-      getItemTree().then(res => {
-        res.data.forEach(a=>{
-          this.cascaderFieldData(a)
-        })
-        this.itemParameterData.cascaderField.sample.tree = res.data
-        this.tree = res.data
-      })
+    // 妫�楠岄」鐩弬鏁�-鍒犻櫎
+    deleteTest (row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎姝ゆ暟鎹」锛�').then(function() {
+        return delTestObject(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
     },
-    cascaderFieldData(val){
-      if(val.children === undefined) {
-        return
-      }else if(val.children.length==0){[
-        delete val.children
-      ]}else{
-        val.children.forEach(a=>{
-          this.cascaderFieldData(a)
-        })
-      }
-    },
-    getStandardTemplate() {
-      // this.$axios.get(this.$api.StandardTemplate.getStandardTemplate).then(res => {
-      //   let data = []
-      //   res.data.forEach(a => {
-      //     data.push({
-      //       label: a.name,
-      //       value: a.id,
-      //       type: 'success'
-      //     })
-      //   })
-      //   // this.itemParameterData.selectField.templateId.select = data
-      //   // this.itemParameterData.tagField.templateId.select = data
-      //   this.dicList.templateId = data
-      // })
-    },
+    // 浜у搧缁存姢
     upProduct(row) {
-      this.productData.entity.objectId = row.id
       this.diaProduct = true
+      this.getProductList(row)
     },
+    getProductList (row) {
+      const params = {
+        objectId: 0,
+        partNo: row.partNo
+      }
+      this.productableLoading = true
+      selectProductListByObjectId({...params, ...this.productPage}).then(res => {
+        this.productableLoading = false
+        if (res.code === 200) return
+        this.productData = res.data
+        this.productPage.total = res.data.total
+      }).catch(err => {
+        this.productableLoading = false
+      })
+    },
+    // 浜у搧缁存姢-鏂板
     openAdd2(){
-      // this.$refs.productData.openAddDia(this.$api.capacityScope.addProduct, {objectId: this.productData.entity.objectId});
+
+    },
+    // 浜у搧缁存姢-缂栬緫
+    editProduct () {
+
+    },
+    // 浜у搧缁存姢-鍒犻櫎
+    deleteProduct (row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎姝ゆ暟鎹」锛�').then(function() {
+        return delProduct(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    // 闆朵欢缁戝畾
+    bindPartFirst (row) {
+      this.bindPart(row, 0)
+    },
+    bindPartSecond (row) {
+      this.bindPart(row, 1)
+    },
+    // 鍘傚瀵嗗害缁戝畾
+    bindSupplierDensitySecond (row) {
+      this.bindSupplierDensity(row)
+    },
+    // 鎵撳紑鍘傚瀵嗗害缁戝畾寮规
+    bindSupplierDensity (row) {
+      this.currentSupplierDensityRow = row
+      this.bindSupplierDensityDialog = true
+    },
+    // 鎵撳紑闆朵欢缁戝畾寮规
+    bindPart (row, index) {
+      this.type = index
+      this.currentRow = row
+      this.bindPartDialog = true
+    },
+    closeBindPartDialog () {
+      this.bindPartDialog = false
+    },
+    closeBindSupplierDensityDialog () {
+      this.bindSupplierDensityDialog = false
     },
   }
 }

--
Gitblit v1.9.3