From f761b7eb031c316afb754c73f2d985368958d745 Mon Sep 17 00:00:00 2001
From: cuijian <cuijian@xalxzn.com>
Date: 星期四, 03 七月 2025 09:11:52 +0800
Subject: [PATCH] 质量管理-抽样规则、缺陷维护功能

---
 src/views/qms/modules/inspectionItem/JSelectMultiInspectionTools.vue     |   63 ++
 src/views/qms/SamplingRulesList.vue                                      |  342 ++++++++++++++
 src/views/qms/modules/defect/DefectModel.vue                             |  248 ++++++++++
 src/views/qms/InspectionToolsList.vue                                    |    6 
 src/views/base/ShiftGroupManager.vue                                     |    4 
 src/views/qms/modules/samplingRules/SamplingRulesModel.vue               |  287 ++++++++++++
 src/views/qms/modules/inspectionItem/InspectionItemModel.vue             |   15 
 src/views/qms/InspectionItemList.vue                                     |   14 
 src/views/base/SupplierList.vue                                          |    6 
 src/components/jeecgbiz/JSelectMultiUser.vue                             |   22 
 src/views/base/WarehouseList.vue                                         |    6 
 src/views/qms/DefectList.vue                                             |  322 ++++++++++++++
 src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue |   20 
 src/views/base/ShiftManager.vue                                          |    6 
 14 files changed, 1,319 insertions(+), 42 deletions(-)

diff --git a/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue b/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue
index f99ff94..bac8abb 100644
--- a/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue
+++ b/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue
@@ -14,18 +14,18 @@
         <!-- 鏌ヨ鍖哄煙 -->
         <a-form layout="inline" class="j-inline-form">
           <!-- 鍥哄畾鏉′欢 -->
-          <a-form-item :label="(queryParamText||name)">
+          <!-- <a-form-item :label="(queryParamText||name)">
             <a-input v-model="queryParam[queryParamCode||valueKey]" :placeholder="'璇疯緭鍏�' + (queryParamText||name)" @pressEnter="searchQuery"/>
-          </a-form-item>
+          </a-form-item> -->
           <!-- 鍔ㄦ�佺敓鎴愮殑鏌ヨ鏉′欢 -->
-          <j-select-biz-query-item v-if="queryConfig.length>0" v-show="showMoreQueryItems" :queryParam="queryParam" :queryConfig="queryConfig" @pressEnter="searchQuery"/>
+          <j-select-biz-query-item v-if="queryConfig.length>0" :queryParam="queryParam" :queryConfig="queryConfig" @pressEnter="searchQuery"/>
           <!-- 鎸夐挳 -->
           <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
           <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-          <a v-if="queryConfig.length>0" @click="showMoreQueryItems=!showMoreQueryItems" style="margin-left: 8px">
+          <!-- <a v-if="queryConfig.length>0" @click="showMoreQueryItems=!showMoreQueryItems" style="margin-left: 8px">
             {{ showMoreQueryItems ? '鏀惰捣' : '灞曞紑' }}
             <a-icon :type="showMoreQueryItems ? 'up' : 'down'"/>
-          </a>
+          </a> -->
         </a-form>
 
         <a-table
@@ -354,6 +354,16 @@
         }
       },
 
+    searchQuery() {
+      this.loadData(1);
+      this.selectedRowKeys = []
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1);
+      this.selectedRowKeys = []
+    },
+
     }
   }
 </script>
diff --git a/src/components/jeecgbiz/JSelectMultiUser.vue b/src/components/jeecgbiz/JSelectMultiUser.vue
index f8609f9..0105c57 100644
--- a/src/components/jeecgbiz/JSelectMultiUser.vue
+++ b/src/components/jeecgbiz/JSelectMultiUser.vue
@@ -44,20 +44,24 @@
         // 澶氭潯浠舵煡璇㈤厤缃�
         queryConfigDefault: [
           {
+            key: 'username',
+            label: '璐﹀彿',
+          },
+          {
             key: 'sex',
             label: '鎬у埆',
             // 濡傛灉鍖呭惈 dictCode锛岄偅涔堝氨浼氭樉绀烘垚涓嬫媺妗�
             dictCode: 'sex',
           },
-          {
-            key: 'birthday',
-            label: '鐢熸棩',
-            placeholder: '璇烽�夋嫨鍑虹敓鏃ユ湡',
-            // 濡傛灉鎯宠浣跨敤灞�閮ㄦ敞鍐岀殑缁勪欢锛屽氨蹇呴』瑕佷娇鐢ㄧ澶村嚱鏁�
-            customRender: ({key, queryParam, options}) => {
-              return <j-date {...options} vModel={queryParam[key]} style="width:180px;"/>
-            },
-          },
+          // {
+          //   key: 'birthday',
+          //   label: '鐢熸棩',
+          //   placeholder: '璇烽�夋嫨鍑虹敓鏃ユ湡',
+          //   // 濡傛灉鎯宠浣跨敤灞�閮ㄦ敞鍐岀殑缁勪欢锛屽氨蹇呴』瑕佷娇鐢ㄧ澶村嚱鏁�
+          //   customRender: ({key, queryParam, options}) => {
+          //     return <j-date {...options} vModel={queryParam[key]} style="width:180px;"/>
+          //   },
+          // },
         ],
       }
     },
diff --git a/src/views/base/ShiftGroupManager.vue b/src/views/base/ShiftGroupManager.vue
index 1da4708..1e4f5c1 100644
--- a/src/views/base/ShiftGroupManager.vue
+++ b/src/views/base/ShiftGroupManager.vue
@@ -7,13 +7,13 @@
           <!-- 鎼滅储鍖哄煙 -->
           <a-form layout="inline" @keyup.enter.native="searchQuery">
             <a-row :gutter="24">
-              <a-col :md="12" :sm="8">
+              <a-col :md="6" :sm="8">
                 <a-form-item label="鐝粍鍚嶇О" :labelCol="{span: 5}" :wrapperCol="{span: 18, offset: 1}">
                   <a-input placeholder="" v-model="queryParam.groupName"></a-input>
                 </a-form-item>
               </a-col>
               <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-            <a-col :md="12" :sm="24">
+            <a-col :md="6" :sm="24">
                <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 21px">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
             </a-col>
diff --git a/src/views/base/ShiftManager.vue b/src/views/base/ShiftManager.vue
index 31f6d33..69321bc 100644
--- a/src/views/base/ShiftManager.vue
+++ b/src/views/base/ShiftManager.vue
@@ -5,17 +5,17 @@
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="鐝缂栧彿">
               <j-input placeholder="璇疯緭鍏ョ彮娆$紪鍙�" v-model="queryParam.shiftCode"></j-input>
             </a-form-item>
           </a-col>
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="鐝鍚嶇О">
               <j-input placeholder="璇疯緭鍏ョ彮娆″悕绉�" v-model="queryParam.shiftName"></j-input>
             </a-form-item>
           </a-col>
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
diff --git a/src/views/base/SupplierList.vue b/src/views/base/SupplierList.vue
index bbc0a89..270a0c6 100644
--- a/src/views/base/SupplierList.vue
+++ b/src/views/base/SupplierList.vue
@@ -10,7 +10,7 @@
       >
         <a-row :gutter="30">
 
-           <a-col :xl="4" :lg="7" :md="8" :sm="24">
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="渚涘簲鍟嗙紪鍙�">
               <j-input
                 placeholder="璇疯緭鍏ヤ緵搴斿晢缂栧彿妫�绱�"
@@ -19,7 +19,7 @@
             </a-form-item>
           </a-col>
 
-           <a-col :xl="4" :lg="7" :md="8" :sm="24">
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="渚涘簲鍟嗗悕绉�">
               <j-input
                 placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О妫�绱�"
@@ -28,7 +28,7 @@
             </a-form-item>
           </a-col>
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
diff --git a/src/views/base/WarehouseList.vue b/src/views/base/WarehouseList.vue
index 0d13ebd..fbb8ec7 100644
--- a/src/views/base/WarehouseList.vue
+++ b/src/views/base/WarehouseList.vue
@@ -10,7 +10,7 @@
       >
         <a-row :gutter="30">
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="浠撳簱缂栧彿">
               <j-input
                 placeholder="璇疯緭鍏ヤ粨搴撶紪鍙锋绱�"
@@ -19,7 +19,7 @@
             </a-form-item>
           </a-col>
 
-           <a-col :xl="4" :lg="7" :md="8" :sm="24">
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="浠撳簱鍚嶇О">
               <j-input
                 placeholder="璇疯緭鍏ヤ粨搴撳悕绉版绱�"
@@ -28,7 +28,7 @@
             </a-form-item>
           </a-col>
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
diff --git a/src/views/qms/DefectList.vue b/src/views/qms/DefectList.vue
new file mode 100644
index 0000000..5cf5eef
--- /dev/null
+++ b/src/views/qms/DefectList.vue
@@ -0,0 +1,322 @@
+<template>
+  <a-card
+    :bordered="false"
+  >
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form
+        layout="inline"
+        @keyup.enter.native="searchQuery"
+      >
+        <a-row :gutter="30">
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="缂洪櫡缂栫爜">
+              <j-input
+                placeholder="璇疯緭鍏ョ己闄风紪鐮�"
+                v-model="queryParam.defectCode"
+              ></j-input>
+            </a-form-item>
+          </a-col>
+
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="缂洪櫡鍚嶇О">
+              <j-input
+                placeholder="璇疯緭鍏ョ己闄峰悕绉�"
+                v-model="queryParam.defectName"
+              ></j-input>
+            </a-form-item>
+          </a-col>
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button
+        @click="handleAdd"
+        type="primary"
+        icon="plus"
+      >鏂板</a-button>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        filterMultiple="filterMultiple"
+        :columns="columns"
+        :rowClassName="tableRowClass"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+      >
+        <!--鐘舵�佹爮涓�у睍绀�-->
+        <span
+          slot="status"
+          slot-scope="text,record"
+        >
+          <a-badge
+            v-if="record.defectStatus==1"
+            status="success"
+          />
+          <span
+            v-if="record.defectStatus==1"
+            class="success"
+          >鍚敤</span>
+          <a-badge
+            v-if="record.defectStatus==0"
+            status="error"
+          />
+          <span
+            v-if="record.defectStatus==0"
+            class="error"
+          >绂佺敤</span>
+        </span>
+        <span
+          slot="action"
+          slot-scope="text, record"
+        >
+          <a
+            href="javascript:;"
+            @click="handleDetail(record)"
+          >璇︽儏</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村
+              <a-icon type="down" />
+            </a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleEdit(record)">缂栬緫</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm
+                  title="纭畾鍒犻櫎鍚�?"
+                  @confirm="() => handleDelete(record.id)"
+                >
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+
+              </a-menu-item>
+              <a-menu-item v-if="record.defectStatus == 0">
+                <a-popconfirm
+                  title="纭畾鍚敤鍚�?"
+                  @confirm="() => handleActive(record.id)"
+                >
+                  <a>鍚敤</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item v-if="record.defectStatus == 1">
+                <a-popconfirm
+                  title="纭畾绂佺敤鍚�?"
+                  @confirm="() => handleActive(record.id)"
+                >
+                  <a>绂佺敤</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <defect-model
+      ref="modalForm"
+      @ok="modalFormOk"
+    ></defect-model>
+  </a-card>
+</template>
+
+<script>
+//鎸夐渶寮曞叆 缁勪欢
+import DefectModel from './modules/defect/DefectModel'
+
+import { deleteAction, requestPut, getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+import JInput from '@/components/jeecg/JInput'
+
+export default {
+  name: 'DefectList',
+  mixins: [JeecgListMixin],
+  components: {
+    DefectModel,
+    JEllipsis,
+    JInput,
+  },
+  data() {
+    return {
+      dataSource: [],
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        total: 0
+      },
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: "center",
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1;
+          }
+        },
+        {
+          title: '缂洪櫡缂栫爜',
+          align: "center",
+          dataIndex: 'defectCode'
+        },
+        {
+          title: '缂洪櫡鍚嶇О',
+          align: "center",
+          dataIndex: 'defectName'
+        },
+        {
+          title: '缂洪櫡鍒嗙被',
+          align: "center",
+          dataIndex: 'defectCategory_dictText'
+        },
+        {
+          title: '鎻忚堪',
+          align: 'center',
+          dataIndex: 'descreption'
+        },
+        {
+          width: 100,
+          title: '鐘舵��',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'status',
+          },
+          dataIndex: 'defectStatus'
+        },
+        {
+          width: 150,
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' },
+        }
+      ],
+      url: {
+        list: '/qms/defect/list',
+        delete: '/qms/defect/delete',
+        active: '/qms/defect/active',
+      },
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1;
+      }
+      var params = this.getQueryParams();//鏌ヨ鏉′欢
+      this.loading = true;
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records;
+          this.ipagination.total = res.result.total;
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false;
+      })
+    },
+    //绂佺敤鐘舵�佹牱寮�
+    tableRowClass(record, index) {
+      if (record.warehouseStatus != "1") {
+        return "frozenRowClass";
+      }
+      return "";
+    },
+    //鍚敤绂佺敤
+    handleActive(id) {
+      if (!this.url.active) {
+        this.$message.error("璇疯缃畊rl.active!")
+        return
+      }
+      let that = this;
+      requestPut(that.url.active, {}, { id: id }).then((res) => {
+        if (res.success) {
+          that.$message.success(res.message);
+          that.loadData();
+        } else {
+          that.$message.warning(res.message);
+        }
+      });
+    },
+  },
+
+}
+</script>
+<style lang="less" scoped>
+@import '~@assets/less/common.less';
+.frozenRowClass {
+  color: #c9c9c9;
+}
+.success {
+  color: green;
+}
+.error {
+  color: red;
+}
+.fontweight {
+  font-weight: bold;
+}
+.ant-card-body .table-operator {
+  margin-bottom: 18px;
+}
+
+.ant-table-tbody .ant-table-row td {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+
+.anty-row-operator button {
+  margin: 0 5px;
+}
+
+/deep/.ant-btn-danger {
+  background-color: #ffffff;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/qms/InspectionItemList.vue b/src/views/qms/InspectionItemList.vue
index cf9db17..0689c6a 100644
--- a/src/views/qms/InspectionItemList.vue
+++ b/src/views/qms/InspectionItemList.vue
@@ -10,7 +10,7 @@
       >
         <a-row :gutter="30">
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="妫�楠岄」鐩紪鍙�">
               <j-input
                 placeholder="璇疯緭鍏ユ楠岄」鐩紪鍙锋绱�"
@@ -19,7 +19,7 @@
             </a-form-item>
           </a-col>
 
-           <a-col :xl="4" :lg="7" :md="8" :sm="24">
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="妫�楠岄」鐩悕绉�">
               <j-input
                 placeholder="璇疯緭鍏ユ楠岄」鐩悕绉版绱�"
@@ -28,7 +28,7 @@
             </a-form-item>
           </a-col>
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
@@ -197,17 +197,17 @@
         {
           title: '妫�楠岄」鐩垎绫�',
           align: "center",
-          dataIndex: 'itemCategory'
+          dataIndex: 'itemCategoryName'
         },
         {
           title: '瀹氶噺/瀹氭��',
           align: "center",
-          dataIndex: 'qualitativeOrQuantitative'
+          dataIndex: 'qualitativeOrQuantitativeName'
         },
         {
           title: '娴嬮噺宸ュ叿',
           align: "center",
-          dataIndex: 'inspectionTools'
+          dataIndex: 'inspectionToolsNames'
         },
         {
           title: '澶囨敞',
@@ -232,7 +232,7 @@
         }
       ],
       url: {
-        list: '/qms/inspectionItem/list',
+        list: '/qms/inspectionItem/queryList',
         delete: '/qms/inspectionItem/delete',
         active: '/qms/inspectionItem/active',
       },
diff --git a/src/views/qms/InspectionToolsList.vue b/src/views/qms/InspectionToolsList.vue
index 94d5217..b0eb2fa 100644
--- a/src/views/qms/InspectionToolsList.vue
+++ b/src/views/qms/InspectionToolsList.vue
@@ -10,7 +10,7 @@
       >
         <a-row :gutter="30">
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="妫�楠屽伐鍏风紪鐮�">
               <j-input
                 placeholder="璇疯緭鍏ユ楠屽伐鍏风紪鐮佹绱�"
@@ -19,7 +19,7 @@
             </a-form-item>
           </a-col>
 
-           <a-col :xl="4" :lg="7" :md="8" :sm="24">
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="妫�楠屽伐鍏峰悕绉�">
               <j-input
                 placeholder="璇疯緭鍏ユ楠屽伐鍏峰悕绉版绱�"
@@ -28,7 +28,7 @@
             </a-form-item>
           </a-col>
 
-          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
               <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
diff --git a/src/views/qms/SamplingRulesList.vue b/src/views/qms/SamplingRulesList.vue
new file mode 100644
index 0000000..28882b9
--- /dev/null
+++ b/src/views/qms/SamplingRulesList.vue
@@ -0,0 +1,342 @@
+<template>
+  <a-card
+    :bordered="false"
+  >
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form
+        layout="inline"
+        @keyup.enter.native="searchQuery"
+      >
+        <a-row :gutter="30">
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="瑙勫垯缂栫爜">
+              <j-input
+                placeholder="璇疯緭鍏ヨ鍒欑紪鐮佹绱�"
+                v-model="queryParam.ruleCode"
+              ></j-input>
+            </a-form-item>
+          </a-col>
+
+           <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="瑙勫垯鍚嶇О">
+              <j-input
+                placeholder="璇疯緭鍏ヨ鍒欏悕绉版绱�"
+                v-model="queryParam.ruleName"
+              ></j-input>
+            </a-form-item>
+          </a-col>
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button
+        @click="handleAdd"
+        type="primary"
+        icon="plus"
+      >鏂板</a-button>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        filterMultiple="filterMultiple"
+        :columns="columns"
+        :rowClassName="tableRowClass"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+      >
+        <!--鐘舵�佹爮涓�у睍绀�-->
+        <span
+          slot="status"
+          slot-scope="text,record"
+        >
+          <a-badge
+            v-if="record.ruleStatus==1"
+            status="success"
+          />
+          <span
+            v-if="record.ruleStatus==1"
+            class="success"
+          >鍚敤</span>
+          <a-badge
+            v-if="record.ruleStatus==0"
+            status="error"
+          />
+          <span
+            v-if="record.ruleStatus==0"
+            class="error"
+          >绂佺敤</span>
+        </span>
+        <span
+          slot="action"
+          slot-scope="text, record"
+        >
+          <a
+            href="javascript:;"
+            @click="handleDetail(record)"
+          >璇︽儏</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村
+              <a-icon type="down" />
+            </a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleEdit(record)">缂栬緫</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm
+                  title="纭畾鍒犻櫎鍚�?"
+                  @confirm="() => handleDelete(record.id)"
+                >
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+
+              </a-menu-item>
+              <a-menu-item v-if="record.ruleStatus == 0">
+                <a-popconfirm
+                  title="纭畾鍚敤鍚�?"
+                  @confirm="() => handleActive(record.id)"
+                >
+                  <a>鍚敤</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item v-if="record.ruleStatus == 1">
+                <a-popconfirm
+                  title="纭畾绂佺敤鍚�?"
+                  @confirm="() => handleActive(record.id)"
+                >
+                  <a>绂佺敤</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <sampling-rules-model
+      ref="modalForm"
+      @ok="modalFormOk"
+    ></sampling-rules-model>
+  </a-card>
+</template>
+
+<script>
+//鎸夐渶寮曞叆 缁勪欢
+import SamplingRulesModel from './modules/samplingRules/SamplingRulesModel'
+
+import { deleteAction, requestPut, getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+import JInput from '@/components/jeecg/JInput'
+
+export default {
+  name: 'SamplingRulesList',
+  mixins: [JeecgListMixin],
+  components: {
+    SamplingRulesModel,
+    JEllipsis,
+    JInput,
+  },
+  data() {
+    return {
+      dataSource: [],
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        total: 0
+      },
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: "center",
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1;
+          }
+        },
+        {
+          title: '鎶芥牱瑙勫垯缂栫爜',
+          align: "center",
+          dataIndex: 'ruleCode'
+        },
+        {
+          title: '鎶芥牱瑙勫垯鍚嶇О',
+          align: "center",
+          dataIndex: 'ruleName'
+        },
+        {
+          title: '鎶芥牱瑙勫垯鍒嗙被',
+          align: "center",
+          dataIndex: 'ruleCategory_dictText'
+        },
+        {
+          title: '鎶芥牱鏁伴噺',
+          align: "center",
+          dataIndex: 'samplingQuantity'
+        },
+        {
+          title: '鎵归噺涓婇檺鍊�',
+          align: "center",
+          dataIndex: 'batchUpperLimit'
+        },
+        {
+          title: '鎵归噺涓嬮檺鍊�',
+          align: "center",
+          dataIndex: 'batchLowerLimit'
+        },
+        {
+          title: '鏈�澶т笉鍚堟牸鏁�',
+          align: "center",
+          dataIndex: 'maxUnqualifiedQuantity'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          width: 100,
+          title: '鐘舵��',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'status',
+          },
+          dataIndex: 'ruleStatus'
+        },
+        {
+          width: 150,
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' },
+        }
+      ],
+      url: {
+        list: '/qms/samplingRules/list',
+        delete: '/qms/samplingRules/delete',
+        active: '/qms/samplingRules/active',
+      },
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1;
+      }
+      var params = this.getQueryParams();//鏌ヨ鏉′欢
+      this.loading = true;
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records;
+          this.ipagination.total = res.result.total;
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false;
+      })
+    },
+    //绂佺敤鐘舵�佹牱寮�
+    tableRowClass(record, index) {
+      if (record.warehouseStatus != "1") {
+        return "frozenRowClass";
+      }
+      return "";
+    },
+    //鍚敤绂佺敤
+    handleActive(id) {
+      if (!this.url.active) {
+        this.$message.error("璇疯缃畊rl.active!")
+        return
+      }
+      let that = this;
+      requestPut(that.url.active, {}, { id: id }).then((res) => {
+        if (res.success) {
+          that.$message.success(res.message);
+          that.loadData();
+        } else {
+          that.$message.warning(res.message);
+        }
+      });
+    },
+  },
+
+}
+</script>
+<style lang="less" scoped>
+@import '~@assets/less/common.less';
+.frozenRowClass {
+  color: #c9c9c9;
+}
+.success {
+  color: green;
+}
+.error {
+  color: red;
+}
+.fontweight {
+  font-weight: bold;
+}
+.ant-card-body .table-operator {
+  margin-bottom: 18px;
+}
+
+.ant-table-tbody .ant-table-row td {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+
+.anty-row-operator button {
+  margin: 0 5px;
+}
+
+/deep/.ant-btn-danger {
+  background-color: #ffffff;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/qms/modules/defect/DefectModel.vue b/src/views/qms/modules/defect/DefectModel.vue
new file mode 100644
index 0000000..86c508f
--- /dev/null
+++ b/src/views/qms/modules/defect/DefectModel.vue
@@ -0,0 +1,248 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :okButtonProps="{ props: {disabled: disableSubmit} }"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="缂洪櫡缂栫爜"
+            >
+              <a-input
+                :disabled="disableSubmit"
+                allow-clear
+                placeholder="璇疯緭鍏ョ己闄风紪鐮�"
+                v-decorator="['defectCode', validatorRules.defectCode ]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="缂洪櫡鍚嶇О"
+            >
+              <a-input
+                :disabled="disableSubmit"
+                allow-clear
+                placeholder="璇疯緭鍏ョ己闄峰悕绉�"
+                v-decorator="['defectName', validatorRules.defectName ]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="缂洪櫡鍒嗙被"
+            >
+              <j-dict-select-tag  
+                :disabled="disableSubmit"
+                placeholder="璇疯緭鍏ョ己闄峰垎绫�"
+                v-decorator="['defectCategory', validatorRules.defectCategory ]"
+                dictCode="defect_category"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="鎻忚堪"
+            >
+            <a-textarea :disabled="disableSubmit" placeholder="璇疯緭鍏ユ弿杩�" v-decorator="['descreption', validatorRules.descreption ]"/>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { httpAction, getAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import { duplicateCheck } from '@/api/api'//閲嶅鏍¢獙
+import JDictSelectTag from '../../../../components/dict/JDictSelectTag.vue'
+
+export default {
+  components: { JDictSelectTag },
+  name: "DefectModal",
+  data() {
+    return {
+      title: "鎿嶄綔",
+      visible: false,
+      disableSubmit: false,
+      model: {},
+      defectId: "", //淇濆瓨缂洪櫡id
+      labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        defectCode: {
+          rules: [
+            { required: true, message: '璇疯緭鍏ョ己闄风紪鐮�' },
+            { validator: this.validateNum },
+          ]
+        },
+        defectName: {
+          rules: [
+            { required: true, message: '璇疯緭鍏ョ己闄峰悕绉�' },
+            { validator: this.validateName },
+          ]
+        },
+         defectCategory: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨缂洪櫡鍒嗙被' },
+          ]
+        },
+      },
+      url: {
+        add: "/qms/defect/add",
+        edit: "/qms/defect/edit",
+      },
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      this.edit({});
+    },
+    edit(record) {
+      this.form.resetFields();
+      this.model = Object.assign({}, record);
+      this.defectId = record.id;
+      this.visible = true;
+      this.$nextTick(() => {
+        this.form.setFieldsValue(
+          pick(this.model, 'defectCode', 'defectName','defectCategory','defectStatus','descreption')
+        )
+      });
+    },
+    close() {
+      this.$emit('close');
+      this.visible = false;
+    },
+    handleOk() {
+      const that = this;
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true;
+          let httpurl = '';
+          let method = '';
+          if (!this.model.id) {
+            httpurl += this.url.add;
+            method = 'post';
+          } else {
+            httpurl += this.url.edit;
+            method = 'put';
+          }
+          let formData = Object.assign(this.model, values);
+          httpAction(httpurl, formData, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message);
+              that.$emit('ok');
+            } else {
+              that.$message.warning(res.message);
+            }
+          }).finally(() => {
+            that.confirmLoading = false;
+            that.close();
+          })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    //楠岃瘉 缂栧彿
+    validateNum(rule, value, callback) {
+      var params = {
+        tableName: 'qms_defect',
+        fieldName: 'defect_code',
+        fieldVal: value,
+        dataId: this.defectId,
+        //鏁版嵁搴撲腑瀛樺湪瀛楁del_flag骞朵娇鐢ㄨ瀛楁浣滀负鏈垹闄ょ瓥鐣ワ紝鐪熷垹闄わ細false 鍋囧垹闄わ細true
+        delFlag: 'true',
+      };
+      duplicateCheck(params).then((res) => {
+        if (res.success) {
+          callback();
+        } else {
+          callback("缂洪櫡缂栫爜宸插瓨鍦�!");
+        }
+      })
+    },
+    //楠岃瘉 鍚嶇О
+    validateName(rule, value, callback) {
+      var params = {
+        tableName: 'qms_defect',
+        fieldName: 'defect_name',
+        fieldVal: value,
+        dataId: this.defectId,
+        //鏁版嵁搴撲腑瀛樺湪瀛楁del_flag骞朵娇鐢ㄨ瀛楁浣滀负鏈垹闄ょ瓥鐣ワ紝鐪熷垹闄わ細false 鍋囧垹闄わ細true
+        delFlag: 'true',
+      };
+      duplicateCheck(params).then((res) => {
+        if (res.success) {
+          callback();
+        } else {
+          callback("缂洪櫡鍚嶇О宸插瓨鍦�!");
+        }
+      })
+    },
+    // 鍏抽棴寮圭獥鏃舵竻闄よ〃鍗曟牎楠�
+    removeValidate() {
+      if (this.$refs.form) this.$refs.form.clearValidate()
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/qms/modules/inspectionItem/InspectionItemModel.vue b/src/views/qms/modules/inspectionItem/InspectionItemModel.vue
index 272f420..76fde16 100644
--- a/src/views/qms/modules/inspectionItem/InspectionItemModel.vue
+++ b/src/views/qms/modules/inspectionItem/InspectionItemModel.vue
@@ -82,12 +82,11 @@
               :wrapperCol="wrapperCol"
               label="娴嬮噺宸ュ叿"
             >
-              <a-input
-                :disabled="disableSubmit"
-                allow-clear
-                placeholder="璇烽�夋嫨娴嬮噺宸ュ叿"
-                v-decorator="['inspectionTools', validatorRules.inspectionTools ]"
-              />
+              <j-select-multi-inspection-tools 
+                :disabled="disableSubmit" 
+                v-decorator="['inspectionTools', validatorRules.inspectionTools ]" 
+                valueKey="id">
+              </j-select-multi-inspection-tools>
             </a-form-item>
           </a-col>
         </a-row>
@@ -111,9 +110,11 @@
 import { httpAction, getAction } from '@/api/manage'
 import pick from 'lodash.pick'
 import { duplicateCheck } from '@/api/api'//閲嶅鏍¢獙
+import JSelectMultiInspectionTools from './JSelectMultiInspectionTools'
 
 export default {
   name: "InspectionItemModal",
+  components: {JSelectMultiInspectionTools},
   data() {
     return {
       title: "鎿嶄綔",
@@ -229,7 +230,7 @@
     //楠岃瘉 鍚嶇О
     validateName(rule, value, callback) {
       var params = {
-        tableName: 'qms_inspection_items',
+        tableName: 'qms_inspection_item',
         fieldName: 'item_name',
         fieldVal: value,
         dataId: this.inspectionItemId,
diff --git a/src/views/qms/modules/inspectionItem/JSelectMultiInspectionTools.vue b/src/views/qms/modules/inspectionItem/JSelectMultiInspectionTools.vue
new file mode 100644
index 0000000..c1de5e1
--- /dev/null
+++ b/src/views/qms/modules/inspectionItem/JSelectMultiInspectionTools.vue
@@ -0,0 +1,63 @@
+<template>
+  <!-- 瀹氫箟鍦ㄨ繖閲岀殑鍙傛暟閮芥槸涓嶅彲鍦ㄥ閮ㄨ鐩栫殑锛岄槻姝㈠嚭鐜伴棶棰� -->
+  <j-select-biz-component
+    :value="value"
+    :ellipsisLength="25"
+    :listUrl="url.list"
+    :columns="columns"
+    v-on="$listeners"
+    v-bind="attrs"
+  />
+</template>
+
+<script>
+  import JDate from '@comp/jeecg/JDate'
+  import JSelectBizComponent from '../../../../components/jeecgbiz/JSelectBizComponent'
+
+  export default {
+    name: 'JSelectMultiInspectionTools',
+    components: {JDate, JSelectBizComponent},
+    props: {
+      value: null, // any type
+      queryConfig: {
+        type: Array,
+        default: () => []
+      },
+    },
+    data() {
+      return {
+        url: { list: '/qms/inspectionTools/list' },
+        columns: [
+          { title: '宸ュ叿缂栫爜', align: 'center', width: '25%', widthRight: '70%', dataIndex: 'toolCode' },
+          { title: '宸ュ叿鍚嶇О', align: 'center', width: '25%', dataIndex: 'toolName' },
+          { title: '宸ュ叿鐘舵��', align: 'center', width: '20%', dataIndex: 'toolStatus' },
+          { title: '澶囨敞', align: 'center', width: '20%', dataIndex: 'remark' }
+        ],
+        // 瀹氫箟鍦ㄨ繖閲岀殑鍙傛暟閮芥槸鍙互鍦ㄥ閮ㄤ紶閫掕鐩栫殑锛屽彲浠ユ洿鐏垫椿鐨勫畾鍒跺寲浣跨敤鐨勭粍浠�
+        default: {
+          name: '宸ュ叿',
+          width: 1200,
+          displayKey: 'toolCode',
+          returnKeys: ['id', 'toolName'],
+          queryParamText: '宸ュ叿缂栫爜',
+        },
+        // 澶氭潯浠舵煡璇㈤厤缃�
+        queryConfigDefault: [
+          {
+            key: 'toolName',
+            label: '妫�楠屽伐鍏峰悕绉�',
+          },
+        ],
+      }
+    },
+    computed: {
+      attrs() {
+        return Object.assign(this.default, this.$attrs, {
+          queryConfig: this.queryConfigDefault.concat(this.queryConfig)
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped></style>
\ No newline at end of file
diff --git a/src/views/qms/modules/samplingRules/SamplingRulesModel.vue b/src/views/qms/modules/samplingRules/SamplingRulesModel.vue
new file mode 100644
index 0000000..d4190f2
--- /dev/null
+++ b/src/views/qms/modules/samplingRules/SamplingRulesModel.vue
@@ -0,0 +1,287 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :okButtonProps="{ props: {disabled: disableSubmit} }"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="瑙勫垯缂栫爜"
+            >
+              <a-input
+                :disabled="disableSubmit"
+                allow-clear
+                placeholder="璇疯緭鍏ヨ鍒欑紪鐮�"
+                v-decorator="['ruleCode', validatorRules.ruleCode ]"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="瑙勫垯鍚嶇О"
+            >
+              <a-input
+                :disabled="disableSubmit"
+                allow-clear
+                placeholder="璇疯緭鍏ヨ鍒欏悕绉�"
+                v-decorator="['ruleName', validatorRules.ruleName ]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="{ span: 3 }" 
+              :wrapperCol="{ span: 21 }"
+              label="瑙勫垯鍒嗙被"
+            >
+              <j-dict-select-tag  
+                :disabled="disableSubmit"
+                placeholder="璇疯緭鍏ヨ鍒欏垎绫�"
+                v-decorator="['ruleCategory', validatorRules.ruleCategory ]"
+                dictCode="rule_category"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="鎶芥牱鏁伴噺"
+            >
+              <a-input-number :disabled="disableSubmit" v-decorator="['samplingQuantity', validatorRules.samplingQuantity ]" :min="1" style="width: 100%" placeholder="璇疯緭鍏ユ娊鏍锋暟閲�" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="鏈�澶т笉鍚堟牸鏁�"
+            >
+              <a-input-number :disabled="disableSubmit" v-decorator="['maxUnqualifiedQuantity', validatorRules.maxUnqualifiedQuantity ]" :min="1" style="width: 100%" placeholder="璇疯緭鍏ユ渶澶т笉鍚堟牸鏁�" />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="鎵归噺涓嬮檺鍊�"
+            >
+              <a-input-number :disabled="disableSubmit" v-decorator="['batchLowerLimit', validatorRules.batchLowerLimit ]" :min="1" style="width: 100%" placeholder="璇疯緭鍏ユ壒閲忎笅闄愬��" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-item
+              :labelCol="labelCol" 
+              :wrapperCol="wrapperCol"
+              label="鎵归噺涓婇檺鍊�"
+            >
+              <a-input-number :disabled="disableSubmit" v-decorator="['batchUpperLimit', validatorRules.batchUpperLimit ]" :min="1" style="width: 100%" placeholder="璇疯緭鍏ユ壒閲忎笂闄愬��" />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-item
+              :labelCol="{ span: 3 }" 
+              :wrapperCol="{ span: 21 }"
+              label="澶囨敞"
+            >
+            <a-textarea :disabled="disableSubmit" placeholder="璇疯緭鍏ュ娉�" v-decorator="['remark', validatorRules.remark ]"/>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { httpAction, getAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import { duplicateCheck } from '@/api/api'//閲嶅鏍¢獙
+import JDictSelectTag from '../../../../components/dict/JDictSelectTag.vue'
+
+export default {
+  components: { JDictSelectTag },
+  name: "SamplingRulesModal",
+  data() {
+    return {
+      title: "鎿嶄綔",
+      visible: false,
+      disableSubmit: false,
+      model: {},
+      samplingRulesId: "", //淇濆瓨鎶芥牱瑙勫垯id
+      labelCol: {
+          xs: { span: 24 },
+          sm: { span: 6 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 18 },
+        },
+
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        ruleCode: {
+          rules: [
+            { required: true, message: '璇疯緭鍏ヨ鍒欑紪鐮�' },
+            { validator: this.validateNum },
+          ]
+        },
+        ruleName: {
+          rules: [
+            { required: true, message: '璇疯緭鍏ヨ鍒欏悕绉�' },
+            { validator: this.validateName },
+          ]
+        },
+         ruleCategory: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨瑙勫垯鍒嗙被' },
+          ]
+        },
+      },
+      url: {
+        add: "/qms/samplingRules/add",
+        edit: "/qms/samplingRules/edit",
+      },
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      this.edit({});
+    },
+    edit(record) {
+      this.form.resetFields();
+      this.model = Object.assign({}, record);
+      this.samplingRulesId = record.id;
+      this.visible = true;
+      this.$nextTick(() => {
+        this.form.setFieldsValue(
+          pick(this.model, 'ruleCode', 'ruleName','ruleCategory','ruleStatus','maxUnqualifiedQuantity',
+          'samplingQuantity','batchLowerLimit','batchUpperLimit', 'remark')
+        )
+      });
+    },
+    close() {
+      this.$emit('close');
+      this.visible = false;
+    },
+    handleOk() {
+      const that = this;
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true;
+          let httpurl = '';
+          let method = '';
+          if (!this.model.id) {
+            httpurl += this.url.add;
+            method = 'post';
+          } else {
+            httpurl += this.url.edit;
+            method = 'put';
+          }
+          let formData = Object.assign(this.model, values);
+          httpAction(httpurl, formData, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message);
+              that.$emit('ok');
+            } else {
+              that.$message.warning(res.message);
+            }
+          }).finally(() => {
+            that.confirmLoading = false;
+            that.close();
+          })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    //楠岃瘉 缂栧彿
+    validateNum(rule, value, callback) {
+      var params = {
+        tableName: 'qms_sampling_rules',
+        fieldName: 'rule_code',
+        fieldVal: value,
+        dataId: this.samplingRulesId,
+        //鏁版嵁搴撲腑瀛樺湪瀛楁del_flag骞朵娇鐢ㄨ瀛楁浣滀负鏈垹闄ょ瓥鐣ワ紝鐪熷垹闄わ細false 鍋囧垹闄わ細true
+        delFlag: 'true',
+      };
+      duplicateCheck(params).then((res) => {
+        if (res.success) {
+          callback();
+        } else {
+          callback("瑙勫垯缂栫爜宸插瓨鍦�!");
+        }
+      })
+    },
+    //楠岃瘉 鍚嶇О
+    validateName(rule, value, callback) {
+      var params = {
+        tableName: 'qms_sampling_rules',
+        fieldName: 'rule_name',
+        fieldVal: value,
+        dataId: this.samplingRulesId,
+        //鏁版嵁搴撲腑瀛樺湪瀛楁del_flag骞朵娇鐢ㄨ瀛楁浣滀负鏈垹闄ょ瓥鐣ワ紝鐪熷垹闄わ細false 鍋囧垹闄わ細true
+        delFlag: 'true',
+      };
+      duplicateCheck(params).then((res) => {
+        if (res.success) {
+          callback();
+        } else {
+          callback("瑙勫垯鍚嶇О宸插瓨鍦�!");
+        }
+      })
+    },
+    // 鍏抽棴寮圭獥鏃舵竻闄よ〃鍗曟牎楠�
+    removeValidate() {
+      if (this.$refs.form) this.$refs.form.clearValidate()
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3