From 1d5806bb69891d4045438b12c15cd42cc937e5a2 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周三, 24 4月 2024 11:14:24 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/iWare_RawMaterialWarehouse

---
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerInput.cs      |  211 +++++
 iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsMaterialCustomerManage.js                                      |  114 ++
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/WmsMaterialCustomerService.cs        |  412 ++++++++++
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs  |   14 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs    |   26 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerPackaging.cs                                         |   83 ++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsContainerPackaging/addFormContainerPackaging.vue |    6 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/addForm.vue                                         |  103 ++
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Enum/Wms/WmsMaterialEnum.cs                                                     |    6 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsMaterialCustomerImport.xlsx                   |    0 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs                      |   27 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs                       |    2 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/IWmsMaterialCustomerService.cs       |   22 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerOutput.cs     |   72 +
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/excelForm.vue                                       |  181 ++++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/index.vue                                           |  523 +++++++++++++
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsMaterialCustomer.cs                                           |  104 +-
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/editForm.vue                                        |  123 +++
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue                                                 |   38 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue                       |  175 ++--
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs                        |   18 
 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue      |   22 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Map/WmsMaterialCustomerMapper.cs     |   18 
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs |    2 
 24 files changed, 2,118 insertions(+), 184 deletions(-)

diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsMaterialCustomerManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsMaterialCustomerManage.js
new file mode 100644
index 0000000..9a4af03
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsMaterialCustomerManage.js
@@ -0,0 +1,114 @@
+锘縤mport { axios } from '@/utils/request'
+
+/**
+ * 鏌ヨ鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerPage (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/page',
+    method: 'get',
+    params: parameter
+  })
+}
+
+/**
+ * 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鍒楄〃
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerList (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/list',
+    method: 'get',
+    params: parameter
+  })
+}
+
+/**
+ * 娣诲姞鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerAdd (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/add',
+    method: 'post',
+    data: parameter
+  })
+}
+
+/**
+ * 缂栬緫鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerEdit (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/edit',
+    method: 'post',
+    data: parameter
+  })
+}
+
+/**
+ * 鍒犻櫎鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerDelete (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/delete',
+    method: 'post',
+    data: parameter
+  })
+}
+
+
+/**
+ * 瀵煎嚭鐗╂枡瀹㈡埛鍏宠仈淇℃伅鐨凟xcel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerToExcel (parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/toExcel',
+    method: 'get',
+    params: parameter,
+    responseType: 'blob'
+  })
+}
+
+/**
+ * 瀵煎叆鐗╂枡瀹㈡埛鍏宠仈淇℃伅鐨凟xcel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerImportExcel (data, parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/importExcel',
+    method: 'post',
+    data: data,
+    params: parameter
+
+  })
+}
+
+
+/**
+ * 涓嬭浇鐗╂枡瀹㈡埛鍏宠仈淇℃伅鐨凟xcel瀵煎叆妯℃澘
+ *
+ * @author ly
+ */
+export function WmsMaterialCustomerDownloadExcelTemplate(parameter) {
+  return axios({
+    url: '/WmsMaterialCustomer/downloadExcelTemplate',
+    method: 'get',
+    params: parameter,
+    responseType: 'blob'
+  })
+}
+
+
+
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 0abf95b..7e52bb9 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
@@ -1,17 +1,11 @@
 <template>
-  <a-modal
-    title="鏂板鐗╂枡淇℃伅"
-    :width="900"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleSubmit"
-    @cancel="handleCancel"
-  >
+  <a-modal title="鏂板鐗╂枡淇℃伅" :width="900" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
+    @cancel="handleCancel">
     <a-spin :spinning="confirmLoading">
       <!-- tab @change="callback"-->
-      <a-tabs default-active-key="1" >
+      <a-tabs default-active-key="1">
         <a-tab-pane key="1" tab="鍩烘湰淇℃伅">
-         <add-form ref="addForm" @ok="handleOk" />
+          <add-form ref="addForm" @ok="handleOk" />
         </a-tab-pane>
         <a-tab-pane key="2" tab="鎺у埗灞炴��" force-render>
           <add-control-rule ref="WmsControlRule" @ok="handleOk" />
@@ -73,7 +67,7 @@
     }
   },
   methods: {
-    handleOk(){
+    handleOk() {
 
     },
     // 鍒濆鍖栨柟娉�
@@ -125,7 +119,27 @@
             })
             values.stationNameParameter = values.stationNameParameterArr.join(',')
           }
-          WmsMaterialAdd(values)
+          console.log(6666666666666)
+          console.log()
+          console.log(6666666666666 + '鎺у埗灞炴��')
+          console.log(this.$refs.WmsControlRule.selectedRows)
+          var ControlRuleld = this.$refs.WmsControlRule.selectedRows[0].id;
+
+          console.log(6666666666666 + '鏇夸唬鍝�')
+          console.log(this.$refs.addFormWmsSubstituteGood.list)
+
+          console.log(6666666666666 + '瀹㈡埛妗f闆嗗悎')
+          console.log(this.$refs.addFormBaseCustomer.list)
+
+          var param = {
+            value1: values,
+            ControlRuleld: ControlRuleld, //鎺у埗灞炴��
+            BaseCustomerList: this.$refs.addFormBaseCustomer.list, //瀹㈡埛妗f闆嗗悎
+            SubstituteGoodLis: this.$refs.addFormWmsSubstituteGood.list, //鏇夸唬鍝�
+            value5: {},
+            value6: {},
+          }
+          WmsMaterialAdd(param)
             .then(res => {
               if (res.success) {
                 this.$message.success('鏂板鎴愬姛')
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
index 74d7399..880175d 100644
--- 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
@@ -16,17 +16,17 @@
               }}</a-tag>
             </span>
 
-            <span slot="action" slot-scope="text, record">
+            <!-- <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>
+            </span> -->
           </a-table>
         </div>
       </div>
 
-      <p @click="visible = true">鏂板琛�</p>
+      <!-- <p @click="visible = true">鏂板琛�</p> -->
 
       <a-modal title="鍖呰鍏崇郴" :width="900" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
         @cancel="handleCancel">
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
index 23359a0..dd3f5fc 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addForm.vue
@@ -1,5 +1,5 @@
 锘�<template>
-  <a-modal
+ <a-modal
     title="鏂板鏇夸唬鍝佺鐞�"
     :width="900"
     :visible="visible"
@@ -7,97 +7,106 @@
     @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>
-        <a-form-item label="鐗╂枡缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" v-decorator="['materialCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒'}]}]" />
-        </a-form-item>
-        <a-form-item label="鐗╂枡鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-decorator="['materialName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒'}]}]" />
-        </a-form-item>
-        <a-form-item label="鏇夸唬鍝佺墿鏂欑紪鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿" v-decorator="['substituteMaterialCode', {rules: [{required: true, message: '璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿锛�'}]}]" />
-        </a-form-item>
-        <a-form-item label="鏇夸唬鍝佺墿鏂欏悕绉�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О" v-decorator="['substituteMaterialName', {rules: [{required: true, message: '璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О锛�'}]}]" />
-        </a-form-item>
-        <a-form-item label="鏇夸唬娆″簭" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
-          <a-input-number placeholder="璇疯緭鍏ユ浛浠f搴�" style="width: 100%" v-decorator="['substituteIndex', {rules: [{required: true, message: '璇疯緭鍏ユ浛浠f搴忥紒'}]}]" />
-        </a-form-item>
-        <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+
+    </a-spin>    <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>
+      <a-form-item label="鐗╂枡缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+        <a-input placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" v-decorator="['materialCode', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒' }] }]" />
+      </a-form-item>
+      <a-form-item label="鐗╂枡鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+        <a-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-decorator="['materialName', { rules: [{ required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒' }] }]" />
+      </a-form-item>
+      <a-form-item label="鏇夸唬鍝佺墿鏂欑紪鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+        <a-input placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿"
+          v-decorator="['substituteMaterialCode', { rules: [{ required: true, message: '璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿锛�' }] }]" />
+      </a-form-item>
+      <a-form-item label="鏇夸唬鍝佺墿鏂欏悕绉�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+        <a-input placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О"
+          v-decorator="['substituteMaterialName', { rules: [{ required: true, message: '璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О锛�' }] }]" />
+      </a-form-item>
+      <a-form-item label="鏇夸唬娆″簭" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+        <a-input-number placeholder="璇疯緭鍏ユ浛浠f搴�" style="width: 100%"
+          v-decorator="['substituteIndex', { rules: [{ required: true, message: '璇疯緭鍏ユ浛浠f搴忥紒' }] }]" />
+      </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>
+        </a-form-item> -->
+    </a-form>
+  </a-modal> 
 </template>
 
 <script>
-  import moment from 'moment'
-  import {
+import moment from 'moment'
+import {
   WmsSubstituteGoodAdd
-  } from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage'
-  export default {
-  data () {
-  return {
-  labelCol: {
-  xs: { span: 24 },
-  sm: { span: 5 }
+} from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage'
+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)
+    }
   },
-  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(() => {
+  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])
-              }
+      });
+    },
+    /**
+     * 鎻愪氦琛ㄥ崟
+     */
+    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])
             }
-            WmsSubstituteGoodAdd(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
-      }
+              this.confirmLoading = false
+              this.$emit('ok', values)
+              this.handleCancel()
+
+
+          // WmsSubstituteGoodAdd(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/WmsSubstituteGood/addFormWmsSubstituteGood.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/WmsSubstituteGood/addFormWmsSubstituteGood.vue
index a7029c1..8f87c49 100644
--- 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
@@ -25,20 +25,17 @@
         </div>
       </div>
 
-      <p @click="visible = true">鏂板琛�</p>
+      <p @click="$refs.showList.add()">鏂板琛�</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>
+      <show-list ref="showList" @ok="handleSubmit" />
+     
     </div>
   </div>
 </template>
 
 <script>
 import { WmsOrderRukuDetail } from '@/api/modular/main/WmsOrderManage'
-import showList from './index.vue'
+import showList from './addForm.vue'
 
 export default {
   name: 'wmsOrderRukuManagementDetailDrawer',
@@ -258,9 +255,11 @@
       this.list = []
     },
     handleOk(param) {
-      this.list = param
+
     },
-    handleSubmit() {
+    handleSubmit(item) {
+      alert(1)
+      this.list.push(item) 
       this.visible = false
     },
     handleCancel() {
@@ -268,6 +267,11 @@
     },
     itemDelete(record, index) {
       this.list.splice(index, 1)
+    },
+    addLine(){
+      this.list.push({
+        
+      })
     }
   }
 }
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/addForm.vue
new file mode 100644
index 0000000..01be2bf
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/addForm.vue
@@ -0,0 +1,103 @@
+锘�<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="['materialId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂橧D锛�'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" v-decorator="['materialCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-decorator="['materialName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴稩D" v-decorator="['custId']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴风紪鍙�" v-decorator="['custCode']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛鑻辨枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴疯嫳鏂囧悕绉�" v-decorator="['custEnglishName']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛涓枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴蜂腑鏂囧悕绉�" v-decorator="['custChinaName']" />
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import moment from 'moment'
+  import {
+  WmsMaterialCustomerAdd
+  } from '@/api/modular/main/WmsBase/WmsMaterialCustomerManage'
+  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])
+              }
+            }
+            WmsMaterialCustomerAdd(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/WmsMaterialCustomer/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/editForm.vue
new file mode 100644
index 0000000..aeb5542
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/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="鐗╂枡ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂橧D" v-decorator="['materialId', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂橧D锛�'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" v-decorator="['materialCode', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欑紪鍙凤紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="鐗╂枡鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" v-decorator="['materialName', {rules: [{required: true, message: '璇疯緭鍏ョ墿鏂欏悕绉帮紒'}]}]" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴稩D" v-decorator="['custId']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴风紪鍙�" v-decorator="['custCode']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛鑻辨枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴疯嫳鏂囧悕绉�" v-decorator="['custEnglishName']" />
+        </a-form-item>
+        <a-form-item label="瀹㈡埛涓枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+          <a-input placeholder="璇疯緭鍏ュ鎴蜂腑鏂囧悕绉�" v-decorator="['custChinaName']" />
+        </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 {
+  WmsMaterialCustomerEdit
+  } from '@/api/modular/main/WmsBase/WmsMaterialCustomerManage'
+  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,
+              materialId: record.materialId,
+              materialCode: record.materialCode,
+              materialName: record.materialName,
+              custId: record.custId,
+              custCode: record.custCode,
+              custEnglishName: record.custEnglishName,
+              custChinaName: record.custChinaName
+            }
+          )
+        })
+      },
+      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]
+              }
+            }
+            WmsMaterialCustomerEdit(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/WmsMaterialCustomer/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/excelForm.vue
new file mode 100644
index 0000000..5952ae7
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/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="wmsMaterialCustomerDownloadExcelTemplate" 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 { WmsMaterialCustomerImportExcel, WmsMaterialCustomerDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsMaterialCustomerManage'
+  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("wmsMaterialCustomerDownloadExcelTemplate")
+  window.downloadFile = this.wmsMaterialCustomerDownloadExcelTemplate;
+  this.getTable();
+  },
+  showDemand() {
+  this.detailed = !this.detailed;
+  },
+  customRequest(document) {
+  this.uploadFile = document
+  },
+  getTable() {
+  sysExcelTemplateGetColumnList({className: "WmsMaterialCustomer"}).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)
+  WmsMaterialCustomerImportExcel(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
+  },
+  wmsMaterialCustomerDownloadExcelTemplate() {
+  WmsMaterialCustomerDownloadExcelTemplate({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/WmsMaterialCustomer/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/index.vue
new file mode 100644
index 0000000..9efe979
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterialCustomer/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('WmsMaterialCustomer: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.materialId" allow-clear placeholder="璇疯緭鍏ョ墿鏂橧D"/>
+              </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="瀹㈡埛ID">
+                  <a-input v-model="queryParam.custId" allow-clear placeholder="璇疯緭鍏ュ鎴稩D"/>
+                </a-form-item>
+              </a-col>
+              <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.custEnglishName" 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>          <!--骞存湀鏃ユ椂鍒嗙-->
+			<!--鏃堕棿鑼冨洿-->
+
+				<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('WmsMaterialCustomer: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('WmsMaterialCustomer:exportExcel')" icon="download" @click="WmsMaterialCustomerToExcel()">
+            瀵煎嚭
+          </a-button>
+			<a-button type="primary" v-if="hasPerm('WmsMaterialCustomer:add')" icon="plus" @click="$refs.addForm.add()">鏂板鐗╂枡瀹㈡埛鍏宠仈淇℃伅</a-button>
+		</div>
+		</template>
+		  <span slot="action" slot-scope="text, record">
+			
+			<a v-if="hasPerm('WmsMaterialCustomer:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+          <a-divider type="vertical" v-if="hasPerm('WmsMaterialCustomer:edit') & hasPerm('WmsMaterialCustomer:delete')"/>
+          <a-popconfirm v-if="hasPerm('WmsMaterialCustomer:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsMaterialCustomerDelete(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 { WmsMaterialCustomerPage, WmsMaterialCustomerDelete, WmsMaterialCustomerToExcel } from '@/api/modular/main/WmsBase/WmsMaterialCustomerManage'
+	//鑷畾涔塼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': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'materialId'
+	},
+	{
+	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: '瀹㈡埛ID',
+	align: 'center',
+	customHeaderCell: () => {
+	return {
+	 style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	 }
+	 }
+	},
+	customCell: () => {
+	return {
+	style: {
+	'min-width': '120px'//鏈�灏忓垪瀹借缃�
+	}
+	}
+	},
+	sorter: true,
+	dataIndex: 'custId'
+	},
+	{
+	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: 'custEnglishName'
+	},
+	{
+	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: '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 WmsMaterialCustomerPage(Object.assign(parameter, this.switchingDate())).then((res) => {
+	return res.data
+	})
+	},
+	selectedRowKeys: [],
+	selectedRows: []
+	}
+	},
+	created () {
+	if (this.hasPerm('WmsMaterialCustomer:edit') || this.hasPerm('WmsMaterialCustomer: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
+	},
+	WmsMaterialCustomerDelete (record) {
+	WmsMaterialCustomerDelete(record).then((res) => {
+	if (res.success) {
+	this.$message.success('鍒犻櫎鎴愬姛')
+	this.$refs.table.refresh()
+	} else {
+	this.$message.error('鍒犻櫎澶辫触') // + res.message
+	}
+	})
+	},
+
+
+	WmsMaterialCustomerToExcel() {
+	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
+	}
+	})
+	}
+	WmsMaterialCustomerPage(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_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs
index e969b70..2339e48 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
@@ -6,7 +6,7 @@
 {    
     
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁�
     /// </summary>
     public class WmsContainerPackagingSearch : PageInputBase
     {
@@ -63,7 +63,7 @@
     }
 
         /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄤ笉鍒嗛〉鏌ヨ鍙傛暟
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄤ笉鍒嗛〉鏌ヨ鍙傛暟
     /// </summary>
     public class WmsContainerPackagingSearchNonPage : PageInputNonPageBase
     {
@@ -120,7 +120,7 @@
     }
 
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄨ緭鍏ュ弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄨ緭鍏ュ弬鏁�
     /// </summary>
     public class WmsContainerPackagingInput
     {
@@ -163,21 +163,21 @@
     }
 
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄦ柊澧炲弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄦ柊澧炲弬鏁�
     /// </summary>
     public class AddWmsContainerPackagingInput : WmsContainerPackagingInput
     {
     }
 
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄥ垹闄ゅ弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄥ垹闄ゅ弬鏁�
     /// </summary>
     public class DeleteWmsContainerPackagingInput : BaseId
     {
     }
 
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄦ洿鏂板弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄦ洿鏂板弬鏁�
     /// </summary>
     public class UpdateWmsContainerPackagingInput : WmsContainerPackagingInput
     {
@@ -190,7 +190,7 @@
     }
 
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄨ幏鍙栧崟涓弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄨ幏鍙栧崟涓弬鏁�
     /// </summary>
     public class QueryeWmsContainerPackagingInput : BaseId
     {
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 e46ff7a..b52ee08 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
@@ -4,7 +4,7 @@
 namespace Admin.NET.Application
 {
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄨ緭鍑哄弬鏁�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄨ緭鍑哄弬鏁�
     /// </summary>
     public class WmsContainerPackagingOutput
     {
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 75de536..b4ceca0 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
@@ -16,7 +16,7 @@
 namespace Admin.NET.Application
 {
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛ㄦ湇鍔�
+    /// 瀹瑰櫒鍏崇郴鍩虹琛ㄦ湇鍔�
     /// </summary>
     [ApiDescriptionSettings("WmsBase", Name = "WmsContainerPackaging", Order = 100)]
     [Route("api")]
@@ -42,7 +42,7 @@
         }
 
         /// <summary>
-        /// 鍒嗛〉鏌ヨ鍖呰鍏崇郴鍩虹琛�
+        /// 鍒嗛〉鏌ヨ瀹瑰櫒鍏崇郴鍩虹琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -67,10 +67,10 @@
         }
 
         /// <summary>
-        /// 涓嶅垎椤垫煡璇㈠寘瑁呭叧绯诲熀纭�琛ㄥ垪琛�
+        /// 涓嶅垎椤垫煡璇㈠鍣ㄥ叧绯诲熀纭�琛ㄥ垪琛�
         /// </summary>
-        /// <param name="input">鍖呰鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁�</param>
-        /// <returns>(鍖呰鍏崇郴鍩虹琛�)瀹炰緥鍒楄〃</returns>
+        /// <param name="input">瀹瑰櫒鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁�</param>
+        /// <returns>(瀹瑰櫒鍏崇郴鍩虹琛�)瀹炰緥鍒楄〃</returns>
         [HttpGet("WmsContainerPackaging/listNonPage")]
         public async Task<List<WmsContainerPackagingOutput>> ListNonPageAsync([FromQuery] WmsContainerPackagingSearchNonPage input)
         {
@@ -102,7 +102,7 @@
         }
 
          /// <summary>
-        /// 鑾峰彇鍖呰鍏崇郴鍩虹琛�
+        /// 鑾峰彇瀹瑰櫒鍏崇郴鍩虹琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -113,7 +113,7 @@
         }
 
         /// <summary>
-        /// 鑾峰彇鍖呰鍏崇郴鍩虹琛ㄥ垪琛�
+        /// 鑾峰彇瀹瑰櫒鍏崇郴鍩虹琛ㄥ垪琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -126,7 +126,7 @@
         #region 澧炪�佸垹銆佹敼
 
         /// <summary>
-        /// 澧炲姞鍖呰鍏崇郴鍩虹琛�
+        /// 澧炲姞瀹瑰櫒鍏崇郴鍩虹琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -144,7 +144,7 @@
         }
 
         /// <summary>
-        /// 鍒犻櫎鍖呰鍏崇郴鍩虹琛�
+        /// 鍒犻櫎瀹瑰櫒鍏崇郴鍩虹琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -157,7 +157,7 @@
         }
 
         /// <summary>
-        /// 鏇存柊鍖呰鍏崇郴鍩虹琛�
+        /// 鏇存柊瀹瑰櫒鍏崇郴鍩虹琛�
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
@@ -182,7 +182,7 @@
         #region 瀵煎叆
 
         /// <summary>
-        /// Excel妯℃澘瀵煎叆鍖呰鍏崇郴鍩虹琛ㄥ姛鑳�
+        /// Excel妯℃澘瀵煎叆瀹瑰櫒鍏崇郴鍩虹琛ㄥ姛鑳�
         /// </summary>
         /// <param name="file">Excel妯℃澘鏂囦欢</param>
         /// <returns>瀵煎叆鐨勮褰曟暟</returns>
@@ -378,7 +378,7 @@
         }
 
         /// <summary>
-        /// 鏍规嵁鐗堟湰涓嬭浇鍖呰鍏崇郴鍩虹琛ㄧ殑Excel瀵煎叆妯℃澘
+        /// 鏍规嵁鐗堟湰涓嬭浇瀹瑰櫒鍏崇郴鍩虹琛ㄧ殑Excel瀵煎叆妯℃澘
         /// </summary>
         /// <param name="version">妯℃澘鐗堟湰</param>
         /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns>
@@ -386,7 +386,7 @@
         public IActionResult DownloadExcelTemplate([FromQuery] string version)
         {
             string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsContainerPackaging{TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増鍚嶇О鍚庣紑}.xlsx";
-            var fileName = HttpUtility.UrlEncode($"瀵煎叆妯℃澘(鍖呰鍏崇郴鍩虹琛�).xlsx", Encoding.GetEncoding("UTF-8"));
+            var fileName = HttpUtility.UrlEncode($"瀵煎叆妯℃澘(瀹瑰櫒鍏崇郴鍩虹琛�).xlsx", Encoding.GetEncoding("UTF-8"));
             return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
         }
 
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs
index 71d1f55..3d673a4 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs
@@ -417,4 +417,31 @@
     {
 
     }
+
+    /// <summary>
+    /// 鏂板鐗╂枡涓氬姟淇℃伅瀹炰綋鍏ュ弬--鍖呭惈鐗╂枡銆佺墿鏂欏鎴峰叧绯汇�佹帶鍒跺睘鎬с�佹浛浠e搧
+    /// </summary>
+    public class AddWmsMaterialInfoInput
+    {
+        /// <summary>
+        /// 鐗╂枡鍩虹淇℃伅
+        /// </summary>
+        public WmsMaterialInput MaterialInput { get; set; }
+
+        /// <summary>
+        /// 鎺у埗灞炴�ц鍒橧D
+        /// </summary>
+        public long ControlRuleld { get; set; }
+
+        /// <summary>
+        /// 鏇夸唬鍝�
+        /// </summary>
+        public List<WmsSubstituteGood> SubstituteGoodList { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡瀹㈡埛鍏崇郴琛�
+        /// </summary>
+        public List<WmsMaterialCustomer> MaterialCustomerList { get; set; }
+    }
+
 }
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs
index e9edf4a..7b873a7 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs
@@ -13,7 +13,7 @@
         Task<PageResult<WmsMaterialOutput>> Page([FromQuery] WmsMaterialSearch input);
         Task<List<WmsMaterialOutput>> ListNonPageAsync([FromQuery] WmsMaterialSearchNonPage input);
         
-        Task Add(AddWmsMaterialInput input);
+        Task Add(AddWmsMaterialInfoInput input);
         Task Update(UpdateWmsMaterialInput input);
         Task Delete(DeleteWmsMaterialInput input);
         Task<int> ImportExcelAsync(IFormFile file);
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
index bc3e25c..ce56c81 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
@@ -166,9 +166,10 @@
         public async Task<List<WmsMaterialOutput>> List([FromQuery] WmsMaterialInput input)
         {
             return await _wmsMaterialRep.DetachedEntities.ProjectToType<WmsMaterialOutput>().ToListAsync();
-        }    
+        }
 
         #region 澧炪�佸垹銆佹敼
+
 
         /// <summary>
         /// 澧炲姞鐗╂枡淇℃伅琛�
@@ -176,10 +177,19 @@
         /// <param name="input"></param>
         /// <returns></returns>
         [HttpPost("WmsMaterial/add")]
-        public async Task Add(AddWmsMaterialInput input)
+        public async Task Add(AddWmsMaterialInfoInput input)
         {
-            var wmsMaterial = input.Adapt<WmsMaterial>();
-                        //楠岃瘉
+
+
+            //鐗╂枡淇℃伅
+            var wmsMaterial = input.MaterialInput.Adapt<WmsMaterial>();
+            //鎺у埗瑙勫垯淇℃伅
+            var controlRuleld = input.ControlRuleld;
+            //鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+            var materialCustomerList = input.MaterialCustomerList.Adapt<WmsMaterialCustomer>();
+            //鏇夸唬鍝佷俊鎭�
+            var substituteGoodList = input.SubstituteGoodList.Adapt<WmsSubstituteGood>();
+            //楠岃瘉
             await CheckExisit(wmsMaterial);
 
             wmsMaterial.CreatedUserId = wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerInput.cs
new file mode 100644
index 0000000..05e1d12
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerInput.cs
@@ -0,0 +1,211 @@
+锘縰sing Admin.NET.Core;
+using Admin.NET.Core.Service;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application
+{    
+    
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鏌ヨ鍙傛暟
+    /// </summary>
+    public class WmsMaterialCustomerSearch : PageInputBase
+    {
+        /// <summary>
+        /// 鐗╂枡ID
+        /// </summary>
+        public virtual long? MaterialId { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        public virtual string MaterialCode { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public virtual string MaterialName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛ID
+        /// </summary>
+        public virtual long? CustId { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛缂栧彿
+        /// </summary>
+        public virtual string CustCode { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛鑻辨枃鍚嶇О
+        /// </summary>
+        public virtual string CustEnglishName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛涓枃鍚嶇О
+        /// </summary>
+        public virtual string CustChinaName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual List<string> CreatedTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual List<string> UpdatedTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭悕绉�
+        /// </summary>
+        public virtual string CreatedUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭悕绉�
+        /// </summary>
+        public virtual string UpdatedUserName { get; set; }
+        
+    }
+
+        /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅涓嶅垎椤垫煡璇㈠弬鏁�
+    /// </summary>
+    public class WmsMaterialCustomerSearchNonPage : PageInputNonPageBase
+    {
+        /// <summary>
+        /// 鐗╂枡ID
+        /// </summary>
+        public virtual long? MaterialId { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        public virtual string MaterialCode { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public virtual string MaterialName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛ID
+        /// </summary>
+        public virtual long? CustId { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛缂栧彿
+        /// </summary>
+        public virtual string CustCode { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛鑻辨枃鍚嶇О
+        /// </summary>
+        public virtual string CustEnglishName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛涓枃鍚嶇О
+        /// </summary>
+        public virtual string CustChinaName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭悕绉�
+        /// </summary>
+        public virtual string CreatedUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭悕绉�
+        /// </summary>
+        public virtual string UpdatedUserName { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅杈撳叆鍙傛暟
+    /// </summary>
+    public class WmsMaterialCustomerInput
+    {
+        /// <summary>
+        /// 鐗╂枡ID
+        /// </summary>
+        [Required(ErrorMessage = "鐗╂枡ID涓嶈兘涓虹┖")]
+        public virtual long MaterialId { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [Required(ErrorMessage = "鐗╂枡缂栧彿涓嶈兘涓虹┖")]
+        public virtual string MaterialCode { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [Required(ErrorMessage = "鐗╂枡鍚嶇О涓嶈兘涓虹┖")]
+        public virtual string MaterialName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛ID
+        /// </summary>
+        public virtual long? CustId { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛缂栧彿
+        /// </summary>
+        public virtual string CustCode { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛鑻辨枃鍚嶇О
+        /// </summary>
+        public virtual string CustEnglishName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛涓枃鍚嶇О
+        /// </summary>
+        public virtual string CustChinaName { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鏂板鍙傛暟
+    /// </summary>
+    public class AddWmsMaterialCustomerInput : WmsMaterialCustomerInput
+    {
+    }
+
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鍒犻櫎鍙傛暟
+    /// </summary>
+    public class DeleteWmsMaterialCustomerInput : BaseId
+    {
+    }
+
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鏇存柊鍙傛暟
+    /// </summary>
+    public class UpdateWmsMaterialCustomerInput : WmsMaterialCustomerInput
+    {
+        /// <summary>
+        /// Id涓婚敭
+        /// </summary>
+        [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")]
+        public long? Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鑾峰彇鍗曚釜鍙傛暟
+    /// </summary>
+    public class QueryeWmsMaterialCustomerInput : BaseId
+    {
+
+    }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerOutput.cs
new file mode 100644
index 0000000..5753c7d
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Dto/WmsMaterialCustomerOutput.cs
@@ -0,0 +1,72 @@
+锘縰sing Admin.NET.Core.Util.LowCode.Dto;
+using System;
+
+namespace Admin.NET.Application
+{
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅杈撳嚭鍙傛暟
+    /// </summary>
+    public class WmsMaterialCustomerOutput
+    {
+        /// <summary>
+        /// 鐗╂枡ID
+        /// </summary>
+        public long MaterialId { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        public string MaterialCode { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterialName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛ID
+        /// </summary>
+        public long? CustId { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛缂栧彿
+        /// </summary>
+        public string CustCode { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛鑻辨枃鍚嶇О
+        /// </summary>
+        public string CustEnglishName { get; set; }
+        
+        /// <summary>
+        /// 瀹㈡埛涓枃鍚嶇О
+        /// </summary>
+        public string CustChinaName { get; set; }
+        
+        /// <summary>
+        /// Id涓婚敭
+        /// </summary>
+        public long? Id { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTimeOffset? CreatedTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTimeOffset? UpdatedTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭悕绉�
+        /// </summary>
+        public string CreatedUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭悕绉�
+        /// </summary>
+        public string UpdatedUserName { get; set; }
+        
+    }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/IWmsMaterialCustomerService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/IWmsMaterialCustomerService.cs
new file mode 100644
index 0000000..e3c2a02
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/IWmsMaterialCustomerService.cs
@@ -0,0 +1,22 @@
+锘縰sing Admin.NET.Core;
+using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+
+namespace Admin.NET.Application
+{
+    public interface IWmsMaterialCustomerService
+    {
+        Task<WmsMaterialCustomerOutput> Get([FromQuery] QueryeWmsMaterialCustomerInput input);
+        Task<List<WmsMaterialCustomerOutput>> List([FromQuery] WmsMaterialCustomerInput input);
+        Task<PageResult<WmsMaterialCustomerOutput>> Page([FromQuery] WmsMaterialCustomerSearch input);
+        Task<List<WmsMaterialCustomerOutput>> ListNonPageAsync([FromQuery] WmsMaterialCustomerSearchNonPage input);
+        
+        Task Add(AddWmsMaterialCustomerInput input);
+        Task Update(UpdateWmsMaterialCustomerInput input);
+        Task Delete(DeleteWmsMaterialCustomerInput input);
+        Task<int> ImportExcelAsync(IFormFile file);
+        IActionResult DownloadExcelTemplate(string version);
+    }
+}
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Map/WmsMaterialCustomerMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Map/WmsMaterialCustomerMapper.cs
new file mode 100644
index 0000000..f538c17
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/Map/WmsMaterialCustomerMapper.cs
@@ -0,0 +1,18 @@
+锘縰sing Mapster;
+using Admin.NET.Core;
+
+namespace Admin.NET.Application
+{
+    public class WmsMaterialCustomerMapper : IRegister
+    {
+        public void Register(TypeAdapterConfig config)
+        {
+            config.ForType<AddWmsMaterialCustomerInput, WmsMaterialCustomer>()
+            ;
+            config.ForType<UpdateWmsMaterialCustomerInput, WmsMaterialCustomer>()
+            ;
+            config.ForType<WmsMaterialCustomer, WmsMaterialCustomerOutput>()
+            ;
+        }
+    }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/WmsMaterialCustomerService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/WmsMaterialCustomerService.cs
new file mode 100644
index 0000000..3ac8a76
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterialCustomer/WmsMaterialCustomerService.cs
@@ -0,0 +1,412 @@
+锘縰sing Furion.DatabaseAccessor;
+using Furion.DatabaseAccessor.Extensions;
+using Furion.DependencyInjection;
+using Furion.DynamicApiController;
+using Furion.FriendlyException;
+using Admin.NET.Core;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using System.Linq.Dynamic.Core;
+using Microsoft.AspNetCore.Http;
+using System.Text;
+using System.Web;
+using System.ComponentModel;
+using System.Data;
+namespace Admin.NET.Application
+{
+    /// <summary>
+    /// 鐗╂枡瀹㈡埛鍏宠仈淇℃伅鏈嶅姟
+    /// </summary>
+    [ApiDescriptionSettings("WmsBase", Name = "WmsMaterialCustomer", Order = 100)]
+    [Route("api")]
+    public class WmsMaterialCustomerService : IWmsMaterialCustomerService, IDynamicApiController, ITransient
+    {
+        private readonly IRepository<WmsMaterialCustomer,MasterDbContextLocator> _wmsMaterialCustomerRep;
+        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
+        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
+        private readonly ISysExcelTemplateService _sysExcelTemplateService;
+        private readonly static object _lock = new();
+
+        public WmsMaterialCustomerService(
+            IRepository<WmsMaterialCustomer,MasterDbContextLocator> wmsMaterialCustomerRep
+            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
+            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
+            ,ISysExcelTemplateService sysExcelTemplateService
+        )
+        {
+            _wmsMaterialCustomerRep = wmsMaterialCustomerRep;
+         _sysDictTypeRep = sysDictTypeRep;
+         _sysDictDataRep = sysDictDataRep;
+         _sysExcelTemplateService = sysExcelTemplateService;
+        }
+
+        /// <summary>
+        /// 鍒嗛〉鏌ヨ鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet("WmsMaterialCustomer/page")]
+        public async Task<PageResult<WmsMaterialCustomerOutput>> Page([FromQuery] WmsMaterialCustomerSearch input)
+        {
+            var wmsMaterialCustomers = await _wmsMaterialCustomerRep.DetachedEntities
+                                     .Where(input.MaterialId != null, u => u.MaterialId == input.MaterialId)
+                                     .Where(!string.IsNullOrEmpty(input.MaterialCode), u => u.MaterialCode == input.MaterialCode)
+                                     .Where(!string.IsNullOrEmpty(input.MaterialName), u => u.MaterialName == input.MaterialName)
+                                     .Where(input.CustId != null, u => u.CustId == input.CustId)
+                                     .Where(!string.IsNullOrEmpty(input.CustCode), u => u.CustCode == input.CustCode)
+                                     .Where(!string.IsNullOrEmpty(input.CustEnglishName), u => u.CustEnglishName == input.CustEnglishName)
+                                     .Where(!string.IsNullOrEmpty(input.CustChinaName), u => u.CustChinaName == input.CustChinaName)
+                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
+                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
+                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
+                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
+                                     .OrderBy(PageInputOrder.OrderBuilder<WmsMaterialCustomerSearch>(input))
+                                     .ProjectToType<WmsMaterialCustomerOutput>()
+                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
+            return wmsMaterialCustomers;
+        }
+
+        /// <summary>
+        /// 涓嶅垎椤垫煡璇㈢墿鏂欏鎴峰叧鑱斾俊鎭垪琛�
+        /// </summary>
+        /// <param name="input">鐗╂枡瀹㈡埛鍏宠仈淇℃伅鏌ヨ鍙傛暟</param>
+        /// <returns>(鐗╂枡瀹㈡埛鍏宠仈淇℃伅)瀹炰緥鍒楄〃</returns>
+        [HttpGet("WmsMaterialCustomer/listNonPage")]
+        public async Task<List<WmsMaterialCustomerOutput>> ListNonPageAsync([FromQuery] WmsMaterialCustomerSearchNonPage input)
+        {
+            var pMaterialId = input.MaterialId;
+            var pMaterialCode = input.MaterialCode?.Trim() ?? "";
+            var pMaterialName = input.MaterialName?.Trim() ?? "";
+            var pCustId = input.CustId;
+            var pCustCode = input.CustCode?.Trim() ?? "";
+            var pCustEnglishName = input.CustEnglishName?.Trim() ?? "";
+            var pCustChinaName = input.CustChinaName?.Trim() ?? "";
+            var pCreatedTime = input.CreatedTime;
+            var pUpdatedTime = input.UpdatedTime;
+            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
+            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
+            var wmsMaterialCustomers = await _wmsMaterialCustomerRep.DetachedEntities
+                .Where(pMaterialId != null, u => u.MaterialId == pMaterialId)
+                .Where(!string.IsNullOrEmpty(pMaterialCode), u => u.MaterialCode == pMaterialCode)
+                .Where(!string.IsNullOrEmpty(pMaterialName), u => u.MaterialName == pMaterialName)
+                .Where(pCustId != null, u => u.CustId == pCustId)
+                .Where(!string.IsNullOrEmpty(pCustCode), u => u.CustCode == pCustCode)
+                .Where(!string.IsNullOrEmpty(pCustEnglishName), u => u.CustEnglishName == pCustEnglishName)
+                .Where(!string.IsNullOrEmpty(pCustChinaName), u => u.CustChinaName == pCustChinaName)
+           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
+           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
+                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
+                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
+            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
+            .ProjectToType<WmsMaterialCustomerOutput>()
+            .ToListAsync();
+            return wmsMaterialCustomers;
+        }
+
+         /// <summary>
+        /// 鑾峰彇鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet("WmsMaterialCustomer/detail")]
+        public async Task<WmsMaterialCustomerOutput> Get([FromQuery] QueryeWmsMaterialCustomerInput input)
+        {
+            return (await _wmsMaterialCustomerRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialCustomerOutput>();
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐗╂枡瀹㈡埛鍏宠仈淇℃伅鍒楄〃
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet("WmsMaterialCustomer/list")]
+        public async Task<List<WmsMaterialCustomerOutput>> List([FromQuery] WmsMaterialCustomerInput input)
+        {
+            return await _wmsMaterialCustomerRep.DetachedEntities.ProjectToType<WmsMaterialCustomerOutput>().ToListAsync();
+        }    
+
+        #region 澧炪�佸垹銆佹敼
+
+        /// <summary>
+        /// 澧炲姞鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost("WmsMaterialCustomer/add")]
+        public async Task Add(AddWmsMaterialCustomerInput input)
+        {
+            var wmsMaterialCustomer = input.Adapt<WmsMaterialCustomer>();
+                        //楠岃瘉
+            await CheckExisit(wmsMaterialCustomer);
+
+            wmsMaterialCustomer.CreatedUserId = wmsMaterialCustomer.UpdatedUserId = SysHelper.GetUserId();
+            wmsMaterialCustomer.CreatedUserName = wmsMaterialCustomer.UpdatedUserName = SysHelper.GetUserName();
+            wmsMaterialCustomer.CreatedTime = wmsMaterialCustomer.UpdatedTime = SysHelper.GetNowTime();
+            await _wmsMaterialCustomerRep.InsertAsync(wmsMaterialCustomer);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost("WmsMaterialCustomer/delete")]
+        public async Task Delete(DeleteWmsMaterialCustomerInput input)
+        {
+            var wmsMaterialCustomer = await _wmsMaterialCustomerRep.FirstOrDefaultAsync(u => u.Id == input.Id);
+            await _wmsMaterialCustomerRep.DeleteAsync(wmsMaterialCustomer);
+            
+        }
+
+        /// <summary>
+        /// 鏇存柊鐗╂枡瀹㈡埛鍏宠仈淇℃伅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost("WmsMaterialCustomer/edit")]
+        public async Task Update(UpdateWmsMaterialCustomerInput input)
+        {
+            var isExist = await _wmsMaterialCustomerRep.AnyAsync(u => u.Id == input.Id, false);
+            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
+
+            var wmsMaterialCustomer = input.Adapt<WmsMaterialCustomer>();
+            //楠岃瘉
+            await CheckExisit(wmsMaterialCustomer,true);
+
+            wmsMaterialCustomer.UpdatedUserId = SysHelper.GetUserId();
+            wmsMaterialCustomer.UpdatedUserName = SysHelper.GetUserName();
+            wmsMaterialCustomer.UpdatedTime = SysHelper.GetNowTime();
+            await _wmsMaterialCustomerRep.UpdateAsync(wmsMaterialCustomer,ignoreNullValues:true);
+        }
+
+        #endregion
+
+        #region 瀵煎叆
+
+        /// <summary>
+        /// Excel妯℃澘瀵煎叆鐗╂枡瀹㈡埛鍏宠仈淇℃伅鍔熻兘
+        /// </summary>
+        /// <param name="file">Excel妯℃澘鏂囦欢</param>
+        /// <returns>瀵煎叆鐨勮褰曟暟</returns>
+        [HttpPost("WmsMaterialCustomer/importExcel")]
+        public async Task<int> ImportExcelAsync(IFormFile file)
+        { 
+            int _HeadStartLine = 2;//绗�1琛屾槸璇存槑,绗�2琛屾槸鍒楀悕
+            int _DataStartLine = 3;//绗�3琛屽紑濮嬫槸鏁版嵁
+
+            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
+            var addList =await CommonImport(importDataTable, _DataStartLine);
+
+            lock (_lock)
+            {
+                _wmsMaterialCustomerRep.InsertAsync(addList);
+               
+            }
+            await Task.CompletedTask;
+            return addList.Count;
+        }
+
+        /// <summary>
+        ///  DataTable杞崲瀹炰綋瀵硅薄鍒楄〃
+        /// </summary>
+        /// <param name="dataTable"></param>
+        /// <param name="dataStartLine">妯$増鍒楀悕寮�濮嬭</param>
+        /// <returns></returns>
+        private async Task<List<WmsMaterialCustomer>> CommonImport(DataTable dataTable, int dataStartLine)
+        {
+
+            var details = new List<WmsMaterialCustomer>();
+            int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭
+            foreach (System.Data.DataRow row in dataTable.Rows)
+            {
+                index++;
+
+               //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛�
+                                          
+                           var addItem = new WmsMaterialCustomer()
+                            {
+                               CreatedTime = SysHelper.GetNowTime(),
+                               CreatedUserId = SysHelper.GetUserId(),
+                               CreatedUserName = SysHelper.GetUserName(),
+                               UpdatedTime = SysHelper.GetNowTime(),
+                               UpdatedUserId = SysHelper.GetUserId(),
+                               UpdatedUserName = SysHelper.GetUserName()
+                             };
+                          #region 瀹氫箟鍙橀噺
+                           var _MaterialId = "";//鐗╂枡ID
+                           var _MaterialCode = "";//鐗╂枡缂栧彿
+                           var _MaterialName = "";//鐗╂枡鍚嶇О
+                           var _CustId = "";//瀹㈡埛ID
+                           var _CustCode = "";//瀹㈡埛缂栧彿
+                           var _CustEnglishName = "";//瀹㈡埛鑻辨枃鍚嶇О
+                           var _CustChinaName = "";//瀹㈡埛涓枃鍚嶇О
+                           var _Id = "";//Id涓婚敭
+                          #endregion
+                          
+                          
+                          #region 鍙栧��
+                           _MaterialId = row["鐗╂枡ID"]?.ToString() ;
+                           _MaterialCode = row["鐗╂枡缂栧彿"]?.ToString() ;
+                           _MaterialName = row["鐗╂枡鍚嶇О"]?.ToString() ;
+                           _CustId = row["瀹㈡埛ID"]?.ToString() ;
+                           _CustCode = row["瀹㈡埛缂栧彿"]?.ToString() ;
+                           _CustEnglishName = row["瀹㈡埛鑻辨枃鍚嶇О"]?.ToString() ;
+                           _CustChinaName = row["瀹㈡埛涓枃鍚嶇О"]?.ToString() ;
+                           _Id = row["Id涓婚敭"]?.ToString() ;
+                          #endregion
+                          
+                          
+                          #region 楠岃瘉
+                          
+                          if (string.IsNullOrEmpty(_MaterialId))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡ID]{_MaterialId}涓嶈兘涓虹┖锛�");
+                          }
+                          
+                          if(!string.IsNullOrEmpty(_MaterialId))
+                          {
+                              if (!long.TryParse(_MaterialId, out long outMaterialId)&&!string.IsNullOrEmpty(_MaterialId))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾鐗╂枡ID]{_MaterialId}鍊间笉姝g‘锛�");
+                              }
+                              if (outMaterialId <= 0&&!string.IsNullOrEmpty(_MaterialId))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾鐗╂枡ID]{_MaterialId}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+                              }
+                              else
+                              {
+                                 addItem.MaterialId = outMaterialId;
+                              }
+                          
+                          }
+                          
+                          if (string.IsNullOrEmpty(_MaterialCode))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡缂栧彿]{_MaterialCode}涓嶈兘涓虹┖锛�");
+                          }
+                          
+                          if(!string.IsNullOrEmpty(_MaterialCode))
+                          {
+                                addItem.MaterialCode = (string)_MaterialCode;
+                           }
+                          
+                          if (string.IsNullOrEmpty(_MaterialName))
+                          {
+                            throw Oops.Oh($"绗瑊index}琛孾鐗╂枡鍚嶇О]{_MaterialName}涓嶈兘涓虹┖锛�");
+                          }
+                          
+                          if(!string.IsNullOrEmpty(_MaterialName))
+                          {
+                                addItem.MaterialName = (string)_MaterialName;
+                           }
+                          if(!string.IsNullOrEmpty(_CustId))
+                          {
+                              if (!long.TryParse(_CustId, out long outCustId)&&!string.IsNullOrEmpty(_CustId))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾瀹㈡埛ID]{_CustId}鍊间笉姝g‘锛�");
+                              }
+                              if (outCustId <= 0&&!string.IsNullOrEmpty(_CustId))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾瀹㈡埛ID]{_CustId}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+                              }
+                              else
+                              {
+                                 addItem.CustId = outCustId;
+                              }
+                          
+                          }
+                          if(!string.IsNullOrEmpty(_CustCode))
+                          {
+                                addItem.CustCode = (string)_CustCode;
+                           }
+                          if(!string.IsNullOrEmpty(_CustEnglishName))
+                          {
+                                addItem.CustEnglishName = (string)_CustEnglishName;
+                           }
+                          if(!string.IsNullOrEmpty(_CustChinaName))
+                          {
+                                addItem.CustChinaName = (string)_CustChinaName;
+                           }
+                          if(!string.IsNullOrEmpty(_Id))
+                          {
+                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉姝g‘锛�");
+                              }
+                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
+                              {
+                                 throw Oops.Oh($"绗瑊index}琛孾Id涓婚敭]{_Id}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+                              }
+                              else
+                              {
+                                 addItem.Id = outId;
+                              }
+                          
+                          }
+                          #endregion
+                          
+
+              
+                details.Add(addItem);
+            }
+              //楠岄噸
+              await CheckExisitForImport(details);
+            
+            return details;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鐗堟湰涓嬭浇鐗╂枡瀹㈡埛鍏宠仈淇℃伅鐨凟xcel瀵煎叆妯℃澘
+        /// </summary>
+        /// <param name="version">妯℃澘鐗堟湰</param>
+        /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns>
+        [HttpGet("WmsMaterialCustomer/downloadExcelTemplate")]
+        public IActionResult DownloadExcelTemplate([FromQuery] string version)
+        {
+            string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsMaterialCustomer{TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増鍚嶇О鍚庣紑}.xlsx";
+            var fileName = HttpUtility.UrlEncode($"瀵煎叆妯℃澘(鐗╂枡瀹㈡埛鍏宠仈淇℃伅).xlsx", Encoding.GetEncoding("UTF-8"));
+            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
+        }
+
+        #endregion
+
+        #region 绉佹湁鏂规硶
+
+        /// <summary>
+        /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-鏁版嵁搴�
+        /// </summary>
+        /// <param name="input"></param>
+        /// <param name="isEdit"></param>
+        /// <returns></returns>
+        private async Task CheckExisit( WmsMaterialCustomer input,bool isEdit=false)
+        {
+           
+
+           
+
+          
+                
+               
+        
+
+            //娌℃湁閰嶇疆鑱斿悎涓婚敭锛屼笉闇�瑕侀獙閲�
+       }
+        
+        /// <summary>
+        /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇�
+        /// </summary>
+        /// <param name="inputs"></param>
+        /// <returns></returns>
+        private async Task CheckExisitForImport(List<WmsMaterialCustomer> inputs)
+        { 
+            //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�  
+                      
+
+
+
+        }
+
+        #endregion
+    }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerPackaging.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerPackaging.cs
new file mode 100644
index 0000000..9f54f5c
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsContainerPackaging.cs
@@ -0,0 +1,83 @@
+锘縰sing Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+/*
+ * @author : 鍒樻枃濂�
+ * @date : 2024/4/23涓嬪崍4:29:28
+ * @desc : 瀹瑰櫒鍏崇郴鍩虹琛�
+ */
+namespace Admin.NET.Core
+{
+    /// <summary>
+    /// 瀹瑰櫒鍏崇郴鍩虹琛�
+    /// </summary>
+    [Table("wms_container_packaging")]
+    [Comment("瀹瑰櫒鍏崇郴鍩虹琛�")]
+    public class WmsContainerPackaging : DEntityBase
+    {
+
+
+        /// <summary>
+        /// 瀹瑰櫒绫诲瀷ID
+        /// </summary>
+        [Comment("瀹瑰櫒绫诲瀷ID")]
+        [Required]
+
+        public long ContainerTypeId { get; set; }
+
+
+        /// <summary>
+        /// 瀹瑰櫒绫诲瀷鍚嶇О
+        /// </summary>
+        [Comment("瀹瑰櫒绫诲瀷鍚嶇О")]
+        [Required]
+        [MaxLength(255)]
+        public string ContainerTypeName { get; set; }
+
+
+        /// <summary>
+        /// 鐗╂枡绫诲瀷ID
+        /// </summary>
+        [Comment("鐗╂枡绫诲瀷ID")]
+        [Required]
+
+        public long MaterialTypeId { get; set; }
+
+
+        /// <summary>
+        /// 鐗╂枡绫诲瀷缂栧彿
+        /// </summary>
+        [Comment("鐗╂枡绫诲瀷缂栧彿")]
+        [Required]
+        [MaxLength(255)]
+        public string MaterialTypeCode { get; set; }
+
+
+        /// <summary>
+        /// 鐗╂枡绫诲瀷鍚嶇О
+        /// </summary>
+        [Comment("鐗╂枡绫诲瀷鍚嶇О")]
+        [Required]
+        [MaxLength(255)]
+        public string MaterialTypeName { get; set; }
+
+
+        /// <summary>
+        /// 鐗╂枡瀹瑰櫒瀹归噺
+        /// </summary>
+        [Comment("鐗╂枡瀹瑰櫒瀹归噺")]
+
+        [Column("BoxQty", TypeName = "decimal(10,3)")]
+        public decimal? BoxQty { get; set; }
+
+
+
+
+
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsMaterialCustomer.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsMaterialCustomer.cs
index 558cc86..461e0ba 100755
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsMaterialCustomer.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsMaterialCustomer.cs
@@ -4,72 +4,80 @@
 
 /*
  * @author : 鍒樻枃濂�
- * @date : 2024/4/23涓嬪崍4:29:28
- * @desc : 鍖呰鍏崇郴鍩虹琛�
+ * @date : 2024/4/24涓婂崍10:48:23
+ * @desc : 鐗╂枡瀹㈡埛鍏宠仈琛�
  */
 namespace Admin.NET.Core
 {
     /// <summary>
-    /// 鍖呰鍏崇郴鍩虹琛�
+    /// 鐗╂枡瀹㈡埛鍏宠仈琛�
     /// </summary>
-    [Table("wms_container_packaging")]
-    [Comment("鍖呰鍏崇郴鍩虹琛�")]
-    public class WmsContainerPackaging : DEntityBase
+    [Table("wms_material_customer")]
+    [Comment("鐗╂枡瀹㈡埛鍏宠仈琛�")]
+    public class WmsMaterialCustomer : DEntityBase
     {
 
 
         /// <summary>
-        /// 瀹瑰櫒绫诲瀷ID
+        /// 鐗╂枡ID
         /// </summary>
-        [Comment("瀹瑰櫒绫诲瀷ID")]
+        [Comment("鐗╂枡ID")]
         [Required]
 
-        public long ContainerTypeId { get; set; }
+        public long MaterialId { get; set; }
 
 
         /// <summary>
-        /// 瀹瑰櫒绫诲瀷鍚嶇О
+        /// 鐗╂枡缂栧彿
         /// </summary>
-        [Comment("瀹瑰櫒绫诲瀷鍚嶇О")]
+        [Comment("鐗╂枡缂栧彿")]
+        [Required]
+        [MaxLength(50)]
+        public string MaterialCode { get; set; }
+
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [Comment("鐗╂枡鍚嶇О")]
+        [Required]
+        [MaxLength(50)]
+        public string MaterialName { get; set; }
+
+
+        /// <summary>
+        /// 瀹㈡埛ID
+        /// </summary>
+        [Comment("瀹㈡埛ID")]
+        [Required]
+
+        public long CustId { get; set; }
+
+
+        /// <summary>
+        /// 瀹㈡埛缂栧彿
+        /// </summary>
+        [Comment("瀹㈡埛缂栧彿")]
+        [Required]
+        [MaxLength(50)]
+        public string CustCode { get; set; }
+
+
+        /// <summary>
+        /// 瀹㈡埛鑻辨枃鍚嶇О
+        /// </summary>
+        [Comment("瀹㈡埛鑻辨枃鍚嶇О")]
+        [MaxLength(255)]
+        public string CustEnglishName { get; set; }
+
+
+        /// <summary>
+        /// 瀹㈡埛涓枃鍚嶇О
+        /// </summary>
+        [Comment("瀹㈡埛涓枃鍚嶇О")]
         [Required]
         [MaxLength(255)]
-        public string ContainerTypeName { get; set; }
-
-
-        /// <summary>
-        /// 鐗╂枡绫诲瀷ID
-        /// </summary>
-        [Comment("鐗╂枡绫诲瀷ID")]
-        [Required]
-
-        public long MaterialTypeId { get; set; }
-
-
-        /// <summary>
-        /// 鐗╂枡绫诲瀷缂栧彿
-        /// </summary>
-        [Comment("鐗╂枡绫诲瀷缂栧彿")]
-        [Required]
-        [MaxLength(255)]
-        public string MaterialTypeCode { get; set; }
-
-
-        /// <summary>
-        /// 鐗╂枡绫诲瀷鍚嶇О
-        /// </summary>
-        [Comment("鐗╂枡绫诲瀷鍚嶇О")]
-        [Required]
-        [MaxLength(255)]
-        public string MaterialTypeName { get; set; }
-
-
-        /// <summary>
-        /// 鐗╂枡瀹瑰櫒瀹归噺
-        /// </summary>
-        [Comment("鐗╂枡瀹瑰櫒瀹归噺")]
-
-        [Column("BoxQty", TypeName = "decimal(10,3)")]
-        public decimal? BoxQty { get; set; }
+        public string CustChinaName { get; set; }
 
 
 
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Enum/Wms/WmsMaterialEnum.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Enum/Wms/WmsMaterialEnum.cs
index 7ffd97b..3f73207 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Enum/Wms/WmsMaterialEnum.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Enum/Wms/WmsMaterialEnum.cs
@@ -50,15 +50,15 @@
         BIAOZHUANCHANPIN = 4,
 
         /// <summary>
-        /// 鍖呰鏉愭枡
+        /// 瀹瑰櫒鏉愭枡
         /// </summary>
-        [Description("鍖呰鏉愭枡")]
+        [Description("瀹瑰櫒鏉愭枡")]
         BAOZHUANGCAILIAO = 5,
 
         /// <summary>
         /// 杈呭姪鏉愭枡
         /// </summary>
-        [Description("鍖呰鏉愭枡")]
+        [Description("瀹瑰櫒鏉愭枡")]
         FUZHUCAILIAO = 6,
 
         /// <summary>
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsMaterialCustomerImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsMaterialCustomerImport.xlsx
new file mode 100644
index 0000000..0a3dc76
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsMaterialCustomerImport.xlsx
Binary files differ

--
Gitblit v1.9.3