From 3112a2cacb090aaa7a25edcf48be047249ff9d1d Mon Sep 17 00:00:00 2001 From: payne <bzrlw2012@163.com> Date: 周二, 23 4月 2024 18:14:46 +0800 Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/iWare_RawMaterialWarehouse --- iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/addForm.vue | 103 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/excelForm.vue | 181 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Map/WmsSubstituteGoodMapper.cs | 18 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodOutput.cs | 72 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs | 397 ++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/IWmsWarehouseService.cs | 22 iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx | 0 iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js | 114 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/index.vue | 537 +++++ iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/index.vue | 638 ++++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Map/WmsContainerPackagingMapper.cs | 18 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/excelForm.vue | 181 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue | 498 +++++ iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/editForm.vue | 139 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/IWmsContainerPackagingService.cs | 22 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue | 119 + iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js | 114 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs | 517 +++++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodInput.cs | 215 ++ iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs | 271 ++ iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue | 100 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs | 193 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsSubstituteGoodImport.xlsx | 0 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue | 94 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/excelForm.vue | 181 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Map/WmsWarehouseMapper.cs | 18 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/editForm.vue | 123 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue | 91 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs | 92 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/IWmsSubstituteGoodService.cs | 22 iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue | 21 iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsSubstituteGoodManage.js | 114 + iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue | 115 + iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx | 0 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs | 67 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/WmsSubstituteGoodService.cs | 481 ++++ 36 files changed, 5,879 insertions(+), 9 deletions(-) diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js new file mode 100644 index 0000000..c8c89f0 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js @@ -0,0 +1,114 @@ +锘縤mport { axios } from '@/utils/request' + +/** + * 鏌ヨ鍖呰鍏崇郴鍩虹琛� + * + * @author ly + */ +export function WmsContainerPackagingPage (parameter) { + return axios({ + url: '/WmsContainerPackaging/page', + method: 'get', + params: parameter + }) +} + +/** + * 鍖呰鍏崇郴鍩虹琛ㄥ垪琛� + * + * @author ly + */ +export function WmsContainerPackagingList (parameter) { + return axios({ + url: '/WmsContainerPackaging/list', + method: 'get', + params: parameter + }) +} + +/** + * 娣诲姞鍖呰鍏崇郴鍩虹琛� + * + * @author ly + */ +export function WmsContainerPackagingAdd (parameter) { + return axios({ + url: '/WmsContainerPackaging/add', + method: 'post', + data: parameter + }) +} + +/** + * 缂栬緫鍖呰鍏崇郴鍩虹琛� + * + * @author ly + */ +export function WmsContainerPackagingEdit (parameter) { + return axios({ + url: '/WmsContainerPackaging/edit', + method: 'post', + data: parameter + }) +} + +/** + * 鍒犻櫎鍖呰鍏崇郴鍩虹琛� + * + * @author ly + */ +export function WmsContainerPackagingDelete (parameter) { + return axios({ + url: '/WmsContainerPackaging/delete', + method: 'post', + data: parameter + }) +} + + +/** + * 瀵煎嚭鍖呰鍏崇郴鍩虹琛ㄧ殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsContainerPackagingToExcel (parameter) { + return axios({ + url: '/WmsContainerPackaging/toExcel', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + +/** + * 瀵煎叆鍖呰鍏崇郴鍩虹琛ㄧ殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsContainerPackagingImportExcel (data, parameter) { + return axios({ + url: '/WmsContainerPackaging/importExcel', + method: 'post', + data: data, + params: parameter + + }) +} + + +/** + * 涓嬭浇鍖呰鍏崇郴鍩虹琛ㄧ殑Excel瀵煎叆妯℃澘 + * + * @author ly + */ +export function WmsContainerPackagingDownloadExcelTemplate(parameter) { + return axios({ + url: '/WmsContainerPackaging/downloadExcelTemplate', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + + + diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsSubstituteGoodManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsSubstituteGoodManage.js new file mode 100644 index 0000000..ece8311 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsSubstituteGoodManage.js @@ -0,0 +1,114 @@ +锘縤mport { axios } from '@/utils/request' + +/** + * 鏌ヨ鏇夸唬鍝佺鐞� + * + * @author ly + */ +export function WmsSubstituteGoodPage (parameter) { + return axios({ + url: '/WmsSubstituteGood/page', + method: 'get', + params: parameter + }) +} + +/** + * 鏇夸唬鍝佺鐞嗗垪琛� + * + * @author ly + */ +export function WmsSubstituteGoodList (parameter) { + return axios({ + url: '/WmsSubstituteGood/list', + method: 'get', + params: parameter + }) +} + +/** + * 娣诲姞鏇夸唬鍝佺鐞� + * + * @author ly + */ +export function WmsSubstituteGoodAdd (parameter) { + return axios({ + url: '/WmsSubstituteGood/add', + method: 'post', + data: parameter + }) +} + +/** + * 缂栬緫鏇夸唬鍝佺鐞� + * + * @author ly + */ +export function WmsSubstituteGoodEdit (parameter) { + return axios({ + url: '/WmsSubstituteGood/edit', + method: 'post', + data: parameter + }) +} + +/** + * 鍒犻櫎鏇夸唬鍝佺鐞� + * + * @author ly + */ +export function WmsSubstituteGoodDelete (parameter) { + return axios({ + url: '/WmsSubstituteGood/delete', + method: 'post', + data: parameter + }) +} + + +/** + * 瀵煎嚭鏇夸唬鍝佺鐞嗙殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsSubstituteGoodToExcel (parameter) { + return axios({ + url: '/WmsSubstituteGood/toExcel', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + +/** + * 瀵煎叆鏇夸唬鍝佺鐞嗙殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsSubstituteGoodImportExcel (data, parameter) { + return axios({ + url: '/WmsSubstituteGood/importExcel', + method: 'post', + data: data, + params: parameter + + }) +} + + +/** + * 涓嬭浇鏇夸唬鍝佺鐞嗙殑Excel瀵煎叆妯℃澘 + * + * @author ly + */ +export function WmsSubstituteGoodDownloadExcelTemplate(parameter) { + return axios({ + url: '/WmsSubstituteGood/downloadExcelTemplate', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + + + diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js new file mode 100644 index 0000000..c862dec --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js @@ -0,0 +1,114 @@ +锘縤mport { axios } from '@/utils/request' + +/** + * 鏌ヨ浠撳簱琛� + * + * @author ly + */ +export function WmsWarehousePage (parameter) { + return axios({ + url: '/WmsWarehouse/page', + method: 'get', + params: parameter + }) +} + +/** + * 浠撳簱琛ㄥ垪琛� + * + * @author ly + */ +export function WmsWarehouseList (parameter) { + return axios({ + url: '/WmsWarehouse/list', + method: 'get', + params: parameter + }) +} + +/** + * 娣诲姞浠撳簱琛� + * + * @author ly + */ +export function WmsWarehouseAdd (parameter) { + return axios({ + url: '/WmsWarehouse/add', + method: 'post', + data: parameter + }) +} + +/** + * 缂栬緫浠撳簱琛� + * + * @author ly + */ +export function WmsWarehouseEdit (parameter) { + return axios({ + url: '/WmsWarehouse/edit', + method: 'post', + data: parameter + }) +} + +/** + * 鍒犻櫎浠撳簱琛� + * + * @author ly + */ +export function WmsWarehouseDelete (parameter) { + return axios({ + url: '/WmsWarehouse/delete', + method: 'post', + data: parameter + }) +} + + +/** + * 瀵煎嚭浠撳簱琛ㄧ殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsWarehouseToExcel (parameter) { + return axios({ + url: '/WmsWarehouse/toExcel', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + +/** + * 瀵煎叆浠撳簱琛ㄧ殑Excel鏂囦欢 + * + * @author ly + */ +export function WmsWarehouseImportExcel (data, parameter) { + return axios({ + url: '/WmsWarehouse/importExcel', + method: 'post', + data: data, + params: parameter + + }) +} + + +/** + * 涓嬭浇浠撳簱琛ㄧ殑Excel瀵煎叆妯℃澘 + * + * @author ly + */ +export function WmsWarehouseDownloadExcelTemplate(parameter) { + return axios({ + url: '/WmsWarehouse/downloadExcelTemplate', + method: 'get', + params: parameter, + responseType: 'blob' + }) +} + + + diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue new file mode 100644 index 0000000..d9fa354 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue @@ -0,0 +1,100 @@ +锘�<template> + <a-modal + title="鏂板鍖呰鍏崇郴鍩虹琛�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" /> + </a-form-item> + <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" /> + </a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> + import moment from 'moment' + import { + WmsContainerPackagingAdd + } from '@/api/modular/main/WmsBase/WmsContainerPackagingManage' + 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]) + } + } + WmsContainerPackagingAdd(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/WmsContainerPackaging/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue new file mode 100644 index 0000000..eb6a7d4 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue @@ -0,0 +1,119 @@ +锘�<template> + <a-modal + title="缂栬緫鍖呰鍏崇郴鍩虹琛�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" /> + </a-form-item> + <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" /> + </a-form-item> + <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> +import moment from 'moment' + import { + WmsContainerPackagingEdit + } from '@/api/modular/main/WmsBase/WmsContainerPackagingManage' + export default { + data () { + return { + Id: 0, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 15 } + }, + record: {}, + visible: false, + confirmLoading: false, + form: this.$form.createForm(this) + } + }, + methods: { + moment, + // 鍒濆鍖栨柟娉� + edit (record) { + this.visible = true; + this.Id = record.id; + this.$nextTick(() => { + }); + //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔� + this.record = JSON.parse(JSON.stringify(record)) + this.$nextTick(() => { + this.form.setFieldsValue( + { + id: record.id, + containerTypeId: record.containerTypeId, + containerTypeName: record.containerTypeName, + materialTypeId: record.materialTypeId, + materialTypeCode: record.materialTypeCode, + materialTypeName: record.materialTypeName, + boxQty: record.boxQty + } + ) + }) + }, + handleSubmit () { + const { form: { validateFields } } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (values[key] == null) continue + if (typeof (values[key]) === 'object') { + values[key] = JSON.stringify(values[key]) + this.record[key] = values[key] + } else { + this.record[key] = values[key] + } + } + WmsContainerPackagingEdit(this.record).then((res) => { + if (res.success) { + this.$message.success('缂栬緫鎴愬姛') + this.confirmLoading = false + this.$emit('ok', this.record) + this.handleCancel() + } else { + this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message)) + } + }).finally((res) => { + this.confirmLoading = false + }) + }else{ + this.confirmLoading = false + } + }); + }, + handleCancel () { + this.form.resetFields() + this.visible = false + } + } + } +</script> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/excelForm.vue new file mode 100644 index 0000000..23a0847 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/excelForm.vue @@ -0,0 +1,181 @@ +锘�<template> + <a-modal + :width="850" + :destroyOnClose="true" + :visible="visible" + :forceRender="true" + title="鎵归噺瀵煎叆" + cancelText="鍙栨秷涓婁紶" + okText="寮�濮嬩笂浼�" + @cancel="handleCancel" + @ok="handleSubmit"> + <a-spin :spinning="confirmLoading"> + <a-row :span="24"> + <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span> + </a-row> + <p></p> + <a-row> + <a-col :span="16"> + <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload"> + <a-icon style="font-size: 40px;" type="cloud-upload" /> + </a-upload-dragger> + </a-col> + <!--<a-col :span="8"> + <span>瀵煎叆妯″紡锛�</span> + <a-select + style="width: 130px" + placeholder="璇烽�夋嫨瀵煎叆妯″紡" + v-model="importExcelType"> + <a-select-option + v-for="(item,index) in importExcelTypeData" + :key="index" + :value="item.code">{{ item.name }} + </a-select-option> + </a-select> + </a-col>--> + </a-row> + <a-row :span="24"> + <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed"> + 鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰 + </a-button>--> + <span>銆�</span> + <a-button style="width: 90px;text-align: left;" @click="wmsContainerPackagingDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶 + <span>銆�</span> + <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed"> + 鏀惰捣 + </a-button> + </a-row> + <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24"> + <a-breadcrumb> + <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item> + </a-breadcrumb> + </a-row> + <pre v-show="detailed"> + <div v-html="demandText"></div> + </pre> + <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table> + <pre v-show="detailed"> + <div v-html="columnText"></div> + </pre> + </a-spin> + </a-modal> +</template> + +<script> + import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util' + + import { WmsContainerPackagingImportExcel, WmsContainerPackagingDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsContainerPackagingManage' + import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage' + export default { + components: { + }, + data() { + return { + visible: false, + detailed: false, + confirmLoading: false, + fileList: [], + importExcelTypeData: [], + importExcelType: '1', + uploadFile: null, + columns: [], + dataList: [], + demandText:'', + columnText: '' + } + }, + methods: { + index() { + this.visible = true; + this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type') + this.demandText = parseDemandText("wmsContainerPackagingDownloadExcelTemplate") + window.downloadFile = this.wmsContainerPackagingDownloadExcelTemplate; + this.getTable(); + }, + showDemand() { + this.detailed = !this.detailed; + }, + customRequest(document) { + this.uploadFile = document + }, + getTable() { + sysExcelTemplateGetColumnList({className: "WmsContainerPackaging"}).then(res => + { + if (res.success) { + this.columns =[]; + this.dataList = [{}]; + res.data.forEach(x => { + this.columns.push({ + dataIndex: x.columnName, + key: x.columnName, + title: x.columnComment + }); + this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�" + }); + this.columnText = parseExcelFieldText(res.data); + } + }); + }, + beforeUpload(fileInfo) { + let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']); + if (!res.success) { + this.$message.warning(res.msg) + return false + } + setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000) + }, + handleChange(fileInfo) { + if (fileInfo.file.status === 'error') { + fileInfo.fileList.splice(0, 1) + } + if (fileInfo.file.status === 'done') { + if (fileInfo.fileList.length > 1) { + fileInfo.fileList.splice(0, 1) + } + this.fileList = fileInfo.file + } + }, + handleSubmit() { + this.confirmLoading = true + const formData = new FormData() + formData.append('file', this.uploadFile.file) + WmsContainerPackagingImportExcel(formData, {importExcelType: this.importExcelType}).then(res => { + this.$message.success('鎿嶄綔鎴愬姛') + this.confirmLoading = false + this.$emit('ok', []) + this.handleCancel() + }).finally((res)=>{this.confirmLoading = false}) + }, + handleCancel() { + this.visible = false + this.detailed = false + }, + wmsContainerPackagingDownloadExcelTemplate() { + WmsContainerPackagingDownloadExcelTemplate({version: "v2"}).then((res) => { + downloadFile(res); + }).catch((err) => { + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + } + } + } +</script> + +<style scoped> +::v-deep .ant-upload.ant-upload-drag { + position: relative; + width: 140px; + height: 135px; + text-align: center; + background: #fafafa; + border: 1px dashed #d9d9d9; + border-radius: 2px; + cursor: pointer; + -webkit-transition: border-color 0.3s; + transition: border-color 0.3s; +} +::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) { + color: #ffc53d; + border-color: white; +} +</style> \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue new file mode 100644 index 0000000..4a7714f --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue @@ -0,0 +1,498 @@ +锘�<template> + <div ref="boxOutWrap" class="boxOutWrap"> + <div ref="boxForm" class="boxForm"> + <a-card :bordered="false" :bodyStyle="tstyle"> + + <div class="table-page-search-wrapper" v-if="hasPerm('WmsContainerPackaging:page')"> + <a-form layout="inline"> + <a-row :gutter="48"> + <a-col :md="8" :sm="24"> + <a-form-item label="瀹瑰櫒绫诲瀷ID"> + <a-input v-model="queryParam.containerTypeId" allow-clear placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О"> + <a-input v-model="queryParam.containerTypeName" allow-clear placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�"/> + </a-form-item> + </a-col><template v-if="advanced"> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡绫诲瀷ID"> + <a-input v-model="queryParam.materialTypeId" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡绫诲瀷缂栧彿"> + <a-input v-model="queryParam.materialTypeCode" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡绫诲瀷鍚嶇О"> + <a-input v-model="queryParam.materialTypeName" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺"> + <a-input v-model="queryParam.boxQty" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�"/> + </a-form-item> + </a-col> <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime"/> + + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鏇存柊鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime"/> + + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鑰呭悕绉�"> + <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="淇敼鑰呭悕绉�"> + <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�"/> + </a-form-item> + </a-col> </template> + + <a-col :md="8" :sm="24" > + <span class="table-page-search-submitButtons"> + <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button> + <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button> + <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="advanced ? 'up' : 'down'"/> + </a> + </span> + </a-col> + + </a-row> + </a-form> + </div> + </a-card> + </div> + <a-card :bordered="false"> + <s-table + ref="table" + :columns="columns" + :data="loadData" + :alert="true" + @changeTablePage="pageInfo = $event" + :scroll="{x: true,y:tableHeight}" + :rowKey="(record) => record.id" + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"> + <template class="table-operator" slot="operator" v-if="hasPerm('WmsContainerPackaging:add')" > + <div ref="actionBar" class="actionBar"> + <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()"> + 瀵煎叆 + </a-button> + <a-button type="info" v-if="hasPerm('WmsContainerPackaging:exportExcel')" icon="download" @click="WmsContainerPackagingToExcel()"> + 瀵煎嚭 + </a-button> + <a-button type="primary" v-if="hasPerm('WmsContainerPackaging:add')" icon="plus" @click="$refs.addForm.add()">鏂板鍖呰鍏崇郴鍩虹琛�</a-button> + </div> + </template> + <span slot="action" slot-scope="text, record"> + + <a v-if="hasPerm('WmsContainerPackaging:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a> + <a-divider type="vertical" v-if="hasPerm('WmsContainerPackaging:edit') & hasPerm('WmsContainerPackaging:delete')"/> + <a-popconfirm v-if="hasPerm('WmsContainerPackaging:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsContainerPackagingDelete(record)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </s-table> + <add-form ref="addForm" @ok="handleOk" /> + <edit-form ref="editForm" @ok="handleOk" /> + <excel-form ref="excelForm" @ok="handleOk" /> + </a-card> + </div> +</template> +<script> + import { STable } from '@/components' + import moment from 'moment' + import { WmsContainerPackagingPage, WmsContainerPackagingDelete, WmsContainerPackagingToExcel } from '@/api/modular/main/WmsBase/WmsContainerPackagingManage' + //鑷畾涔塼able楂樺害 + import setTableHtMixin from '@/mixins/handleTableHt.js' + import addForm from './addForm.vue' + import { exportExcel } from '@/utils/exportToExcel' + import { downloadFile } from '@/utils/util' + import editForm from './editForm.vue' + import excelForm from './excelForm.vue' + export default { + mixins: [setTableHtMixin], + components: { + STable, + addForm, + editForm, + excelForm + }, + data () { + return { + advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴 + queryParam: {}, + pageInfo: { + current: 1, + pageSize: 10 + }, + columns: [ + { + title:'搴忓彿', + width: '60px', + align: 'center', + customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}` + }, + { + title: '瀹瑰櫒绫诲瀷ID', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'containerTypeId' + }, + { + title: '瀹瑰櫒绫诲瀷鍚嶇О', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'containerTypeName' + }, + { + title: '鐗╂枡绫诲瀷ID', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'materialTypeId' + }, + { + title: '鐗╂枡绫诲瀷缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'materialTypeCode' + }, + { + title: '鐗╂枡绫诲瀷鍚嶇О', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'materialTypeName' + }, + { + title: '鐗╂枡瀹瑰櫒瀹归噺', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'boxQty' + }, + { + title: '鍒涘缓鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdTime' + }, + { + title: '鏇存柊鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedTime' + }, + { + title: '鍒涘缓鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdUserName' + }, + { + title: '淇敼鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': ''//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedUserName' + } + ], + tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, + // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄 + loadData: parameter => { + return WmsContainerPackagingPage(Object.assign(parameter, this.switchingDate())).then((res) => { + return res.data + }) + }, + selectedRowKeys: [], + selectedRows: [] + } + }, + created () { + if (this.hasPerm('WmsContainerPackaging:edit') || this.hasPerm('WmsContainerPackaging:delete')) { + this.columns.push({ + title: '鎿嶄綔', + width: '150px', + dataIndex: 'action', + scopedSlots: { customRender: 'action' } + }) + } + const path = this.$route.path + const columnStr = window.localStorage.getItem(path) + if(columnStr) { + var _columns = JSON.parse(columnStr) + this.columns.forEach(element => { + var fObj = _columns.find((item, index) => { + return item.dataIndex === element.dataIndex; + }) + if(fObj!=undefined && fObj!=null){ + element.checked=fObj.checked; + } + }); + } + + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + window.addEventListener( + 'resize', + () => { + this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害 + }, + false + ) + + }, + methods: { + moment, + /** + * 鏌ヨ鍙傛暟缁勮 + */ + switchingDate () { + const obj = JSON.parse(JSON.stringify(this.queryParam)) + return obj + }, + WmsContainerPackagingDelete (record) { + WmsContainerPackagingDelete(record).then((res) => { + if (res.success) { + this.$message.success('鍒犻櫎鎴愬姛') + this.$refs.table.refresh() + } else { + this.$message.error('鍒犻櫎澶辫触') // + res.message + } + }) + }, + + + WmsContainerPackagingToExcel() { + this.loading = true + let entozh = {}; + const path = this.$route.path; + if (window.localStorage.getItem(path)) { + JSON.parse(window.localStorage.getItem(path)).forEach(item => { + if (item.dataIndex != 'action' && item.checked) { + entozh[item.dataIndex] = item.title + } + }) + } else { //鐩存帴鐐瑰鍑� + this.columns.forEach(item => { + if (item.dataIndex != 'action') { + entozh[item.dataIndex] = item.title + } + }) + } + WmsContainerPackagingPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => { + this.loading = false; + //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁 + var arrDataCutout = this.columns.filter(v => v.customCutout == true); + res.data.rows.forEach(item => { + var arrKeys = Object.keys(item); + arrKeys.forEach(key => { + var strFieldDic = key + 'Data'; + //鏋氫妇杞�� + if (this[strFieldDic] && this[strFieldDic].length > 0) { + let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key])); + if (arrFieldDic.length > 0) { + item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'; + } + } + // 鏃ユ湡鎴彇 + if (arrDataCutout.length > 0) { + arrDataCutout.forEach(itemIn => { + if (key == itemIn.dataIndex && item[key]) { + item[key] = item[key].split(" ")[0] + } + }) + } + }); + }) + exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`) + }).catch((err) => { + this.loading = false + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + }, + + + toggleAdvanced () { + this.advanced = !this.advanced + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + }, + onChangecreatedTime(date, dateString) { + this.queryParam.createdTime = dateString + }, + onChangeupdatedTime(date, dateString) { + this.queryParam.updatedTime = dateString + }, + handleOk () { + this.$refs.table.refresh() + }, + onSelectChange (selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + } + } + } +</script> +<style lang="less"> + .table-operator { + margin-bottom: 18px; + } + button { + margin-right: 8px; + } +</style> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue index 574cf4b..dc89591 100644 --- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue @@ -8,8 +8,8 @@ @cancel="handleCancel" > <a-spin :spinning="confirmLoading"> - <!-- tab --> - <a-tabs default-active-key="1" @change="callback"> + <!-- tab @change="callback"--> + <a-tabs default-active-key="1" > <a-tab-pane key="1" tab="鍩烘湰淇℃伅"> <add-form ref="addForm" @ok="handleOk" /> </a-tab-pane> @@ -20,14 +20,14 @@ Content of Tab Pane 3 </a-tab-pane> <a-tab-pane key="4" tab="鏇夸唬鍝佺鐞�"> - Content of Tab Pane 4 + <add-form-sub ref="addFormWmsSubstituteGood" @ok="handleOk" /> </a-tab-pane> <a-tab-pane key="5" tab="瀹㈡埛"> <add-form-base-customer ref="addFormBaseCustomer" @ok="handleOk" /> </a-tab-pane> - + <a-tab-pane key="7" tab="鍖呰鍏崇郴"> - Content of Tab Pane 6 + <add-form-container-packaging ref="addFormContainerPackaging" @ok="handleOk" /> </a-tab-pane> </a-tabs> @@ -39,15 +39,15 @@ import { WmsMaterialAdd, GetAreas, GetStations } from '@/api/modular/main/WmsMaterialManage' import addForm from './tabItem/addForm.vue' import addFormBaseCustomer from './tabItem/addFormBaseCustomer.vue' +import addFormContainerPackaging from './tabItem/addFormContainerPackaging.vue' +import addFormSub from './tabItem/addFormWmsSubstituteGood.vue' export default { components: { - // STable, addForm, addFormBaseCustomer, - - // editForm, - // excelForm + addFormContainerPackaging, + addFormSub }, data() { return { @@ -71,6 +71,9 @@ } }, methods: { + handleOk(){ + + }, // 鍒濆鍖栨柟娉� add(record) { this.visible = true diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue new file mode 100644 index 0000000..0fca95c --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormContainerPackaging.vue @@ -0,0 +1,91 @@ +锘�<template> + <!-- 鍖呰鍏崇郴鍩虹琛� --> + <a-form :form="form"> + <a-form-item label="瀹瑰櫒绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨婭D" v-decorator="['containerTypeId']" /> + </a-form-item> + <a-form-item label="瀹瑰櫒绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ鍣ㄧ被鍨嬪悕绉�" v-decorator="['containerTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨婭D" v-decorator="['materialTypeId']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬬紪鍙�" v-decorator="['materialTypeCode']" /> + </a-form-item> + <a-form-item label="鐗╂枡绫诲瀷鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欑被鍨嬪悕绉�" v-decorator="['materialTypeName']" /> + </a-form-item> + <a-form-item label="鐗╂枡瀹瑰櫒瀹归噺" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ョ墿鏂欏鍣ㄥ閲�" v-decorator="['boxQty']" /> + </a-form-item> + </a-form> +</template> + +<script> + import moment from 'moment' + import { + WmsContainerPackagingAdd + } from '@/api/modular/main/WmsBase/WmsContainerPackagingManage' + 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]) + } + } + WmsContainerPackagingAdd(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/addFormWmsSubstituteGood.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue new file mode 100644 index 0000000..71d0a2d --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabItem/addFormWmsSubstituteGood.vue @@ -0,0 +1,94 @@ +锘�<template> + <!-- 鏇夸唬鍝佺鐞� --> + <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> +</template> + +<script> + import moment from 'moment' + import { + WmsSubstituteGoodAdd + } 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) + } + }, + 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]) + } + } + 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/WmsSubstituteGood/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/addForm.vue new file mode 100644 index 0000000..23359a0 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/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="鏇夸唬缂栧彿" :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> +</template> + +<script> + import moment from 'moment' + import { + WmsSubstituteGoodAdd + } 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) + } + }, + 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]) + } + } + 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/WmsSubstituteGood/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/editForm.vue new file mode 100644 index 0000000..c755d17 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/editForm.vue @@ -0,0 +1,123 @@ +锘�<template> + <a-modal + title="缂栬緫鏇夸唬鍝佺鐞�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="鏇夸唬缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ユ浛浠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-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 { + WmsSubstituteGoodEdit + } from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage' + 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, + substituteCode: record.substituteCode, + materialCode: record.materialCode, + materialName: record.materialName, + substituteMaterialCode: record.substituteMaterialCode, + substituteMaterialName: record.substituteMaterialName, + substituteIndex: record.substituteIndex, + isDisabled: record.isDisabled + } + ) + }) + }, + handleSubmit () { + const { form: { validateFields } } = this + this.confirmLoading = true + validateFields((errors, values) => { + if (!errors) { + for (const key in values) { + if (values[key] == null) continue + if (typeof (values[key]) === 'object') { + values[key] = JSON.stringify(values[key]) + this.record[key] = values[key] + } else { + this.record[key] = values[key] + } + } + WmsSubstituteGoodEdit(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/WmsSubstituteGood/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/excelForm.vue new file mode 100644 index 0000000..4c8af3c --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/excelForm.vue @@ -0,0 +1,181 @@ +锘�<template> + <a-modal + :width="850" + :destroyOnClose="true" + :visible="visible" + :forceRender="true" + title="鎵归噺瀵煎叆" + cancelText="鍙栨秷涓婁紶" + okText="寮�濮嬩笂浼�" + @cancel="handleCancel" + @ok="handleSubmit"> + <a-spin :spinning="confirmLoading"> + <a-row :span="24"> + <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span> + </a-row> + <p></p> + <a-row> + <a-col :span="16"> + <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload"> + <a-icon style="font-size: 40px;" type="cloud-upload" /> + </a-upload-dragger> + </a-col> + <!--<a-col :span="8"> + <span>瀵煎叆妯″紡锛�</span> + <a-select + style="width: 130px" + placeholder="璇烽�夋嫨瀵煎叆妯″紡" + v-model="importExcelType"> + <a-select-option + v-for="(item,index) in importExcelTypeData" + :key="index" + :value="item.code">{{ item.name }} + </a-select-option> + </a-select> + </a-col>--> + </a-row> + <a-row :span="24"> + <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed"> + 鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰 + </a-button>--> + <span>銆�</span> + <a-button style="width: 90px;text-align: left;" @click="wmsSubstituteGoodDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶 + <span>銆�</span> + <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed"> + 鏀惰捣 + </a-button> + </a-row> + <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24"> + <a-breadcrumb> + <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item> + </a-breadcrumb> + </a-row> + <pre v-show="detailed"> + <div v-html="demandText"></div> + </pre> + <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table> + <pre v-show="detailed"> + <div v-html="columnText"></div> + </pre> + </a-spin> + </a-modal> +</template> + +<script> + import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util' + + import { WmsSubstituteGoodImportExcel, WmsSubstituteGoodDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage' + import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage' + export default { + components: { + }, + data() { + return { + visible: false, + detailed: false, + confirmLoading: false, + fileList: [], + importExcelTypeData: [], + importExcelType: '1', + uploadFile: null, + columns: [], + dataList: [], + demandText:'', + columnText: '' + } + }, + methods: { + index() { + this.visible = true; + this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type') + this.demandText = parseDemandText("wmsSubstituteGoodDownloadExcelTemplate") + window.downloadFile = this.wmsSubstituteGoodDownloadExcelTemplate; + this.getTable(); + }, + showDemand() { + this.detailed = !this.detailed; + }, + customRequest(document) { + this.uploadFile = document + }, + getTable() { + sysExcelTemplateGetColumnList({className: "WmsSubstituteGood"}).then(res => + { + if (res.success) { + this.columns =[]; + this.dataList = [{}]; + res.data.forEach(x => { + this.columns.push({ + dataIndex: x.columnName, + key: x.columnName, + title: x.columnComment + }); + this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�" + }); + this.columnText = parseExcelFieldText(res.data); + } + }); + }, + beforeUpload(fileInfo) { + let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']); + if (!res.success) { + this.$message.warning(res.msg) + return false + } + setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000) + }, + handleChange(fileInfo) { + if (fileInfo.file.status === 'error') { + fileInfo.fileList.splice(0, 1) + } + if (fileInfo.file.status === 'done') { + if (fileInfo.fileList.length > 1) { + fileInfo.fileList.splice(0, 1) + } + this.fileList = fileInfo.file + } + }, + handleSubmit() { + this.confirmLoading = true + const formData = new FormData() + formData.append('file', this.uploadFile.file) + WmsSubstituteGoodImportExcel(formData, {importExcelType: this.importExcelType}).then(res => { + this.$message.success('鎿嶄綔鎴愬姛') + this.confirmLoading = false + this.$emit('ok', []) + this.handleCancel() + }).finally((res)=>{this.confirmLoading = false}) + }, + handleCancel() { + this.visible = false + this.detailed = false + }, + wmsSubstituteGoodDownloadExcelTemplate() { + WmsSubstituteGoodDownloadExcelTemplate({version: "v2"}).then((res) => { + downloadFile(res); + }).catch((err) => { + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + } + } + } +</script> + +<style scoped> +::v-deep .ant-upload.ant-upload-drag { + position: relative; + width: 140px; + height: 135px; + text-align: center; + background: #fafafa; + border: 1px dashed #d9d9d9; + border-radius: 2px; + cursor: pointer; + -webkit-transition: border-color 0.3s; + transition: border-color 0.3s; +} +::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) { + color: #ffc53d; + border-color: white; +} +</style> \ No newline at end of file diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/index.vue new file mode 100644 index 0000000..8e04a41 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsSubstituteGood/index.vue @@ -0,0 +1,537 @@ +锘�<template> + <div ref="boxOutWrap" class="boxOutWrap"> + <div ref="boxForm" class="boxForm"> + <a-card :bordered="false" :bodyStyle="tstyle"> + + <div class="table-page-search-wrapper" v-if="hasPerm('WmsSubstituteGood:page')"> + <a-form layout="inline"> + <a-row :gutter="48"> + <a-col :md="8" :sm="24"> + <a-form-item label="鏇夸唬缂栧彿"> + <a-input v-model="queryParam.substituteCode" allow-clear placeholder="璇疯緭鍏ユ浛浠g紪鍙�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡缂栧彿"> + <a-input v-model="queryParam.materialCode" allow-clear placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�"/> + </a-form-item> + </a-col><template v-if="advanced"> + <a-col :md="8" :sm="24"> + <a-form-item label="鐗╂枡鍚嶇О"> + <a-input v-model="queryParam.materialName" allow-clear placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏇夸唬鍝佺墿鏂欑紪鍙�"> + <a-input v-model="queryParam.substituteMaterialCode" allow-clear placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡缂栧彿"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏇夸唬鍝佺墿鏂欏悕绉�"> + <a-input v-model="queryParam.substituteMaterialName" allow-clear placeholder="璇疯緭鍏ユ浛浠e搧鐗╂枡鍚嶇О"/> + </a-form-item> + </a-col><a-col :md="8" :sm="24"> + <a-form-item label="鏇夸唬娆″簭"> + <a-input-number v-model="queryParam.substituteIndex" style="width: 100%" allow-clear placeholder="璇疯緭鍏ユ浛浠f搴�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏄惁绂佺敤"> + <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="璇烽�夋嫨鏄惁绂佺敤"> + <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime"/> + + </a-form-item> + </a-col> + <!--骞存湀鏃ユ椂鍒嗙--> + <!--鏃堕棿鑼冨洿--> + + <a-col :md="8" :sm="24"> + <a-form-item label="鏇存柊鏃堕棿"> + <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{ +format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime"/> + + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="鍒涘缓鑰呭悕绉�"> + <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="淇敼鑰呭悕绉�"> + <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�"/> + </a-form-item> + </a-col> </template> + + <a-col :md="8" :sm="24" > + <span class="table-page-search-submitButtons"> + <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button> + <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button> + <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="advanced ? 'up' : 'down'"/> + </a> + </span> + </a-col> + + </a-row> + </a-form> + </div> + </a-card> + </div> + <a-card :bordered="false"> + <s-table + ref="table" + :columns="columns" + :data="loadData" + :alert="true" + @changeTablePage="pageInfo = $event" + :scroll="{x: true,y:tableHeight}" + :rowKey="(record) => record.id" + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"> + <template class="table-operator" slot="operator" v-if="hasPerm('WmsSubstituteGood:add')" > + <div ref="actionBar" class="actionBar"> + <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()"> + 瀵煎叆 + </a-button> + <a-button type="info" v-if="hasPerm('WmsSubstituteGood:exportExcel')" icon="download" @click="WmsSubstituteGoodToExcel()"> + 瀵煎嚭 + </a-button> + <a-button type="primary" v-if="hasPerm('WmsSubstituteGood:add')" icon="plus" @click="$refs.addForm.add()">鏂板鏇夸唬鍝佺鐞�</a-button> + </div> + </template> + <span slot="isDisabledscopedSlots" slot-scope="text"> + <div v-if="text===true "> + <a-tag color="green">鏄�</a-tag> + </div> + <div v-else-if="text==false"> + <a-tag color="volcano">鍚�</a-tag> + </div> + <div v-else=""></div> + </span> + <span slot="action" slot-scope="text, record"> + + <a v-if="hasPerm('WmsSubstituteGood:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a> + <a-divider type="vertical" v-if="hasPerm('WmsSubstituteGood:edit') & hasPerm('WmsSubstituteGood:delete')"/> + <a-popconfirm v-if="hasPerm('WmsSubstituteGood:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsSubstituteGoodDelete(record)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </span> + </s-table> + <add-form ref="addForm" @ok="handleOk" /> + <edit-form ref="editForm" @ok="handleOk" /> + <excel-form ref="excelForm" @ok="handleOk" /> + </a-card> + </div> +</template> +<script> + import { STable } from '@/components' + import moment from 'moment' + import { WmsSubstituteGoodPage, WmsSubstituteGoodDelete, WmsSubstituteGoodToExcel } from '@/api/modular/main/WmsBase/WmsSubstituteGoodManage' + //鑷畾涔塼able楂樺害 + import setTableHtMixin from '@/mixins/handleTableHt.js' + import addForm from './addForm.vue' + import { exportExcel } from '@/utils/exportToExcel' + import { downloadFile } from '@/utils/util' + import editForm from './editForm.vue' + import excelForm from './excelForm.vue' + export default { + mixins: [setTableHtMixin], + components: { + STable, + addForm, + editForm, + excelForm + }, + data () { + return { + advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴 + queryParam: {}, + pageInfo: { + current: 1, + pageSize: 10 + }, + columns: [ + { + title:'搴忓彿', + width: '60px', + align: 'center', + customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}` + }, + { + title: '鏇夸唬缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'substituteCode' + }, + { + title: '鐗╂枡缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'materialCode' + }, + { + title: '鐗╂枡鍚嶇О', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'materialName' + }, + { + title: '鏇夸唬鍝佺墿鏂欑紪鍙�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'substituteMaterialCode' + }, + { + title: '鏇夸唬鍝佺墿鏂欏悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '140px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'substituteMaterialName' + }, + { + title: '鏇夸唬娆″簭', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'substituteIndex' + }, + { + title: '鏄惁绂佺敤', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'isDisabled', + scopedSlots: { customRender: 'isDisabledscopedSlots' } + }, + { + title: '鍒涘缓鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdTime' + }, + { + title: '鏇存柊鏃堕棿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedTime' + }, + { + title: '鍒涘缓鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'createdUserName' + }, + { + title: '淇敼鑰呭悕绉�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'updatedUserName' + } + ], + tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, + // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄 + loadData: parameter => { + return WmsSubstituteGoodPage(Object.assign(parameter, this.switchingDate())).then((res) => { + return res.data + }) + }, + selectedRowKeys: [], + selectedRows: [] + } + }, + created () { + if (this.hasPerm('WmsSubstituteGood:edit') || this.hasPerm('WmsSubstituteGood:delete')) { + this.columns.push({ + title: '鎿嶄綔', + width: '150px', + dataIndex: 'action', + scopedSlots: { customRender: 'action' } + }) + } + const path = this.$route.path + const columnStr = window.localStorage.getItem(path) + if(columnStr) { + var _columns = JSON.parse(columnStr) + this.columns.forEach(element => { + var fObj = _columns.find((item, index) => { + return item.dataIndex === element.dataIndex; + }) + if(fObj!=undefined && fObj!=null){ + element.checked=fObj.checked; + } + }); + } + const isDisabledOption = this.$options + this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false') + + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + window.addEventListener( + 'resize', + () => { + this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害 + }, + false + ) + + }, + methods: { + moment, + /** + * 鏌ヨ鍙傛暟缁勮 + */ + switchingDate () { + const obj = JSON.parse(JSON.stringify(this.queryParam)) + return obj + }, + WmsSubstituteGoodDelete (record) { + WmsSubstituteGoodDelete(record).then((res) => { + if (res.success) { + this.$message.success('鍒犻櫎鎴愬姛') + this.$refs.table.refresh() + } else { + this.$message.error('鍒犻櫎澶辫触') // + res.message + } + }) + }, + + + WmsSubstituteGoodToExcel() { + this.loading = true + let entozh = {}; + const path = this.$route.path; + if (window.localStorage.getItem(path)) { + JSON.parse(window.localStorage.getItem(path)).forEach(item => { + if (item.dataIndex != 'action' && item.checked) { + entozh[item.dataIndex] = item.title + } + }) + } else { //鐩存帴鐐瑰鍑� + this.columns.forEach(item => { + if (item.dataIndex != 'action') { + entozh[item.dataIndex] = item.title + } + }) + } + WmsSubstituteGoodPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => { + this.loading = false; + //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁 + var arrDataCutout = this.columns.filter(v => v.customCutout == true); + res.data.rows.forEach(item => { + var arrKeys = Object.keys(item); + arrKeys.forEach(key => { + var strFieldDic = key + 'Data'; + //鏋氫妇杞�� + if (this[strFieldDic] && this[strFieldDic].length > 0) { + let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key])); + if (arrFieldDic.length > 0) { + item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'; + } + } + // 鏃ユ湡鎴彇 + if (arrDataCutout.length > 0) { + arrDataCutout.forEach(itemIn => { + if (key == itemIn.dataIndex && item[key]) { + item[key] = item[key].split(" ")[0] + } + }) + } + }); + }) + exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`) + }).catch((err) => { + this.loading = false + this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err) + }) + }, + + + toggleAdvanced () { + this.advanced = !this.advanced + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + }, + onChangecreatedTime(date, dateString) { + this.queryParam.createdTime = dateString + }, + onChangeupdatedTime(date, dateString) { + this.queryParam.updatedTime = dateString + }, + handleOk () { + this.$refs.table.refresh() + }, + onSelectChange (selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + } + } + } +</script> +<style lang="less"> + .table-operator { + margin-bottom: 18px; + } + button { + margin-right: 8px; + } +</style> diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue new file mode 100644 index 0000000..5c9eb3c --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue @@ -0,0 +1,115 @@ +锘�<template> + <a-modal + title="鏂板浠撳簱琛�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="浠撳簱缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撶紪鍙�" v-decorator="['code', {rules: [{required: true, message: '璇疯緭鍏ヤ粨搴撶紪鍙凤紒'}]}]" /> + </a-form-item> + <a-form-item label="浠撳簱鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" v-decorator="['name', {rules: [{required: true, message: '璇疯緭鍏ヤ粨搴撳悕绉帮紒'}]}]" /> + </a-form-item> + <a-form-item label="浠撳簱鍦板潃" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撳湴鍧�" v-decorator="['address']" /> + </a-form-item> + <a-form-item label="宸ュ巶缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ伐鍘傜紪鍙�" v-decorator="['factoryCode']" /> + </a-form-item> + <a-form-item label="闀�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ラ暱" v-decorator="['length']" /> + </a-form-item> + <a-form-item label="瀹�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ" v-decorator="['width']" /> + </a-form-item> + <a-form-item label="楂�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ラ珮" v-decorator="['height']" /> + </a-form-item> + <a-form-item label="鍩烘湰鍗曞厓" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ熀鏈崟鍏�" v-decorator="['baseUnit']" /> + </a-form-item> + <a-form-item label="瀹氫綅" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ畾浣�" v-decorator="['position']" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + <a-form-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ娉�" v-decorator="['remarks']" /> + </a-form-item> + </a-form> + </a-spin> + </a-modal> +</template> + +<script> + import moment from 'moment' + import { + WmsWarehouseAdd + } from '@/api/modular/main/WmsBase/WmsWarehouseManage' + 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]) + } + } + WmsWarehouseAdd(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/WmsWarehouse/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/editForm.vue new file mode 100644 index 0000000..3e8cf66 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/editForm.vue @@ -0,0 +1,139 @@ +锘�<template> + <a-modal + title="缂栬緫浠撳簱琛�" + :width="900" + :visible="visible" + :confirmLoading="confirmLoading" + @ok="handleSubmit" + @cancel="handleCancel"> + <a-spin :spinning="confirmLoading"> + <a-form :form="form"> + <a-form-item label="浠撳簱缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撶紪鍙�" v-decorator="['code', {rules: [{required: true, message: '璇疯緭鍏ヤ粨搴撶紪鍙凤紒'}]}]" /> + </a-form-item> + <a-form-item label="浠撳簱鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撳悕绉�" v-decorator="['name', {rules: [{required: true, message: '璇疯緭鍏ヤ粨搴撳悕绉帮紒'}]}]" /> + </a-form-item> + <a-form-item label="浠撳簱鍦板潃" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ヤ粨搴撳湴鍧�" v-decorator="['address']" /> + </a-form-item> + <a-form-item label="宸ュ巶缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ伐鍘傜紪鍙�" v-decorator="['factoryCode']" /> + </a-form-item> + <a-form-item label="闀�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ラ暱" v-decorator="['length']" /> + </a-form-item> + <a-form-item label="瀹�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ" v-decorator="['width']" /> + </a-form-item> + <a-form-item label="楂�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ラ珮" v-decorator="['height']" /> + </a-form-item> + <a-form-item label="鍩烘湰鍗曞厓" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ熀鏈崟鍏�" v-decorator="['baseUnit']" /> + </a-form-item> + <a-form-item label="瀹氫綅" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ畾浣�" v-decorator="['position']" /> + </a-form-item> + <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" /> + </a-form-item> + <a-form-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> + <a-input placeholder="璇疯緭鍏ュ娉�" v-decorator="['remarks']" /> + </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 { + WmsWarehouseEdit + } from '@/api/modular/main/WmsBase/WmsWarehouseManage' + 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, + code: record.code, + name: record.name, + address: record.address, + factoryCode: record.factoryCode, + length: record.length, + width: record.width, + height: record.height, + baseUnit: record.baseUnit, + position: record.position, + isDisabled: record.isDisabled, + remarks: record.remarks + } + ) + }) + }, + 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] + } + } + WmsWarehouseEdit(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/WmsWarehouse/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/excelForm.vue new file mode 100644 index 0000000..29114db --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/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="wmsWarehouseDownloadExcelTemplate" 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 { WmsWarehouseImportExcel, WmsWarehouseDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsWarehouseManage' + 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("wmsWarehouseDownloadExcelTemplate") + window.downloadFile = this.wmsWarehouseDownloadExcelTemplate; + this.getTable(); + }, + showDemand() { + this.detailed = !this.detailed; + }, + customRequest(document) { + this.uploadFile = document + }, + getTable() { + sysExcelTemplateGetColumnList({className: "WmsWarehouse"}).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) + WmsWarehouseImportExcel(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 + }, + wmsWarehouseDownloadExcelTemplate() { + WmsWarehouseDownloadExcelTemplate({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/WmsWarehouse/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/index.vue new file mode 100644 index 0000000..c4b00fd --- /dev/null +++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/index.vue @@ -0,0 +1,638 @@ +锘�<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('WmsWarehouse:page')"> + <a-form layout="inline"> + <a-row :gutter="48"> + <a-col :md="8" :sm="24"> + <a-form-item label="浠撳簱缂栧彿"> + <a-input v-model="queryParam.code" allow-clear placeholder="璇疯緭鍏ヤ粨搴撶紪鍙�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="浠撳簱鍚嶇О"> + <a-input v-model="queryParam.name" 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.address" allow-clear placeholder="璇疯緭鍏ヤ粨搴撳湴鍧�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="宸ュ巶缂栧彿"> + <a-input v-model="queryParam.factoryCode" allow-clear placeholder="璇疯緭鍏ュ伐鍘傜紪鍙�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="闀�"> + <a-input v-model="queryParam.length" allow-clear placeholder="璇疯緭鍏ラ暱"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="瀹�"> + <a-input v-model="queryParam.width" allow-clear placeholder="璇疯緭鍏ュ"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="楂�"> + <a-input v-model="queryParam.height" allow-clear placeholder="璇疯緭鍏ラ珮"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鍩烘湰鍗曞厓"> + <a-input v-model="queryParam.baseUnit" allow-clear placeholder="璇疯緭鍏ュ熀鏈崟鍏�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="瀹氫綅"> + <a-input v-model="queryParam.position" allow-clear placeholder="璇疯緭鍏ュ畾浣�"/> + </a-form-item> + </a-col> + <a-col :md="8" :sm="24"> + <a-form-item label="鏄惁绂佺敤"> + <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="璇烽�夋嫨鏄惁绂佺敤"> + <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="8" :sm="24"> + <a-form-item label="澶囨敞"> + <a-input v-model="queryParam.remarks" 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('WmsWarehouse: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('WmsWarehouse:exportExcel')" icon="download" @click="WmsWarehouseToExcel()"> + 瀵煎嚭 + </a-button> + <a-button type="primary" v-if="hasPerm('WmsWarehouse:add')" icon="plus" @click="$refs.addForm.add()">鏂板浠撳簱琛�</a-button> + </div> + </template> + <span slot="isDisabledscopedSlots" slot-scope="text"> + <div v-if="text===true "> + <a-tag color="green">鏄�</a-tag> + </div> + <div v-else-if="text==false"> + <a-tag color="volcano">鍚�</a-tag> + </div> + <div v-else=""></div> + </span> + <span slot="action" slot-scope="text, record"> + + <a v-if="hasPerm('WmsWarehouse:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a> + <a-divider type="vertical" v-if="hasPerm('WmsWarehouse:edit') & hasPerm('WmsWarehouse:delete')"/> + <a-popconfirm v-if="hasPerm('WmsWarehouse:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsWarehouseDelete(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 { WmsWarehousePage, WmsWarehouseDelete, WmsWarehouseToExcel } from '@/api/modular/main/WmsBase/WmsWarehouseManage' + //鑷畾涔塼able楂樺害 + import setTableHtMixin from '@/mixins/handleTableHt.js' + import addForm from './addForm.vue' + import { exportExcel } from '@/utils/exportToExcel' + import { downloadFile } from '@/utils/util' + import editForm from './editForm.vue' + import excelForm from './excelForm.vue' + export default { + mixins: [setTableHtMixin], + components: { + STable, + addForm, + editForm, + excelForm + }, + data () { + return { + advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴 + queryParam: {}, + pageInfo: { + current: 1, + pageSize: 10 + }, + columns: [ + { + title:'搴忓彿', + width: '60px', + align: 'center', + customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}` + }, + { + title: '浠撳簱缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'code' + }, + { + title: '浠撳簱鍚嶇О', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'name' + }, + { + title: '浠撳簱鍦板潃', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'address' + }, + { + title: '宸ュ巶缂栧彿', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'factoryCode' + }, + { + title: '闀�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'length' + }, + { + title: '瀹�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'width' + }, + { + title: '楂�', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'height' + }, + { + title: '鍩烘湰鍗曞厓', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'baseUnit' + }, + { + title: '瀹氫綅', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'position' + }, + { + title: '鏄惁绂佺敤', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'isDisabled', + scopedSlots: { customRender: 'isDisabledscopedSlots' } + }, + { + title: '澶囨敞', + align: 'center', + customHeaderCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + customCell: () => { + return { + style: { + 'min-width': '120px'//鏈�灏忓垪瀹借缃� + } + } + }, + sorter: true, + dataIndex: 'remarks' + }, + { + 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 WmsWarehousePage(Object.assign(parameter, this.switchingDate())).then((res) => { + return res.data + }) + }, + selectedRowKeys: [], + selectedRows: [] + } + }, + created () { + if (this.hasPerm('WmsWarehouse:edit') || this.hasPerm('WmsWarehouse:delete')) { + this.columns.push({ + title: '鎿嶄綔', + width: '150px', + dataIndex: 'action', + scopedSlots: { customRender: 'action' } + }) + } + const path = this.$route.path + const columnStr = window.localStorage.getItem(path) + if(columnStr) { + var _columns = JSON.parse(columnStr) + this.columns.forEach(element => { + var fObj = _columns.find((item, index) => { + return item.dataIndex === element.dataIndex; + }) + if(fObj!=undefined && fObj!=null){ + element.checked=fObj.checked; + } + }); + } + const isDisabledOption = this.$options + this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false') + + this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害 + window.addEventListener( + 'resize', + () => { + this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害 + }, + false + ) + + }, + methods: { + moment, + /** + * 鏌ヨ鍙傛暟缁勮 + */ + switchingDate () { + const obj = JSON.parse(JSON.stringify(this.queryParam)) + return obj + }, + WmsWarehouseDelete (record) { + WmsWarehouseDelete(record).then((res) => { + if (res.success) { + this.$message.success('鍒犻櫎鎴愬姛') + this.$refs.table.refresh() + } else { + this.$message.error('鍒犻櫎澶辫触') // + res.message + } + }) + }, + + + WmsWarehouseToExcel() { + 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 + } + }) + } + WmsWarehousePage(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 new file mode 100644 index 0000000..dab796a --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs @@ -0,0 +1,193 @@ +锘縰sing Admin.NET.Core; +using Admin.NET.Core.Service; +using System.ComponentModel.DataAnnotations; + +namespace Admin.NET.Application +{ + + /// <summary> + /// 鍖呰鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁� + /// </summary> + public class WmsContainerPackagingSearch : PageInputBase + { + /// <summary> + /// 瀹瑰櫒绫诲瀷ID + /// </summary> + public virtual long? ContainerTypeId { get; set; } + + /// <summary> + /// 瀹瑰櫒绫诲瀷鍚嶇О + /// </summary> + public virtual string ContainerTypeName { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷ID + /// </summary> + public virtual long? MaterialTypeId { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷缂栧彿 + /// </summary> + public virtual string MaterialTypeCode { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷鍚嶇О + /// </summary> + public virtual string MaterialTypeName { get; set; } + + /// <summary> + /// 鐗╂枡瀹瑰櫒瀹归噺 + /// </summary> + public virtual decimal? BoxQty { 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 WmsContainerPackagingSearchNonPage : PageInputNonPageBase + { + /// <summary> + /// 瀹瑰櫒绫诲瀷ID + /// </summary> + public virtual long? ContainerTypeId { get; set; } + + /// <summary> + /// 瀹瑰櫒绫诲瀷鍚嶇О + /// </summary> + public virtual string ContainerTypeName { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷ID + /// </summary> + public virtual long? MaterialTypeId { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷缂栧彿 + /// </summary> + public virtual string MaterialTypeCode { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷鍚嶇О + /// </summary> + public virtual string MaterialTypeName { get; set; } + + /// <summary> + /// 鐗╂枡瀹瑰櫒瀹归噺 + /// </summary> + public virtual decimal? BoxQty { 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 WmsContainerPackagingInput + { + /// <summary> + /// 瀹瑰櫒绫诲瀷ID + /// </summary> + public virtual long? ContainerTypeId { get; set; } + + /// <summary> + /// 瀹瑰櫒绫诲瀷鍚嶇О + /// </summary> + public virtual string ContainerTypeName { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷ID + /// </summary> + public virtual long? MaterialTypeId { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷缂栧彿 + /// </summary> + public virtual string MaterialTypeCode { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷鍚嶇О + /// </summary> + public virtual string MaterialTypeName { get; set; } + + /// <summary> + /// 鐗╂枡瀹瑰櫒瀹归噺 + /// </summary> + public virtual decimal? BoxQty { get; set; } + + } + + /// <summary> + /// 鍖呰鍏崇郴鍩虹琛ㄦ柊澧炲弬鏁� + /// </summary> + public class AddWmsContainerPackagingInput : WmsContainerPackagingInput + { + } + + /// <summary> + /// 鍖呰鍏崇郴鍩虹琛ㄥ垹闄ゅ弬鏁� + /// </summary> + public class DeleteWmsContainerPackagingInput : BaseId + { + } + + /// <summary> + /// 鍖呰鍏崇郴鍩虹琛ㄦ洿鏂板弬鏁� + /// </summary> + public class UpdateWmsContainerPackagingInput : WmsContainerPackagingInput + { + /// <summary> + /// Id涓婚敭 + /// </summary> + [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")] + public long? Id { get; set; } + + } + + /// <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 new file mode 100644 index 0000000..bcea1eb --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs @@ -0,0 +1,67 @@ +锘縰sing Admin.NET.Core.Util.LowCode.Dto; +using System; + +namespace Admin.NET.Application +{ + /// <summary> + /// 鍖呰鍏崇郴鍩虹琛ㄨ緭鍑哄弬鏁� + /// </summary> + public class WmsContainerPackagingOutput + { + /// <summary> + /// 瀹瑰櫒绫诲瀷ID + /// </summary> + public long? ContainerTypeId { get; set; } + + /// <summary> + /// 瀹瑰櫒绫诲瀷鍚嶇О + /// </summary> + public string ContainerTypeName { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷ID + /// </summary> + public long? MaterialTypeId { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷缂栧彿 + /// </summary> + public string MaterialTypeCode { get; set; } + + /// <summary> + /// 鐗╂枡绫诲瀷鍚嶇О + /// </summary> + public string MaterialTypeName { get; set; } + + /// <summary> + /// 鐗╂枡瀹瑰櫒瀹归噺 + /// </summary> + public decimal? BoxQty { 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/WmsContainerPackaging/IWmsContainerPackagingService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/IWmsContainerPackagingService.cs new file mode 100644 index 0000000..a89a297 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/IWmsContainerPackagingService.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 IWmsContainerPackagingService + { + Task<WmsContainerPackagingOutput> Get([FromQuery] QueryeWmsContainerPackagingInput input); + Task<List<WmsContainerPackagingOutput>> List([FromQuery] WmsContainerPackagingInput input); + Task<PageResult<WmsContainerPackagingOutput>> Page([FromQuery] WmsContainerPackagingSearch input); + Task<List<WmsContainerPackagingOutput>> ListNonPageAsync([FromQuery] WmsContainerPackagingSearchNonPage input); + + Task Add(AddWmsContainerPackagingInput input); + Task Update(UpdateWmsContainerPackagingInput input); + Task Delete(DeleteWmsContainerPackagingInput 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/WmsContainerPackaging/Map/WmsContainerPackagingMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Map/WmsContainerPackagingMapper.cs new file mode 100644 index 0000000..4a251b4 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Map/WmsContainerPackagingMapper.cs @@ -0,0 +1,18 @@ +锘縰sing Mapster; +using Admin.NET.Core; + +namespace Admin.NET.Application +{ + public class WmsContainerPackagingMapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<AddWmsContainerPackagingInput, WmsContainerPackaging>() + ; + config.ForType<UpdateWmsContainerPackagingInput, WmsContainerPackaging>() + ; + config.ForType<WmsContainerPackaging, 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 new file mode 100644 index 0000000..c2759c1 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs @@ -0,0 +1,397 @@ +锘縰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 = "WmsContainerPackaging", Order = 100)] + [Route("api")] + public class WmsContainerPackagingService : IWmsContainerPackagingService, IDynamicApiController, ITransient + { + private readonly IRepository<WmsContainerPackaging,MasterDbContextLocator> _wmsContainerPackagingRep; + private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; + private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; + private readonly ISysExcelTemplateService _sysExcelTemplateService; + private readonly static object _lock = new(); + + public WmsContainerPackagingService( + IRepository<WmsContainerPackaging,MasterDbContextLocator> wmsContainerPackagingRep + ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep + ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep + ,ISysExcelTemplateService sysExcelTemplateService + ) + { + _wmsContainerPackagingRep = wmsContainerPackagingRep; + _sysDictTypeRep = sysDictTypeRep; + _sysDictDataRep = sysDictDataRep; + _sysExcelTemplateService = sysExcelTemplateService; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ鍖呰鍏崇郴鍩虹琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsContainerPackaging/page")] + public async Task<PageResult<WmsContainerPackagingOutput>> Page([FromQuery] WmsContainerPackagingSearch input) + { + var wmsContainerPackagings = await _wmsContainerPackagingRep.DetachedEntities + .Where(input.ContainerTypeId != null, u => u.ContainerTypeId == input.ContainerTypeId) + .Where(!string.IsNullOrEmpty(input.ContainerTypeName), u => u.ContainerTypeName == input.ContainerTypeName) + .Where(input.MaterialTypeId != null, u => u.MaterialTypeId == input.MaterialTypeId) + .Where(!string.IsNullOrEmpty(input.MaterialTypeCode), u => u.MaterialTypeCode == input.MaterialTypeCode) + .Where(!string.IsNullOrEmpty(input.MaterialTypeName), u => u.MaterialTypeName == input.MaterialTypeName) + .Where(input.BoxQty != null, u => u.BoxQty == input.BoxQty) + .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<WmsContainerPackagingSearch>(input)) + .ProjectToType<WmsContainerPackagingOutput>() + .ToADPagedListAsync(input.PageNo, input.PageSize); + return wmsContainerPackagings; + } + + /// <summary> + /// 涓嶅垎椤垫煡璇㈠寘瑁呭叧绯诲熀纭�琛ㄥ垪琛� + /// </summary> + /// <param name="input">鍖呰鍏崇郴鍩虹琛ㄦ煡璇㈠弬鏁�</param> + /// <returns>(鍖呰鍏崇郴鍩虹琛�)瀹炰緥鍒楄〃</returns> + [HttpGet("WmsContainerPackaging/listNonPage")] + public async Task<List<WmsContainerPackagingOutput>> ListNonPageAsync([FromQuery] WmsContainerPackagingSearchNonPage input) + { + var pContainerTypeId = input.ContainerTypeId; + var pContainerTypeName = input.ContainerTypeName?.Trim() ?? ""; + var pMaterialTypeId = input.MaterialTypeId; + var pMaterialTypeCode = input.MaterialTypeCode?.Trim() ?? ""; + var pMaterialTypeName = input.MaterialTypeName?.Trim() ?? ""; + var pBoxQty = input.BoxQty; + var pCreatedTime = input.CreatedTime; + var pUpdatedTime = input.UpdatedTime; + var pCreatedUserName = input.CreatedUserName?.Trim() ?? ""; + var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? ""; + var wmsContainerPackagings = await _wmsContainerPackagingRep.DetachedEntities + .Where(pContainerTypeId != null, u => u.ContainerTypeId == pContainerTypeId) + .Where(!string.IsNullOrEmpty(pContainerTypeName), u => u.ContainerTypeName == pContainerTypeName) + .Where(pMaterialTypeId != null, u => u.MaterialTypeId == pMaterialTypeId) + .Where(!string.IsNullOrEmpty(pMaterialTypeCode), u => u.MaterialTypeCode == pMaterialTypeCode) + .Where(!string.IsNullOrEmpty(pMaterialTypeName), u => u.MaterialTypeName == pMaterialTypeName) + .Where(pBoxQty != null, u => u.BoxQty == pBoxQty) + .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<WmsContainerPackagingOutput>() + .ToListAsync(); + return wmsContainerPackagings; + } + + /// <summary> + /// 鑾峰彇鍖呰鍏崇郴鍩虹琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsContainerPackaging/detail")] + public async Task<WmsContainerPackagingOutput> Get([FromQuery] QueryeWmsContainerPackagingInput input) + { + return (await _wmsContainerPackagingRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsContainerPackagingOutput>(); + } + + /// <summary> + /// 鑾峰彇鍖呰鍏崇郴鍩虹琛ㄥ垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsContainerPackaging/list")] + public async Task<List<WmsContainerPackagingOutput>> List([FromQuery] WmsContainerPackagingInput input) + { + return await _wmsContainerPackagingRep.DetachedEntities.ProjectToType<WmsContainerPackagingOutput>().ToListAsync(); + } + + #region 澧炪�佸垹銆佹敼 + + /// <summary> + /// 澧炲姞鍖呰鍏崇郴鍩虹琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsContainerPackaging/add")] + public async Task Add(AddWmsContainerPackagingInput input) + { + var wmsContainerPackaging = input.Adapt<WmsContainerPackaging>(); + //楠岃瘉 + await CheckExisit(wmsContainerPackaging); + + wmsContainerPackaging.CreatedUserId = wmsContainerPackaging.UpdatedUserId = SysHelper.GetUserId(); + wmsContainerPackaging.CreatedUserName = wmsContainerPackaging.UpdatedUserName = SysHelper.GetUserName(); + wmsContainerPackaging.CreatedTime = wmsContainerPackaging.UpdatedTime = SysHelper.GetNowTime(); + await _wmsContainerPackagingRep.InsertAsync(wmsContainerPackaging); + } + + /// <summary> + /// 鍒犻櫎鍖呰鍏崇郴鍩虹琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsContainerPackaging/delete")] + public async Task Delete(DeleteWmsContainerPackagingInput input) + { + var wmsContainerPackaging = await _wmsContainerPackagingRep.FirstOrDefaultAsync(u => u.Id == input.Id); + await _wmsContainerPackagingRep.DeleteAsync(wmsContainerPackaging); + + } + + /// <summary> + /// 鏇存柊鍖呰鍏崇郴鍩虹琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsContainerPackaging/edit")] + public async Task Update(UpdateWmsContainerPackagingInput input) + { + var isExist = await _wmsContainerPackagingRep.AnyAsync(u => u.Id == input.Id, false); + if (!isExist) throw Oops.Oh(ErrorCode.D1002); + + var wmsContainerPackaging = input.Adapt<WmsContainerPackaging>(); + //楠岃瘉 + await CheckExisit(wmsContainerPackaging,true); + + wmsContainerPackaging.UpdatedUserId = SysHelper.GetUserId(); + wmsContainerPackaging.UpdatedUserName = SysHelper.GetUserName(); + wmsContainerPackaging.UpdatedTime = SysHelper.GetNowTime(); + await _wmsContainerPackagingRep.UpdateAsync(wmsContainerPackaging,ignoreNullValues:true); + } + + #endregion + + #region 瀵煎叆 + + /// <summary> + /// Excel妯℃澘瀵煎叆鍖呰鍏崇郴鍩虹琛ㄥ姛鑳� + /// </summary> + /// <param name="file">Excel妯℃澘鏂囦欢</param> + /// <returns>瀵煎叆鐨勮褰曟暟</returns> + [HttpPost("WmsContainerPackaging/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) + { + _wmsContainerPackagingRep.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<WmsContainerPackaging>> CommonImport(DataTable dataTable, int dataStartLine) + { + + var details = new List<WmsContainerPackaging>(); + int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭 + foreach (System.Data.DataRow row in dataTable.Rows) + { + index++; + + //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛� + + var addItem = new WmsContainerPackaging() + { + CreatedTime = SysHelper.GetNowTime(), + CreatedUserId = SysHelper.GetUserId(), + CreatedUserName = SysHelper.GetUserName(), + UpdatedTime = SysHelper.GetNowTime(), + UpdatedUserId = SysHelper.GetUserId(), + UpdatedUserName = SysHelper.GetUserName() + }; + #region 瀹氫箟鍙橀噺 + var _ContainerTypeId = "";//瀹瑰櫒绫诲瀷ID + var _ContainerTypeName = "";//瀹瑰櫒绫诲瀷鍚嶇О + var _MaterialTypeId = "";//鐗╂枡绫诲瀷ID + var _MaterialTypeCode = "";//鐗╂枡绫诲瀷缂栧彿 + var _MaterialTypeName = "";//鐗╂枡绫诲瀷鍚嶇О + var _BoxQty = "";//鐗╂枡瀹瑰櫒瀹归噺 + var _Id = "";//Id涓婚敭 + #endregion + + + #region 鍙栧�� + _ContainerTypeId = row["瀹瑰櫒绫诲瀷ID"]?.ToString() ; + _ContainerTypeName = row["瀹瑰櫒绫诲瀷鍚嶇О"]?.ToString() ; + _MaterialTypeId = row["鐗╂枡绫诲瀷ID"]?.ToString() ; + _MaterialTypeCode = row["鐗╂枡绫诲瀷缂栧彿"]?.ToString() ; + _MaterialTypeName = row["鐗╂枡绫诲瀷鍚嶇О"]?.ToString() ; + _BoxQty = row["鐗╂枡瀹瑰櫒瀹归噺"]?.ToString() ; + _Id = row["Id涓婚敭"]?.ToString() ; + #endregion + + + #region 楠岃瘉 + if(!string.IsNullOrEmpty(_ContainerTypeId)) + { + if (!long.TryParse(_ContainerTypeId, out long outContainerTypeId)&&!string.IsNullOrEmpty(_ContainerTypeId)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹瑰櫒绫诲瀷ID]{_ContainerTypeId}鍊间笉姝g‘锛�"); + } + if (outContainerTypeId <= 0&&!string.IsNullOrEmpty(_ContainerTypeId)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹瑰櫒绫诲瀷ID]{_ContainerTypeId}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.ContainerTypeId = outContainerTypeId; + } + + } + if(!string.IsNullOrEmpty(_ContainerTypeName)) + { + addItem.ContainerTypeName = (string)_ContainerTypeName; + } + if(!string.IsNullOrEmpty(_MaterialTypeId)) + { + if (!long.TryParse(_MaterialTypeId, out long outMaterialTypeId)&&!string.IsNullOrEmpty(_MaterialTypeId)) + { + throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷ID]{_MaterialTypeId}鍊间笉姝g‘锛�"); + } + if (outMaterialTypeId <= 0&&!string.IsNullOrEmpty(_MaterialTypeId)) + { + throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷ID]{_MaterialTypeId}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.MaterialTypeId = outMaterialTypeId; + } + + } + if(!string.IsNullOrEmpty(_MaterialTypeCode)) + { + addItem.MaterialTypeCode = (string)_MaterialTypeCode; + } + if(!string.IsNullOrEmpty(_MaterialTypeName)) + { + addItem.MaterialTypeName = (string)_MaterialTypeName; + } + if(!string.IsNullOrEmpty(_BoxQty)) + { + if (!decimal.TryParse(_BoxQty, out decimal outBoxQty)&&!string.IsNullOrEmpty(_BoxQty)) + { + throw Oops.Oh($"绗瑊index}琛孾鐗╂枡瀹瑰櫒瀹归噺]{_BoxQty}鍊间笉姝g‘锛�"); + } + if (outBoxQty <= 0&&!string.IsNullOrEmpty(_BoxQty)) + { + throw Oops.Oh($"绗瑊index}琛孾鐗╂枡瀹瑰櫒瀹归噺]{_BoxQty}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.BoxQty = outBoxQty; + } + + } + 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> + /// 鏍规嵁鐗堟湰涓嬭浇鍖呰鍏崇郴鍩虹琛ㄧ殑Excel瀵煎叆妯℃澘 + /// </summary> + /// <param name="version">妯℃澘鐗堟湰</param> + /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns> + [HttpGet("WmsContainerPackaging/downloadExcelTemplate")] + 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")); + 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( WmsContainerPackaging input,bool isEdit=false) + { + + + + + + + + + + //娌℃湁閰嶇疆鑱斿悎涓婚敭锛屼笉闇�瑕侀獙閲� + } + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇� + /// </summary> + /// <param name="inputs"></param> + /// <returns></returns> + private async Task CheckExisitForImport(List<WmsContainerPackaging> inputs) + { + //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + + + + + } + + #endregion + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodInput.cs new file mode 100644 index 0000000..32c1005 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodInput.cs @@ -0,0 +1,215 @@ +锘縰sing Admin.NET.Core; +using Admin.NET.Core.Service; +using System.ComponentModel.DataAnnotations; + +namespace Admin.NET.Application +{ + + /// <summary> + /// 鏇夸唬鍝佺鐞嗘煡璇㈠弬鏁� + /// </summary> + public class WmsSubstituteGoodSearch : PageInputBase + { + /// <summary> + /// 鏇夸唬缂栧彿 + /// </summary> + public virtual string SubstituteCode { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + public virtual string MaterialCode { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public virtual string MaterialName { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欑紪鍙� + /// </summary> + public virtual string SubstituteMaterialCode { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欏悕绉� + /// </summary> + public virtual string SubstituteMaterialName { get; set; } + + /// <summary> + /// 鏇夸唬娆″簭 + /// </summary> + public virtual int? SubstituteIndex { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { 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 WmsSubstituteGoodSearchNonPage : PageInputNonPageBase + { + /// <summary> + /// 鏇夸唬缂栧彿 + /// </summary> + public virtual string SubstituteCode { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + public virtual string MaterialCode { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public virtual string MaterialName { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欑紪鍙� + /// </summary> + public virtual string SubstituteMaterialCode { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欏悕绉� + /// </summary> + public virtual string SubstituteMaterialName { get; set; } + + /// <summary> + /// 鏇夸唬娆″簭 + /// </summary> + public virtual int? SubstituteIndex { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { 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 WmsSubstituteGoodInput + { + /// <summary> + /// 鏇夸唬缂栧彿 + /// </summary> + [Required(ErrorMessage = "鏇夸唬缂栧彿涓嶈兘涓虹┖")] + public virtual string SubstituteCode { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + [Required(ErrorMessage = "鐗╂枡缂栧彿涓嶈兘涓虹┖")] + public virtual string MaterialCode { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + [Required(ErrorMessage = "鐗╂枡鍚嶇О涓嶈兘涓虹┖")] + public virtual string MaterialName { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欑紪鍙� + /// </summary> + [Required(ErrorMessage = "鏇夸唬鍝佺墿鏂欑紪鍙蜂笉鑳戒负绌�")] + public virtual string SubstituteMaterialCode { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欏悕绉� + /// </summary> + [Required(ErrorMessage = "鏇夸唬鍝佺墿鏂欏悕绉颁笉鑳戒负绌�")] + public virtual string SubstituteMaterialName { get; set; } + + /// <summary> + /// 鏇夸唬娆″簭 + /// </summary> + [Required(ErrorMessage = "鏇夸唬娆″簭涓嶈兘涓虹┖")] + public virtual int SubstituteIndex { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")] + public virtual bool IsDisabled { get; set; } + + } + + /// <summary> + /// 鏇夸唬鍝佺鐞嗘柊澧炲弬鏁� + /// </summary> + public class AddWmsSubstituteGoodInput : WmsSubstituteGoodInput + { + } + + /// <summary> + /// 鏇夸唬鍝佺鐞嗗垹闄ゅ弬鏁� + /// </summary> + public class DeleteWmsSubstituteGoodInput : BaseId + { + } + + /// <summary> + /// 鏇夸唬鍝佺鐞嗘洿鏂板弬鏁� + /// </summary> + public class UpdateWmsSubstituteGoodInput : WmsSubstituteGoodInput + { + /// <summary> + /// Id涓婚敭 + /// </summary> + [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")] + public long? Id { get; set; } + + } + + /// <summary> + /// 鏇夸唬鍝佺鐞嗚幏鍙栧崟涓弬鏁� + /// </summary> + public class QueryeWmsSubstituteGoodInput : BaseId + { + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodOutput.cs new file mode 100644 index 0000000..ff829a6 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Dto/WmsSubstituteGoodOutput.cs @@ -0,0 +1,72 @@ +锘縰sing Admin.NET.Core.Util.LowCode.Dto; +using System; + +namespace Admin.NET.Application +{ + /// <summary> + /// 鏇夸唬鍝佺鐞嗚緭鍑哄弬鏁� + /// </summary> + public class WmsSubstituteGoodOutput + { + /// <summary> + /// 鏇夸唬缂栧彿 + /// </summary> + public string SubstituteCode { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + public string MaterialCode { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string MaterialName { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欑紪鍙� + /// </summary> + public string SubstituteMaterialCode { get; set; } + + /// <summary> + /// 鏇夸唬鍝佺墿鏂欏悕绉� + /// </summary> + public string SubstituteMaterialName { get; set; } + + /// <summary> + /// 鏇夸唬娆″簭 + /// </summary> + public int SubstituteIndex { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public bool IsDisabled { 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/WmsSubstituteGood/IWmsSubstituteGoodService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/IWmsSubstituteGoodService.cs new file mode 100644 index 0000000..dbf2713 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/IWmsSubstituteGoodService.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 IWmsSubstituteGoodService + { + Task<WmsSubstituteGoodOutput> Get([FromQuery] QueryeWmsSubstituteGoodInput input); + Task<List<WmsSubstituteGoodOutput>> List([FromQuery] WmsSubstituteGoodInput input); + Task<PageResult<WmsSubstituteGoodOutput>> Page([FromQuery] WmsSubstituteGoodSearch input); + Task<List<WmsSubstituteGoodOutput>> ListNonPageAsync([FromQuery] WmsSubstituteGoodSearchNonPage input); + + Task Add(AddWmsSubstituteGoodInput input); + Task Update(UpdateWmsSubstituteGoodInput input); + Task Delete(DeleteWmsSubstituteGoodInput 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/WmsSubstituteGood/Map/WmsSubstituteGoodMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Map/WmsSubstituteGoodMapper.cs new file mode 100644 index 0000000..b813eff --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/Map/WmsSubstituteGoodMapper.cs @@ -0,0 +1,18 @@ +锘縰sing Mapster; +using Admin.NET.Core; + +namespace Admin.NET.Application +{ + public class WmsSubstituteGoodMapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<AddWmsSubstituteGoodInput, WmsSubstituteGood>() + ; + config.ForType<UpdateWmsSubstituteGoodInput, WmsSubstituteGood>() + ; + config.ForType<WmsSubstituteGood, WmsSubstituteGoodOutput>() + ; + } + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/WmsSubstituteGoodService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/WmsSubstituteGoodService.cs new file mode 100644 index 0000000..2f80369 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsSubstituteGood/WmsSubstituteGoodService.cs @@ -0,0 +1,481 @@ +锘縰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 = "WmsSubstituteGood", Order = 100)] + [Route("api")] + public class WmsSubstituteGoodService : IWmsSubstituteGoodService, IDynamicApiController, ITransient + { + private readonly IRepository<WmsSubstituteGood,MasterDbContextLocator> _wmsSubstituteGoodRep; + private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; + private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; + private readonly ISysExcelTemplateService _sysExcelTemplateService; + private readonly static object _lock = new(); + + public WmsSubstituteGoodService( + IRepository<WmsSubstituteGood,MasterDbContextLocator> wmsSubstituteGoodRep + ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep + ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep + ,ISysExcelTemplateService sysExcelTemplateService + ) + { + _wmsSubstituteGoodRep = wmsSubstituteGoodRep; + _sysDictTypeRep = sysDictTypeRep; + _sysDictDataRep = sysDictDataRep; + _sysExcelTemplateService = sysExcelTemplateService; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ鏇夸唬鍝佺鐞� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsSubstituteGood/page")] + public async Task<PageResult<WmsSubstituteGoodOutput>> Page([FromQuery] WmsSubstituteGoodSearch input) + { + var wmsSubstituteGoods = await _wmsSubstituteGoodRep.DetachedEntities + .Where(!string.IsNullOrEmpty(input.SubstituteCode), u => u.SubstituteCode == input.SubstituteCode) + .Where(!string.IsNullOrEmpty(input.MaterialCode), u => u.MaterialCode == input.MaterialCode) + .Where(!string.IsNullOrEmpty(input.MaterialName), u => u.MaterialName == input.MaterialName) + .Where(!string.IsNullOrEmpty(input.SubstituteMaterialCode), u => u.SubstituteMaterialCode == input.SubstituteMaterialCode) + .Where(!string.IsNullOrEmpty(input.SubstituteMaterialName), u => u.SubstituteMaterialName == input.SubstituteMaterialName) + .Where(input.SubstituteIndex != null, u => u.SubstituteIndex == input.SubstituteIndex) + .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) + .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<WmsSubstituteGoodSearch>(input)) + .ProjectToType<WmsSubstituteGoodOutput>() + .ToADPagedListAsync(input.PageNo, input.PageSize); + return wmsSubstituteGoods; + } + + /// <summary> + /// 涓嶅垎椤垫煡璇㈡浛浠e搧绠$悊鍒楄〃 + /// </summary> + /// <param name="input">鏇夸唬鍝佺鐞嗘煡璇㈠弬鏁�</param> + /// <returns>(鏇夸唬鍝佺鐞�)瀹炰緥鍒楄〃</returns> + [HttpGet("WmsSubstituteGood/listNonPage")] + public async Task<List<WmsSubstituteGoodOutput>> ListNonPageAsync([FromQuery] WmsSubstituteGoodSearchNonPage input) + { + var pSubstituteCode = input.SubstituteCode?.Trim() ?? ""; + var pMaterialCode = input.MaterialCode?.Trim() ?? ""; + var pMaterialName = input.MaterialName?.Trim() ?? ""; + var pSubstituteMaterialCode = input.SubstituteMaterialCode?.Trim() ?? ""; + var pSubstituteMaterialName = input.SubstituteMaterialName?.Trim() ?? ""; + var pSubstituteIndex = input.SubstituteIndex; + var pIsDisabled = input.IsDisabled; + var pCreatedTime = input.CreatedTime; + var pUpdatedTime = input.UpdatedTime; + var pCreatedUserName = input.CreatedUserName?.Trim() ?? ""; + var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? ""; + var wmsSubstituteGoods = await _wmsSubstituteGoodRep.DetachedEntities + .Where(!string.IsNullOrEmpty(pSubstituteCode), u => u.SubstituteCode == pSubstituteCode) + .Where(!string.IsNullOrEmpty(pMaterialCode), u => u.MaterialCode == pMaterialCode) + .Where(!string.IsNullOrEmpty(pMaterialName), u => u.MaterialName == pMaterialName) + .Where(!string.IsNullOrEmpty(pSubstituteMaterialCode), u => u.SubstituteMaterialCode == pSubstituteMaterialCode) + .Where(!string.IsNullOrEmpty(pSubstituteMaterialName), u => u.SubstituteMaterialName == pSubstituteMaterialName) + .Where(pSubstituteIndex != null, u => u.SubstituteIndex == pSubstituteIndex) + .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled) + .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<WmsSubstituteGoodOutput>() + .ToListAsync(); + return wmsSubstituteGoods; + } + + /// <summary> + /// 鑾峰彇鏇夸唬鍝佺鐞� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsSubstituteGood/detail")] + public async Task<WmsSubstituteGoodOutput> Get([FromQuery] QueryeWmsSubstituteGoodInput input) + { + return (await _wmsSubstituteGoodRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsSubstituteGoodOutput>(); + } + + /// <summary> + /// 鑾峰彇鏇夸唬鍝佺鐞嗗垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsSubstituteGood/list")] + public async Task<List<WmsSubstituteGoodOutput>> List([FromQuery] WmsSubstituteGoodInput input) + { + return await _wmsSubstituteGoodRep.DetachedEntities.ProjectToType<WmsSubstituteGoodOutput>().ToListAsync(); + } + + #region 澧炪�佸垹銆佹敼 + + /// <summary> + /// 澧炲姞鏇夸唬鍝佺鐞� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsSubstituteGood/add")] + public async Task Add(AddWmsSubstituteGoodInput input) + { + var wmsSubstituteGood = input.Adapt<WmsSubstituteGood>(); + //楠岃瘉 + await CheckExisit(wmsSubstituteGood); + + wmsSubstituteGood.CreatedUserId = wmsSubstituteGood.UpdatedUserId = SysHelper.GetUserId(); + wmsSubstituteGood.CreatedUserName = wmsSubstituteGood.UpdatedUserName = SysHelper.GetUserName(); + wmsSubstituteGood.CreatedTime = wmsSubstituteGood.UpdatedTime = SysHelper.GetNowTime(); + await _wmsSubstituteGoodRep.InsertAsync(wmsSubstituteGood); + } + + /// <summary> + /// 鍒犻櫎鏇夸唬鍝佺鐞� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsSubstituteGood/delete")] + public async Task Delete(DeleteWmsSubstituteGoodInput input) + { + var wmsSubstituteGood = await _wmsSubstituteGoodRep.FirstOrDefaultAsync(u => u.Id == input.Id); + await _wmsSubstituteGoodRep.DeleteAsync(wmsSubstituteGood); + + } + + /// <summary> + /// 鏇存柊鏇夸唬鍝佺鐞� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsSubstituteGood/edit")] + public async Task Update(UpdateWmsSubstituteGoodInput input) + { + var isExist = await _wmsSubstituteGoodRep.AnyAsync(u => u.Id == input.Id, false); + if (!isExist) throw Oops.Oh(ErrorCode.D1002); + + var wmsSubstituteGood = input.Adapt<WmsSubstituteGood>(); + //楠岃瘉 + await CheckExisit(wmsSubstituteGood,true); + + wmsSubstituteGood.UpdatedUserId = SysHelper.GetUserId(); + wmsSubstituteGood.UpdatedUserName = SysHelper.GetUserName(); + wmsSubstituteGood.UpdatedTime = SysHelper.GetNowTime(); + await _wmsSubstituteGoodRep.UpdateAsync(wmsSubstituteGood,ignoreNullValues:true); + } + + #endregion + + #region 瀵煎叆 + + /// <summary> + /// Excel妯℃澘瀵煎叆鏇夸唬鍝佺鐞嗗姛鑳� + /// </summary> + /// <param name="file">Excel妯℃澘鏂囦欢</param> + /// <returns>瀵煎叆鐨勮褰曟暟</returns> + [HttpPost("WmsSubstituteGood/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) + { + _wmsSubstituteGoodRep.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<WmsSubstituteGood>> CommonImport(DataTable dataTable, int dataStartLine) + { + + var details = new List<WmsSubstituteGood>(); + int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭 + foreach (System.Data.DataRow row in dataTable.Rows) + { + index++; + + //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛� + + var addItem = new WmsSubstituteGood() + { + CreatedTime = SysHelper.GetNowTime(), + CreatedUserId = SysHelper.GetUserId(), + CreatedUserName = SysHelper.GetUserName(), + UpdatedTime = SysHelper.GetNowTime(), + UpdatedUserId = SysHelper.GetUserId(), + UpdatedUserName = SysHelper.GetUserName() + }; + #region 瀹氫箟鍙橀噺 + var _SubstituteCode = "";//鏇夸唬缂栧彿 + var _MaterialCode = "";//鐗╂枡缂栧彿 + var _MaterialName = "";//鐗╂枡鍚嶇О + var _SubstituteMaterialCode = "";//鏇夸唬鍝佺墿鏂欑紪鍙� + var _SubstituteMaterialName = "";//鏇夸唬鍝佺墿鏂欏悕绉� + var _SubstituteIndex = "";//鏇夸唬娆″簭 + var _IsDisabled = "";//鏄惁绂佺敤 + var _Id = "";//Id涓婚敭 + #endregion + + + #region 鍙栧�� + _SubstituteCode = row["鏇夸唬缂栧彿"]?.ToString() ; + _MaterialCode = row["鐗╂枡缂栧彿"]?.ToString() ; + _MaterialName = row["鐗╂枡鍚嶇О"]?.ToString() ; + _SubstituteMaterialCode = row["鏇夸唬鍝佺墿鏂欑紪鍙�"]?.ToString() ; + _SubstituteMaterialName = row["鏇夸唬鍝佺墿鏂欏悕绉�"]?.ToString() ; + _SubstituteIndex = row["鏇夸唬娆″簭"]?.ToString() ; + _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ; + _Id = row["Id涓婚敭"]?.ToString() ; + #endregion + + + #region 楠岃瘉 + + if (string.IsNullOrEmpty(_SubstituteCode)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬缂栧彿]{_SubstituteCode}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_SubstituteCode)) + { + addItem.SubstituteCode = (string)_SubstituteCode; + } + + 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(_SubstituteMaterialCode)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬鍝佺墿鏂欑紪鍙穄{_SubstituteMaterialCode}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_SubstituteMaterialCode)) + { + addItem.SubstituteMaterialCode = (string)_SubstituteMaterialCode; + } + + if (string.IsNullOrEmpty(_SubstituteMaterialName)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬鍝佺墿鏂欏悕绉癩{_SubstituteMaterialName}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_SubstituteMaterialName)) + { + addItem.SubstituteMaterialName = (string)_SubstituteMaterialName; + } + + if (string.IsNullOrEmpty(_SubstituteIndex)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬娆″簭]{_SubstituteIndex}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_SubstituteIndex)) + { + if (!int.TryParse(_SubstituteIndex, out int outSubstituteIndex)&&!string.IsNullOrEmpty(_SubstituteIndex)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬娆″簭]{_SubstituteIndex}鍊间笉姝g‘锛�"); + } + if (outSubstituteIndex <= 0&&!string.IsNullOrEmpty(_SubstituteIndex)) + { + throw Oops.Oh($"绗瑊index}琛孾鏇夸唬娆″簭]{_SubstituteIndex}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.SubstituteIndex = outSubstituteIndex; + } + + } + + if (string.IsNullOrEmpty(_IsDisabled)) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_IsDisabled)) + { + if(!_IsDisabled.Equals("鏄�") && !_IsDisabled.Equals("鍚�")) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}鍊间笉姝g‘锛�"); + } + else + { + bool outIsDisabled = _IsDisabled.Equals("鏄�") ? true : false; + addItem.IsDisabled = outIsDisabled; + } + } + + 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> + /// 鏍规嵁鐗堟湰涓嬭浇鏇夸唬鍝佺鐞嗙殑Excel瀵煎叆妯℃澘 + /// </summary> + /// <param name="version">妯℃澘鐗堟湰</param> + /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns> + [HttpGet("WmsSubstituteGood/downloadExcelTemplate")] + public IActionResult DownloadExcelTemplate([FromQuery] string version) + { + string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsSubstituteGood{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( WmsSubstituteGood input,bool isEdit=false) + { + + + + bool isExist = false; + if (!isEdit)//鏂板 + { + //鏁版嵁鏄惁瀛樺湪閲嶅 + isExist = await _wmsSubstituteGoodRep.AnyAsync(u => + u.SubstituteCode.Equals(input.SubstituteCode) + ,false); + } + else//缂栬緫 + { + + + + //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅 + isExist = await _wmsSubstituteGoodRep.AnyAsync(u => + u.Id != input.Id + &&u.SubstituteCode.Equals(input.SubstituteCode) + ,false); + } + + + + if (isExist) throw Oops.Oh(ErrorCode.E0001); + } + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇� + /// </summary> + /// <param name="inputs"></param> + /// <returns></returns> + private async Task CheckExisitForImport(List<WmsSubstituteGood> inputs) + { + //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + if (inputs?.Count <= 0) + { + throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖"); + } + //鏁版嵁鏄惁閲嶅 + var existExcelItem = inputs.GroupBy(g => new { + g.SubstituteCode + }) + .Where(g => g.Count() > 1) + .Select(s => new { + s.Key.SubstituteCode + }).FirstOrDefault(); + if (existExcelItem != null) + { + var wmsSubstituteGood = existExcelItem.Adapt<WmsSubstituteGood>(); + var item= existExcelItem.Adapt<WmsSubstituteGood>(); + throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,鏇夸唬缂栧彿[{item.SubstituteCode}]宸插瓨鍦�"); + } + + + + + //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + var existDBItem = await _wmsSubstituteGoodRep.DetachedEntities.FirstOrDefaultAsync(w=> + inputs.Select(s=>"" + +s.SubstituteCode + ) + .Contains("" + +w.SubstituteCode + )); + if (existDBItem != null) + { + var wmsSubstituteGood = existExcelItem.Adapt<WmsSubstituteGood>(); + var item= existExcelItem.Adapt<WmsSubstituteGood>(); + throw Oops.Oh($"绯荤粺涓�,鏇夸唬缂栧彿[{item.SubstituteCode}]宸插瓨鍦�"); + } + } + + #endregion + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs new file mode 100644 index 0000000..c0dd5fb --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs @@ -0,0 +1,271 @@ +锘縰sing Admin.NET.Core; +using Admin.NET.Core.Service; +using System.ComponentModel.DataAnnotations; + +namespace Admin.NET.Application +{ + + /// <summary> + /// 浠撳簱琛ㄦ煡璇㈠弬鏁� + /// </summary> + public class WmsWarehouseSearch : PageInputBase + { + /// <summary> + /// 浠撳簱缂栧彿 + /// </summary> + public virtual string Code { get; set; } + + /// <summary> + /// 浠撳簱鍚嶇О + /// </summary> + public virtual string Name { get; set; } + + /// <summary> + /// 浠撳簱鍦板潃 + /// </summary> + public virtual string Address { get; set; } + + /// <summary> + /// 宸ュ巶缂栧彿 + /// </summary> + public virtual string FactoryCode { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public virtual decimal? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public virtual decimal? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public virtual decimal? Height { get; set; } + + /// <summary> + /// 鍩烘湰鍗曞厓 + /// </summary> + public virtual string BaseUnit { get; set; } + + /// <summary> + /// 瀹氫綅 + /// </summary> + public virtual string Position { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public virtual string Remarks { 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 WmsWarehouseSearchNonPage : PageInputNonPageBase + { + /// <summary> + /// 浠撳簱缂栧彿 + /// </summary> + public virtual string Code { get; set; } + + /// <summary> + /// 浠撳簱鍚嶇О + /// </summary> + public virtual string Name { get; set; } + + /// <summary> + /// 浠撳簱鍦板潃 + /// </summary> + public virtual string Address { get; set; } + + /// <summary> + /// 宸ュ巶缂栧彿 + /// </summary> + public virtual string FactoryCode { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public virtual decimal? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public virtual decimal? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public virtual decimal? Height { get; set; } + + /// <summary> + /// 鍩烘湰鍗曞厓 + /// </summary> + public virtual string BaseUnit { get; set; } + + /// <summary> + /// 瀹氫綅 + /// </summary> + public virtual string Position { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public virtual bool? IsDisabled { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public virtual string Remarks { 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 WmsWarehouseInput + { + /// <summary> + /// 浠撳簱缂栧彿 + /// </summary> + [Required(ErrorMessage = "浠撳簱缂栧彿涓嶈兘涓虹┖")] + public virtual string Code { get; set; } + + /// <summary> + /// 浠撳簱鍚嶇О + /// </summary> + [Required(ErrorMessage = "浠撳簱鍚嶇О涓嶈兘涓虹┖")] + public virtual string Name { get; set; } + + /// <summary> + /// 浠撳簱鍦板潃 + /// </summary> + public virtual string Address { get; set; } + + /// <summary> + /// 宸ュ巶缂栧彿 + /// </summary> + public virtual string FactoryCode { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public virtual decimal? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public virtual decimal? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public virtual decimal? Height { get; set; } + + /// <summary> + /// 鍩烘湰鍗曞厓 + /// </summary> + public virtual string BaseUnit { get; set; } + + /// <summary> + /// 瀹氫綅 + /// </summary> + public virtual string Position { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")] + public virtual bool IsDisabled { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public virtual string Remarks { get; set; } + + } + + /// <summary> + /// 浠撳簱琛ㄦ柊澧炲弬鏁� + /// </summary> + public class AddWmsWarehouseInput : WmsWarehouseInput + { + } + + /// <summary> + /// 浠撳簱琛ㄥ垹闄ゅ弬鏁� + /// </summary> + public class DeleteWmsWarehouseInput : BaseId + { + } + + /// <summary> + /// 浠撳簱琛ㄦ洿鏂板弬鏁� + /// </summary> + public class UpdateWmsWarehouseInput : WmsWarehouseInput + { + /// <summary> + /// Id涓婚敭 + /// </summary> + [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")] + public long? Id { get; set; } + + } + + /// <summary> + /// 浠撳簱琛ㄨ幏鍙栧崟涓弬鏁� + /// </summary> + public class QueryeWmsWarehouseInput : BaseId + { + + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs new file mode 100644 index 0000000..632cf29 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs @@ -0,0 +1,92 @@ +锘縰sing Admin.NET.Core.Util.LowCode.Dto; +using System; + +namespace Admin.NET.Application +{ + /// <summary> + /// 浠撳簱琛ㄨ緭鍑哄弬鏁� + /// </summary> + public class WmsWarehouseOutput + { + /// <summary> + /// 浠撳簱缂栧彿 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 浠撳簱鍚嶇О + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 浠撳簱鍦板潃 + /// </summary> + public string Address { get; set; } + + /// <summary> + /// 宸ュ巶缂栧彿 + /// </summary> + public string FactoryCode { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public decimal? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public decimal? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public decimal? Height { get; set; } + + /// <summary> + /// 鍩烘湰鍗曞厓 + /// </summary> + public string BaseUnit { get; set; } + + /// <summary> + /// 瀹氫綅 + /// </summary> + public string Position { get; set; } + + /// <summary> + /// 鏄惁绂佺敤 + /// </summary> + public bool IsDisabled { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remarks { 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/WmsWarehouse/IWmsWarehouseService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/IWmsWarehouseService.cs new file mode 100644 index 0000000..f284616 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/IWmsWarehouseService.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 IWmsWarehouseService + { + Task<WmsWarehouseOutput> Get([FromQuery] QueryeWmsWarehouseInput input); + Task<List<WmsWarehouseOutput>> List([FromQuery] WmsWarehouseInput input); + Task<PageResult<WmsWarehouseOutput>> Page([FromQuery] WmsWarehouseSearch input); + Task<List<WmsWarehouseOutput>> ListNonPageAsync([FromQuery] WmsWarehouseSearchNonPage input); + + Task Add(AddWmsWarehouseInput input); + Task Update(UpdateWmsWarehouseInput input); + Task Delete(DeleteWmsWarehouseInput 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/WmsWarehouse/Map/WmsWarehouseMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Map/WmsWarehouseMapper.cs new file mode 100644 index 0000000..b3fc07a --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Map/WmsWarehouseMapper.cs @@ -0,0 +1,18 @@ +锘縰sing Mapster; +using Admin.NET.Core; + +namespace Admin.NET.Application +{ + public class WmsWarehouseMapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<AddWmsWarehouseInput, WmsWarehouse>() + ; + config.ForType<UpdateWmsWarehouseInput, WmsWarehouse>() + ; + config.ForType<WmsWarehouse, WmsWarehouseOutput>() + ; + } + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs new file mode 100644 index 0000000..be2bb77 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs @@ -0,0 +1,517 @@ +锘縰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 = "WmsWarehouse", Order = 100)] + [Route("api")] + public class WmsWarehouseService : IWmsWarehouseService, IDynamicApiController, ITransient + { + private readonly IRepository<WmsWarehouse,MasterDbContextLocator> _wmsWarehouseRep; + private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; + private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; + private readonly ISysExcelTemplateService _sysExcelTemplateService; + private readonly static object _lock = new(); + + public WmsWarehouseService( + IRepository<WmsWarehouse,MasterDbContextLocator> wmsWarehouseRep + ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep + ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep + ,ISysExcelTemplateService sysExcelTemplateService + ) + { + _wmsWarehouseRep = wmsWarehouseRep; + _sysDictTypeRep = sysDictTypeRep; + _sysDictDataRep = sysDictDataRep; + _sysExcelTemplateService = sysExcelTemplateService; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ浠撳簱琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsWarehouse/page")] + public async Task<PageResult<WmsWarehouseOutput>> Page([FromQuery] WmsWarehouseSearch input) + { + var wmsWarehouses = await _wmsWarehouseRep.DetachedEntities + .Where(!string.IsNullOrEmpty(input.Code), u => u.Code == input.Code) + .Where(!string.IsNullOrEmpty(input.Name), u => u.Name == input.Name) + .Where(!string.IsNullOrEmpty(input.Address), u => u.Address == input.Address) + .Where(!string.IsNullOrEmpty(input.FactoryCode), u => u.FactoryCode == input.FactoryCode) + .Where(input.Length != null, u => u.Length == input.Length) + .Where(input.Width != null, u => u.Width == input.Width) + .Where(input.Height != null, u => u.Height == input.Height) + .Where(!string.IsNullOrEmpty(input.BaseUnit), u => u.BaseUnit == input.BaseUnit) + .Where(!string.IsNullOrEmpty(input.Position), u => u.Position == input.Position) + .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) + .Where(!string.IsNullOrEmpty(input.Remarks), u => u.Remarks == input.Remarks) + .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<WmsWarehouseSearch>(input)) + .ProjectToType<WmsWarehouseOutput>() + .ToADPagedListAsync(input.PageNo, input.PageSize); + return wmsWarehouses; + } + + /// <summary> + /// 涓嶅垎椤垫煡璇粨搴撹〃鍒楄〃 + /// </summary> + /// <param name="input">浠撳簱琛ㄦ煡璇㈠弬鏁�</param> + /// <returns>(浠撳簱琛�)瀹炰緥鍒楄〃</returns> + [HttpGet("WmsWarehouse/listNonPage")] + public async Task<List<WmsWarehouseOutput>> ListNonPageAsync([FromQuery] WmsWarehouseSearchNonPage input) + { + var pCode = input.Code?.Trim() ?? ""; + var pName = input.Name?.Trim() ?? ""; + var pAddress = input.Address?.Trim() ?? ""; + var pFactoryCode = input.FactoryCode?.Trim() ?? ""; + var pLength = input.Length; + var pWidth = input.Width; + var pHeight = input.Height; + var pBaseUnit = input.BaseUnit?.Trim() ?? ""; + var pPosition = input.Position?.Trim() ?? ""; + var pIsDisabled = input.IsDisabled; + var pRemarks = input.Remarks?.Trim() ?? ""; + var pCreatedTime = input.CreatedTime; + var pUpdatedTime = input.UpdatedTime; + var pCreatedUserName = input.CreatedUserName?.Trim() ?? ""; + var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? ""; + var wmsWarehouses = await _wmsWarehouseRep.DetachedEntities + .Where(!string.IsNullOrEmpty(pCode), u => u.Code == pCode) + .Where(!string.IsNullOrEmpty(pName), u => u.Name == pName) + .Where(!string.IsNullOrEmpty(pAddress), u => u.Address == pAddress) + .Where(!string.IsNullOrEmpty(pFactoryCode), u => u.FactoryCode == pFactoryCode) + .Where(pLength != null, u => u.Length == pLength) + .Where(pWidth != null, u => u.Width == pWidth) + .Where(pHeight != null, u => u.Height == pHeight) + .Where(!string.IsNullOrEmpty(pBaseUnit), u => u.BaseUnit == pBaseUnit) + .Where(!string.IsNullOrEmpty(pPosition), u => u.Position == pPosition) + .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled) + .Where(!string.IsNullOrEmpty(pRemarks), u => u.Remarks == pRemarks) + .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<WmsWarehouseOutput>() + .ToListAsync(); + return wmsWarehouses; + } + + /// <summary> + /// 鑾峰彇浠撳簱琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsWarehouse/detail")] + public async Task<WmsWarehouseOutput> Get([FromQuery] QueryeWmsWarehouseInput input) + { + return (await _wmsWarehouseRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsWarehouseOutput>(); + } + + /// <summary> + /// 鑾峰彇浠撳簱琛ㄥ垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("WmsWarehouse/list")] + public async Task<List<WmsWarehouseOutput>> List([FromQuery] WmsWarehouseInput input) + { + return await _wmsWarehouseRep.DetachedEntities.ProjectToType<WmsWarehouseOutput>().ToListAsync(); + } + + #region 澧炪�佸垹銆佹敼 + + /// <summary> + /// 澧炲姞浠撳簱琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsWarehouse/add")] + public async Task Add(AddWmsWarehouseInput input) + { + var wmsWarehouse = input.Adapt<WmsWarehouse>(); + //楠岃瘉 + await CheckExisit(wmsWarehouse); + + wmsWarehouse.CreatedUserId = wmsWarehouse.UpdatedUserId = SysHelper.GetUserId(); + wmsWarehouse.CreatedUserName = wmsWarehouse.UpdatedUserName = SysHelper.GetUserName(); + wmsWarehouse.CreatedTime = wmsWarehouse.UpdatedTime = SysHelper.GetNowTime(); + await _wmsWarehouseRep.InsertAsync(wmsWarehouse); + } + + /// <summary> + /// 鍒犻櫎浠撳簱琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsWarehouse/delete")] + public async Task Delete(DeleteWmsWarehouseInput input) + { + var wmsWarehouse = await _wmsWarehouseRep.FirstOrDefaultAsync(u => u.Id == input.Id); + await _wmsWarehouseRep.DeleteAsync(wmsWarehouse); + + } + + /// <summary> + /// 鏇存柊浠撳簱琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost("WmsWarehouse/edit")] + public async Task Update(UpdateWmsWarehouseInput input) + { + var isExist = await _wmsWarehouseRep.AnyAsync(u => u.Id == input.Id, false); + if (!isExist) throw Oops.Oh(ErrorCode.D1002); + + var wmsWarehouse = input.Adapt<WmsWarehouse>(); + //楠岃瘉 + await CheckExisit(wmsWarehouse,true); + + wmsWarehouse.UpdatedUserId = SysHelper.GetUserId(); + wmsWarehouse.UpdatedUserName = SysHelper.GetUserName(); + wmsWarehouse.UpdatedTime = SysHelper.GetNowTime(); + await _wmsWarehouseRep.UpdateAsync(wmsWarehouse,ignoreNullValues:true); + } + + #endregion + + #region 瀵煎叆 + + /// <summary> + /// Excel妯℃澘瀵煎叆浠撳簱琛ㄥ姛鑳� + /// </summary> + /// <param name="file">Excel妯℃澘鏂囦欢</param> + /// <returns>瀵煎叆鐨勮褰曟暟</returns> + [HttpPost("WmsWarehouse/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) + { + _wmsWarehouseRep.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<WmsWarehouse>> CommonImport(DataTable dataTable, int dataStartLine) + { + + var details = new List<WmsWarehouse>(); + int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭 + foreach (System.Data.DataRow row in dataTable.Rows) + { + index++; + + //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛� + + var addItem = new WmsWarehouse() + { + CreatedTime = SysHelper.GetNowTime(), + CreatedUserId = SysHelper.GetUserId(), + CreatedUserName = SysHelper.GetUserName(), + UpdatedTime = SysHelper.GetNowTime(), + UpdatedUserId = SysHelper.GetUserId(), + UpdatedUserName = SysHelper.GetUserName() + }; + #region 瀹氫箟鍙橀噺 + var _Code = "";//浠撳簱缂栧彿 + var _Name = "";//浠撳簱鍚嶇О + var _Address = "";//浠撳簱鍦板潃 + var _FactoryCode = "";//宸ュ巶缂栧彿 + var _Length = "";//闀� + var _Width = "";//瀹� + var _Height = "";//楂� + var _BaseUnit = "";//鍩烘湰鍗曞厓 + var _Position = "";//瀹氫綅 + var _IsDisabled = "";//鏄惁绂佺敤 + var _Remarks = "";//澶囨敞 + var _Id = "";//Id涓婚敭 + #endregion + + + #region 鍙栧�� + _Code = row["浠撳簱缂栧彿"]?.ToString() ; + _Name = row["浠撳簱鍚嶇О"]?.ToString() ; + _Address = row["浠撳簱鍦板潃"]?.ToString() ; + _FactoryCode = row["宸ュ巶缂栧彿"]?.ToString() ; + _Length = row["闀�"]?.ToString() ; + _Width = row["瀹�"]?.ToString() ; + _Height = row["楂�"]?.ToString() ; + _BaseUnit = row["鍩烘湰鍗曞厓"]?.ToString() ; + _Position = row["瀹氫綅"]?.ToString() ; + _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ; + _Remarks = row["澶囨敞"]?.ToString() ; + _Id = row["Id涓婚敭"]?.ToString() ; + #endregion + + + #region 楠岃瘉 + + if (string.IsNullOrEmpty(_Code)) + { + throw Oops.Oh($"绗瑊index}琛孾浠撳簱缂栧彿]{_Code}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_Code)) + { + addItem.Code = (string)_Code; + } + + if (string.IsNullOrEmpty(_Name)) + { + throw Oops.Oh($"绗瑊index}琛孾浠撳簱鍚嶇О]{_Name}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_Name)) + { + addItem.Name = (string)_Name; + } + if(!string.IsNullOrEmpty(_Address)) + { + addItem.Address = (string)_Address; + } + if(!string.IsNullOrEmpty(_FactoryCode)) + { + addItem.FactoryCode = (string)_FactoryCode; + } + if(!string.IsNullOrEmpty(_Length)) + { + if (!decimal.TryParse(_Length, out decimal outLength)&&!string.IsNullOrEmpty(_Length)) + { + throw Oops.Oh($"绗瑊index}琛孾闀縘{_Length}鍊间笉姝g‘锛�"); + } + if (outLength <= 0&&!string.IsNullOrEmpty(_Length)) + { + throw Oops.Oh($"绗瑊index}琛孾闀縘{_Length}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.Length = outLength; + } + + } + if(!string.IsNullOrEmpty(_Width)) + { + if (!decimal.TryParse(_Width, out decimal outWidth)&&!string.IsNullOrEmpty(_Width)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹絔{_Width}鍊间笉姝g‘锛�"); + } + if (outWidth <= 0&&!string.IsNullOrEmpty(_Width)) + { + throw Oops.Oh($"绗瑊index}琛孾瀹絔{_Width}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.Width = outWidth; + } + + } + if(!string.IsNullOrEmpty(_Height)) + { + if (!decimal.TryParse(_Height, out decimal outHeight)&&!string.IsNullOrEmpty(_Height)) + { + throw Oops.Oh($"绗瑊index}琛孾楂榏{_Height}鍊间笉姝g‘锛�"); + } + if (outHeight <= 0&&!string.IsNullOrEmpty(_Height)) + { + throw Oops.Oh($"绗瑊index}琛孾楂榏{_Height}鍊间笉鑳藉皬浜庣瓑浜�0锛�"); + } + else + { + addItem.Height = outHeight; + } + + } + if(!string.IsNullOrEmpty(_BaseUnit)) + { + addItem.BaseUnit = (string)_BaseUnit; + } + if(!string.IsNullOrEmpty(_Position)) + { + addItem.Position = (string)_Position; + } + + if (string.IsNullOrEmpty(_IsDisabled)) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}涓嶈兘涓虹┖锛�"); + } + + if(!string.IsNullOrEmpty(_IsDisabled)) + { + if(!_IsDisabled.Equals("鏄�") && !_IsDisabled.Equals("鍚�")) + { + throw Oops.Oh($"绗瑊index}琛孾鏄惁绂佺敤]{_IsDisabled}鍊间笉姝g‘锛�"); + } + else + { + bool outIsDisabled = _IsDisabled.Equals("鏄�") ? true : false; + addItem.IsDisabled = outIsDisabled; + } + } + + if(!string.IsNullOrEmpty(_Remarks)) + { + addItem.Remarks = (string)_Remarks; + } + 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> + /// 鏍规嵁鐗堟湰涓嬭浇浠撳簱琛ㄧ殑Excel瀵煎叆妯℃澘 + /// </summary> + /// <param name="version">妯℃澘鐗堟湰</param> + /// <returns>涓嬭浇鐨勬ā鏉挎枃浠�</returns> + [HttpGet("WmsWarehouse/downloadExcelTemplate")] + public IActionResult DownloadExcelTemplate([FromQuery] string version) + { + string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsWarehouse{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( WmsWarehouse input,bool isEdit=false) + { + + + + bool isExist = false; + if (!isEdit)//鏂板 + { + //鏁版嵁鏄惁瀛樺湪閲嶅 + isExist = await _wmsWarehouseRep.AnyAsync(u => + u.Code.Equals(input.Code) + ,false); + } + else//缂栬緫 + { + + + + //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅 + isExist = await _wmsWarehouseRep.AnyAsync(u => + u.Id != input.Id + &&u.Code.Equals(input.Code) + ,false); + } + + + + if (isExist) throw Oops.Oh(ErrorCode.E0001); + } + + /// <summary> + /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇� + /// </summary> + /// <param name="inputs"></param> + /// <returns></returns> + private async Task CheckExisitForImport(List<WmsWarehouse> inputs) + { + //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + if (inputs?.Count <= 0) + { + throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖"); + } + //鏁版嵁鏄惁閲嶅 + var existExcelItem = inputs.GroupBy(g => new { + g.Code + }) + .Where(g => g.Count() > 1) + .Select(s => new { + s.Key.Code + }).FirstOrDefault(); + if (existExcelItem != null) + { + var wmsWarehouse = existExcelItem.Adapt<WmsWarehouse>(); + var item= existExcelItem.Adapt<WmsWarehouse>(); + throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,浠撳簱缂栧彿[{item.Code}]宸插瓨鍦�"); + } + + + + + //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹� + var existDBItem = await _wmsWarehouseRep.DetachedEntities.FirstOrDefaultAsync(w=> + inputs.Select(s=>"" + +s.Code + ) + .Contains("" + +w.Code + )); + if (existDBItem != null) + { + var wmsWarehouse = existExcelItem.Adapt<WmsWarehouse>(); + var item= existExcelItem.Adapt<WmsWarehouse>(); + throw Oops.Oh($"绯荤粺涓�,浠撳簱缂栧彿[{item.Code}]宸插瓨鍦�"); + } + } + + #endregion + } +} diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx new file mode 100644 index 0000000..37c540e --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx Binary files differ diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsSubstituteGoodImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsSubstituteGoodImport.xlsx new file mode 100644 index 0000000..6c73b53 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsSubstituteGoodImport.xlsx Binary files differ diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx new file mode 100644 index 0000000..3b27946 --- /dev/null +++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx Binary files differ -- Gitblit v1.9.3