From 96294e88135f07c1c3794c9dc2224bd7ca3ab986 Mon Sep 17 00:00:00 2001
From: liuying <1427574514@qq.com>
Date: 周二, 23 4月 2024 21:01:38 +0800
Subject: [PATCH] 物料信息

---
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/editForm.vue                  |  119 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/editForm.vue                    |   70 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/editForm.vue                      |   63 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/excelForm.vue                     |  181 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/editForm.vue                         |  123 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/excelForm.vue                        |  181 +
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs    |   86 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addFormContainerPackaging.vue |  246 ++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/index.vue                     |  523 +++++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/detail.vue                           |  604 ++++++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue                                         |   40 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/excelForm.vue                 |  181 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue                       |   13 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/index.vue                            |  512 +++++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/addForm.vue                          |   94 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue                                      |   12 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addForm.vue                   |   25 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue                                       |   12 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs  |   12 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/details.vue                          |  107 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addForm.vue                     |   13 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addFormBaseCustomer.vue         |  205 ++
 iWare_RawMaterialWarehouse_Web/src/components/Editor/WangEditor.vue                                                           |    2 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/index.vue                       |  717 +++++++
 /dev/null                                                                                                                     |  349 ---
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue                                                 |   12 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/index.vue                         |  547 +++++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue      |  285 +++
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx                 |    0 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs |    6 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/excelForm.vue                   |  181 +
 31 files changed, 5,081 insertions(+), 440 deletions(-)

diff --git a/iWare_RawMaterialWarehouse_Web/src/components/Editor/WangEditor.vue b/iWare_RawMaterialWarehouse_Web/src/components/Editor/WangEditor.vue
index 7a79a9e..f037f76 100644
--- a/iWare_RawMaterialWarehouse_Web/src/components/Editor/WangEditor.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/components/Editor/WangEditor.vue
@@ -103,7 +103,7 @@
 
         this.editor.create() // 鐢熸垚缂栬緫鍣�
         this.editor.txt.text(this.value) // 鐢熸垚缂栬緫鍣�
-        this.$emit('oninit', this.editor)
+        this.$emit('ok', this.editor)
       }
     },
     beforeCreate () {
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue
index d9fa354..569f83d 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue
@@ -9,22 +9,22 @@
     <a-spin :spinning="confirmLoading">
 		<a-form :form="form">
         <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙凤紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏鍣ㄥ閲忥紒'}]}]" />
         </a-form-item>
       </a-form>
     </a-spin>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue
index eb6a7d4..175ad58 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue
@@ -9,22 +9,22 @@
     <a-spin :spinning="confirmLoading">
       <a-form :form="form">
         <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙凤紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏鍣ㄥ閲忥紒'}]}]" />
         </a-form-item>
         <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
       </a-form>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue
index 4a7714f..3bc1547 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue
@@ -158,14 +158,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -178,14 +178,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -198,14 +198,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -218,14 +218,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -238,14 +238,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -258,14 +258,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '130px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -278,14 +278,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -298,14 +298,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -318,14 +318,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
@@ -338,14 +338,14 @@
 	customHeaderCell: () => {
 	return {
 	 style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	 }
 	 }
 	},
 	customCell: () => {
 	return {
 	style: {
-	'min-width': ''//鏈�灏忓垪瀹借缃�
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
 	}
 	}
 	},
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
index a916adf..0abf95b 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
@@ -14,7 +14,7 @@
          <add-form ref="addForm" @ok="handleOk" />
         </a-tab-pane>
         <a-tab-pane key="2" tab="鎺у埗灞炴��" force-render>
-          Content of Tab Pane 2
+          <add-control-rule ref="WmsControlRule" @ok="handleOk" />
         </a-tab-pane>
         <a-tab-pane key="3" tab="鎵规灞炴��">
           闇�姹傚緟瀹�
@@ -38,16 +38,18 @@
 <script>
 import { WmsMaterialAdd, GetAreas, GetStations } from '@/api/modular/main/WmsMaterialManage'
 import addForm from './tabItem/addForm.vue'
-import addFormBaseCustomer from './tabItem/addFormBaseCustomer.vue'
-import addFormContainerPackaging from './tabItem/addFormContainerPackaging.vue'
-import addFormSub from './tabItem/addFormWmsSubstituteGood.vue'
+import addFormBaseCustomer from './tabItem/addFormBaseCustomer/addFormBaseCustomer.vue'
+import addFormContainerPackaging from './tabItem/WmsContainerPackaging/addFormContainerPackaging.vue'
+import addFormSub from './tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue'
+import addControlRule from './tabItem/WmsControlRule/index.vue'
 
 export default {
   components: {
     addForm,
     addFormBaseCustomer,
     addFormContainerPackaging,
-    addFormSub
+    addFormSub,
+    addControlRule
   },
   data() {
     return {
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addForm.vue
similarity index 75%
rename from iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue
rename to iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addForm.vue
index 0fca95c..569f83d 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addForm.vue
@@ -1,25 +1,34 @@
 锘�<template>
-  <!-- 鍖呰鍏崇郴鍩虹琛� -->
-  <a-form :form="form">
+  <a-modal
+    title="鏂板鍖呰鍏崇郴鍩虹琛�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+		<a-form :form="form">
         <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" />
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨婭D锛�'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙凤紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉帮紒'}]}]" />
         </a-form-item>
         <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" />
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏鍣ㄥ閲忥紒'}]}]" />
         </a-form-item>
       </a-form>
+    </a-spin>
+  </a-modal>
 </template>
 
 <script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addFormContainerPackaging.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addFormContainerPackaging.vue
new file mode 100644
index 0000000..74d7399
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addFormContainerPackaging.vue
@@ -0,0 +1,246 @@
+锘�<template>
+  <!-- 鍖呰鍏崇郴 -->
+  <div style="background-color: white">
+    <!-- <a-spin :spinning="loading"> -->
+    <div class="wms-task-management-detail-div">
+      <div class="drawer-content">
+        <!-- <span style="font-weight:bold;cursor:default;">
+          <a style="cursor:default;">{{ row.no }}</a>鍗曟嵁璇︽儏
+        </span> -->
+        <div style="margin-top: 10px;">
+          <a-table :columns="columns" :data-source="list" row-key="id" :pagination="false" :scroll="{ x: true }">
+            <template slot="index" slot-scope="text, record, index">{{ index + 1 }}</template>
+            <span slot="containerStatusscopedSlots" slot-scope="text">
+              <a-tag :color="text == '1' ? '#daa520' : text == '2' ? '#cd5c5c' : text == '3' ? '#add8e6' : '#696969'">{{
+                'orderdetails_statusenum' | dictType(text)
+              }}</a-tag>
+            </span>
+
+            <span slot="action" slot-scope="text, record">
+              <a-popconfirm v-if="hasPerm('BaseCustomer:delete')" placement="topRight" title="纭鍒犻櫎锛�"
+                @confirm="() => itemDelete(record, index)">
+                <a>鍒犻櫎</a>
+              </a-popconfirm>
+            </span>
+          </a-table>
+        </div>
+      </div>
+
+      <p @click="visible = true">鏂板琛�</p>
+
+      <a-modal title="鍖呰鍏崇郴" :width="900" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
+        @cancel="handleCancel">
+        <show-list ref="showList" @ok="handleOk" />
+        <!-- <a-spin :spinning="confirmLoading"></a-spin> -->
+      </a-modal>
+    </div>
+  </div>
+</template>
+
+<script>
+import { WmsOrderRukuDetail } from '@/api/modular/main/WmsOrderManage'
+import showList from './index.vue'
+
+export default {
+  name: 'wmsOrderRukuManagementDetailDrawer',
+  emits: ['update:visible'],
+  props: {
+    visible: {
+      type: Boolean,
+      default: false
+    },
+    row: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  components: {
+    showList
+  },
+  data() {
+    return {
+      loading: false,
+      containerStatusData: [],
+      list: [],
+      columns: [
+        {
+          dataIndex: 'index',
+          title: '搴忓彿',
+          fixed: 'left',
+          width: '60',
+          scopedSlots: { customRender: 'index' },
+          align: 'center'
+        },
+        {
+          title: '瀹瑰櫒绫诲瀷鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'containerTypeName'
+        },
+        {
+          title: '鐗╂枡绫诲瀷缂栧彿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'materialTypeCode'
+        },
+        {
+          title: '鐗╂枡绫诲瀷鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'materialTypeName'
+        },
+        {
+          title: '鐗╂枡瀹瑰櫒瀹归噺',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'boxQty'
+        },
+      ],
+      // 鍒嗛〉
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30', '40'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + '鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+        size: 'small'
+      }
+    }
+  },
+
+  created() {
+    const containerStatusOption = this.$options
+    this.containerStatusData = containerStatusOption.filters['dictData']('orderdetails_statusenum')
+
+    this.columns.push({
+      title: '鎿嶄綔',
+      width: '150px',
+      dataIndex: 'action',
+      scopedSlots: { customRender: 'action' }
+    })
+  },
+  methods: {
+    onClose() {
+      this.close()
+    },
+    close() {
+      this.$emit('update:visible', false)
+    },
+    afterVisibleChange(visible) {
+      if (visible) {
+        this.initShow()
+      } else {
+        this.afterClsoe()
+      }
+    },
+    initShow() {
+      this.loading = true
+      this.getList(() => {
+        this.loading = false
+      })
+    },
+    getList(row) {
+      let params = { id: row.id }
+      WmsOrderRukuDetail(params)
+        .then(d => {
+          this.list = d.data.rows || []
+          this.$emit('update:visible', true)
+          // callback && callback(true)
+        })
+        .catch(() => {
+          this.$emit('update:visible', false)
+          this.list = []
+          // callback && callback(false)
+        })
+    },
+    afterClsoe() {
+      this.list = []
+    },
+    handleOk(param) {
+      this.list = param
+    },
+    handleSubmit() {
+      this.visible = false
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    itemDelete(record, index) {
+      this.list.splice(index, 1)
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.wms-task-management-detail-div {
+  height: 100%;
+  overflow: auto;
+
+  .drawer-content {
+    padding: 16px;
+  }
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/editForm.vue
new file mode 100644
index 0000000..175ad58
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/editForm.vue
@@ -0,0 +1,119 @@
+锘�<template>
+  <a-modal
+    title="缂栬緫鍖呰鍏崇郴鍩虹琛�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨婭D锛�'}]}]" />
+        </a-form-item>
+        <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName', {rules: [{required: true, message: '璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉帮紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨婭D锛�'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙凤紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉帮紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏鍣ㄥ閲忥紒'}]}]" />
+        </a-form-item>
+        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import moment from 'moment'
+  import {
+  WmsContainerPackagingEdit
+  } from '@/api/modular/main/WmsBase/WmsContainerPackagingManage'
+  export default {
+  data () {
+  return {
+  Id: 0,
+  labelCol: {
+  xs: { span: 24 },
+  sm: { span: 5 }
+  },
+  wrapperCol: {
+  xs: { span: 24 },
+  sm: { span: 15 }
+  },
+  record: {},
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this)
+      }
+    },
+    methods: {
+	moment,
+      // 鍒濆鍖栨柟娉�
+      edit (record) {
+        this.visible = true;
+		this.Id = record.id;
+        this.$nextTick(() => {
+        });
+        //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+        this.record = JSON.parse(JSON.stringify(record))
+        this.$nextTick(() => {
+          this.form.setFieldsValue(
+            {
+              id: record.id,
+              containerTypeId: record.containerTypeId,
+              containerTypeName: record.containerTypeName,
+              materialTypeId: record.materialTypeId,
+              materialTypeCode: record.materialTypeCode,
+              materialTypeName: record.materialTypeName,
+              boxQty: record.boxQty
+            }
+          )
+        })
+      },
+      handleSubmit () {
+        const { form: { validateFields } } = this
+        this.confirmLoading = true
+        validateFields((errors, values) => {
+          if (!errors) {
+            for (const key in values) {
+              if (values[key] == null) continue
+              if (typeof (values[key]) === 'object') {
+                values[key] = JSON.stringify(values[key])
+                 this.record[key] = values[key]
+              } else {
+                 this.record[key] = values[key]
+              }
+            }
+            WmsContainerPackagingEdit(this.record).then((res) => {
+              if (res.success) {
+                this.$message.success('缂栬緫鎴愬姛')
+                this.confirmLoading = false
+                this.$emit('ok', this.record)
+                this.handleCancel()
+              } else {
+                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
+              }
+            }).finally((res) => {
+              this.confirmLoading = false
+            })
+          }else{
+            this.confirmLoading = false
+          } 
+        });
+      },
+      handleCancel () {
+        this.form.resetFields()
+        this.visible = false
+      }
+    }
+  }
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/excelForm.vue
new file mode 100644
index 0000000..23a0847
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/excelForm.vue
@@ -0,0 +1,181 @@
+锘�<template>
+  <a-modal
+    :width="850"
+    :destroyOnClose="true"
+    :visible="visible"
+    :forceRender="true"
+    title="鎵归噺瀵煎叆"
+    cancelText="鍙栨秷涓婁紶"
+    okText="寮�濮嬩笂浼�"
+    @cancel="handleCancel"
+    @ok="handleSubmit">
+    <a-spin :spinning="confirmLoading">
+      <a-row :span="24">
+        <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span>
+      </a-row>
+      <p></p>
+      <a-row>
+        <a-col :span="16">
+          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
+            <a-icon style="font-size: 40px;" type="cloud-upload" />
+          </a-upload-dragger>
+        </a-col>
+        <!--<a-col :span="8">
+          <span>瀵煎叆妯″紡锛�</span>
+          <a-select
+            style="width: 130px"
+            placeholder="璇烽�夋嫨瀵煎叆妯″紡"
+            v-model="importExcelType">
+            <a-select-option
+              v-for="(item,index) in importExcelTypeData"
+              :key="index"
+              :value="item.code">{{ item.name }}
+            </a-select-option>
+          </a-select>
+        </a-col>-->
+      </a-row>
+      <a-row :span="24">
+        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
+          鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰
+        </a-button>-->
+        <span>銆�</span>
+        <a-button style="width: 90px;text-align: left;" @click="wmsContainerPackagingDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶
+        <span>銆�</span>
+        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
+          鏀惰捣
+        </a-button>
+      </a-row>
+      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
+        <a-breadcrumb>
+          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item>
+        </a-breadcrumb>
+      </a-row>
+      <pre v-show="detailed">
+        <div v-html="demandText"></div>
+      </pre>
+      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
+      <pre v-show="detailed">
+        <div v-html="columnText"></div>
+      </pre>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
+
+  import { WmsContainerPackagingImportExcel, WmsContainerPackagingDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsContainerPackagingManage'
+  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
+  export default {
+  components: {
+  },
+  data() {
+  return {
+  visible: false,
+  detailed: false,
+  confirmLoading: false,
+  fileList: [],
+  importExcelTypeData: [],
+  importExcelType: '1',
+  uploadFile: null,
+  columns: [],
+  dataList: [],
+  demandText:'',
+  columnText: ''
+  }
+  },
+  methods: {
+  index() {
+  this.visible = true;
+  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
+  this.demandText = parseDemandText("wmsContainerPackagingDownloadExcelTemplate")
+  window.downloadFile = this.wmsContainerPackagingDownloadExcelTemplate;
+  this.getTable();
+  },
+  showDemand() {
+  this.detailed = !this.detailed;
+  },
+  customRequest(document) {
+  this.uploadFile = document
+  },
+  getTable() {
+  sysExcelTemplateGetColumnList({className: "WmsContainerPackaging"}).then(res =>
+  {
+  if (res.success) {
+  this.columns =[];
+  this.dataList = [{}];
+  res.data.forEach(x => {
+  this.columns.push({
+  dataIndex: x.columnName,
+  key: x.columnName,
+  title: x.columnComment
+  });
+  this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�"
+  });
+  this.columnText = parseExcelFieldText(res.data);
+  }
+  });
+  },
+  beforeUpload(fileInfo) {
+  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
+  if (!res.success) {
+  this.$message.warning(res.msg)
+  return false
+  }
+  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
+  },
+  handleChange(fileInfo) {
+  if (fileInfo.file.status === 'error') {
+  fileInfo.fileList.splice(0, 1)
+  }
+  if (fileInfo.file.status === 'done') {
+  if (fileInfo.fileList.length > 1) {
+  fileInfo.fileList.splice(0, 1)
+  }
+  this.fileList = fileInfo.file
+  }
+  },
+  handleSubmit() {
+  this.confirmLoading = true
+  const formData = new FormData()
+  formData.append('file', this.uploadFile.file)
+  WmsContainerPackagingImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
+  this.$message.success('鎿嶄綔鎴愬姛')
+  this.confirmLoading = false
+  this.$emit('ok', [])
+  this.handleCancel()
+  }).finally((res)=>{this.confirmLoading = false})
+  },
+  handleCancel() {
+  this.visible = false
+  this.detailed = false
+  },
+  wmsContainerPackagingDownloadExcelTemplate() {
+  WmsContainerPackagingDownloadExcelTemplate({version: "v2"}).then((res) => {
+  downloadFile(res);
+  }).catch((err) => {
+  this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+  })
+  }
+  }
+  }
+</script>
+
+<style scoped>
+::v-deep .ant-upload.ant-upload-drag {
+  position: relative;
+  width: 140px;
+  height: 135px;
+  text-align: center;
+  background: #fafafa;
+  border: 1px dashed #d9d9d9;
+  border-radius: 2px;
+  cursor: pointer;
+  -webkit-transition: border-color 0.3s;
+  transition: border-color 0.3s;
+}
+::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
+  color: #ffc53d;
+  border-color: white;
+}
+</style>
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/index.vue
new file mode 100644
index 0000000..2ac53b4
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/index.vue
@@ -0,0 +1,523 @@
+锘�<template>
+  <div ref="boxOutWrap" class="boxOutWrap">
+    <div ref="boxForm" class="boxForm">
+      <a-card :bordered="false" :bodyStyle="tstyle">
+        <div class="table-page-search-wrapper" v-if="hasPerm('WmsContainerPackaging:page')">
+          <a-form layout="inline">
+            <a-row :gutter="48">
+              <a-col :md="8" :sm="24">
+                <a-form-item label="瀹瑰櫒绫诲瀷ID">
+                  <a-input v-model="queryParam.containerTypeId" allow-clear placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" />
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О">
+                  <a-input v-model="queryParam.containerTypeName" allow-clear placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" />
+                </a-form-item> </a-col
+              ><template v-if="advanced">
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鐗╂枡绫诲瀷ID">
+                    <a-input v-model="queryParam.materialTypeId" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鐗╂枡绫诲瀷缂栧彿">
+                    <a-input v-model="queryParam.materialTypeCode" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鐗╂枡绫诲瀷鍚嶇О">
+                    <a-input v-model="queryParam.materialTypeName" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺">
+                    <a-input v-model="queryParam.boxQty" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" />
+                  </a-form-item>
+                </a-col>
+                <!--骞存湀鏃ユ椂鍒嗙-->
+                <!--鏃堕棿鑼冨洿-->
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鍒涘缓鏃堕棿">
+                    <a-range-picker
+                      style="width: 100%"
+                      :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+                      :show-time="{
+                        format: 'HH:mm:ss',
+                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+                      }"
+                      v-model="queryParam.createdTime"
+                      value-format="YYYY-MM-DD HH:mm:ss"
+                      format="YYYY-MM-DD HH:mm:ss"
+                      @change="onChangecreatedTime"
+                    />
+                  </a-form-item>
+                </a-col>
+                <!--骞存湀鏃ユ椂鍒嗙-->
+                <!--鏃堕棿鑼冨洿-->
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鏇存柊鏃堕棿">
+                    <a-range-picker
+                      style="width: 100%"
+                      :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+                      :show-time="{
+                        format: 'HH:mm:ss',
+                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+                      }"
+                      v-model="queryParam.updatedTime"
+                      value-format="YYYY-MM-DD HH:mm:ss"
+                      format="YYYY-MM-DD HH:mm:ss"
+                      @change="onChangeupdatedTime"
+                    />
+                  </a-form-item>
+                </a-col>
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鍒涘缓鑰呭悕绉�">
+                    <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="淇敼鑰呭悕绉�">
+                    <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" />
+                  </a-form-item>
+                </a-col>
+              </template>
+
+              <a-col :md="8" :sm="24">
+                <span class="table-page-search-submitButtons">
+                  <a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button>
+                  <a-button style="margin-left: 8px" @click="() => (queryParam = {})">閲嶇疆</a-button>
+                  <a @click="toggleAdvanced" style="margin-left: 8px">
+                    {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+                    <a-icon :type="advanced ? 'up' : 'down'" />
+                  </a>
+                </span>
+              </a-col>
+            </a-row>
+          </a-form>
+        </div>
+      </a-card>
+    </div>
+    <a-card :bordered="false">
+      <s-table
+        ref="table"
+        :columns="columns"
+        :data="loadData"
+        :alert="true"
+        @changeTablePage="pageInfo = $event"
+        :scroll="{ x: true, y: tableHeight }"
+        :rowKey="record => record.id"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+      >
+        <template class="table-operator" slot="operator" v-if="hasPerm('WmsContainerPackaging:add')">
+          <!-- <div ref="actionBar" class="actionBar">
+			<a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
+            瀵煎叆
+          </a-button>
+          <a-button type="info" v-if="hasPerm('WmsContainerPackaging:exportExcel')" icon="download" @click="WmsContainerPackagingToExcel()">
+            瀵煎嚭
+          </a-button>
+			<a-button type="primary" v-if="hasPerm('WmsContainerPackaging:add')" icon="plus" @click="$refs.addForm.add()">鏂板鍖呰鍏崇郴鍩虹琛�</a-button>
+		</div> -->
+        </template>
+        <!-- <span slot="action" slot-scope="text, record">
+			
+			<a v-if="hasPerm('WmsContainerPackaging:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+          <a-divider type="vertical" v-if="hasPerm('WmsContainerPackaging:edit') & hasPerm('WmsContainerPackaging:delete')"/>
+          <a-popconfirm v-if="hasPerm('WmsContainerPackaging:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsContainerPackagingDelete(record)">
+            <a>鍒犻櫎</a>
+          </a-popconfirm>
+        </span> -->
+      </s-table>
+      <add-form ref="addForm" @ok="handleOk" />
+      <edit-form ref="editForm" @ok="handleOk" />
+      <excel-form ref="excelForm" @ok="handleOk" />
+    </a-card>
+  </div>
+</template>
+<script>
+import { STable } from '@/components'
+import moment from 'moment'
+import {
+  WmsContainerPackagingPage,
+  WmsContainerPackagingDelete,
+  WmsContainerPackagingToExcel
+} from '@/api/modular/main/WmsBase/WmsContainerPackagingManage'
+//鑷畾涔塼able楂樺害
+import setTableHtMixin from '@/mixins/handleTableHt.js'
+import addForm from './addForm.vue'
+import { exportExcel } from '@/utils/exportToExcel'
+import { downloadFile } from '@/utils/util'
+import editForm from './editForm.vue'
+import excelForm from './excelForm.vue'
+export default {
+  mixins: [setTableHtMixin],
+  components: {
+    STable,
+    addForm,
+    editForm,
+    excelForm
+  },
+  data() {
+    return {
+      advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+      queryParam: {},
+      pageInfo: {
+        current: 1,
+        pageSize: 10
+      },
+      columns: [
+        {
+          title: '搴忓彿',
+          width: '60px',
+          align: 'center',
+          customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+        },
+        {
+          title: '瀹瑰櫒绫诲瀷ID',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'containerTypeId'
+        },
+        {
+          title: '瀹瑰櫒绫诲瀷鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'containerTypeName'
+        },
+        {
+          title: '鐗╂枡绫诲瀷ID',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'materialTypeId'
+        },
+        {
+          title: '鐗╂枡绫诲瀷缂栧彿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'materialTypeCode'
+        },
+        {
+          title: '鐗╂枡绫诲瀷鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'materialTypeName'
+        },
+        {
+          title: '鐗╂枡瀹瑰櫒瀹归噺',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '130px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'boxQty'
+        },
+        {
+          title: '鍒涘缓鏃堕棿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '鏇存柊鏃堕棿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'updatedTime'
+        },
+        {
+          title: '鍒涘缓鑰呭悕绉�',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '淇敼鑰呭悕绉�',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'updatedUserName'
+        }
+      ],
+      tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+      // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+      loadData: parameter => {
+        return WmsContainerPackagingPage(Object.assign(parameter, this.switchingDate())).then(res => {
+          return res.data
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: []
+    }
+  },
+  created() {
+    // if (this.hasPerm('WmsContainerPackaging:edit') || this.hasPerm('WmsContainerPackaging:delete')) {
+    //   this.columns.push({
+    //     title: '鎿嶄綔',
+    //     width: '150px',
+    //     dataIndex: 'action',
+    //     scopedSlots: { customRender: 'action' }
+    //   })
+    // }
+    const path = this.$route.path
+    const columnStr = window.localStorage.getItem(path)
+    if (columnStr) {
+      var _columns = JSON.parse(columnStr)
+      this.columns.forEach(element => {
+        var fObj = _columns.find((item, index) => {
+          return item.dataIndex === element.dataIndex
+        })
+        if (fObj != undefined && fObj != null) {
+          element.checked = fObj.checked
+        }
+      })
+    }
+
+    this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+    window.addEventListener(
+      'resize',
+      () => {
+        this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+      },
+      false
+    )
+  },
+  methods: {
+    moment,
+    /**
+     * 鏌ヨ鍙傛暟缁勮
+     */
+    switchingDate() {
+      const obj = JSON.parse(JSON.stringify(this.queryParam))
+      return obj
+    },
+    WmsContainerPackagingDelete(record) {
+      WmsContainerPackagingDelete(record).then(res => {
+        if (res.success) {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.$refs.table.refresh()
+        } else {
+          this.$message.error('鍒犻櫎澶辫触') // + res.message
+        }
+      })
+    },
+
+    WmsContainerPackagingToExcel() {
+      this.loading = true
+      let entozh = {}
+      const path = this.$route.path
+      if (window.localStorage.getItem(path)) {
+        JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+          if (item.dataIndex != 'action' && item.checked) {
+            entozh[item.dataIndex] = item.title
+          }
+        })
+      } else {
+        //鐩存帴鐐瑰鍑�
+        this.columns.forEach(item => {
+          if (item.dataIndex != 'action') {
+            entozh[item.dataIndex] = item.title
+          }
+        })
+      }
+      WmsContainerPackagingPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam))
+        .then(res => {
+          this.loading = false
+          //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+          var arrDataCutout = this.columns.filter(v => v.customCutout == true)
+          res.data.rows.forEach(item => {
+            var arrKeys = Object.keys(item)
+            arrKeys.forEach(key => {
+              var strFieldDic = key + 'Data'
+              //鏋氫妇杞��
+              if (this[strFieldDic] && this[strFieldDic].length > 0) {
+                let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]))
+                if (arrFieldDic.length > 0) {
+                  item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'
+                }
+              }
+              // 鏃ユ湡鎴彇
+              if (arrDataCutout.length > 0) {
+                arrDataCutout.forEach(itemIn => {
+                  if (key == itemIn.dataIndex && item[key]) {
+                    item[key] = item[key].split(' ')[0]
+                  }
+                })
+              }
+            })
+          })
+          exportExcel(res.data.rows, entozh, 'xlsx', `${this.$route.meta.title}`)
+        })
+        .catch(err => {
+          this.loading = false
+          this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+        })
+    },
+
+    toggleAdvanced() {
+      this.advanced = !this.advanced
+      this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+    },
+    onChangecreatedTime(date, dateString) {
+      this.queryParam.createdTime = dateString
+    },
+    onChangeupdatedTime(date, dateString) {
+      this.queryParam.updatedTime = dateString
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+	  this.$emit('ok', selectedRows)
+    }
+  }
+}
+</script>
+<style lang="less">
+.table-operator {
+  margin-bottom: 18px;
+}
+button {
+  margin-right: 8px;
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/addForm.vue
new file mode 100644
index 0000000..3d0e4ed
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/addForm.vue
@@ -0,0 +1,94 @@
+锘�<template>
+  <a-modal
+    title="鏂板鎺у埗灞炴�ц鍒�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+		<a-form :form="form">
+        <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" v-decorator="['ruleCode', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ヨ鍒欏悕绉�" v-decorator="['ruleName', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" />
+        </a-form-item>
+        <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import moment from 'moment'
+  import {
+  WmsControlRuleAdd
+  } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+  export default {
+  data () {
+  return {
+  labelCol: {
+  xs: { span: 24 },
+  sm: { span: 5 }
+  },
+  wrapperCol: {
+  xs: { span: 24 },
+  sm: { span: 15 }
+  },
+        visible: false,
+        confirmLoading: false,
+        form: this.$form.createForm(this)
+      }
+    },
+    methods: {
+	moment,
+      // 鍒濆鍖栨柟娉�
+      add (record) {
+        this.visible = true
+        this.$nextTick(() => {
+
+        });
+      },
+      /**
+       * 鎻愪氦琛ㄥ崟
+       */
+      handleSubmit () {
+        const { form: { validateFields } } = this
+        this.confirmLoading = true
+        validateFields((errors, values) => {
+          if (!errors) {
+            for (const key in values) {
+              if (typeof (values[key]) === 'object') {
+                values[key] = JSON.stringify(values[key])
+              }
+            }
+            WmsControlRuleAdd(values).then((res) => {
+              if (res.success) {
+                this.$message.success('鏂板鎴愬姛')
+                this.confirmLoading = false
+                this.$emit('ok', values)
+                this.handleCancel()
+              } else {
+                this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message))
+              }
+            }).finally((res) => {
+              this.confirmLoading = false
+            })
+          } else {
+            this.confirmLoading = false
+          }
+        })
+      },
+      handleCancel () {
+        this.form.resetFields()
+        this.visible = false
+      }
+    }
+  }
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/detail.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/detail.vue
new file mode 100644
index 0000000..98e014f
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/detail.vue
@@ -0,0 +1,604 @@
+锘�<template>
+  <div ref="boxOutWrap" class="boxOutWrap">
+	<div ref="boxForm" class="boxForm">  
+    <a-card :bordered="false" :bodyStyle="tstyle">
+
+      <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRuleDetail:page')">
+        <a-form layout="inline">
+          <a-row :gutter="48">
+            <a-col :md="8" :sm="24">
+              <a-form-item label="鎺у埗灞炴�ц鍒橧D">
+                <a-input v-model="queryParam.controlRuleId" allow-clear placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="8" :sm="24">
+              <a-form-item label="鏈�楂樺簱瀛�">
+                <a-input v-model="queryParam.maxImumqty" allow-clear placeholder="璇疯緭鍏ユ渶楂樺簱瀛�"/>
+              </a-form-item>
+            </a-col><template v-if="advanced">
+              <a-col :md="8" :sm="24">
+                <a-form-item label="鏈�浣庡簱瀛�">
+                  <a-input v-model="queryParam.minImumqty" allow-clear placeholder="璇疯緭鍏ユ渶浣庡簱瀛�"/>
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="瀹夊叏搴撳瓨">
+                  <a-input v-model="queryParam.safeImumqty" allow-clear placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�"/>
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="鏈�灏忓簱榫�">
+                  <a-input v-model="queryParam.minStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶灏忓簱榫�"/>
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="鏈�澶у簱榫�">
+                  <a-input v-model="queryParam.maxStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶澶у簱榫�"/>
+                </a-form-item>
+              </a-col>
+			<a-col :md="8" :sm="24">
+				<a-form-item label="鏄惁鍏嶆">
+					<a-select :allowClear="true" style="width: 100%" v-model="queryParam.isNotChek" placeholder="璇烽�夋嫨鏄惁鍏嶆">
+						<a-select-option v-for="(item,index) in isNotChekData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
+					</a-select>
+				</a-form-item>
+			</a-col>
+		
+              <a-col :md="8" :sm="24">
+                <a-form-item label="淇濊川鏈熷ぉ鏁�">
+                  <a-input v-model="queryParam.shelfLifeDays" allow-clear placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟"/>
+                </a-form-item>
+              </a-col>
+			<a-col :md="8" :sm="24">
+				<a-form-item label="鏄惁绂佺敤">
+					<a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="璇烽�夋嫨鏄惁绂佺敤">
+						<a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
+					</a-select>
+				</a-form-item>
+			</a-col>
+		          <!--骞存湀鏃ユ椂鍒嗙-->
+			<!--鏃堕棿鑼冨洿-->
+
+				<a-col :md="8" :sm="24">
+					<a-form-item label="鍒涘缓鏃堕棿">
+						<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"  :show-time="{
+format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
+
+					</a-form-item>
+				</a-col>
+			          <!--骞存湀鏃ユ椂鍒嗙-->
+			<!--鏃堕棿鑼冨洿-->
+
+				<a-col :md="8" :sm="24">
+					<a-form-item label="鏇存柊鏃堕棿">
+						<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"  :show-time="{
+format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
+
+					</a-form-item>
+				</a-col>
+			
+              <a-col :md="8" :sm="24">
+                <a-form-item label="鍒涘缓鑰呭悕绉�">
+                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�"/>
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="淇敼鑰呭悕绉�">
+                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�"/>
+                </a-form-item>
+              </a-col>	</template>
+
+            <a-col :md="8" :sm="24" >
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button>
+                <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button>
+                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
+              </span>
+            </a-col>
+
+          </a-row>
+        </a-form>
+      </div>
+    </a-card>
+	</div>
+    <a-card :bordered="false">
+		<!-- :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" -->
+      <s-table
+        ref="table"
+        :columns="columns"
+        :data="loadData"
+        :alert="true"
+		@changeTablePage="pageInfo = $event"
+		:scroll="{x: true,y:tableHeight}"
+        :rowKey="(record) => record.id"
+        >
+        <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRuleDetail:add')" >
+		<!-- <div ref="actionBar" class="actionBar">
+			<a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
+            瀵煎叆
+          </a-button>
+          <a-button type="info" v-if="hasPerm('WmsControlRuleDetail:exportExcel')" icon="download" @click="WmsControlRuleDetailToExcel()">
+            瀵煎嚭
+          </a-button>
+			<a-button type="primary" v-if="hasPerm('WmsControlRuleDetail:add')" icon="plus" @click="$refs.addForm.add()">鏂板鎺у埗灞炴�ц鍒欐槑缁�</a-button>
+		</div> -->
+		</template>
+		  <span slot="isNotChekscopedSlots" slot-scope="text">
+			<div v-if="text===true ">
+				<a-tag color="green">鏄�</a-tag>
+			</div>
+			<div v-else-if="text==false">
+				<a-tag color="volcano">鍚�</a-tag>
+			</div>
+			<div v-else=""></div>
+			</span>
+		  <span slot="isDisabledscopedSlots" slot-scope="text">
+			<div v-if="text===true ">
+				<a-tag color="green">鏄�</a-tag>
+			</div>
+			<div v-else-if="text==false">
+				<a-tag color="volcano">鍚�</a-tag>
+			</div>
+			<div v-else=""></div>
+			</span>
+		  <!-- <span slot="action" slot-scope="text, record">
+			
+			<a v-if="hasPerm('WmsControlRuleDetail:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+          <a-divider type="vertical" v-if="hasPerm('WmsControlRuleDetail:edit') & hasPerm('WmsControlRuleDetail:delete')"/>
+          <a-popconfirm v-if="hasPerm('WmsControlRuleDetail:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsControlRuleDetailDelete(record)">
+            <a>鍒犻櫎</a>
+          </a-popconfirm>
+        </span> -->
+      </s-table>
+      <add-form ref="addForm" @ok="handleOk" />
+      <edit-form ref="editForm" @ok="handleOk" />
+	  <excel-form ref="excelForm" @ok="handleOk" />
+    </a-card>
+  </div>
+</template>
+<script>
+	import { STable } from '@/components'
+	import moment from 'moment'
+	import { WmsControlRuleDetailPage, WmsControlRuleDetailDelete, WmsControlRuleDetailToExcel } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage'
+	//鑷畾涔塼able楂樺害
+	import setTableHtMixin from '@/mixins/handleTableHt.js'
+	import addForm from './addForm.vue'
+	import { exportExcel } from '@/utils/exportToExcel'
+	import { downloadFile } from '@/utils/util'
+	import editForm from './editForm.vue'
+	import excelForm from './excelForm.vue'
+	export default {
+	mixins: [setTableHtMixin],
+	components: {
+	STable,
+	addForm,
+	editForm,
+	excelForm
+	},
+	data () {
+	return {
+	advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+	queryParam: {},
+	 pageInfo: {
+        current: 1,
+        pageSize: 10
+      },
+	columns: [
+	{
+	title:'搴忓彿',
+	width: '60px',
+	align: 'center',
+	customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+	},
+	{
+	title: '鎺у埗灞炴�ц鍒橧D',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '140px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '140px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'controlRuleId'
+	},
+	{
+	title: '鏈�楂樺簱瀛�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'maxImumqty'
+	},
+	{
+	title: '鏈�浣庡簱瀛�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'minImumqty'
+	},
+	{
+	title: '瀹夊叏搴撳瓨',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'safeImumqty'
+	},
+	{
+	title: '鏈�灏忓簱榫�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'minStorageAge'
+	},
+	{
+	title: '鏈�澶у簱榫�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'maxStorageAge'
+	},
+	{
+	title: '鏄惁鍏嶆',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'isNotChek',
+	scopedSlots: { customRender: 'isNotChekscopedSlots' }
+	},
+	{
+	title: '淇濊川鏈熷ぉ鏁�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'shelfLifeDays'
+	},
+	{
+	title: '鏄惁绂佺敤',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'isDisabled',
+	scopedSlots: { customRender: 'isDisabledscopedSlots' }
+	},
+	{
+	title: '鍒涘缓鏃堕棿',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'createdTime'
+	},
+	{
+	title: '鏇存柊鏃堕棿',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'updatedTime'
+	},
+	{
+	title: '鍒涘缓鑰呭悕绉�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'createdUserName'
+	},
+	{
+	title: '淇敼鑰呭悕绉�',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'updatedUserName'
+	}
+	],
+	tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+	// 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+	loadData: parameter => {
+	return WmsControlRuleDetailPage(Object.assign(parameter, this.switchingDate())).then((res) => {
+	return res.data
+	})
+	},
+	selectedRowKeys: [],
+	selectedRows: []
+	}
+	},
+	created () {
+	if (this.hasPerm('WmsControlRuleDetail:edit') || this.hasPerm('WmsControlRuleDetail:delete')) {
+	this.columns.push({
+	title: '鎿嶄綔',
+	width: '150px',
+	dataIndex: 'action',
+	scopedSlots: { customRender: 'action' }
+	})
+	}
+	const path = this.$route.path
+	const columnStr = window.localStorage.getItem(path)
+	if(columnStr) {
+	var _columns = JSON.parse(columnStr)
+	this.columns.forEach(element => {
+	var fObj = _columns.find((item, index) => {
+	return item.dataIndex === element.dataIndex;
+	})
+	if(fObj!=undefined && fObj!=null){
+	element.checked=fObj.checked;
+	}
+	});
+	}
+	const isNotChekOption = this.$options
+	this.isNotChekData = isNotChekOption.filters['dictData']('yes_true_false')
+	const isDisabledOption = this.$options
+	this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+	this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+	window.addEventListener(
+	'resize',
+	() => {
+	this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+	},
+	false
+	)
+	
+	},
+	methods: {
+	moment,
+	/**
+	* 鏌ヨ鍙傛暟缁勮
+	*/
+	switchingDate () {
+	const obj = JSON.parse(JSON.stringify(this.queryParam))
+	return obj
+	},
+	WmsControlRuleDetailDelete (record) {
+	WmsControlRuleDetailDelete(record).then((res) => {
+	if (res.success) {
+	this.$message.success('鍒犻櫎鎴愬姛')
+	this.$refs.table.refresh()
+	} else {
+	this.$message.error('鍒犻櫎澶辫触') // + res.message
+	}
+	})
+	},
+
+
+	WmsControlRuleDetailToExcel() {
+	this.loading = true
+	let entozh = {};
+	const path = this.$route.path;
+	if (window.localStorage.getItem(path)) {
+	JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+	if (item.dataIndex != 'action' && item.checked) {
+	entozh[item.dataIndex] = item.title
+	}
+	})
+	} else { //鐩存帴鐐瑰鍑�
+	this.columns.forEach(item => {
+	if (item.dataIndex != 'action') {
+	entozh[item.dataIndex] = item.title
+	}
+	})
+	}
+	WmsControlRuleDetailPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
+	this.loading = false;
+	//闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+	var arrDataCutout = this.columns.filter(v => v.customCutout == true);
+	res.data.rows.forEach(item => {
+	var arrKeys = Object.keys(item);
+	arrKeys.forEach(key => {
+	var strFieldDic = key + 'Data';
+	//鏋氫妇杞��
+	if (this[strFieldDic] && this[strFieldDic].length > 0) {
+	let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
+	if (arrFieldDic.length > 0) {
+	item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�';
+	}
+	}
+	// 鏃ユ湡鎴彇
+	if (arrDataCutout.length > 0) {
+	arrDataCutout.forEach(itemIn => {
+	if (key == itemIn.dataIndex && item[key]) {
+	item[key] = item[key].split(" ")[0]
+	}
+	})
+	}
+	});
+	})
+	exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
+	}).catch((err) => {
+	this.loading = false
+	this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+	})
+	},
+
+
+	toggleAdvanced () {
+	this.advanced = !this.advanced
+	this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+	},
+	onChangecreatedTime(date, dateString) {
+	  this.queryParam.createdTime = dateString
+	},
+	onChangeupdatedTime(date, dateString) {
+	  this.queryParam.updatedTime = dateString
+	},
+	handleOk () {
+	this.$refs.table.refresh()
+	},
+	onSelectChange (selectedRowKeys, selectedRows) {
+	this.selectedRowKeys = selectedRowKeys
+	this.selectedRows = selectedRows
+	}
+	}
+	}
+</script>
+<style lang="less">
+  .table-operator {
+    margin-bottom: 18px;
+  }
+  button {
+    margin-right: 8px;
+  }
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/details.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/details.vue
new file mode 100644
index 0000000..6d76bef
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/details.vue
@@ -0,0 +1,107 @@
+锘�<template>
+  <!-- @ok="handleSubmit" -->
+  <a-modal
+    title="鎺у埗灞炴�ц鍒欐槑缁�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+    @ok="visible=false"
+  >
+    <a-spin :spinning="confirmLoading">
+      <control-rule-detail ref="controlRuleDetail" @ok="handleOk" />
+    </a-spin>
+  </a-modal>
+
+</template>
+
+<script>
+import moment from 'moment'
+import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+import ControlRuleDetail from './detail.vue'
+
+export default {
+  components: {
+    ControlRuleDetail
+  },
+  data() {
+    return {
+      Id: 0,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      record: {},
+      visible: false,
+      confirmLoading: false,
+      form: this.$form.createForm(this)
+    }
+  },
+  methods: {
+    moment,
+    // 鍒濆鍖栨柟娉�
+    edit(record) {
+      this.visible = true
+      this.Id = record.id
+      this.$nextTick(() => {})
+      //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+      this.record = JSON.parse(JSON.stringify(record))
+      this.$nextTick(() => {
+        this.form.setFieldsValue({
+          id: record.id,
+          ruleCode: record.ruleCode,
+          ruleName: record.ruleName,
+          ruleDesc: record.ruleDesc,
+          isDisabled: record.isDisabled
+        })
+      })
+    },
+    handleOk(){
+      alert("2")
+    },
+    handleSubmit() {
+      const {
+        form: { validateFields }
+      } = this
+      this.confirmLoading = true
+      validateFields((errors, values) => {
+        if (!errors) {
+          for (const key in values) {
+            if (values[key] == null) continue
+            if (typeof values[key] === 'object') {
+              values[key] = JSON.stringify(values[key])
+              this.record[key] = values[key]
+            } else {
+              this.record[key] = values[key]
+            }
+          }
+          WmsControlRuleEdit(this.record)
+            .then(res => {
+              if (res.success) {
+                this.$message.success('缂栬緫鎴愬姛')
+                this.confirmLoading = false
+                this.$emit('ok', this.record)
+                this.handleCancel()
+              } else {
+                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
+              }
+            })
+            .finally(res => {
+              this.confirmLoading = false
+            })
+        } else {
+          this.confirmLoading = false
+        }
+      })
+    },
+    handleCancel() {
+      this.form.resetFields()
+      this.visible = false
+    }
+  }
+}
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/editForm.vue
new file mode 100644
index 0000000..ea11e1c
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/editForm.vue
@@ -0,0 +1,123 @@
+锘�<template>
+  <a-modal
+    title="缂栬緫鎺у埗灞炴�ц鍒�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input
+            placeholder="璇疯緭鍏ヨ鍒欑紪鍙�"
+            v-decorator="['ruleCode', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒' }] }]"
+          />
+        </a-form-item>
+        <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input
+            placeholder="璇疯緭鍏ヨ鍒欏悕绉�"
+            v-decorator="['ruleName', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒' }] }]"
+          />
+        </a-form-item>
+        <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" />
+        </a-form-item>
+        <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-switch
+            v-decorator="[
+              'isDisabled',
+              { rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked' }
+            ]"
+          />
+        </a-form-item>
+        <a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+
+</template>
+
+<script>
+import moment from 'moment'
+import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+export default {
+  data() {
+    return {
+      Id: 0,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      record: {},
+      visible: false,
+      confirmLoading: false,
+      form: this.$form.createForm(this)
+    }
+  },
+  methods: {
+    moment,
+    // 鍒濆鍖栨柟娉�
+    edit(record) {
+      this.visible = true
+      this.Id = record.id
+      this.$nextTick(() => {})
+      //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+      this.record = JSON.parse(JSON.stringify(record))
+      this.$nextTick(() => {
+        this.form.setFieldsValue({
+          id: record.id,
+          ruleCode: record.ruleCode,
+          ruleName: record.ruleName,
+          ruleDesc: record.ruleDesc,
+          isDisabled: record.isDisabled
+        })
+      })
+    },
+    handleSubmit() {
+      const {
+        form: { validateFields }
+      } = this
+      this.confirmLoading = true
+      validateFields((errors, values) => {
+        if (!errors) {
+          for (const key in values) {
+            if (values[key] == null) continue
+            if (typeof values[key] === 'object') {
+              values[key] = JSON.stringify(values[key])
+              this.record[key] = values[key]
+            } else {
+              this.record[key] = values[key]
+            }
+          }
+          WmsControlRuleEdit(this.record)
+            .then(res => {
+              if (res.success) {
+                this.$message.success('缂栬緫鎴愬姛')
+                this.confirmLoading = false
+                this.$emit('ok', this.record)
+                this.handleCancel()
+              } else {
+                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
+              }
+            })
+            .finally(res => {
+              this.confirmLoading = false
+            })
+        } else {
+          this.confirmLoading = false
+        }
+      })
+    },
+    handleCancel() {
+      this.form.resetFields()
+      this.visible = false
+    }
+  }
+}
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/excelForm.vue
new file mode 100644
index 0000000..cc33122
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/excelForm.vue
@@ -0,0 +1,181 @@
+锘�<template>
+  <a-modal
+    :width="850"
+    :destroyOnClose="true"
+    :visible="visible"
+    :forceRender="true"
+    title="鎵归噺瀵煎叆"
+    cancelText="鍙栨秷涓婁紶"
+    okText="寮�濮嬩笂浼�"
+    @cancel="handleCancel"
+    @ok="handleSubmit">
+    <a-spin :spinning="confirmLoading">
+      <a-row :span="24">
+        <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span>
+      </a-row>
+      <p></p>
+      <a-row>
+        <a-col :span="16">
+          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
+            <a-icon style="font-size: 40px;" type="cloud-upload" />
+          </a-upload-dragger>
+        </a-col>
+        <!--<a-col :span="8">
+          <span>瀵煎叆妯″紡锛�</span>
+          <a-select
+            style="width: 130px"
+            placeholder="璇烽�夋嫨瀵煎叆妯″紡"
+            v-model="importExcelType">
+            <a-select-option
+              v-for="(item,index) in importExcelTypeData"
+              :key="index"
+              :value="item.code">{{ item.name }}
+            </a-select-option>
+          </a-select>
+        </a-col>-->
+      </a-row>
+      <a-row :span="24">
+        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
+          鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰
+        </a-button>-->
+        <span>銆�</span>
+        <a-button style="width: 90px;text-align: left;" @click="wmsControlRuleDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶
+        <span>銆�</span>
+        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
+          鏀惰捣
+        </a-button>
+      </a-row>
+      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
+        <a-breadcrumb>
+          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item>
+        </a-breadcrumb>
+      </a-row>
+      <pre v-show="detailed">
+        <div v-html="demandText"></div>
+      </pre>
+      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
+      <pre v-show="detailed">
+        <div v-html="columnText"></div>
+      </pre>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
+
+  import { WmsControlRuleImportExcel, WmsControlRuleDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
+  export default {
+  components: {
+  },
+  data() {
+  return {
+  visible: false,
+  detailed: false,
+  confirmLoading: false,
+  fileList: [],
+  importExcelTypeData: [],
+  importExcelType: '1',
+  uploadFile: null,
+  columns: [],
+  dataList: [],
+  demandText:'',
+  columnText: ''
+  }
+  },
+  methods: {
+  index() {
+  this.visible = true;
+  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
+  this.demandText = parseDemandText("wmsControlRuleDownloadExcelTemplate")
+  window.downloadFile = this.wmsControlRuleDownloadExcelTemplate;
+  this.getTable();
+  },
+  showDemand() {
+  this.detailed = !this.detailed;
+  },
+  customRequest(document) {
+  this.uploadFile = document
+  },
+  getTable() {
+  sysExcelTemplateGetColumnList({className: "WmsControlRule"}).then(res =>
+  {
+  if (res.success) {
+  this.columns =[];
+  this.dataList = [{}];
+  res.data.forEach(x => {
+  this.columns.push({
+  dataIndex: x.columnName,
+  key: x.columnName,
+  title: x.columnComment
+  });
+  this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�"
+  });
+  this.columnText = parseExcelFieldText(res.data);
+  }
+  });
+  },
+  beforeUpload(fileInfo) {
+  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
+  if (!res.success) {
+  this.$message.warning(res.msg)
+  return false
+  }
+  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
+  },
+  handleChange(fileInfo) {
+  if (fileInfo.file.status === 'error') {
+  fileInfo.fileList.splice(0, 1)
+  }
+  if (fileInfo.file.status === 'done') {
+  if (fileInfo.fileList.length > 1) {
+  fileInfo.fileList.splice(0, 1)
+  }
+  this.fileList = fileInfo.file
+  }
+  },
+  handleSubmit() {
+  this.confirmLoading = true
+  const formData = new FormData()
+  formData.append('file', this.uploadFile.file)
+  WmsControlRuleImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
+  this.$message.success('鎿嶄綔鎴愬姛')
+  this.confirmLoading = false
+  this.$emit('ok', [])
+  this.handleCancel()
+  }).finally((res)=>{this.confirmLoading = false})
+  },
+  handleCancel() {
+  this.visible = false
+  this.detailed = false
+  },
+  wmsControlRuleDownloadExcelTemplate() {
+  WmsControlRuleDownloadExcelTemplate({version: "v2"}).then((res) => {
+  downloadFile(res);
+  }).catch((err) => {
+  this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+  })
+  }
+  }
+  }
+</script>
+
+<style scoped>
+::v-deep .ant-upload.ant-upload-drag {
+  position: relative;
+  width: 140px;
+  height: 135px;
+  text-align: center;
+  background: #fafafa;
+  border: 1px dashed #d9d9d9;
+  border-radius: 2px;
+  cursor: pointer;
+  -webkit-transition: border-color 0.3s;
+  transition: border-color 0.3s;
+}
+::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
+  color: #ffc53d;
+  border-color: white;
+}
+</style>
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/index.vue
new file mode 100644
index 0000000..bf80dc2
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsControlRule/index.vue
@@ -0,0 +1,512 @@
+锘�<template>
+  <!-- 鎺у埗灞炴�ц鍒� -->
+  <div ref="boxOutWrap" class="boxOutWrap">
+    <div ref="boxForm" class="boxForm">
+      <a-card :bordered="false" :bodyStyle="tstyle">
+        <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRule:page')">
+          <a-form layout="inline">
+            <a-row :gutter="48">
+              <a-col :md="8" :sm="24">
+                <a-form-item label="瑙勫垯缂栧彿">
+                  <a-input v-model="queryParam.ruleCode" allow-clear placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" />
+                </a-form-item>
+              </a-col>
+              <a-col :md="8" :sm="24">
+                <a-form-item label="瑙勫垯鍚嶇О">
+                  <a-input v-model="queryParam.ruleName" allow-clear placeholder="璇疯緭鍏ヨ鍒欏悕绉�" />
+                </a-form-item> </a-col
+              ><template v-if="advanced">
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="瑙勫垯鎻忚堪">
+                    <a-input v-model="queryParam.ruleDesc" allow-clear placeholder="璇疯緭鍏ヨ鍒欐弿杩�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鏄惁绂佺敤">
+                    <a-select
+                      :allowClear="true"
+                      style="width: 100%"
+                      v-model="queryParam.isDisabled"
+                      placeholder="璇烽�夋嫨鏄惁绂佺敤"
+                    >
+                      <a-select-option v-for="(item, index) in isDisabledData" :key="index" :value="item.code">{{
+                        item.name
+                      }}</a-select-option>
+                    </a-select>
+                  </a-form-item>
+                </a-col>
+                <!--骞存湀鏃ユ椂鍒嗙-->
+                <!--鏃堕棿鑼冨洿-->
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鍒涘缓鏃堕棿">
+                    <a-range-picker
+                      style="width: 100%"
+                      :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+                      :show-time="{
+                        format: 'HH:mm:ss',
+                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+                      }"
+                      v-model="queryParam.createdTime"
+                      value-format="YYYY-MM-DD HH:mm:ss"
+                      format="YYYY-MM-DD HH:mm:ss"
+                      @change="onChangecreatedTime"
+                    />
+                  </a-form-item>
+                </a-col>
+                <!--骞存湀鏃ユ椂鍒嗙-->
+                <!--鏃堕棿鑼冨洿-->
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鏇存柊鏃堕棿">
+                    <a-range-picker
+                      style="width: 100%"
+                      :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+                      :show-time="{
+                        format: 'HH:mm:ss',
+                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+                      }"
+                      v-model="queryParam.updatedTime"
+                      value-format="YYYY-MM-DD HH:mm:ss"
+                      format="YYYY-MM-DD HH:mm:ss"
+                      @change="onChangeupdatedTime"
+                    />
+                  </a-form-item>
+                </a-col>
+
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="鍒涘缓鑰呭悕绉�">
+                    <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="8" :sm="24">
+                  <a-form-item label="淇敼鑰呭悕绉�">
+                    <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" />
+                  </a-form-item>
+                </a-col>
+              </template>
+
+              <a-col :md="8" :sm="24">
+                <span class="table-page-search-submitButtons">
+                  <a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button>
+                  <a-button style="margin-left: 8px" @click="() => (queryParam = {})">閲嶇疆</a-button>
+                  <a @click="toggleAdvanced" style="margin-left: 8px">
+                    {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+                    <a-icon :type="advanced ? 'up' : 'down'" />
+                  </a>
+                </span>
+              </a-col>
+            </a-row>
+          </a-form>
+        </div>
+      </a-card>
+    </div>
+    <a-card :bordered="false">
+      <s-table
+        ref="table"
+        :columns="columns"
+        :data="loadData"
+        :alert="true"
+        @changeTablePage="pageInfo = $event"
+        :scroll="{ x: true, y: tableHeight }"
+        :rowKey="record => record.id"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+      >
+        <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRule:add')">
+          <!-- <div ref="actionBar" class="actionBar">
+            <a-button
+              type="info"
+              v-if="hasPerm('sysExcelTemplate:importExcel')"
+              icon="upload"
+              @click="$refs.excelForm.index()"
+            >
+              瀵煎叆
+            </a-button>
+            <a-button
+              type="info"
+              v-if="hasPerm('WmsControlRule:exportExcel')"
+              icon="download"
+              @click="WmsControlRuleToExcel()"
+            >
+              瀵煎嚭
+            </a-button>
+            <a-button type="primary" v-if="hasPerm('WmsControlRule:add')" icon="plus" @click="$refs.addForm.add()"
+              >鏂板鎺у埗灞炴�ц鍒�</a-button
+            >
+          </div> -->
+        </template>
+        <span slot="isDisabledscopedSlots" slot-scope="text">
+          <div v-if="text === true">
+            <a-tag color="green">鏄�</a-tag>
+          </div>
+          <div v-else-if="text == false">
+            <a-tag color="volcano">鍚�</a-tag>
+          </div>
+          <div v-else=""></div>
+        </span>
+        <span slot="action" slot-scope="text, record">
+          <!-- 鑷畾涔� -->
+          <a v-if="hasPerm('WmsControlRule:getdetail')" @click="$refs.detailForm.edit(record)">璇︽儏</a>
+          &nbsp;&nbsp;
+          </a-popconfirm>
+        </span>
+      </s-table>
+      <add-form ref="addForm" @ok="handleOk" />
+      <edit-form ref="editForm" @ok="handleOk" />
+      <excel-form ref="excelForm" @ok="handleOk" />
+	  
+	  <!-- 鑷畾涔� -->
+      <detail-form ref="detailForm" @ok="handleOk" />
+	  
+    </a-card>
+  </div>
+</template>
+<script>
+import { STable } from '@/components'
+import moment from 'moment'
+import {
+  WmsControlRulePage,
+  WmsControlRuleDelete,
+  WmsControlRuleToExcel
+} from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+//鑷畾涔塼able楂樺害
+import setTableHtMixin from '@/mixins/handleTableHt.js'
+import addForm from './addForm.vue'
+import { exportExcel } from '@/utils/exportToExcel'
+import { downloadFile } from '@/utils/util'
+import editForm from './editForm.vue'
+import excelForm from './excelForm.vue'
+import detailForm from './details.vue'
+
+
+export default {
+  mixins: [setTableHtMixin],
+  components: {
+    STable,
+    addForm,
+    editForm,
+    excelForm,
+    detailForm
+  },
+  data() {
+    return {
+      advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+      queryParam: {},
+      pageInfo: {
+        current: 1,
+        pageSize: 10
+      },
+      columns: [
+        {
+          title: '搴忓彿',
+          width: '60px',
+          align: 'center',
+          customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+        },
+        {
+          title: '瑙勫垯缂栧彿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'ruleCode'
+        },
+        {
+          title: '瑙勫垯鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'ruleName'
+        },
+        {
+          title: '瑙勫垯鎻忚堪',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'ruleDesc'
+        },
+        {
+          title: '鏄惁绂佺敤',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'isDisabled',
+          scopedSlots: { customRender: 'isDisabledscopedSlots' }
+        },
+        {
+          title: '鍒涘缓鏃堕棿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '鏇存柊鏃堕棿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'updatedTime'
+        },
+        {
+          title: '鍒涘缓鑰呭悕绉�',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '淇敼鑰呭悕绉�',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'updatedUserName'
+        }
+      ],
+      tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+      // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+      loadData: parameter => {
+        return WmsControlRulePage(Object.assign(parameter, this.switchingDate())).then(res => {
+          return res.data
+        })
+      },
+      selectedRowKeys: [],
+      selectedRows: []
+    }
+  },
+  created() {
+    if (this.hasPerm('WmsControlRule:edit') || this.hasPerm('WmsControlRule:delete')) {
+      this.columns.push({
+        title: '鎿嶄綔',
+        width: '150px',
+        dataIndex: 'action',
+        scopedSlots: { customRender: 'action' }
+      })
+    }
+    const path = this.$route.path
+    const columnStr = window.localStorage.getItem(path)
+    if (columnStr) {
+      var _columns = JSON.parse(columnStr)
+      this.columns.forEach(element => {
+        var fObj = _columns.find((item, index) => {
+          return item.dataIndex === element.dataIndex
+        })
+        if (fObj != undefined && fObj != null) {
+          element.checked = fObj.checked
+        }
+      })
+    }
+    const isDisabledOption = this.$options
+    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+    this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+    window.addEventListener(
+      'resize',
+      () => {
+        this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+      },
+      false
+    )
+  },
+  methods: {
+    moment,
+    /**
+     * 鏌ヨ鍙傛暟缁勮
+     */
+    switchingDate() {
+      const obj = JSON.parse(JSON.stringify(this.queryParam))
+      return obj
+    },
+    WmsControlRuleDelete(record) {
+      WmsControlRuleDelete(record).then(res => {
+        if (res.success) {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.$refs.table.refresh()
+        } else {
+          this.$message.error('鍒犻櫎澶辫触') // + res.message
+        }
+      })
+    },
+
+    WmsControlRuleToExcel() {
+      this.loading = true
+      let entozh = {}
+      const path = this.$route.path
+      if (window.localStorage.getItem(path)) {
+        JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+          if (item.dataIndex != 'action' && item.checked) {
+            entozh[item.dataIndex] = item.title
+          }
+        })
+      } else {
+        //鐩存帴鐐瑰鍑�
+        this.columns.forEach(item => {
+          if (item.dataIndex != 'action') {
+            entozh[item.dataIndex] = item.title
+          }
+        })
+      }
+      WmsControlRulePage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam))
+        .then(res => {
+          this.loading = false
+          //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+          var arrDataCutout = this.columns.filter(v => v.customCutout == true)
+          res.data.rows.forEach(item => {
+            var arrKeys = Object.keys(item)
+            arrKeys.forEach(key => {
+              var strFieldDic = key + 'Data'
+              //鏋氫妇杞��
+              if (this[strFieldDic] && this[strFieldDic].length > 0) {
+                let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]))
+                if (arrFieldDic.length > 0) {
+                  item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'
+                }
+              }
+              // 鏃ユ湡鎴彇
+              if (arrDataCutout.length > 0) {
+                arrDataCutout.forEach(itemIn => {
+                  if (key == itemIn.dataIndex && item[key]) {
+                    item[key] = item[key].split(' ')[0]
+                  }
+                })
+              }
+            })
+          })
+          exportExcel(res.data.rows, entozh, 'xlsx', `${this.$route.meta.title}`)
+        })
+        .catch(err => {
+          this.loading = false
+          this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+        })
+    },
+
+    toggleAdvanced() {
+      this.advanced = !this.advanced
+      this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+    },
+    onChangecreatedTime(date, dateString) {
+      this.queryParam.createdTime = dateString
+    },
+    onChangeupdatedTime(date, dateString) {
+      this.queryParam.updatedTime = dateString
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    }
+  }
+}
+</script>
+<style lang="less">
+.table-operator {
+  margin-bottom: 18px;
+}
+button {
+  margin-right: 8px;
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
similarity index 92%
rename from iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue
rename to iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
index 71d0a2d..23359a0 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
@@ -1,6 +1,13 @@
 锘�<template>
-  <!-- 鏇夸唬鍝佺鐞� -->
-	<a-form :form="form">
+  <a-modal
+    title="鏂板鏇夸唬鍝佺鐞�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+		<a-form :form="form">
         <a-form-item label="鏇夸唬缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-input placeholder="璇疯緭鍏ユ浛浠g紪鍙�" v-decorator="['substituteCode', {rules: [{required: true, message: '璇疯緭鍏ユ浛浠g紪鍙凤紒'}]}]" />
         </a-form-item>
@@ -23,6 +30,8 @@
           <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" />
         </a-form-item>
       </a-form>
+    </a-spin>
+  </a-modal>
 </template>
 
 <script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue
new file mode 100644
index 0000000..a7029c1
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue
@@ -0,0 +1,285 @@
+锘�<template>
+  <!-- 鏇夸唬鍝佺鐞� -->
+  <div style="background-color: white">
+    <!-- <a-spin :spinning="loading"> -->
+    <div class="wms-task-management-detail-div">
+      <div class="drawer-content">
+        <!-- <span style="font-weight:bold;cursor:default;">
+          <a style="cursor:default;">{{ row.no }}</a>鍗曟嵁璇︽儏
+        </span> -->
+        <div style="margin-top: 10px;">
+          <a-table :columns="columns" :data-source="list" row-key="id" :pagination="false" :scroll="{ x: true }">
+            <template slot="index" slot-scope="text, record, index">{{ index + 1 }}</template>
+            <span slot="containerStatusscopedSlots" slot-scope="text">
+              <a-tag :color="text == '1' ? '#daa520' : text == '2' ? '#cd5c5c' : text == '3' ? '#add8e6' : '#696969'">{{
+                'orderdetails_statusenum' | dictType(text)
+              }}</a-tag>
+            </span>
+            <span slot="action" slot-scope="text, record">
+              <a-popconfirm v-if="hasPerm('BaseCustomer:delete')" placement="topRight" title="纭鍒犻櫎锛�"
+                @confirm="() => itemDelete(record, index)">
+                <a>鍒犻櫎</a>
+              </a-popconfirm>
+            </span>
+          </a-table>
+        </div>
+      </div>
+
+      <p @click="visible = true">鏂板琛�</p>
+
+      <a-modal title="鏇夸唬鍝佸垪琛�" :width="900" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
+        @cancel="handleCancel">
+        <show-list ref="showList" @ok="handleOk" />
+        <!-- <a-spin :spinning="confirmLoading"></a-spin> -->
+      </a-modal>
+    </div>
+  </div>
+</template>
+
+<script>
+import { WmsOrderRukuDetail } from '@/api/modular/main/WmsOrderManage'
+import showList from './index.vue'
+
+export default {
+  name: 'wmsOrderRukuManagementDetailDrawer',
+  emits: ['update:visible'],
+  props: {
+    visible: {
+      type: Boolean,
+      default: false
+    },
+    row: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  components: {
+    showList
+  },
+  data() {
+    return {
+      loading: false,
+      containerStatusData: [],
+      list: [],
+      columns: [
+        {
+          dataIndex: 'index',
+          title: '搴忓彿',
+          fixed: 'left',
+          width: '60',
+          scopedSlots: { customRender: 'index' },
+          align: 'center'
+        },
+        {
+					title: '鏇夸唬缂栧彿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteCode'
+				},
+				{
+					title: '鐗╂枡缂栧彿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'materialCode'
+				},
+				{
+					title: '鐗╂枡鍚嶇О',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'materialName'
+				},
+				{
+					title: '鏇夸唬鍝佺墿鏂欑紪鍙�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteMaterialCode'
+				},
+				{
+					title: '鏇夸唬鍝佺墿鏂欏悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteMaterialName'
+				},
+				{
+					title: '鏇夸唬娆″簭',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteIndex'
+				},
+      ],
+      // 鍒嗛〉
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30', '40'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + '鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+        size: 'small'
+      }
+    }
+  },
+
+  created() {
+    const containerStatusOption = this.$options
+    this.containerStatusData = containerStatusOption.filters['dictData']('orderdetails_statusenum')
+
+    this.columns.push({
+      title: '鎿嶄綔',
+      width: '150px',
+      dataIndex: 'action',
+      scopedSlots: { customRender: 'action' }
+    })
+  },
+  methods: {
+    onClose() {
+      this.close()
+    },
+    close() {
+      this.$emit('update:visible', false)
+    },
+    afterVisibleChange(visible) {
+      if (visible) {
+        this.initShow()
+      } else {
+        this.afterClsoe()
+      }
+    },
+    initShow() {
+      this.loading = true
+      this.getList(() => {
+        this.loading = false
+      })
+    },
+    getList(row) {
+      let params = { id: row.id }
+      WmsOrderRukuDetail(params)
+        .then(d => {
+          this.list = d.data.rows || []
+          this.$emit('update:visible', true)
+          // callback && callback(true)
+        })
+        .catch(() => {
+          this.$emit('update:visible', false)
+          this.list = []
+          // callback && callback(false)
+        })
+    },
+    afterClsoe() {
+      this.list = []
+    },
+    handleOk(param) {
+      this.list = param
+    },
+    handleSubmit() {
+      this.visible = false
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    itemDelete(record, index) {
+      this.list.splice(index, 1)
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.wms-task-management-detail-div {
+  height: 100%;
+  overflow: auto;
+
+  .drawer-content {
+    padding: 16px;
+  }
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/editForm.vue
similarity index 67%
copy from iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue
copy to iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/editForm.vue
index 71d0a2d..c755d17 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/editForm.vue
@@ -1,6 +1,13 @@
 锘�<template>
-  <!-- 鏇夸唬鍝佺鐞� -->
-	<a-form :form="form">
+  <a-modal
+    title="缂栬緫鏇夸唬鍝佺鐞�"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
         <a-form-item label="鏇夸唬缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-input placeholder="璇疯緭鍏ユ浛浠g紪鍙�" v-decorator="['substituteCode', {rules: [{required: true, message: '璇疯緭鍏ユ浛浠g紪鍙凤紒'}]}]" />
         </a-form-item>
@@ -22,17 +29,21 @@
         <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" />
         </a-form-item>
+        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
       </a-form>
+    </a-spin>
+  </a-modal>
 </template>
 
 <script>
-  import moment from 'moment'
+import moment from 'moment'
   import {
-  WmsSubstituteGoodAdd
+  WmsSubstituteGoodEdit
   } from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage'
   export default {
   data () {
   return {
+  Id: 0,
   labelCol: {
   xs: { span: 24 },
   sm: { span: 5 }
@@ -41,6 +52,7 @@
   xs: { span: 24 },
   sm: { span: 15 }
   },
+  record: {},
         visible: false,
         confirmLoading: false,
         form: this.$form.createForm(this)
@@ -49,41 +61,58 @@
     methods: {
 	moment,
       // 鍒濆鍖栨柟娉�
-      add (record) {
-        this.visible = true
+      edit (record) {
+        this.visible = true;
+		this.Id = record.id;
         this.$nextTick(() => {
-
         });
+        //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+        this.record = JSON.parse(JSON.stringify(record))
+        this.$nextTick(() => {
+          this.form.setFieldsValue(
+            {
+              id: record.id,
+              substituteCode: record.substituteCode,
+              materialCode: record.materialCode,
+              materialName: record.materialName,
+              substituteMaterialCode: record.substituteMaterialCode,
+              substituteMaterialName: record.substituteMaterialName,
+              substituteIndex: record.substituteIndex,
+              isDisabled: record.isDisabled
+            }
+          )
+        })
       },
-      /**
-       * 鎻愪氦琛ㄥ崟
-       */
       handleSubmit () {
         const { form: { validateFields } } = this
         this.confirmLoading = true
         validateFields((errors, values) => {
           if (!errors) {
             for (const key in values) {
+              if (values[key] == null) continue
               if (typeof (values[key]) === 'object') {
                 values[key] = JSON.stringify(values[key])
+                 this.record[key] = values[key]
+              } else {
+                 this.record[key] = values[key]
               }
             }
-            WmsSubstituteGoodAdd(values).then((res) => {
+            WmsSubstituteGoodEdit(this.record).then((res) => {
               if (res.success) {
-                this.$message.success('鏂板鎴愬姛')
+                this.$message.success('缂栬緫鎴愬姛')
                 this.confirmLoading = false
-                this.$emit('ok', values)
+                this.$emit('ok', this.record)
                 this.handleCancel()
               } else {
-                this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message))
+                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
               }
             }).finally((res) => {
               this.confirmLoading = false
             })
-          } else {
+          }else{
             this.confirmLoading = false
-          }
-        })
+          } 
+        });
       },
       handleCancel () {
         this.form.resetFields()
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/excelForm.vue
new file mode 100644
index 0000000..4c8af3c
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/excelForm.vue
@@ -0,0 +1,181 @@
+锘�<template>
+  <a-modal
+    :width="850"
+    :destroyOnClose="true"
+    :visible="visible"
+    :forceRender="true"
+    title="鎵归噺瀵煎叆"
+    cancelText="鍙栨秷涓婁紶"
+    okText="寮�濮嬩笂浼�"
+    @cancel="handleCancel"
+    @ok="handleSubmit">
+    <a-spin :spinning="confirmLoading">
+      <a-row :span="24">
+        <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span>
+      </a-row>
+      <p></p>
+      <a-row>
+        <a-col :span="16">
+          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
+            <a-icon style="font-size: 40px;" type="cloud-upload" />
+          </a-upload-dragger>
+        </a-col>
+        <!--<a-col :span="8">
+          <span>瀵煎叆妯″紡锛�</span>
+          <a-select
+            style="width: 130px"
+            placeholder="璇烽�夋嫨瀵煎叆妯″紡"
+            v-model="importExcelType">
+            <a-select-option
+              v-for="(item,index) in importExcelTypeData"
+              :key="index"
+              :value="item.code">{{ item.name }}
+            </a-select-option>
+          </a-select>
+        </a-col>-->
+      </a-row>
+      <a-row :span="24">
+        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
+          鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰
+        </a-button>-->
+        <span>銆�</span>
+        <a-button style="width: 90px;text-align: left;" @click="wmsSubstituteGoodDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶
+        <span>銆�</span>
+        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
+          鏀惰捣
+        </a-button>
+      </a-row>
+      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
+        <a-breadcrumb>
+          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item>
+        </a-breadcrumb>
+      </a-row>
+      <pre v-show="detailed">
+        <div v-html="demandText"></div>
+      </pre>
+      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
+      <pre v-show="detailed">
+        <div v-html="columnText"></div>
+      </pre>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
+
+  import { WmsSubstituteGoodImportExcel, WmsSubstituteGoodDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage'
+  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
+  export default {
+  components: {
+  },
+  data() {
+  return {
+  visible: false,
+  detailed: false,
+  confirmLoading: false,
+  fileList: [],
+  importExcelTypeData: [],
+  importExcelType: '1',
+  uploadFile: null,
+  columns: [],
+  dataList: [],
+  demandText:'',
+  columnText: ''
+  }
+  },
+  methods: {
+  index() {
+  this.visible = true;
+  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
+  this.demandText = parseDemandText("wmsSubstituteGoodDownloadExcelTemplate")
+  window.downloadFile = this.wmsSubstituteGoodDownloadExcelTemplate;
+  this.getTable();
+  },
+  showDemand() {
+  this.detailed = !this.detailed;
+  },
+  customRequest(document) {
+  this.uploadFile = document
+  },
+  getTable() {
+  sysExcelTemplateGetColumnList({className: "WmsSubstituteGood"}).then(res =>
+  {
+  if (res.success) {
+  this.columns =[];
+  this.dataList = [{}];
+  res.data.forEach(x => {
+  this.columns.push({
+  dataIndex: x.columnName,
+  key: x.columnName,
+  title: x.columnComment
+  });
+  this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�"
+  });
+  this.columnText = parseExcelFieldText(res.data);
+  }
+  });
+  },
+  beforeUpload(fileInfo) {
+  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
+  if (!res.success) {
+  this.$message.warning(res.msg)
+  return false
+  }
+  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
+  },
+  handleChange(fileInfo) {
+  if (fileInfo.file.status === 'error') {
+  fileInfo.fileList.splice(0, 1)
+  }
+  if (fileInfo.file.status === 'done') {
+  if (fileInfo.fileList.length > 1) {
+  fileInfo.fileList.splice(0, 1)
+  }
+  this.fileList = fileInfo.file
+  }
+  },
+  handleSubmit() {
+  this.confirmLoading = true
+  const formData = new FormData()
+  formData.append('file', this.uploadFile.file)
+  WmsSubstituteGoodImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
+  this.$message.success('鎿嶄綔鎴愬姛')
+  this.confirmLoading = false
+  this.$emit('ok', [])
+  this.handleCancel()
+  }).finally((res)=>{this.confirmLoading = false})
+  },
+  handleCancel() {
+  this.visible = false
+  this.detailed = false
+  },
+  wmsSubstituteGoodDownloadExcelTemplate() {
+  WmsSubstituteGoodDownloadExcelTemplate({version: "v2"}).then((res) => {
+  downloadFile(res);
+  }).catch((err) => {
+  this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+  })
+  }
+  }
+  }
+</script>
+
+<style scoped>
+::v-deep .ant-upload.ant-upload-drag {
+  position: relative;
+  width: 140px;
+  height: 135px;
+  text-align: center;
+  background: #fafafa;
+  border: 1px dashed #d9d9d9;
+  border-radius: 2px;
+  cursor: pointer;
+  -webkit-transition: border-color 0.3s;
+  transition: border-color 0.3s;
+}
+::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
+  color: #ffc53d;
+  border-color: white;
+}
+</style>
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/index.vue
new file mode 100644
index 0000000..300772c
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/index.vue
@@ -0,0 +1,547 @@
+锘�<template>
+	<div ref="boxOutWrap" class="boxOutWrap">
+		<div ref="boxForm" class="boxForm">
+			<a-card :bordered="false" :bodyStyle="tstyle">
+
+				<div class="table-page-search-wrapper" v-if="hasPerm('WmsSubstituteGood:page')">
+					<a-form layout="inline">
+						<a-row :gutter="48">
+							<a-col :md="8" :sm="24">
+								<a-form-item label="鏇夸唬缂栧彿">
+									<a-input v-model="queryParam.substituteCode" allow-clear placeholder="璇疯緭鍏ユ浛浠g紪鍙�" />
+								</a-form-item>
+							</a-col>
+							<a-col :md="8" :sm="24">
+								<a-form-item label="鐗╂枡缂栧彿">
+									<a-input v-model="queryParam.materialCode" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" />
+								</a-form-item>
+							</a-col><template v-if="advanced">
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鐗╂枡鍚嶇О">
+										<a-input v-model="queryParam.materialName" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏇夸唬鍝佺墿鏂欑紪鍙�">
+										<a-input v-model="queryParam.substituteMaterialCode" allow-clear
+											placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏇夸唬鍝佺墿鏂欏悕绉�">
+										<a-input v-model="queryParam.substituteMaterialName" allow-clear
+											placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О" />
+									</a-form-item>
+								</a-col><a-col :md="8" :sm="24">
+									<a-form-item label="鏇夸唬娆″簭">
+										<a-input-number v-model="queryParam.substituteIndex" style="width: 100%" allow-clear
+											placeholder="璇疯緭鍏ユ浛浠f搴�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏄惁绂佺敤">
+										<a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled"
+											placeholder="璇烽�夋嫨鏄惁绂佺敤">
+											<a-select-option v-for="(item, index) in isDisabledData" :key="index"
+												:value="item.code">{{ item.name }}</a-select-option>
+										</a-select>
+									</a-form-item>
+								</a-col>
+								<!--骞存湀鏃ユ椂鍒嗙-->
+								<!--鏃堕棿鑼冨洿-->
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍒涘缓鏃堕棿">
+										<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+											format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+										}"
+											v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss"
+											format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime" />
+
+									</a-form-item>
+								</a-col>
+								<!--骞存湀鏃ユ椂鍒嗙-->
+								<!--鏃堕棿鑼冨洿-->
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏇存柊鏃堕棿">
+										<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+											format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+										}"
+											v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss"
+											format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime" />
+
+									</a-form-item>
+								</a-col>
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍒涘缓鑰呭悕绉�">
+										<a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="淇敼鑰呭悕绉�">
+										<a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" />
+									</a-form-item>
+								</a-col> </template>
+
+							<a-col :md="8" :sm="24">
+								<span class="table-page-search-submitButtons">
+									<a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button>
+									<a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button>
+									<a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+										<a-icon :type="advanced ? 'up' : 'down'" />
+									</a>
+								</span>
+							</a-col>
+
+						</a-row>
+					</a-form>
+				</div>
+			</a-card>
+		</div>
+		<a-card :bordered="false">
+			<s-table ref="table" :columns="columns" :data="loadData" :alert="true" @changeTablePage="pageInfo = $event"
+				:scroll="{ x: true, y: tableHeight }" :rowKey="(record) => record.id"
+				:rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
+				<!-- <template class="table-operator" slot="operator" v-if="hasPerm('WmsSubstituteGood:add')">
+					<div ref="actionBar" class="actionBar">
+						<a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload"
+							@click="$refs.excelForm.index()">
+							瀵煎叆
+						</a-button>
+						<a-button type="info" v-if="hasPerm('WmsSubstituteGood:exportExcel')" icon="download"
+							@click="WmsSubstituteGoodToExcel()">
+							瀵煎嚭
+						</a-button>
+						<a-button type="primary" v-if="hasPerm('WmsSubstituteGood:add')" icon="plus"
+							@click="$refs.addForm.add()">鏂板鏇夸唬鍝佺鐞�</a-button>
+					</div>
+				</template> -->
+				<span slot="isDisabledscopedSlots" slot-scope="text">
+					<div v-if="text === true">
+						<a-tag color="green">鏄�</a-tag>
+					</div>
+					<div v-else-if="text == false">
+						<a-tag color="volcano">鍚�</a-tag>
+					</div>
+					<div v-else=""></div>
+				</span>
+				<span slot="action" slot-scope="text, record">
+
+					<a v-if="hasPerm('WmsSubstituteGood:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+					<a-divider type="vertical"
+						v-if="hasPerm('WmsSubstituteGood:edit') & hasPerm('WmsSubstituteGood:delete')" />
+					<a-popconfirm v-if="hasPerm('WmsSubstituteGood:delete')" placement="topRight" title="纭鍒犻櫎锛�"
+						@confirm="() => WmsSubstituteGoodDelete(record)">
+						<a>鍒犻櫎</a>
+					</a-popconfirm>
+				</span>
+			</s-table>
+			<add-form ref="addForm" @ok="handleOk" />
+			<edit-form ref="editForm" @ok="handleOk" />
+			<excel-form ref="excelForm" @ok="handleOk" />
+		</a-card>
+	</div>
+</template>
+<script>
+import { STable } from '@/components'
+import moment from 'moment'
+import { WmsSubstituteGoodPage, WmsSubstituteGoodDelete, WmsSubstituteGoodToExcel } from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage'
+//鑷畾涔塼able楂樺害
+import setTableHtMixin from '@/mixins/handleTableHt.js'
+import addForm from './addForm.vue'
+import { exportExcel } from '@/utils/exportToExcel'
+import { downloadFile } from '@/utils/util'
+import editForm from './editForm.vue'
+import excelForm from './excelForm.vue'
+export default {
+	mixins: [setTableHtMixin],
+	components: {
+		STable,
+		addForm,
+		editForm,
+		excelForm
+	},
+	data() {
+		return {
+			advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+			queryParam: {},
+			pageInfo: {
+				current: 1,
+				pageSize: 10
+			},
+			columns: [
+				{
+					title: '搴忓彿',
+					width: '60px',
+					align: 'center',
+					customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+				},
+				{
+					title: '鏇夸唬缂栧彿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteCode'
+				},
+				{
+					title: '鐗╂枡缂栧彿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'materialCode'
+				},
+				{
+					title: '鐗╂枡鍚嶇О',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'materialName'
+				},
+				{
+					title: '鏇夸唬鍝佺墿鏂欑紪鍙�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteMaterialCode'
+				},
+				{
+					title: '鏇夸唬鍝佺墿鏂欏悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '140px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteMaterialName'
+				},
+				{
+					title: '鏇夸唬娆″簭',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'substituteIndex'
+				},
+				{
+					title: '鏄惁绂佺敤',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'isDisabled',
+					scopedSlots: { customRender: 'isDisabledscopedSlots' }
+				},
+				{
+					title: '鍒涘缓鏃堕棿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'createdTime'
+				},
+				{
+					title: '鏇存柊鏃堕棿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'updatedTime'
+				},
+				{
+					title: '鍒涘缓鑰呭悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'createdUserName'
+				},
+				{
+					title: '淇敼鑰呭悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'updatedUserName'
+				}
+			],
+			tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+			// 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+			loadData: parameter => {
+				return WmsSubstituteGoodPage(Object.assign(parameter, this.switchingDate())).then((res) => {
+					return res.data
+				})
+			},
+			selectedRowKeys: [],
+			selectedRows: []
+		}
+	},
+	created() {
+		if (this.hasPerm('WmsSubstituteGood:edit') || this.hasPerm('WmsSubstituteGood:delete')) {
+			this.columns.push({
+				title: '鎿嶄綔',
+				width: '150px',
+				dataIndex: 'action',
+				scopedSlots: { customRender: 'action' }
+			})
+		}
+		const path = this.$route.path
+		const columnStr = window.localStorage.getItem(path)
+		if (columnStr) {
+			var _columns = JSON.parse(columnStr)
+			this.columns.forEach(element => {
+				var fObj = _columns.find((item, index) => {
+					return item.dataIndex === element.dataIndex;
+				})
+				if (fObj != undefined && fObj != null) {
+					element.checked = fObj.checked;
+				}
+			});
+		}
+		const isDisabledOption = this.$options
+		this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+		this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+		window.addEventListener(
+			'resize',
+			() => {
+				this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+			},
+			false
+		)
+
+	},
+	methods: {
+		moment,
+		/**
+		* 鏌ヨ鍙傛暟缁勮
+		*/
+		switchingDate() {
+			const obj = JSON.parse(JSON.stringify(this.queryParam))
+			return obj
+		},
+		WmsSubstituteGoodDelete(record) {
+			WmsSubstituteGoodDelete(record).then((res) => {
+				if (res.success) {
+					this.$message.success('鍒犻櫎鎴愬姛')
+					this.$refs.table.refresh()
+				} else {
+					this.$message.error('鍒犻櫎澶辫触') // + res.message
+				}
+			})
+		},
+
+
+		WmsSubstituteGoodToExcel() {
+			this.loading = true
+			let entozh = {};
+			const path = this.$route.path;
+			if (window.localStorage.getItem(path)) {
+				JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+					if (item.dataIndex != 'action' && item.checked) {
+						entozh[item.dataIndex] = item.title
+					}
+				})
+			} else { //鐩存帴鐐瑰鍑�
+				this.columns.forEach(item => {
+					if (item.dataIndex != 'action') {
+						entozh[item.dataIndex] = item.title
+					}
+				})
+			}
+			WmsSubstituteGoodPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
+				this.loading = false;
+				//闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+				var arrDataCutout = this.columns.filter(v => v.customCutout == true);
+				res.data.rows.forEach(item => {
+					var arrKeys = Object.keys(item);
+					arrKeys.forEach(key => {
+						var strFieldDic = key + 'Data';
+						//鏋氫妇杞��
+						if (this[strFieldDic] && this[strFieldDic].length > 0) {
+							let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
+							if (arrFieldDic.length > 0) {
+								item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�';
+							}
+						}
+						// 鏃ユ湡鎴彇
+						if (arrDataCutout.length > 0) {
+							arrDataCutout.forEach(itemIn => {
+								if (key == itemIn.dataIndex && item[key]) {
+									item[key] = item[key].split(" ")[0]
+								}
+							})
+						}
+					});
+				})
+				exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
+			}).catch((err) => {
+				this.loading = false
+				this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+			})
+		},
+
+
+		toggleAdvanced() {
+			this.advanced = !this.advanced
+			this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+		},
+		onChangecreatedTime(date, dateString) {
+			this.queryParam.createdTime = dateString
+		},
+		onChangeupdatedTime(date, dateString) {
+			this.queryParam.updatedTime = dateString
+		},
+		handleOk() {
+			this.$refs.table.refresh()
+		},
+		onSelectChange(selectedRowKeys, selectedRows) {
+			this.selectedRowKeys = selectedRowKeys
+			this.selectedRows = selectedRows
+			this.$emit('ok', selectedRows)
+		}
+	}
+}
+</script>
+<style lang="less">.table-operator {
+	margin-bottom: 18px;
+}
+
+button {
+	margin-right: 8px;
+}</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addForm.vue
similarity index 94%
rename from iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue
rename to iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addForm.vue
index a2bfea8..98ee481 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addForm.vue
@@ -1,6 +1,13 @@
 锘�<template>
-  <!-- 鏂板瀹㈡埛妗f -->
-  <a-form :form="form">
+  <a-modal
+    title="鏂板瀹㈡埛妗f"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+		<a-form :form="form">
         <a-form-item label="瀹㈡埛缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-input placeholder="璇疯緭鍏ュ鎴风紪鍙�" v-decorator="['custCode', {rules: [{required: true, message: '璇疯緭鍏ュ鎴风紪鍙凤紒'}]}]" />
         </a-form-item>
@@ -44,6 +51,8 @@
           <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
         </a-form-item>
       </a-form>
+    </a-spin>
+  </a-modal>
 </template>
 
 <script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addFormBaseCustomer.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addFormBaseCustomer.vue
new file mode 100644
index 0000000..e07f210
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/addFormBaseCustomer.vue
@@ -0,0 +1,205 @@
+锘�<template>
+  <div style="background-color: white">
+    <!-- <a-spin :spinning="loading"> -->
+    <div class="wms-task-management-detail-div">
+      <div class="drawer-content">
+        <!-- <span style="font-weight:bold;cursor:default;">
+          <a style="cursor:default;">{{ row.no }}</a>鍗曟嵁璇︽儏
+        </span> -->
+        <div style="margin-top: 10px;">
+          <a-table :columns="columns" :data-source="list" row-key="id" :pagination="false" :scroll="{ x: true }">
+            <template slot="index" slot-scope="text, record, index">{{ index + 1 }}</template>
+            <span slot="containerStatusscopedSlots" slot-scope="text">
+              <a-tag :color="text == '1' ? '#daa520' : text == '2' ? '#cd5c5c' : text == '3' ? '#add8e6' : '#696969'">{{
+                'orderdetails_statusenum' | dictType(text)
+              }}</a-tag>
+            </span>
+
+            <span slot="action" slot-scope="text, record">
+              <a-popconfirm v-if="hasPerm('BaseCustomer:delete')" placement="topRight" title="纭鍒犻櫎锛�"
+                @confirm="() => itemDelete(record, index)">
+                <a>鍒犻櫎</a>
+              </a-popconfirm>
+            </span>
+          </a-table>
+        </div>
+      </div>
+
+      <p @click="visible = true">鏂板琛�</p>
+
+      <a-modal title="瀹㈡埛鍒楄〃" :width="900" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
+        @cancel="handleCancel">
+        <show-list ref="showList" @ok="handleOk" />
+        <!-- <a-spin :spinning="confirmLoading"></a-spin> -->
+      </a-modal>
+    </div>
+  </div>
+</template>
+
+<script>
+import { WmsOrderRukuDetail } from '@/api/modular/main/WmsOrderManage'
+import showList from './index.vue'
+
+export default {
+  name: 'wmsOrderRukuManagementDetailDrawer',
+  emits: ['update:visible'],
+  props: {
+    visible: {
+      type: Boolean,
+      default: false
+    },
+    row: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  components: {
+    showList
+  },
+  data() {
+    return {
+      loading: false,
+      containerStatusData: [],
+      list: [],
+      columns: [
+        {
+          dataIndex: 'index',
+          title: '搴忓彿',
+          fixed: 'left',
+          width: '60',
+          scopedSlots: { customRender: 'index' },
+          align: 'center'
+        },
+        {
+          title: '瀹㈡埛缂栧彿',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'custCode'
+        },
+        {
+          title: '瀹㈡埛涓枃鍚嶇О',
+          align: 'center',
+          customHeaderCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          customCell: () => {
+            return {
+              style: {
+                'min-width': '120px' //鏈�灏忓垪瀹借缃�
+              }
+            }
+          },
+          sorter: true,
+          dataIndex: 'custChinaName'
+        }
+      ],
+      // 鍒嗛〉
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30', '40'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + '鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+        size: 'small'
+      }
+    }
+  },
+
+  created() {
+    const containerStatusOption = this.$options
+    this.containerStatusData = containerStatusOption.filters['dictData']('orderdetails_statusenum')
+
+    this.columns.push({
+      title: '鎿嶄綔',
+      width: '150px',
+      dataIndex: 'action',
+      scopedSlots: { customRender: 'action' }
+    })
+  },
+  methods: {
+    onClose() {
+      this.close()
+    },
+    close() {
+      this.$emit('update:visible', false)
+    },
+    afterVisibleChange(visible) {
+      if (visible) {
+        this.initShow()
+      } else {
+        this.afterClsoe()
+      }
+    },
+    initShow() {
+      this.loading = true
+      this.getList(() => {
+        this.loading = false
+      })
+    },
+    getList(row) {
+      let params = { id: row.id }
+      WmsOrderRukuDetail(params)
+        .then(d => {
+          this.list = d.data.rows || []
+          this.$emit('update:visible', true)
+          // callback && callback(true)
+        })
+        .catch(() => {
+          this.$emit('update:visible', false)
+          this.list = []
+          // callback && callback(false)
+        })
+    },
+    afterClsoe() {
+      this.list = []
+    },
+    handleOk(param) {
+      this.list = param
+    },
+    handleSubmit() {
+      this.visible = false
+    },
+    handleCancel() {
+      this.visible = false
+    },
+    itemDelete(record, index) {
+      this.list.splice(index, 1)
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.wms-task-management-detail-div {
+  height: 100%;
+  overflow: auto;
+
+  .drawer-content {
+    padding: 16px;
+  }
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/editForm.vue
similarity index 70%
copy from iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue
copy to iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/editForm.vue
index a2bfea8..56a3beb 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/editForm.vue
@@ -1,6 +1,13 @@
 锘�<template>
-  <!-- 鏂板瀹㈡埛妗f -->
-  <a-form :form="form">
+  <a-modal
+    title="缂栬緫瀹㈡埛妗f"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
         <a-form-item label="瀹㈡埛缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-input placeholder="璇疯緭鍏ュ鎴风紪鍙�" v-decorator="['custCode', {rules: [{required: true, message: '璇疯緭鍏ュ鎴风紪鍙凤紒'}]}]" />
         </a-form-item>
@@ -43,17 +50,21 @@
         <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
           <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
         </a-form-item>
+        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
       </a-form>
+    </a-spin>
+  </a-modal>
 </template>
 
 <script>
-  import moment from 'moment'
+import moment from 'moment'
   import {
-  BaseCustomerAdd
+  BaseCustomerEdit
   } from '@/api/modular/main/WmsBase/BaseCustomerManage'
   export default {
   data () {
   return {
+  Id: 0,
   labelCol: {
   xs: { span: 24 },
   sm: { span: 5 }
@@ -62,6 +73,7 @@
   xs: { span: 24 },
   sm: { span: 15 }
   },
+  record: {},
         visible: false,
         confirmLoading: false,
         form: this.$form.createForm(this)
@@ -70,41 +82,65 @@
     methods: {
 	moment,
       // 鍒濆鍖栨柟娉�
-      add (record) {
-        this.visible = true
+      edit (record) {
+        this.visible = true;
+		this.Id = record.id;
         this.$nextTick(() => {
-
         });
+        //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+        this.record = JSON.parse(JSON.stringify(record))
+        this.$nextTick(() => {
+          this.form.setFieldsValue(
+            {
+              id: record.id,
+              custCode: record.custCode,
+              custChinaName: record.custChinaName,
+              custEnglishName: record.custEnglishName,
+              mnemonicCode: record.mnemonicCode,
+              custType: record.custType,
+              custTypeName: record.custTypeName,
+              linkMan: record.linkMan,
+              phone: record.phone,
+              email: record.email,
+              zipCode: record.zipCode,
+              province: record.province,
+              city: record.city,
+              address: record.address,
+              isDisabled: record.isDisabled
+            }
+          )
+        })
       },
-      /**
-       * 鎻愪氦琛ㄥ崟
-       */
       handleSubmit () {
         const { form: { validateFields } } = this
         this.confirmLoading = true
         validateFields((errors, values) => {
           if (!errors) {
             for (const key in values) {
+              if (values[key] == null) continue
               if (typeof (values[key]) === 'object') {
                 values[key] = JSON.stringify(values[key])
+                 this.record[key] = values[key]
+              } else {
+                 this.record[key] = values[key]
               }
             }
-            BaseCustomerAdd(values).then((res) => {
+            BaseCustomerEdit(this.record).then((res) => {
               if (res.success) {
-                this.$message.success('鏂板鎴愬姛')
+                this.$message.success('缂栬緫鎴愬姛')
                 this.confirmLoading = false
-                this.$emit('ok', values)
+                this.$emit('ok', this.record)
                 this.handleCancel()
               } else {
-                this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message))
+                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
               }
             }).finally((res) => {
               this.confirmLoading = false
             })
-          } else {
+          }else{
             this.confirmLoading = false
-          }
-        })
+          } 
+        });
       },
       handleCancel () {
         this.form.resetFields()
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/excelForm.vue
new file mode 100644
index 0000000..3f7ba25
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/excelForm.vue
@@ -0,0 +1,181 @@
+锘�<template>
+  <a-modal
+    :width="850"
+    :destroyOnClose="true"
+    :visible="visible"
+    :forceRender="true"
+    title="鎵归噺瀵煎叆"
+    cancelText="鍙栨秷涓婁紶"
+    okText="寮�濮嬩笂浼�"
+    @cancel="handleCancel"
+    @ok="handleSubmit">
+    <a-spin :spinning="confirmLoading">
+      <a-row :span="24">
+        <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span>
+      </a-row>
+      <p></p>
+      <a-row>
+        <a-col :span="16">
+          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
+            <a-icon style="font-size: 40px;" type="cloud-upload" />
+          </a-upload-dragger>
+        </a-col>
+        <!--<a-col :span="8">
+          <span>瀵煎叆妯″紡锛�</span>
+          <a-select
+            style="width: 130px"
+            placeholder="璇烽�夋嫨瀵煎叆妯″紡"
+            v-model="importExcelType">
+            <a-select-option
+              v-for="(item,index) in importExcelTypeData"
+              :key="index"
+              :value="item.code">{{ item.name }}
+            </a-select-option>
+          </a-select>
+        </a-col>-->
+      </a-row>
+      <a-row :span="24">
+        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
+          鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰
+        </a-button>-->
+        <span>銆�</span>
+        <a-button style="width: 90px;text-align: left;" @click="baseCustomerDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶
+        <span>銆�</span>
+        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
+          鏀惰捣
+        </a-button>
+      </a-row>
+      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
+        <a-breadcrumb>
+          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item>
+        </a-breadcrumb>
+      </a-row>
+      <pre v-show="detailed">
+        <div v-html="demandText"></div>
+      </pre>
+      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
+      <pre v-show="detailed">
+        <div v-html="columnText"></div>
+      </pre>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
+
+  import { BaseCustomerImportExcel, BaseCustomerDownloadExcelTemplate} from '@/api/modular/main/WmsBase/BaseCustomerManage'
+  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
+  export default {
+  components: {
+  },
+  data() {
+  return {
+  visible: false,
+  detailed: false,
+  confirmLoading: false,
+  fileList: [],
+  importExcelTypeData: [],
+  importExcelType: '1',
+  uploadFile: null,
+  columns: [],
+  dataList: [],
+  demandText:'',
+  columnText: ''
+  }
+  },
+  methods: {
+  index() {
+  this.visible = true;
+  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
+  this.demandText = parseDemandText("baseCustomerDownloadExcelTemplate")
+  window.downloadFile = this.baseCustomerDownloadExcelTemplate;
+  this.getTable();
+  },
+  showDemand() {
+  this.detailed = !this.detailed;
+  },
+  customRequest(document) {
+  this.uploadFile = document
+  },
+  getTable() {
+  sysExcelTemplateGetColumnList({className: "BaseCustomer"}).then(res =>
+  {
+  if (res.success) {
+  this.columns =[];
+  this.dataList = [{}];
+  res.data.forEach(x => {
+  this.columns.push({
+  dataIndex: x.columnName,
+  key: x.columnName,
+  title: x.columnComment
+  });
+  this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�"
+  });
+  this.columnText = parseExcelFieldText(res.data);
+  }
+  });
+  },
+  beforeUpload(fileInfo) {
+  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
+  if (!res.success) {
+  this.$message.warning(res.msg)
+  return false
+  }
+  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
+  },
+  handleChange(fileInfo) {
+  if (fileInfo.file.status === 'error') {
+  fileInfo.fileList.splice(0, 1)
+  }
+  if (fileInfo.file.status === 'done') {
+  if (fileInfo.fileList.length > 1) {
+  fileInfo.fileList.splice(0, 1)
+  }
+  this.fileList = fileInfo.file
+  }
+  },
+  handleSubmit() {
+  this.confirmLoading = true
+  const formData = new FormData()
+  formData.append('file', this.uploadFile.file)
+  BaseCustomerImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
+  this.$message.success('鎿嶄綔鎴愬姛')
+  this.confirmLoading = false
+  this.$emit('ok', [])
+  this.handleCancel()
+  }).finally((res)=>{this.confirmLoading = false})
+  },
+  handleCancel() {
+  this.visible = false
+  this.detailed = false
+  },
+  baseCustomerDownloadExcelTemplate() {
+  BaseCustomerDownloadExcelTemplate({version: "v2"}).then((res) => {
+  downloadFile(res);
+  }).catch((err) => {
+  this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+  })
+  }
+  }
+  }
+</script>
+
+<style scoped>
+::v-deep .ant-upload.ant-upload-drag {
+  position: relative;
+  width: 140px;
+  height: 135px;
+  text-align: center;
+  background: #fafafa;
+  border: 1px dashed #d9d9d9;
+  border-radius: 2px;
+  cursor: pointer;
+  -webkit-transition: border-color 0.3s;
+  transition: border-color 0.3s;
+}
+::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
+  color: #ffc53d;
+  border-color: white;
+}
+</style>
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/index.vue
new file mode 100644
index 0000000..060d952
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormBaseCustomer/index.vue
@@ -0,0 +1,717 @@
+锘�<template>
+	<div ref="boxOutWrap" class="boxOutWrap">
+		<div ref="boxForm" class="boxForm">
+			<a-card :bordered="false" :bodyStyle="tstyle">
+
+				<div class="table-page-search-wrapper" v-if="hasPerm('BaseCustomer:page')">
+					<a-form layout="inline">
+						<a-row :gutter="48">
+							<a-col :md="8" :sm="24">
+								<a-form-item label="瀹㈡埛缂栧彿">
+									<a-input v-model="queryParam.custCode" allow-clear placeholder="璇疯緭鍏ュ鎴风紪鍙�" />
+								</a-form-item>
+							</a-col>
+							<a-col :md="8" :sm="24">
+								<a-form-item label="瀹㈡埛涓枃鍚嶇О">
+									<a-input v-model="queryParam.custChinaName" allow-clear placeholder="璇疯緭鍏ュ鎴蜂腑鏂囧悕绉�" />
+								</a-form-item>
+							</a-col><template v-if="advanced">
+								<a-col :md="8" :sm="24">
+									<a-form-item label="瀹㈡埛鑻辨枃鍚嶇О">
+										<a-input v-model="queryParam.custEnglishName" allow-clear placeholder="璇疯緭鍏ュ鎴疯嫳鏂囧悕绉�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍔╄鐮�">
+										<a-input v-model="queryParam.mnemonicCode" allow-clear placeholder="璇疯緭鍏ュ姪璁扮爜" />
+									</a-form-item>
+								</a-col><a-col :md="8" :sm="24">
+									<a-form-item label="绫诲瀷">
+										<a-input-number v-model="queryParam.custType" style="width: 100%" allow-clear
+											placeholder="璇疯緭鍏ョ被鍨�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="绫诲瀷鍚嶇О">
+										<a-input v-model="queryParam.custTypeName" allow-clear placeholder="璇疯緭鍏ョ被鍨嬪悕绉�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鑱旂郴浜�">
+										<a-input v-model="queryParam.linkMan" allow-clear placeholder="璇疯緭鍏ヨ仈绯讳汉" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鐢佃瘽">
+										<a-input v-model="queryParam.phone" allow-clear placeholder="璇疯緭鍏ョ數璇�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鐢靛瓙閭欢">
+										<a-input v-model="queryParam.email" allow-clear placeholder="璇疯緭鍏ョ數瀛愰偖浠�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="閭紪">
+										<a-input v-model="queryParam.zipCode" allow-clear placeholder="璇疯緭鍏ラ偖缂�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鐪佷唤">
+										<a-input v-model="queryParam.province" allow-clear placeholder="璇疯緭鍏ョ渷浠�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍩庡競">
+										<a-input v-model="queryParam.city" allow-clear placeholder="璇疯緭鍏ュ煄甯�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍦板潃">
+										<a-input v-model="queryParam.address" allow-clear placeholder="璇疯緭鍏ュ湴鍧�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏄惁绂佺敤">
+										<a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled"
+											placeholder="璇烽�夋嫨鏄惁绂佺敤">
+											<a-select-option v-for="(item, index) in isDisabledData" :key="index"
+												:value="item.code">{{ item.name }}</a-select-option>
+										</a-select>
+									</a-form-item>
+								</a-col>
+								<!--骞存湀鏃ユ椂鍒嗙-->
+								<!--鏃堕棿鑼冨洿-->
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍒涘缓鏃堕棿">
+										<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+											format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+										}"
+											v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss"
+											format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime" />
+
+									</a-form-item>
+								</a-col>
+								<!--骞存湀鏃ユ椂鍒嗙-->
+								<!--鏃堕棿鑼冨洿-->
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鏇存柊鏃堕棿">
+										<a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+											format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+										}"
+											v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss"
+											format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime" />
+
+									</a-form-item>
+								</a-col>
+
+								<a-col :md="8" :sm="24">
+									<a-form-item label="鍒涘缓鑰呭悕绉�">
+										<a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" />
+									</a-form-item>
+								</a-col>
+								<a-col :md="8" :sm="24">
+									<a-form-item label="淇敼鑰呭悕绉�">
+										<a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" />
+									</a-form-item>
+								</a-col> </template>
+
+							<a-col :md="8" :sm="24">
+								<span class="table-page-search-submitButtons">
+									<a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button>
+									<a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button>
+									<a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+										<a-icon :type="advanced ? 'up' : 'down'" />
+									</a>
+								</span>
+							</a-col>
+
+						</a-row>
+					</a-form>
+				</div>
+			</a-card>
+		</div>
+		<a-card :bordered="false">
+			<s-table ref="table" :columns="columns" :data="loadData" :alert="true" @changeTablePage="pageInfo = $event"
+				:scroll="{ x: true, y: tableHeight }" :rowKey="(record) => record.id"
+				:rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
+				<template class="table-operator" slot="operator" v-if="hasPerm('BaseCustomer:add')">
+					<!-- <div ref="actionBar" class="actionBar">
+			<a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
+            瀵煎叆
+          </a-button>
+          <a-button type="info" v-if="hasPerm('BaseCustomer:exportExcel')" icon="download" @click="BaseCustomerToExcel()">
+            瀵煎嚭
+          </a-button>
+			<a-button type="primary" v-if="hasPerm('BaseCustomer:add')" icon="plus" @click="$refs.addForm.add()">鏂板瀹㈡埛妗f</a-button>
+		</div> -->
+				</template>
+				<span slot="isDisabledscopedSlots" slot-scope="text">
+					<div v-if="text === true">
+						<a-tag color="green">鏄�</a-tag>
+					</div>
+					<div v-else-if="text == false">
+						<a-tag color="volcano">鍚�</a-tag>
+					</div>
+					<div v-else=""></div>
+				</span>
+				<span slot="action" slot-scope="text, record">
+
+					<a v-if="hasPerm('BaseCustomer:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+					<a-divider type="vertical" v-if="hasPerm('BaseCustomer:edit') & hasPerm('BaseCustomer:delete')" />
+					<a-popconfirm v-if="hasPerm('BaseCustomer:delete')" placement="topRight" title="纭鍒犻櫎锛�"
+						@confirm="() => BaseCustomerDelete(record)">
+						<a>鍒犻櫎</a>
+					</a-popconfirm>
+				</span>
+			</s-table>
+			<add-form ref="addForm" @ok="handleOk" />
+			<edit-form ref="editForm" @ok="handleOk" />
+			<excel-form ref="excelForm" @ok="handleOk" />
+		</a-card>
+	</div>
+</template>
+<script>
+import { STable } from '@/components'
+import moment from 'moment'
+import { BaseCustomerPage, BaseCustomerDelete, BaseCustomerToExcel } from '@/api/modular/main/WmsBase/BaseCustomerManage'
+//鑷畾涔塼able楂樺害
+import setTableHtMixin from '@/mixins/handleTableHt.js'
+import addForm from './addForm.vue'
+import { exportExcel } from '@/utils/exportToExcel'
+import { downloadFile } from '@/utils/util'
+import editForm from './editForm.vue'
+import excelForm from './excelForm.vue'
+export default {
+	mixins: [setTableHtMixin],
+	components: {
+		STable,
+		addForm,
+		editForm,
+		excelForm
+	},
+	data() {
+		return {
+			advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+			queryParam: {},
+			pageInfo: {
+				current: 1,
+				pageSize: 10
+			},
+			columns: [
+				{
+					title: '搴忓彿',
+					width: '60px',
+					align: 'center',
+					customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+				},
+				{
+					title: '瀹㈡埛缂栧彿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'custCode'
+				},
+				{
+					title: '瀹㈡埛涓枃鍚嶇О',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'custChinaName'
+				},
+				{
+					title: '瀹㈡埛鑻辨枃鍚嶇О',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'custEnglishName'
+				},
+				{
+					title: '鍔╄鐮�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'mnemonicCode'
+				},
+				{
+					title: '绫诲瀷',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '80px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '80px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'custType'
+				},
+				{
+					title: '绫诲瀷鍚嶇О',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'custTypeName'
+				},
+				{
+					title: '鑱旂郴浜�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'linkMan'
+				},
+				{
+					title: '鐢佃瘽',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'phone'
+				},
+				{
+					title: '鐢靛瓙閭欢',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'email'
+				},
+				{
+					title: '閭紪',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'zipCode'
+				},
+				{
+					title: '鐪佷唤',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'province'
+				},
+				{
+					title: '鍩庡競',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'city'
+				},
+				{
+					title: '鍦板潃',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'address'
+				},
+				{
+					title: '鏄惁绂佺敤',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'isDisabled',
+					scopedSlots: { customRender: 'isDisabledscopedSlots' }
+				},
+				{
+					title: '鍒涘缓鏃堕棿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'createdTime'
+				},
+				{
+					title: '鏇存柊鏃堕棿',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'updatedTime'
+				},
+				{
+					title: '鍒涘缓鑰呭悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'createdUserName'
+				},
+				{
+					title: '淇敼鑰呭悕绉�',
+					align: 'center',
+					customHeaderCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					customCell: () => {
+						return {
+							style: {
+								'min-width': '120px'//鏈�灏忓垪瀹借缃�
+							}
+						}
+					},
+					sorter: true,
+					dataIndex: 'updatedUserName'
+				}
+			],
+			tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+			// 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+			loadData: parameter => {
+				return BaseCustomerPage(Object.assign(parameter, this.switchingDate())).then((res) => {
+					return res.data
+				})
+			},
+			selectedRowKeys: [],
+			selectedRows: []
+		}
+	},
+	created() {
+		if (this.hasPerm('BaseCustomer:edit') || this.hasPerm('BaseCustomer:delete')) {
+			this.columns.push({
+				title: '鎿嶄綔',
+				width: '150px',
+				dataIndex: 'action',
+				scopedSlots: { customRender: 'action' }
+			})
+		}
+		const path = this.$route.path
+		const columnStr = window.localStorage.getItem(path)
+		if (columnStr) {
+			var _columns = JSON.parse(columnStr)
+			this.columns.forEach(element => {
+				var fObj = _columns.find((item, index) => {
+					return item.dataIndex === element.dataIndex;
+				})
+				if (fObj != undefined && fObj != null) {
+					element.checked = fObj.checked;
+				}
+			});
+		}
+		const isDisabledOption = this.$options
+		this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+		this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+		window.addEventListener(
+			'resize',
+			() => {
+				this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+			},
+			false
+		)
+
+	},
+	methods: {
+		moment,
+		/**
+		* 鏌ヨ鍙傛暟缁勮
+		*/
+		switchingDate() {
+			const obj = JSON.parse(JSON.stringify(this.queryParam))
+			return obj
+		},
+		BaseCustomerDelete(record) {
+			BaseCustomerDelete(record).then((res) => {
+				if (res.success) {
+					this.$message.success('鍒犻櫎鎴愬姛')
+					this.$refs.table.refresh()
+				} else {
+					this.$message.error('鍒犻櫎澶辫触') // + res.message
+				}
+			})
+		},
+
+
+		BaseCustomerToExcel() {
+			this.loading = true
+			let entozh = {};
+			const path = this.$route.path;
+			if (window.localStorage.getItem(path)) {
+				JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+					if (item.dataIndex != 'action' && item.checked) {
+						entozh[item.dataIndex] = item.title
+					}
+				})
+			} else { //鐩存帴鐐瑰鍑�
+				this.columns.forEach(item => {
+					if (item.dataIndex != 'action') {
+						entozh[item.dataIndex] = item.title
+					}
+				})
+			}
+			BaseCustomerPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
+				this.loading = false;
+				//闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+				var arrDataCutout = this.columns.filter(v => v.customCutout == true);
+				res.data.rows.forEach(item => {
+					var arrKeys = Object.keys(item);
+					arrKeys.forEach(key => {
+						var strFieldDic = key + 'Data';
+						//鏋氫妇杞��
+						if (this[strFieldDic] && this[strFieldDic].length > 0) {
+							let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
+							if (arrFieldDic.length > 0) {
+								item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�';
+							}
+						}
+						// 鏃ユ湡鎴彇
+						if (arrDataCutout.length > 0) {
+							arrDataCutout.forEach(itemIn => {
+								if (key == itemIn.dataIndex && item[key]) {
+									item[key] = item[key].split(" ")[0]
+								}
+							})
+						}
+					});
+				})
+				exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
+			}).catch((err) => {
+				this.loading = false
+				this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+			})
+		},
+
+
+		toggleAdvanced() {
+			this.advanced = !this.advanced
+			this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+		},
+		onChangecreatedTime(date, dateString) {
+			this.queryParam.createdTime = dateString
+		},
+		onChangeupdatedTime(date, dateString) {
+			this.queryParam.updatedTime = dateString
+		},
+		handleOk() {
+			this.$refs.table.refresh()
+		},
+		onSelectChange(selectedRowKeys, selectedRows) {
+			this.selectedRowKeys = selectedRowKeys
+			this.selectedRows = selectedRows
+			this.$emit('ok', selectedRows)
+		}
+	}
+}
+</script>
+<style lang="less">
+.table-operator {
+	margin-bottom: 18px;
+}
+
+button {
+	margin-right: 8px;
+}</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/addForm.vue
deleted file mode 100644
index eba364c..0000000
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/addForm.vue
+++ /dev/null
@@ -1,260 +0,0 @@
-<template>
-  <a-modal
-    title="鏂板鐗╂枡淇℃伅"
-    :width="900"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleSubmit"
-    @cancel="handleCancel"
-  >
-    <a-spin :spinning="confirmLoading">
-      <a-form :form="form" :labelCol="labelCol" :wrapperCol="wrapperCol">
-        <a-row>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡缂栧彿" has-feedback>
-              <a-input
-                placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�"
-                v-decorator="['materialNo', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鍚嶇О" has-feedback>
-              <a-input
-                placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
-                v-decorator="['materialName', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡绫诲埆">
-              <a-select
-                style="width: 100%"
-                placeholder="璇烽�夋嫨鐗╂枡绫诲埆"
-                v-decorator="['materialType', { rules: [{ required: true, message: '璇烽�夋嫨鐗╂枡绫诲埆锛�' }] }]"
-              >
-                <a-select-option v-for="(item, index) in materialTypeData" :key="index" :value="item.code">{{
-                  item.name
-                }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡灏哄" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏昂瀵�" v-decorator="['materialSpec']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡瀵嗗害" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏瘑搴�" v-decorator="['materialDensity']" />
-            </a-form-item>
-          </a-col>
-
-          <!-- <a-form-item label="搴撳尯鍙傛暟"  has-feedback>
-          <a-select mode="multiple" style="width: 100%" placeholder="璇烽�夋嫨搴撳尯鍙傛暟" v-decorator="['areas']">
-            <a-select-option v-for="(item,index) in areaNameParameterData" :key="index" :value="item.areaId">{{ item.areaName }}</a-select-option>
-          </a-select>
-        </a-form-item>
-        <a-form-item label="宸ヤ綔鍖哄弬鏁�"  has-feedback>
-          <a-select mode="multiple" style="width: 100%" placeholder="璇烽�夋嫨宸ヤ綔鍖哄弬鏁�" v-decorator="['stations']">
-            <a-select-option v-for="(item,index) in stationNameParameterData" :key="index" :value="item.stationId">{{ item.stationName }}</a-select-option>
-          </a-select>
-        </a-form-item> -->
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鎵规" has-feedback>
-              <a-input
-                placeholder="璇疯緭鍏ョ墿鏂欐壒娆�"
-                v-decorator="['materialBatch', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欐壒娆★紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡妫�楠�" has-feedback>
-              <a-select
-                style="width: 100%"
-                placeholder="璇烽�夋嫨鐗╂枡妫�楠�"
-                v-decorator="['inspectionMethod', { rules: [{ required: true, message: '璇烽�夋嫨鐗╂枡妫�楠岋紒' }] }]"
-              >
-                <a-select-option v-for="(item, index) in inspectionMethodData" :key="index" :value="item.code">{{
-                  item.name
-                }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鍗曚綅" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏崟浣�" v-decorator="['materialUnit']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="瀹夊叏瀛橀噺" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ュ畨鍏ㄥ瓨閲�" v-decorator="['safeqty']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�澶у瓨閲�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶澶у瓨閲�" v-decorator="['maxImumqty']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�灏忓簱榫�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minstorageAge']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�澶у簱榫�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxstorageAge']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鎻忚堪" has-feedback>
-              <a-textarea :rows="4" placeholder="璇疯緭鍏ユ弿杩�" v-decorator="['description']"></a-textarea>
-            </a-form-item>
-          </a-col>
-
-          <!-- <a-form-item label="搴撳尯Ids"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ簱鍖篒ds" v-decorator="['areaIds']" />
-        </a-form-item> -->
-          <!-- <a-form-item label="搴撳尯鍙傛暟"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ簱鍖哄弬鏁�" v-decorator="['areaNameParameter']" />
-        </a-form-item> -->
-          <!-- <a-form-item label="宸ヤ綔鍖篒ds"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ伐浣滃尯Ids" v-decorator="['stationIds']" />
-        </a-form-item> -->
-          <!-- <a-form-item label="宸ヤ綔鍖哄弬鏁�"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ伐浣滃尯鍙傛暟" v-decorator="['stationNameParameter']" />
-        </a-form-item> -->
-          <!-- <a-form-item label="宸ユ"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ュ伐娈�" v-decorator="['lesWorkshopSection']" />
-        </a-form-item> -->
-
-          <!-- <a-form-item label="绛炬牳鐘舵��"  has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ鏍哥姸鎬�" v-decorator="['issueState']" />
-        </a-form-item> -->
-
-          <!-- <a-form-item label="鐔熷寲鏃堕棿"  has-feedback>
-          <a-input-number placeholder="璇疯緭鍏ョ啛鍖栨椂闂�" style="width: 100%" v-decorator="['maturationTime']" />
-        </a-form-item> -->
-          <!-- <a-form-item label="鏄惁闇�瑕佺啛鍖�" >
-          <a-switch v-decorator="['isMaturation', { valuePropName: 'checked' }]" />
-        </a-form-item> -->
-        </a-row>
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-import { WmsMaterialAdd, GetAreas, GetStations } from '@/api/modular/main/WmsMaterialManage'
-export default {
-  data() {
-    return {
-      labelCol: {
-        // xs: { span: 24 },
-        // sm: { span: 5 }
-        span: 8
-      },
-      wrapperCol: {
-        // xs: { span: 24 },
-        // sm: { span: 15 }
-        span: 13
-      },
-      inspectionMethodData: [],
-      materialTypeData: [],
-      areaNameParameterData: [],
-      stationNameParameterData: [],
-      visible: false,
-      confirmLoading: false,
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    // 鍒濆鍖栨柟娉�
-    add(record) {
-      this.visible = true
-      this.$nextTick(() => {
-        this.getSelects()
-      })
-      const materialTypeOption = this.$options
-      this.materialTypeData = materialTypeOption.filters['dictData']('material_type')
-      const inspectionMethodOption = this.$options
-      this.inspectionMethodData = inspectionMethodOption.filters['dictData']('material_inspection')
-    },
-    getSelects() {
-      if (this.areaNameParameterData.length <= 0 || this.stationNameParameterData.length <= 0) {
-        this.confirmLoading = true
-        Promise.all([GetAreas(), GetStations()])
-          .then(response => {
-            this.areaNameParameterData = response[0].data || []
-            this.stationNameParameterData = response[1].data || []
-            this.confirmLoading = false
-          })
-          .catch(() => {
-            this.confirmLoading = false
-          })
-      }
-    },
-    /**
-     * 鎻愪氦琛ㄥ崟
-     */
-    handleSubmit() {
-      const {
-        form: { validateFields }
-      } = this
-      this.confirmLoading = true
-      validateFields((errors, values) => {
-        if (!errors) {
-          if (this.$getObjectType(values.areas) === 'array') {
-            values.areaIds = values.areas.join(',')
-            values.areaNameParameterArr = values.areas.map(val => {
-              return this.parseSelectName(val, 'areaId', 'areaName', 'areaNameParameterData')
-            })
-            values.areaNameParameter = values.areaNameParameterArr.join(',')
-          }
-          if (this.$getObjectType(values.stations) === 'array') {
-            values.stationIds = values.stations.join(',')
-            values.stationNameParameterArr = values.stations.map(val => {
-              return this.parseSelectName(val, 'stationId', 'stationName', 'stationNameParameterData')
-            })
-            values.stationNameParameter = values.stationNameParameterArr.join(',')
-          }
-          WmsMaterialAdd(values)
-            .then(res => {
-              if (res.success) {
-                this.$message.success('鏂板鎴愬姛')
-                this.confirmLoading = false
-                this.$emit('ok', values)
-                this.handleCancel()
-              } else {
-                this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message))
-              }
-            })
-            .finally(res => {
-              this.confirmLoading = false
-            })
-        } else {
-          this.confirmLoading = false
-        }
-      })
-    },
-    parseSelectName(val, field, nfield, pfield) {
-      let res = val
-      for (let i = 0; i < this[pfield].length; i++) {
-        if (val === this[pfield][i][field]) {
-          res = this[pfield][i][nfield]
-          break
-        }
-      }
-      return res
-    },
-    handleCancel() {
-      this.form.resetFields()
-      this.visible = false
-    }
-  }
-}
-</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/editForm.vue
deleted file mode 100644
index 01953b1..0000000
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/editForm.vue
+++ /dev/null
@@ -1,263 +0,0 @@
-<template>
-  <a-modal
-    title="缂栬緫鐗╂枡淇℃伅"
-    :width="900"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleSubmit"
-    @cancel="handleCancel">
-    <a-spin :spinning="confirmLoading">
-      <a-form :form="form" :labelCol="labelCol" :wrapperCol="wrapperCol">
-
-        <a-row>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡缂栧彿" has-feedback>
-              <a-input
-                placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�"
-               disabled v-decorator="['materialNo', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鍚嶇О" has-feedback>
-              <a-input
-                placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
-                v-decorator="['materialName', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡绫诲埆">
-              <a-select
-                style="width: 100%"
-                placeholder="璇烽�夋嫨鐗╂枡绫诲埆"
-                v-decorator="['materialType', { rules: [{ required: true, message: '璇烽�夋嫨鐗╂枡绫诲埆锛�' }] }]"
-              >
-                <a-select-option v-for="(item, index) in materialTypeData" :key="index" :value="item.code">{{
-                  item.name
-                }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡灏哄" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏昂瀵�" v-decorator="['materialSpec']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡瀵嗗害" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏瘑搴�" v-decorator="['materialDensity']" />
-            </a-form-item>
-          </a-col>
-
-          <!-- <a-form-item label="搴撳尯鍙傛暟"  has-feedback>
-          <a-select mode="multiple" style="width: 100%" placeholder="璇烽�夋嫨搴撳尯鍙傛暟" v-decorator="['areas']">
-            <a-select-option v-for="(item,index) in areaNameParameterData" :key="index" :value="item.areaId">{{ item.areaName }}</a-select-option>
-          </a-select>
-        </a-form-item>
-        <a-form-item label="宸ヤ綔鍖哄弬鏁�"  has-feedback>
-          <a-select mode="multiple" style="width: 100%" placeholder="璇烽�夋嫨宸ヤ綔鍖哄弬鏁�" v-decorator="['stations']">
-            <a-select-option v-for="(item,index) in stationNameParameterData" :key="index" :value="item.stationId">{{ item.stationName }}</a-select-option>
-          </a-select>
-        </a-form-item> -->
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鎵规" has-feedback>
-              <a-input
-              disabled  placeholder="璇疯緭鍏ョ墿鏂欐壒娆�"
-                v-decorator="['materialBatch', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欐壒娆★紒' }] }]"
-              />
-            </a-form-item>
-          </a-col>
-
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡妫�楠�" has-feedback>
-              <a-select
-                style="width: 100%"
-                placeholder="璇烽�夋嫨鐗╂枡妫�楠�"
-                v-decorator="['inspectionMethod', { rules: [{ required: true, message: '璇烽�夋嫨鐗╂枡妫�楠岋紒' }] }]"
-              >
-                <a-select-option v-for="(item, index) in inspectionMethodData" :key="index" :value="item.code">{{
-                  item.name
-                }}</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鐗╂枡鍗曚綅" has-feedback>
-              <a-input placeholder="璇疯緭鍏ョ墿鏂欏崟浣�" v-decorator="['materialUnit']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="瀹夊叏瀛橀噺" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ュ畨鍏ㄥ瓨閲�" v-decorator="['safeqty']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�澶у瓨閲�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶澶у瓨閲�" v-decorator="['maxImumqty']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�灏忓簱榫�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minstorageAge']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鏈�澶у簱榫�" has-feedback>
-              <a-input type="number" min="1" placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxstorageAge']" />
-            </a-form-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-item label="鎻忚堪" has-feedback>
-              <a-textarea :rows="4" placeholder="璇疯緭鍏ユ弿杩�" v-decorator="['description']"></a-textarea>
-            </a-form-item>
-          </a-col>
-        </a-row>
-        <!-- <a-form-item label="鐔熷寲鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input-number placeholder="璇疯緭鍏ョ啛鍖栨椂闂�" style="width: 100%" v-decorator="['maturationTime']" />
-        </a-form-item>
-        <a-form-item label="鏄惁闇�瑕佺啛鍖�" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <a-switch v-decorator="['isMaturation', { valuePropName: 'checked' }]" />
-        </a-form-item> -->
-        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-  import {
-    WmsMaterialEdit,GetAreas,GetStations
-  } from '@/api/modular/main/WmsMaterialManage'
-  export default {
-    data () {
-      return {
-	    Id: 0,
-      labelCol: {
-        // xs: { span: 24 },
-        // sm: { span: 5 }
-        span: 8
-      },
-      wrapperCol: {
-        // xs: { span: 24 },
-        // sm: { span: 15 }
-        span: 13
-      },
-        record: {},
-        inspectionMethodData: [],
-        materialTypeData: [],
-        areaNameParameterData: [],
-        stationNameParameterData: [],
-        visible: false,
-        confirmLoading: false,
-        form: this.$form.createForm(this)
-      }
-    },
-    methods: {
-      // 鍒濆鍖栨柟娉�
-      edit (record) {
-        this.visible = true;
-        this.Id = record.id;
-        this.$nextTick(() => {
-          this.getSelects()
-        });
-        //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
-        this.record = JSON.parse(JSON.stringify(record))
-        const materialTypeOption = this.$options
-        this.materialTypeData = materialTypeOption.filters['dictData']('material_type')
-        const inspectionMethodOption = this.$options
-        this.inspectionMethodData = inspectionMethodOption.filters['dictData']('material_inspection')
-
-        this.$nextTick(() => {
-          let {areas, stations, ...rest } = record
-          this.form.setFieldsValue(
-            {
-              ...rest,
-              // id: record.id,
-              // materialNo: record.materialNo,
-              // materialName: record.materialName,
-              // materialType: record.materialType,
-              // materialSpec: record.materialSpec,
-              // materialDensity: record.materialDensity,
-              // maxImumqty: record.maxImumqty,
-              areas: record.areaIds?record.areaIds.split(','):[],
-              stations: record.stationIds?record.stationIds.split(','):[],
-              // maturationTime: record.maturationTime,
-              // isMaturation: record.isMaturation
-            }
-          )
-        })
-      },
-      getSelects(){
-        if (this.areaNameParameterData.length<=0 || this.stationNameParameterData.length<=0) {
-          this.confirmLoading = true
-          Promise.all([
-            GetAreas(),
-            GetStations()
-          ]).then(response=>{
-            this.areaNameParameterData = response[0].data || []
-            this.stationNameParameterData = response[1].data || []
-            this.confirmLoading = false
-          }).catch(()=>{
-            this.confirmLoading = false
-          })
-        }
-      },
-      handleSubmit () {
-        const { form: { validateFields } } = this
-        this.confirmLoading = true
-        validateFields((errors, values) => {
-          if (!errors) {
-            let params = {...this.record,...values}
-            if (this.$getObjectType(values.areas)==='array') {
-              params.areaIds = values.areas.join(',')
-              params.areaNameParameterArr = values.areas.map((val)=>{
-                return this.parseSelectName(val,'areaId','areaName','areaNameParameterData')
-              })
-              params.areaNameParameter = params.areaNameParameterArr.join(',')
-            }
-            if (this.$getObjectType(values.stations)==='array'){
-               params.stationIds = values.stations.join(',')
-               params.stationNameParameterArr = values.stations.map((val)=>{
-                 return this.parseSelectName(val,'stationId','stationName','stationNameParameterData')
-               })
-               params.stationNameParameter = params.stationNameParameterArr.join(',')
-            }
-            
-            WmsMaterialEdit(params).then((res) => {
-              if (res.success) {
-                this.$message.success('缂栬緫鎴愬姛')
-                this.confirmLoading = false
-                this.$emit('ok', params)
-                this.handleCancel()
-              } else {
-                this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
-              }
-            }).finally((res) => {
-              this.confirmLoading = false
-            })
-          }else{
-            this.confirmLoading = false
-          } 
-        });
-      },
-      parseSelectName(val,field,nfield,pfield){
-        let res = val;
-        for (let i=0;i<this[pfield].length;i++) {
-          if (val===this[pfield][i][field]) {
-            res = this[pfield][i][nfield]
-            break
-          }
-        }
-        return res
-      },
-      handleCancel () {
-        this.form.resetFields()
-        this.visible = false
-      }
-    }
-  }
-</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/index.vue
deleted file mode 100644
index b67f90d..0000000
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsMaterial/index.vue
+++ /dev/null
@@ -1,349 +0,0 @@
-锘�<template>
-  <div>
-    <a-card :bordered="false" :bodyStyle="tstyle">
-      <div class="table-page-search-wrapper" v-if="hasPerm('WmsMaterial:page')">
-        <a-form layout="inline">
-          <a-row :gutter="48">
-            <a-col :md="8" :sm="24">
-              <a-form-item label="鐗╂枡鍚嶇О">
-                <a-input v-model="queryParam.materialName" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="鐗╂枡绫诲埆">
-                <a-select :allowClear="true" style="width: 100%" v-model="queryParam.materialType" placeholder="璇烽�夋嫨鐗╂枡绫诲埆">
-                  <a-select-option v-for="(item,index) in materialTypeData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <template v-if="advanced">
-              <a-col :md="8" :sm="24">
-                <a-form-item label="鐗╂枡灏哄">
-                  <a-input v-model="queryParam.materialSpec" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏昂瀵�"/>
-                </a-form-item>
-              </a-col>
-              <!-- <a-col :md="8" :sm="24">
-                <a-form-item label="鐗╂枡瀵嗗害">
-                  <a-input v-model="queryParam.materialDensity" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏瘑搴�"/>
-                </a-form-item>
-              </a-col>             -->
-            </template>
-            <a-col :md="8" :sm="24" >
-              <span class="table-page-search-submitButtons">
-                <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button>
-                <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button>
-                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }}
-                  <a-icon :type="advanced ? 'up' : 'down'"/>
-                </a>
-              </span>
-            </a-col>
-          </a-row>
-        </a-form>
-      </div>
-    </a-card>
-    <a-card :bordered="false">
-      <a-spin :spinning="loading">
-        <!--  :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" -->
-      <s-table
-        ref="table"
-        :columns="columns"
-        :data="loadData"
-        :alert="true"
-        :scroll="{x: true}"
-        :rowKey="(record) => record.id"
-        >
-        <template class="table-operator" slot="operator" v-if="hasPerm('WmsMaterial:add')" >
-          <a-button type="primary" v-if="hasPerm('WmsMaterial:add')" icon="plus" @click="$refs.addForm.add()">鏂板</a-button>
-        </template>
-        <template class="table-operator" slot="operator"  >
-          
-          <!-- <span>
-            <a-popconfirm v-if="hasPerm('WmsMaterial:tongbu')" placement="topRight" title="纭鍚屾锛�" @confirm="() => handleSubmit()">
-            <a class="tongbubut">鍚屾Desk鏁版嵁</a>
-          </a-popconfirm>
-          </span> -->
-          <!-- <a-button class="tongbubut" @click="handleSubmit">鍚屾Desk鏁版嵁</a-button> -->
-        </template>
-
-        
-        <span slot="inspectionMethodscopedSlots" slot-scope="text">
-          {{ 'material_inspection' | dictType(text) }}
-        </span>
-
-
-        <span slot="materialTypescopedSlots" slot-scope="text">
-          {{ 'material_type' | dictType(text) }}
-        </span>
-
-
-        <span slot="action" slot-scope="text, record">
-          <a v-if="hasPerm('WmsMaterial:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
-          <a-divider type="vertical" v-if="hasPerm('WmsMaterial:edit') & hasPerm('WmsMaterial:delete')"/>
-          <a-popconfirm v-if="hasPerm('WmsMaterial:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsMaterialDelete(record)">
-            <a>鍒犻櫎</a>
-          </a-popconfirm>
-        </span>
-      </s-table>
-    </a-spin>
-      <add-form ref="addForm" @ok="handleOk" />
-      <edit-form ref="editForm" @ok="handleOk" />
-    </a-card>
-  </div>
-</template>
-<script>
-  import { STable } from '@/components'
-  import { WmsMaterialPage, WmsMaterialDelete,Getdeskdata } from '@/api/modular/main/WmsMaterialManage'
-  import addForm from './addForm.vue'
-  import editForm from './editForm.vue'
-  export default {
-    components: {
-      STable,
-      addForm,
-      editForm
-    },
-    data () {
-      return {
-        loading:false,
-        advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
-        queryParam: {},
-        columns: [
-        {
-            title: '鐗╂枡缂栧彿',
-            align: 'center',
-sorter: true,
-            dataIndex: 'materialNo',
-            width:"100px",
-            ellipsis:true
-          },
-          {
-            title: '鐗╂枡鍚嶇О',
-            align: 'center',
-            dataIndex: 'materialName',
-            width:"100px",
-            ellipsis:true
-          },
-          {
-            title: '鐗╂枡鎵规',
-            align: 'center',
-sorter: true,
-            dataIndex: 'materialBatch',
-            width:"100px",
-            ellipsis:true
-          },
-          {
-            title: '鐗╂枡绫诲埆',
-            align: 'center',
-            dataIndex: 'materialType',
-            scopedSlots: { customRender: 'materialTypescopedSlots' },
-            width:"100px"
-          },
-          {
-            title: '鐗╂枡灏哄',
-            align: 'center',
-            dataIndex: 'materialSpec',
-            width:"100px"
-          },
-          {
-            title: '鐗╂枡瀵嗗害',
-            align: 'center',
-            dataIndex: 'materialDensity',
-            width:"100px"
-          },
-          // {
-          //   title: '搴撳尯鍙傛暟',
-          //   align: 'center',
-          //   dataIndex: 'areaNameParameter',
-          //   width:"100px"
-          //   // scopedSlots: { customRender: 'areaNameParameterscopedSlots' }
-          // },
-          // {
-          //   title: '宸ヤ綔鍖哄弬鏁�',
-          //   align: 'center',
-          //   dataIndex: 'stationNameParameter',
-          //   width:"120px"
-          //   // scopedSlots: { customRender: 'stationNameParameterscopedSlots' }
-          // },  
-          {
-            title: '鐗╂枡妫�楠�',
-            align: 'center',
-            dataIndex: 'inspectionMethod',
-            scopedSlots: { customRender: 'inspectionMethodscopedSlots' },
-            width:"100px"
-          },
-          {
-            title: '鐗╂枡鍗曚綅',
-            align: 'center',
-sorter: true,
-            dataIndex: 'materialUnit',
-            width:"100px"
-          },
-//           {
-//             title: '搴撳尯Ids',
-//             align: 'center',
-// sorter: true,
-//             dataIndex: 'areaIds'
-//           },
-//           {
-//             title: '宸ヤ綔鍖篒ds',
-//             align: 'center',
-// sorter: true,
-//             dataIndex: 'stationIds'
-//           },
-//           {
-//             title: '宸ユ',
-//             align: 'center',
-// sorter: true,
-//             dataIndex: 'lesWorkshopSection',
-//             width:"100px"
-//           },
-          {
-            title: '鎻忚堪',
-            align: 'center',
-sorter: true,
-            dataIndex: 'description',
-            width:"100px"
-          },
-          {
-            title: '瀹夊叏瀛橀噺',
-            align: 'center',
-sorter: true,
-            dataIndex: 'safeqty',
-            width:"100px"
-          },
-          {
-            title: '鏈�澶у瓨閲�',
-            align: 'center',
-sorter: true,
-            dataIndex: 'maxImumqty',
-            width:"100px"
-          },
-          {
-            title: '鏈�灏忓簱榫�',
-            align: 'center',
-sorter: true,
-            dataIndex: 'minstorageAge',
-            width:"100px"
-          },
-          {
-            title: '鏈�澶у簱榫�',
-            align: 'center',
-sorter: true,
-            dataIndex: 'maxstorageAge',
-            width:"100px"
-          },
-//           {
-//             title: '绛炬牳鐘舵��',
-//             align: 'center',
-// sorter: true,
-//             dataIndex: 'issueState'
-//           }
-
-          // {
-          //   title: '鐔熷寲鏃堕棿',
-          //   align: 'center',
-          //   dataIndex: 'maturationTime'
-          // },
-          // {
-          //   title: '鏄惁闇�瑕佺啛鍖�',
-          //   align: 'center',
-          //   customRender: (value) => (value ? <a-tag color="#87d068">鏄�</a-tag> : <a-tag color="gray">鍚�</a-tag>),
-          //   dataIndex: 'isMaturation'
-          // }
-        ],
-        tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
-        // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
-        loadData: parameter => {
-          return WmsMaterialPage(Object.assign(parameter, this.queryParam)).then((res) => {
-            res.data.rows = res.data.rows.map((_obj)=>{
-            _obj.materialType= _obj.materialType.toString()
-				    return _obj;
-			    })
-            return res.data
-          })
-        },
-        inspectionMethodData: [],
-        materialTypeData: [],
-        selectedRowKeys: [],
-        selectedRows: []
-      }
-    },
-    created () {
-      if (this.hasPerm('WmsMaterial:edit') || this.hasPerm('WmsMaterial:delete')) {
-        this.columns.push({
-          title: '鎿嶄綔',
-          width: '150px',
-          dataIndex: 'action',
-          fixed: 'right',
-          scopedSlots: { customRender: 'action' }
-        })
-      }
-      const materialTypeOption = this.$options
-      this.materialTypeData = materialTypeOption.filters['dictData']('material_type')
-      const inspectionMethodOption = this.$options
-      this.inspectionMethodData = inspectionMethodOption.filters['dictData']('material_inspection')
-    },
-    methods: {
-      /**
-       * 鏌ヨ鍙傛暟缁勮
-       */
-      switchingDate () {
-        const obj = JSON.parse(JSON.stringify(this.queryParam))
-        return obj
-      },
-      WmsMaterialDelete (record) {
-        WmsMaterialDelete(record).then((res) => {
-          if (res.success) {
-            this.$message.success('鍒犻櫎鎴愬姛')
-            this.$refs.table.refresh()
-          } else {
-            this.$message.error('鍒犻櫎澶辫触') // + res.message
-          }
-        })
-      },
-      handleSubmit() {
-        this.loading = true;
-        Getdeskdata().then((res) => {
-          console.log('res',res)
-          if (res.success) {
-            this.$message.success('鍚屾鎴愬姛')
-            this.$refs.table.refresh()
-            this.loading = false;
-          } else {
-            this.$message.error('鍚屾澶辫触锛�' + res.message)
-            this.loading = false;
-          }
-        }).catch((err) => {
-          this.$message.error('鍚屾閿欒锛�' + err.message)
-          this.loading = false;
-        })
-    },
-    toggleAdvanced () {
-      this.advanced = !this.advanced
-    },
-    handleOk () {
-      this.$refs.table.refresh()
-    },
-    onSelectChange (selectedRowKeys, selectedRows) {
-      this.selectedRowKeys = selectedRowKeys
-      this.selectedRows = selectedRows
-    }
-    }
-  }
-</script>
-<style lang="less">
-  .table-operator {
-    margin-bottom: 18px;    
-  }
-  .tongbubut{
-    border-radius: 2px;
-    padding: 6px 10px 8px 10px;
-    background-color: dodgerblue;color: #fff;
-  }
-  .tongbubut:hover{
-    opacity: 0.8;
-    background-color: dodgerblue;color: #fff;
-  }
-  button {
-    margin-right: 8px;
-  }
-</style>
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs
index dab796a..e969b70 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs
@@ -127,32 +127,38 @@
         /// <summary>
         /// 瀹瑰櫒绫诲瀷ID
         /// </summary>
-        public virtual long? ContainerTypeId { get; set; }
+        [Required(ErrorMessage = "瀹瑰櫒绫诲瀷ID涓嶈兘涓虹┖")]
+        public virtual long ContainerTypeId { get; set; }
         
         /// <summary>
         /// 瀹瑰櫒绫诲瀷鍚嶇О
         /// </summary>
+        [Required(ErrorMessage = "瀹瑰櫒绫诲瀷鍚嶇О涓嶈兘涓虹┖")]
         public virtual string ContainerTypeName { get; set; }
         
         /// <summary>
         /// 鐗╂枡绫诲瀷ID
         /// </summary>
-        public virtual long? MaterialTypeId { get; set; }
+        [Required(ErrorMessage = "鐗╂枡绫诲瀷ID涓嶈兘涓虹┖")]
+        public virtual long MaterialTypeId { get; set; }
         
         /// <summary>
         /// 鐗╂枡绫诲瀷缂栧彿
         /// </summary>
+        [Required(ErrorMessage = "鐗╂枡绫诲瀷缂栧彿涓嶈兘涓虹┖")]
         public virtual string MaterialTypeCode { get; set; }
         
         /// <summary>
         /// 鐗╂枡绫诲瀷鍚嶇О
         /// </summary>
+        [Required(ErrorMessage = "鐗╂枡绫诲瀷鍚嶇О涓嶈兘涓虹┖")]
         public virtual string MaterialTypeName { get; set; }
         
         /// <summary>
         /// 鐗╂枡瀹瑰櫒瀹归噺
         /// </summary>
-        public virtual decimal? BoxQty { get; set; }
+        [Required(ErrorMessage = "鐗╂枡瀹瑰櫒瀹归噺涓嶈兘涓虹┖")]
+        public virtual decimal BoxQty { get; set; }
         
     }
 
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs
index bcea1eb..e46ff7a 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs
@@ -11,7 +11,7 @@
         /// <summary>
         /// 瀹瑰櫒绫诲瀷ID
         /// </summary>
-        public long? ContainerTypeId { get; set; }
+        public long ContainerTypeId { get; set; }
         
         /// <summary>
         /// 瀹瑰櫒绫诲瀷鍚嶇О
@@ -21,7 +21,7 @@
         /// <summary>
         /// 鐗╂枡绫诲瀷ID
         /// </summary>
-        public long? MaterialTypeId { get; set; }
+        public long MaterialTypeId { get; set; }
         
         /// <summary>
         /// 鐗╂枡绫诲瀷缂栧彿
@@ -36,7 +36,7 @@
         /// <summary>
         /// 鐗╂枡瀹瑰櫒瀹归噺
         /// </summary>
-        public decimal? BoxQty { get; set; }
+        public decimal BoxQty { get; set; }
         
         /// <summary>
         /// Id涓婚敭
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs
index c2759c1..75de536 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs
@@ -253,6 +253,12 @@
                           
                           
                           #region 楠岃瘉
+                          
+                          if (string.IsNullOrEmpty(_ContainerTypeId))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾瀹瑰櫒绫诲瀷ID]{_ContainerTypeId}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_ContainerTypeId))
                           {
                               if (!long.TryParse(_ContainerTypeId, out long outContainerTypeId)&&!string.IsNullOrEmpty(_ContainerTypeId))
@@ -269,10 +275,22 @@
                               }
                           
                           }
+                          
+                          if (string.IsNullOrEmpty(_ContainerTypeName))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾瀹瑰櫒绫诲瀷鍚嶇О]{_ContainerTypeName}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_ContainerTypeName))
                           {
                                 addItem.ContainerTypeName = (string)_ContainerTypeName;
                            }
+                          
+                          if (string.IsNullOrEmpty(_MaterialTypeId))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷ID]{_MaterialTypeId}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_MaterialTypeId))
                           {
                               if (!long.TryParse(_MaterialTypeId, out long outMaterialTypeId)&&!string.IsNullOrEmpty(_MaterialTypeId))
@@ -289,14 +307,32 @@
                               }
                           
                           }
+                          
+                          if (string.IsNullOrEmpty(_MaterialTypeCode))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷缂栧彿]{_MaterialTypeCode}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_MaterialTypeCode))
                           {
                                 addItem.MaterialTypeCode = (string)_MaterialTypeCode;
                            }
+                          
+                          if (string.IsNullOrEmpty(_MaterialTypeName))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷鍚嶇О]{_MaterialTypeName}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_MaterialTypeName))
                           {
                                 addItem.MaterialTypeName = (string)_MaterialTypeName;
                            }
+                          
+                          if (string.IsNullOrEmpty(_BoxQty))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡瀹瑰櫒瀹归噺]{_BoxQty}涓嶈兘涓虹┖锛�");
+                          }
+                          
                           if(!string.IsNullOrEmpty(_BoxQty))
                           {
                               if (!decimal.TryParse(_BoxQty, out decimal outBoxQty)&&!string.IsNullOrEmpty(_BoxQty))
@@ -369,13 +405,29 @@
            
 
            
+           bool isExist = false;
+           if (!isEdit)//鏂板
+           {
+                   //鏁版嵁鏄惁瀛樺湪閲嶅
+                   isExist = await _wmsContainerPackagingRep.AnyAsync(u =>
+                                   u.ContainerTypeId.Equals(input.ContainerTypeId)
+                   ,false);
+          }
+           else//缂栬緫 
+          {
 
           
                 
+                 //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅
+                  isExist = await _wmsContainerPackagingRep.AnyAsync(u => 
+                                    u.Id != input.Id
+                                    &&u.ContainerTypeId.Equals(input.ContainerTypeId)
+                    ,false);
+               }
                
         
 
-            //娌℃湁閰嶇疆鑱斿悎涓婚敭锛屼笉闇�瑕侀獙閲�
+            if (isExist) throw Oops.Oh(ErrorCode.E0001);
        }
         
         /// <summary>
@@ -386,10 +438,42 @@
         private async Task CheckExisitForImport(List<WmsContainerPackaging> inputs)
         { 
             //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�  
+                 if (inputs?.Count <= 0)
+                 {
+                     throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+                 }
+                 //鏁版嵁鏄惁閲嶅
+                 var existExcelItem = inputs.GroupBy(g => new {
+                                               g.ContainerTypeId
+                                               })
+                                               .Where(g => g.Count() > 1)
+                                               .Select(s => new {
+                                               s.Key.ContainerTypeId
+                                               }).FirstOrDefault();
+                 if (existExcelItem != null)
+                 {
+                   var wmsContainerPackaging = existExcelItem.Adapt<WmsContainerPackaging>();
+                   var item= existExcelItem.Adapt<WmsContainerPackaging>();
+                   throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,瀹瑰櫒绫诲瀷ID[{item.ContainerTypeId}]宸插瓨鍦�");
+                 }
                       
 
 
 
+    //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+                 var existDBItem = await _wmsContainerPackagingRep.DetachedEntities.FirstOrDefaultAsync(w=> 
+                                                                         inputs.Select(s=>""
+                                                                           +s.ContainerTypeId
+                                                                        )
+                                                                        .Contains(""
+                                                                         +w.ContainerTypeId
+                  ));
+                  if (existDBItem != null)
+                 {
+                   var wmsContainerPackaging = existExcelItem.Adapt<WmsContainerPackaging>();
+                   var item= existExcelItem.Adapt<WmsContainerPackaging>();
+                   throw Oops.Oh($"绯荤粺涓�,瀹瑰櫒绫诲瀷ID[{item.ContainerTypeId}]宸插瓨鍦�");
+                 }
         }
 
         #endregion
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx
index 37c540e..743ed8a 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx
Binary files differ

--
Gitblit v1.9.3