From 82f7b3c19adfac9f2ccde3e09097d1c0b2cfd7ed Mon Sep 17 00:00:00 2001
From: liuying <1427574514@qq.com>
Date: 周二, 23 4月 2024 19:18:22 +0800
Subject: [PATCH] 控制属性规则
---
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue | 181 ++
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx | 0
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs | 418 ++++++
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs | 247 +++
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue | 604 +++++++++
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs | 22
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs | 22
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue | 107 +
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js | 114 +
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue | 521 +++++++
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx | 0
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js | 114 +
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs | 18
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs | 18
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs | 592 ++++++++
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue | 131 +
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue | 94 +
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs | 57
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs | 82 +
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue | 2
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue | 109 +
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue | 123 +
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue | 181 ++
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs | 166 ++
24 files changed, 3,922 insertions(+), 1 deletions(-)
diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js
new file mode 100644
index 0000000..6c6af3d
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleDetailManage.js
@@ -0,0 +1,114 @@
+锘縤mport { axios } from '@/utils/request'
+
+/**
+ * 鏌ヨ鎺у埗灞炴�ц鍒欐槑缁�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailPage (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/page',
+ method: 'get',
+ params: parameter
+ })
+}
+
+/**
+ * 鎺у埗灞炴�ц鍒欐槑缁嗗垪琛�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailList (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/list',
+ method: 'get',
+ params: parameter
+ })
+}
+
+/**
+ * 娣诲姞鎺у埗灞炴�ц鍒欐槑缁�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailAdd (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/add',
+ method: 'post',
+ data: parameter
+ })
+}
+
+/**
+ * 缂栬緫鎺у埗灞炴�ц鍒欐槑缁�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailEdit (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/edit',
+ method: 'post',
+ data: parameter
+ })
+}
+
+/**
+ * 鍒犻櫎鎺у埗灞炴�ц鍒欐槑缁�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailDelete (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/delete',
+ method: 'post',
+ data: parameter
+ })
+}
+
+
+/**
+ * 瀵煎嚭鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailToExcel (parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/toExcel',
+ method: 'get',
+ params: parameter,
+ responseType: 'blob'
+ })
+}
+
+/**
+ * 瀵煎叆鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailImportExcel (data, parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/importExcel',
+ method: 'post',
+ data: data,
+ params: parameter
+
+ })
+}
+
+
+/**
+ * 涓嬭浇鎺у埗灞炴�ц鍒欐槑缁嗙殑Excel瀵煎叆妯℃澘
+ *
+ * @author ly
+ */
+export function WmsControlRuleDetailDownloadExcelTemplate(parameter) {
+ return axios({
+ url: '/WmsControlRuleDetail/downloadExcelTemplate',
+ method: 'get',
+ params: parameter,
+ responseType: 'blob'
+ })
+}
+
+
+
diff --git a/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js
new file mode 100644
index 0000000..aea9545
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsControlRuleManage.js
@@ -0,0 +1,114 @@
+锘縤mport { axios } from '@/utils/request'
+
+/**
+ * 鏌ヨ鎺у埗灞炴�ц鍒�
+ *
+ * @author ly
+ */
+export function WmsControlRulePage (parameter) {
+ return axios({
+ url: '/WmsControlRule/page',
+ method: 'get',
+ params: parameter
+ })
+}
+
+/**
+ * 鎺у埗灞炴�ц鍒欏垪琛�
+ *
+ * @author ly
+ */
+export function WmsControlRuleList (parameter) {
+ return axios({
+ url: '/WmsControlRule/list',
+ method: 'get',
+ params: parameter
+ })
+}
+
+/**
+ * 娣诲姞鎺у埗灞炴�ц鍒�
+ *
+ * @author ly
+ */
+export function WmsControlRuleAdd (parameter) {
+ return axios({
+ url: '/WmsControlRule/add',
+ method: 'post',
+ data: parameter
+ })
+}
+
+/**
+ * 缂栬緫鎺у埗灞炴�ц鍒�
+ *
+ * @author ly
+ */
+export function WmsControlRuleEdit (parameter) {
+ return axios({
+ url: '/WmsControlRule/edit',
+ method: 'post',
+ data: parameter
+ })
+}
+
+/**
+ * 鍒犻櫎鎺у埗灞炴�ц鍒�
+ *
+ * @author ly
+ */
+export function WmsControlRuleDelete (parameter) {
+ return axios({
+ url: '/WmsControlRule/delete',
+ method: 'post',
+ data: parameter
+ })
+}
+
+
+/**
+ * 瀵煎嚭鎺у埗灞炴�ц鍒欑殑Excel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsControlRuleToExcel (parameter) {
+ return axios({
+ url: '/WmsControlRule/toExcel',
+ method: 'get',
+ params: parameter,
+ responseType: 'blob'
+ })
+}
+
+/**
+ * 瀵煎叆鎺у埗灞炴�ц鍒欑殑Excel鏂囦欢
+ *
+ * @author ly
+ */
+export function WmsControlRuleImportExcel (data, parameter) {
+ return axios({
+ url: '/WmsControlRule/importExcel',
+ method: 'post',
+ data: data,
+ params: parameter
+
+ })
+}
+
+
+/**
+ * 涓嬭浇鎺у埗灞炴�ц鍒欑殑Excel瀵煎叆妯℃澘
+ *
+ * @author ly
+ */
+export function WmsControlRuleDownloadExcelTemplate(parameter) {
+ return axios({
+ url: '/WmsControlRule/downloadExcelTemplate',
+ method: 'get',
+ params: parameter,
+ responseType: 'blob'
+ })
+}
+
+
+
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue
new file mode 100644
index 0000000..3d0e4ed
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/addForm.vue
@@ -0,0 +1,94 @@
+锘�<template>
+ <a-modal
+ title="鏂板鎺у埗灞炴�ц鍒�"
+ :width="900"
+ :visible="visible"
+ :confirmLoading="confirmLoading"
+ @ok="handleSubmit"
+ @cancel="handleCancel">
+ <a-spin :spinning="confirmLoading">
+ <a-form :form="form">
+ <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" v-decorator="['ruleCode', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヨ鍒欏悕绉�" v-decorator="['ruleName', {rules: [{required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" />
+ </a-form-item>
+ <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked'}]" />
+ </a-form-item>
+ </a-form>
+ </a-spin>
+ </a-modal>
+</template>
+
+<script>
+ import moment from 'moment'
+ import {
+ WmsControlRuleAdd
+ } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+ export default {
+ data () {
+ return {
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 5 }
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 15 }
+ },
+ visible: false,
+ confirmLoading: false,
+ form: this.$form.createForm(this)
+ }
+ },
+ methods: {
+ moment,
+ // 鍒濆鍖栨柟娉�
+ add (record) {
+ this.visible = true
+ this.$nextTick(() => {
+
+ });
+ },
+ /**
+ * 鎻愪氦琛ㄥ崟
+ */
+ handleSubmit () {
+ const { form: { validateFields } } = this
+ this.confirmLoading = true
+ validateFields((errors, values) => {
+ if (!errors) {
+ for (const key in values) {
+ if (typeof (values[key]) === 'object') {
+ values[key] = JSON.stringify(values[key])
+ }
+ }
+ WmsControlRuleAdd(values).then((res) => {
+ if (res.success) {
+ this.$message.success('鏂板鎴愬姛')
+ this.confirmLoading = false
+ this.$emit('ok', values)
+ this.handleCancel()
+ } else {
+ this.$message.error('鏂板澶辫触锛�' + JSON.stringify(res.message))
+ }
+ }).finally((res) => {
+ this.confirmLoading = false
+ })
+ } else {
+ this.confirmLoading = false
+ }
+ })
+ },
+ handleCancel () {
+ this.form.resetFields()
+ this.visible = false
+ }
+ }
+ }
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue
new file mode 100644
index 0000000..4a39c8f
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/details.vue
@@ -0,0 +1,107 @@
+锘�<template>
+ <!-- @ok="handleSubmit" -->
+ <a-modal
+ title="鎺у埗灞炴�ц鍒欐槑缁�"
+ :width="900"
+ :visible="visible"
+ :confirmLoading="confirmLoading"
+ @cancel="handleCancel"
+ >
+ <a-spin :spinning="confirmLoading">
+ <control-rule-detail ref="controlRuleDetail" @ok="handleOk" />
+ </a-spin>
+ </a-modal>
+
+</template>
+
+<script>
+import moment from 'moment'
+import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+
+import ControlRuleDetail from '@/views/main/WmsBase/WmsControlRuleDetail/index.vue'
+
+export default {
+ components: {
+ ControlRuleDetail
+ },
+ data() {
+ return {
+ Id: 0,
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 5 }
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 15 }
+ },
+ record: {},
+ visible: false,
+ confirmLoading: false,
+ form: this.$form.createForm(this)
+ }
+ },
+ methods: {
+ moment,
+ // 鍒濆鍖栨柟娉�
+ edit(record) {
+ this.visible = true
+ this.Id = record.id
+ this.$nextTick(() => {})
+ //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+ this.record = JSON.parse(JSON.stringify(record))
+ this.$nextTick(() => {
+ this.form.setFieldsValue({
+ id: record.id,
+ ruleCode: record.ruleCode,
+ ruleName: record.ruleName,
+ ruleDesc: record.ruleDesc,
+ isDisabled: record.isDisabled
+ })
+ })
+ },
+ handleOk(){
+
+ },
+ handleSubmit() {
+ const {
+ form: { validateFields }
+ } = this
+ this.confirmLoading = true
+ validateFields((errors, values) => {
+ if (!errors) {
+ for (const key in values) {
+ if (values[key] == null) continue
+ if (typeof values[key] === 'object') {
+ values[key] = JSON.stringify(values[key])
+ this.record[key] = values[key]
+ } else {
+ this.record[key] = values[key]
+ }
+ }
+ WmsControlRuleEdit(this.record)
+ .then(res => {
+ if (res.success) {
+ this.$message.success('缂栬緫鎴愬姛')
+ this.confirmLoading = false
+ this.$emit('ok', this.record)
+ this.handleCancel()
+ } else {
+ this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
+ }
+ })
+ .finally(res => {
+ this.confirmLoading = false
+ })
+ } else {
+ this.confirmLoading = false
+ }
+ })
+ },
+ handleCancel() {
+ this.form.resetFields()
+ this.visible = false
+ }
+ }
+}
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue
new file mode 100644
index 0000000..ea11e1c
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/editForm.vue
@@ -0,0 +1,123 @@
+锘�<template>
+ <a-modal
+ title="缂栬緫鎺у埗灞炴�ц鍒�"
+ :width="900"
+ :visible="visible"
+ :confirmLoading="confirmLoading"
+ @ok="handleSubmit"
+ @cancel="handleCancel"
+ >
+ <a-spin :spinning="confirmLoading">
+ <a-form :form="form">
+ <a-form-item label="瑙勫垯缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input
+ placeholder="璇疯緭鍏ヨ鍒欑紪鍙�"
+ v-decorator="['ruleCode', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欑紪鍙凤紒' }] }]"
+ />
+ </a-form-item>
+ <a-form-item label="瑙勫垯鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input
+ placeholder="璇疯緭鍏ヨ鍒欏悕绉�"
+ v-decorator="['ruleName', { rules: [{ required: true, message: '璇疯緭鍏ヨ鍒欏悕绉帮紒' }] }]"
+ />
+ </a-form-item>
+ <a-form-item label="瑙勫垯鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヨ鍒欐弿杩�" v-decorator="['ruleDesc']" />
+ </a-form-item>
+ <a-form-item label="鏄惁绂佺敤" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-switch
+ v-decorator="[
+ 'isDisabled',
+ { rules: [{ required: true, message: '璇烽�夋嫨鏄惁绂佺敤锛�' }], valuePropName: 'checked' }
+ ]"
+ />
+ </a-form-item>
+ <a-form-item v-show="false"><a-input v-decorator="['id']"/></a-form-item>
+ </a-form>
+ </a-spin>
+ </a-modal>
+
+</template>
+
+<script>
+import moment from 'moment'
+import { WmsControlRuleEdit } from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+export default {
+ data() {
+ return {
+ Id: 0,
+ labelCol: {
+ xs: { span: 24 },
+ sm: { span: 5 }
+ },
+ wrapperCol: {
+ xs: { span: 24 },
+ sm: { span: 15 }
+ },
+ record: {},
+ visible: false,
+ confirmLoading: false,
+ form: this.$form.createForm(this)
+ }
+ },
+ methods: {
+ moment,
+ // 鍒濆鍖栨柟娉�
+ edit(record) {
+ this.visible = true
+ this.Id = record.id
+ this.$nextTick(() => {})
+ //娣卞害鎷疯礉 绉婚櫎VUE鐨勭洃鍚紝闃叉INDEX椤甸潰鍊煎彉鍔�
+ this.record = JSON.parse(JSON.stringify(record))
+ this.$nextTick(() => {
+ this.form.setFieldsValue({
+ id: record.id,
+ ruleCode: record.ruleCode,
+ ruleName: record.ruleName,
+ ruleDesc: record.ruleDesc,
+ isDisabled: record.isDisabled
+ })
+ })
+ },
+ handleSubmit() {
+ const {
+ form: { validateFields }
+ } = this
+ this.confirmLoading = true
+ validateFields((errors, values) => {
+ if (!errors) {
+ for (const key in values) {
+ if (values[key] == null) continue
+ if (typeof values[key] === 'object') {
+ values[key] = JSON.stringify(values[key])
+ this.record[key] = values[key]
+ } else {
+ this.record[key] = values[key]
+ }
+ }
+ WmsControlRuleEdit(this.record)
+ .then(res => {
+ if (res.success) {
+ this.$message.success('缂栬緫鎴愬姛')
+ this.confirmLoading = false
+ this.$emit('ok', this.record)
+ this.handleCancel()
+ } else {
+ this.$message.error('缂栬緫澶辫触锛�' + JSON.stringify(res.message))
+ }
+ })
+ .finally(res => {
+ this.confirmLoading = false
+ })
+ } else {
+ this.confirmLoading = false
+ }
+ })
+ },
+ handleCancel() {
+ this.form.resetFields()
+ this.visible = false
+ }
+ }
+}
+</script>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue
new file mode 100644
index 0000000..cc33122
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/excelForm.vue
@@ -0,0 +1,181 @@
+锘�<template>
+ <a-modal
+ :width="850"
+ :destroyOnClose="true"
+ :visible="visible"
+ :forceRender="true"
+ title="鎵归噺瀵煎叆"
+ cancelText="鍙栨秷涓婁紶"
+ okText="寮�濮嬩笂浼�"
+ @cancel="handleCancel"
+ @ok="handleSubmit">
+ <a-spin :spinning="confirmLoading">
+ <a-row :span="24">
+ <span>璇烽�夋嫨瑕佸鍏ョ殑鏁版嵁鏂囦欢锛圗xcel鏍煎紡锛�</span>
+ </a-row>
+ <p></p>
+ <a-row>
+ <a-col :span="16">
+ <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
+ <a-icon style="font-size: 40px;" type="cloud-upload" />
+ </a-upload-dragger>
+ </a-col>
+ <!--<a-col :span="8">
+ <span>瀵煎叆妯″紡锛�</span>
+ <a-select
+ style="width: 130px"
+ placeholder="璇烽�夋嫨瀵煎叆妯″紡"
+ v-model="importExcelType">
+ <a-select-option
+ v-for="(item,index) in importExcelTypeData"
+ :key="index"
+ :value="item.code">{{ item.name }}
+ </a-select-option>
+ </a-select>
+ </a-col>-->
+ </a-row>
+ <a-row :span="24">
+ <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
+ 鐐瑰嚮鏌ョ湅鏂囦欢涓婁紶瑕佹眰
+ </a-button>-->
+ <span>銆�</span>
+ <a-button style="width: 90px;text-align: left;" @click="wmsControlRuleDownloadExcelTemplate" type="link">涓嬭浇瀵煎叆妯℃澘</a-button>锛屽~鍐欏苟涓婁紶
+ <span>銆�</span>
+ <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
+ 鏀惰捣
+ </a-button>
+ </a-row>
+ <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
+ <a-breadcrumb>
+ <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">鏂囦欢涓婁紶瑕佹眰</a-breadcrumb-item>
+ </a-breadcrumb>
+ </a-row>
+ <pre v-show="detailed">
+ <div v-html="demandText"></div>
+ </pre>
+ <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
+ <pre v-show="detailed">
+ <div v-html="columnText"></div>
+ </pre>
+ </a-spin>
+ </a-modal>
+</template>
+
+<script>
+ import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
+
+ import { WmsControlRuleImportExcel, WmsControlRuleDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+ import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
+ export default {
+ components: {
+ },
+ data() {
+ return {
+ visible: false,
+ detailed: false,
+ confirmLoading: false,
+ fileList: [],
+ importExcelTypeData: [],
+ importExcelType: '1',
+ uploadFile: null,
+ columns: [],
+ dataList: [],
+ demandText:'',
+ columnText: ''
+ }
+ },
+ methods: {
+ index() {
+ this.visible = true;
+ this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
+ this.demandText = parseDemandText("wmsControlRuleDownloadExcelTemplate")
+ window.downloadFile = this.wmsControlRuleDownloadExcelTemplate;
+ this.getTable();
+ },
+ showDemand() {
+ this.detailed = !this.detailed;
+ },
+ customRequest(document) {
+ this.uploadFile = document
+ },
+ getTable() {
+ sysExcelTemplateGetColumnList({className: "WmsControlRule"}).then(res =>
+ {
+ if (res.success) {
+ this.columns =[];
+ this.dataList = [{}];
+ res.data.forEach(x => {
+ this.columns.push({
+ dataIndex: x.columnName,
+ key: x.columnName,
+ title: x.columnComment
+ });
+ this.dataList[0][x.columnName] = x.isRequired ? "蹇呭~" : "闈炲繀濉�"
+ });
+ this.columnText = parseExcelFieldText(res.data);
+ }
+ });
+ },
+ beforeUpload(fileInfo) {
+ let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
+ if (!res.success) {
+ this.$message.warning(res.msg)
+ return false
+ }
+ setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
+ },
+ handleChange(fileInfo) {
+ if (fileInfo.file.status === 'error') {
+ fileInfo.fileList.splice(0, 1)
+ }
+ if (fileInfo.file.status === 'done') {
+ if (fileInfo.fileList.length > 1) {
+ fileInfo.fileList.splice(0, 1)
+ }
+ this.fileList = fileInfo.file
+ }
+ },
+ handleSubmit() {
+ this.confirmLoading = true
+ const formData = new FormData()
+ formData.append('file', this.uploadFile.file)
+ WmsControlRuleImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.confirmLoading = false
+ this.$emit('ok', [])
+ this.handleCancel()
+ }).finally((res)=>{this.confirmLoading = false})
+ },
+ handleCancel() {
+ this.visible = false
+ this.detailed = false
+ },
+ wmsControlRuleDownloadExcelTemplate() {
+ WmsControlRuleDownloadExcelTemplate({version: "v2"}).then((res) => {
+ downloadFile(res);
+ }).catch((err) => {
+ this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+ })
+ }
+ }
+ }
+</script>
+
+<style scoped>
+::v-deep .ant-upload.ant-upload-drag {
+ position: relative;
+ width: 140px;
+ height: 135px;
+ text-align: center;
+ background: #fafafa;
+ border: 1px dashed #d9d9d9;
+ border-radius: 2px;
+ cursor: pointer;
+ -webkit-transition: border-color 0.3s;
+ transition: border-color 0.3s;
+}
+::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
+ color: #ffc53d;
+ border-color: white;
+}
+</style>
\ No newline at end of file
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue
new file mode 100644
index 0000000..4c663d2
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRule/index.vue
@@ -0,0 +1,521 @@
+锘�<template>
+ <!-- 鎺у埗灞炴�ц鍒� -->
+ <div ref="boxOutWrap" class="boxOutWrap">
+ <div ref="boxForm" class="boxForm">
+ <a-card :bordered="false" :bodyStyle="tstyle">
+ <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRule:page')">
+ <a-form layout="inline">
+ <a-row :gutter="48">
+ <a-col :md="8" :sm="24">
+ <a-form-item label="瑙勫垯缂栧彿">
+ <a-input v-model="queryParam.ruleCode" allow-clear placeholder="璇疯緭鍏ヨ鍒欑紪鍙�" />
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="瑙勫垯鍚嶇О">
+ <a-input v-model="queryParam.ruleName" allow-clear placeholder="璇疯緭鍏ヨ鍒欏悕绉�" />
+ </a-form-item> </a-col
+ ><template v-if="advanced">
+ <a-col :md="8" :sm="24">
+ <a-form-item label="瑙勫垯鎻忚堪">
+ <a-input v-model="queryParam.ruleDesc" allow-clear placeholder="璇疯緭鍏ヨ鍒欐弿杩�" />
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏄惁绂佺敤">
+ <a-select
+ :allowClear="true"
+ style="width: 100%"
+ v-model="queryParam.isDisabled"
+ placeholder="璇烽�夋嫨鏄惁绂佺敤"
+ >
+ <a-select-option v-for="(item, index) in isDisabledData" :key="index" :value="item.code">{{
+ item.name
+ }}</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-col>
+ <!--骞存湀鏃ユ椂鍒嗙-->
+ <!--鏃堕棿鑼冨洿-->
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鍒涘缓鏃堕棿">
+ <a-range-picker
+ style="width: 100%"
+ :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+ :show-time="{
+ format: 'HH:mm:ss',
+ defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+ }"
+ v-model="queryParam.createdTime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ @change="onChangecreatedTime"
+ />
+ </a-form-item>
+ </a-col>
+ <!--骞存湀鏃ユ椂鍒嗙-->
+ <!--鏃堕棿鑼冨洿-->
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏇存柊鏃堕棿">
+ <a-range-picker
+ style="width: 100%"
+ :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']"
+ :show-time="{
+ format: 'HH:mm:ss',
+ defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
+ }"
+ v-model="queryParam.updatedTime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ @change="onChangeupdatedTime"
+ />
+ </a-form-item>
+ </a-col>
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鍒涘缓鑰呭悕绉�">
+ <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�" />
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="淇敼鑰呭悕绉�">
+ <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�" />
+ </a-form-item>
+ </a-col>
+ </template>
+
+ <a-col :md="8" :sm="24">
+ <span class="table-page-search-submitButtons">
+ <a-button type="primary" @click="$refs.table.refresh(true)">鏌ヨ</a-button>
+ <a-button style="margin-left: 8px" @click="() => (queryParam = {})">閲嶇疆</a-button>
+ <a @click="toggleAdvanced" style="margin-left: 8px">
+ {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+ <a-icon :type="advanced ? 'up' : 'down'" />
+ </a>
+ </span>
+ </a-col>
+ </a-row>
+ </a-form>
+ </div>
+ </a-card>
+ </div>
+ <a-card :bordered="false">
+ <s-table
+ ref="table"
+ :columns="columns"
+ :data="loadData"
+ :alert="true"
+ @changeTablePage="pageInfo = $event"
+ :scroll="{ x: true, y: tableHeight }"
+ :rowKey="record => record.id"
+ :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+ >
+ <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRule:add')">
+ <div ref="actionBar" class="actionBar">
+ <a-button
+ type="info"
+ v-if="hasPerm('sysExcelTemplate:importExcel')"
+ icon="upload"
+ @click="$refs.excelForm.index()"
+ >
+ 瀵煎叆
+ </a-button>
+ <a-button
+ type="info"
+ v-if="hasPerm('WmsControlRule:exportExcel')"
+ icon="download"
+ @click="WmsControlRuleToExcel()"
+ >
+ 瀵煎嚭
+ </a-button>
+ <a-button type="primary" v-if="hasPerm('WmsControlRule:add')" icon="plus" @click="$refs.addForm.add()"
+ >鏂板鎺у埗灞炴�ц鍒�</a-button
+ >
+ </div>
+ </template>
+ <span slot="isDisabledscopedSlots" slot-scope="text">
+ <div v-if="text === true">
+ <a-tag color="green">鏄�</a-tag>
+ </div>
+ <div v-else-if="text == false">
+ <a-tag color="volcano">鍚�</a-tag>
+ </div>
+ <div v-else=""></div>
+ </span>
+ <span slot="action" slot-scope="text, record">
+ <!-- 鑷畾涔� -->
+ <a v-if="hasPerm('WmsControlRule:getdetail')" @click="$refs.detailForm.edit(record)">璇︽儏</a>
+
+ <a v-if="hasPerm('WmsControlRule:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+ <a-divider type="vertical" v-if="hasPerm('WmsControlRule:edit') & hasPerm('WmsControlRule:delete')" />
+ <a-popconfirm
+ v-if="hasPerm('WmsControlRule:delete')"
+ placement="topRight"
+ title="纭鍒犻櫎锛�"
+ @confirm="() => WmsControlRuleDelete(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" />
+
+ <!-- 鑷畾涔� -->
+ <detail-form ref="detailForm" @ok="handleOk" />
+
+ </a-card>
+ </div>
+</template>
+<script>
+import { STable } from '@/components'
+import moment from 'moment'
+import {
+ WmsControlRulePage,
+ WmsControlRuleDelete,
+ WmsControlRuleToExcel
+} from '@/api/modular/main/WmsBase/WmsControlRuleManage'
+//鑷畾涔塼able楂樺害
+import setTableHtMixin from '@/mixins/handleTableHt.js'
+import addForm from './addForm.vue'
+import { exportExcel } from '@/utils/exportToExcel'
+import { downloadFile } from '@/utils/util'
+import editForm from './editForm.vue'
+import excelForm from './excelForm.vue'
+import detailForm from './details.vue'
+
+
+export default {
+ mixins: [setTableHtMixin],
+ components: {
+ STable,
+ addForm,
+ editForm,
+ excelForm,
+ detailForm
+ },
+ data() {
+ return {
+ advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+ queryParam: {},
+ pageInfo: {
+ current: 1,
+ pageSize: 10
+ },
+ columns: [
+ {
+ title: '搴忓彿',
+ width: '60px',
+ align: 'center',
+ customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+ },
+ {
+ title: '瑙勫垯缂栧彿',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'ruleCode'
+ },
+ {
+ title: '瑙勫垯鍚嶇О',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'ruleName'
+ },
+ {
+ title: '瑙勫垯鎻忚堪',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'ruleDesc'
+ },
+ {
+ title: '鏄惁绂佺敤',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'isDisabled',
+ scopedSlots: { customRender: 'isDisabledscopedSlots' }
+ },
+ {
+ title: '鍒涘缓鏃堕棿',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'createdTime'
+ },
+ {
+ title: '鏇存柊鏃堕棿',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'updatedTime'
+ },
+ {
+ title: '鍒涘缓鑰呭悕绉�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'createdUserName'
+ },
+ {
+ title: '淇敼鑰呭悕绉�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px' //鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'updatedUserName'
+ }
+ ],
+ tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+ // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+ loadData: parameter => {
+ return WmsControlRulePage(Object.assign(parameter, this.switchingDate())).then(res => {
+ return res.data
+ })
+ },
+ selectedRowKeys: [],
+ selectedRows: []
+ }
+ },
+ created() {
+ if (this.hasPerm('WmsControlRule:edit') || this.hasPerm('WmsControlRule:delete')) {
+ this.columns.push({
+ title: '鎿嶄綔',
+ width: '150px',
+ dataIndex: 'action',
+ scopedSlots: { customRender: 'action' }
+ })
+ }
+ const path = this.$route.path
+ const columnStr = window.localStorage.getItem(path)
+ if (columnStr) {
+ var _columns = JSON.parse(columnStr)
+ this.columns.forEach(element => {
+ var fObj = _columns.find((item, index) => {
+ return item.dataIndex === element.dataIndex
+ })
+ if (fObj != undefined && fObj != null) {
+ element.checked = fObj.checked
+ }
+ })
+ }
+ const isDisabledOption = this.$options
+ this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+ this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+ window.addEventListener(
+ 'resize',
+ () => {
+ this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+ },
+ false
+ )
+ },
+ methods: {
+ moment,
+ /**
+ * 鏌ヨ鍙傛暟缁勮
+ */
+ switchingDate() {
+ const obj = JSON.parse(JSON.stringify(this.queryParam))
+ return obj
+ },
+ WmsControlRuleDelete(record) {
+ WmsControlRuleDelete(record).then(res => {
+ if (res.success) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.$refs.table.refresh()
+ } else {
+ this.$message.error('鍒犻櫎澶辫触') // + res.message
+ }
+ })
+ },
+
+ WmsControlRuleToExcel() {
+ this.loading = true
+ let entozh = {}
+ const path = this.$route.path
+ if (window.localStorage.getItem(path)) {
+ JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+ if (item.dataIndex != 'action' && item.checked) {
+ entozh[item.dataIndex] = item.title
+ }
+ })
+ } else {
+ //鐩存帴鐐瑰鍑�
+ this.columns.forEach(item => {
+ if (item.dataIndex != 'action') {
+ entozh[item.dataIndex] = item.title
+ }
+ })
+ }
+ WmsControlRulePage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam))
+ .then(res => {
+ this.loading = false
+ //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+ var arrDataCutout = this.columns.filter(v => v.customCutout == true)
+ res.data.rows.forEach(item => {
+ var arrKeys = Object.keys(item)
+ arrKeys.forEach(key => {
+ var strFieldDic = key + 'Data'
+ //鏋氫妇杞��
+ if (this[strFieldDic] && this[strFieldDic].length > 0) {
+ let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]))
+ if (arrFieldDic.length > 0) {
+ item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�'
+ }
+ }
+ // 鏃ユ湡鎴彇
+ if (arrDataCutout.length > 0) {
+ arrDataCutout.forEach(itemIn => {
+ if (key == itemIn.dataIndex && item[key]) {
+ item[key] = item[key].split(' ')[0]
+ }
+ })
+ }
+ })
+ })
+ exportExcel(res.data.rows, entozh, 'xlsx', `${this.$route.meta.title}`)
+ })
+ .catch(err => {
+ this.loading = false
+ this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+ })
+ },
+
+ toggleAdvanced() {
+ this.advanced = !this.advanced
+ this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+ },
+ onChangecreatedTime(date, dateString) {
+ this.queryParam.createdTime = dateString
+ },
+ onChangeupdatedTime(date, dateString) {
+ this.queryParam.updatedTime = dateString
+ },
+ handleOk() {
+ this.$refs.table.refresh()
+ },
+ onSelectChange(selectedRowKeys, selectedRows) {
+ this.selectedRowKeys = selectedRowKeys
+ this.selectedRows = selectedRows
+ }
+ }
+}
+</script>
+<style lang="less">
+.table-operator {
+ margin-bottom: 18px;
+}
+button {
+ margin-right: 8px;
+}
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue
new file mode 100644
index 0000000..767ae4b
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/addForm.vue
@@ -0,0 +1,109 @@
+锘�<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="鎺у埗灞炴�ц鍒橧D" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D" v-decorator="['controlRuleId', {rules: [{required: true, message: '璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D锛�'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" v-decorator="['maxImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶楂樺簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" v-decorator="['minImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶浣庡簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="瀹夊叏搴撳瓨" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�" v-decorator="['safeImumqty', {rules: [{required: true, message: '璇疯緭鍏ュ畨鍏ㄥ簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�灏忓簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶灏忓簱榫勶紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�澶у簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶澶у簱榫勶紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏄惁鍏嶆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-switch v-decorator="['isNotChek',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁鍏嶆锛�' }], valuePropName: 'checked'}]" />
+ </a-form-item>
+ <a-form-item label="淇濊川鏈熷ぉ鏁�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟" v-decorator="['shelfLifeDays', {rules: [{required: true, message: '璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟锛�'}]}]" />
+ </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 {
+ WmsControlRuleDetailAdd
+ } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage'
+ 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])
+ }
+ }
+ WmsControlRuleDetailAdd(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/WmsControlRuleDetail/editForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue
new file mode 100644
index 0000000..41a2dda
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/editForm.vue
@@ -0,0 +1,131 @@
+锘�<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="鎺у埗灞炴�ц鍒橧D" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D" v-decorator="['controlRuleId', {rules: [{required: true, message: '璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D锛�'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶楂樺簱瀛�" v-decorator="['maxImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶楂樺簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" v-decorator="['minImumqty', {rules: [{required: true, message: '璇疯緭鍏ユ渶浣庡簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="瀹夊叏搴撳瓨" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�" v-decorator="['safeImumqty', {rules: [{required: true, message: '璇疯緭鍏ュ畨鍏ㄥ簱瀛橈紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�灏忓簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶灏忓簱榫�" v-decorator="['minStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶灏忓簱榫勶紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏈�澶у簱榫�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ユ渶澶у簱榫�" v-decorator="['maxStorageAge', {rules: [{required: true, message: '璇疯緭鍏ユ渶澶у簱榫勶紒'}]}]" />
+ </a-form-item>
+ <a-form-item label="鏄惁鍏嶆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-switch v-decorator="['isNotChek',{rules: [{ required: true, message: '璇烽�夋嫨鏄惁鍏嶆锛�' }], valuePropName: 'checked'}]" />
+ </a-form-item>
+ <a-form-item label="淇濊川鏈熷ぉ鏁�" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
+ <a-input placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟" v-decorator="['shelfLifeDays', {rules: [{required: true, message: '璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟锛�'}]}]" />
+ </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 {
+ WmsControlRuleDetailEdit
+ } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage'
+ 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,
+ controlRuleId: record.controlRuleId,
+ maxImumqty: record.maxImumqty,
+ minImumqty: record.minImumqty,
+ safeImumqty: record.safeImumqty,
+ minStorageAge: record.minStorageAge,
+ maxStorageAge: record.maxStorageAge,
+ isNotChek: record.isNotChek,
+ shelfLifeDays: record.shelfLifeDays,
+ 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]
+ }
+ }
+ WmsControlRuleDetailEdit(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/WmsControlRuleDetail/excelForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/excelForm.vue
new file mode 100644
index 0000000..fdeae2b
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/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="wmsControlRuleDetailDownloadExcelTemplate" 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 { WmsControlRuleDetailImportExcel, WmsControlRuleDetailDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage'
+ 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("wmsControlRuleDetailDownloadExcelTemplate")
+ window.downloadFile = this.wmsControlRuleDetailDownloadExcelTemplate;
+ this.getTable();
+ },
+ showDemand() {
+ this.detailed = !this.detailed;
+ },
+ customRequest(document) {
+ this.uploadFile = document
+ },
+ getTable() {
+ sysExcelTemplateGetColumnList({className: "WmsControlRuleDetail"}).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)
+ WmsControlRuleDetailImportExcel(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
+ },
+ wmsControlRuleDetailDownloadExcelTemplate() {
+ WmsControlRuleDetailDownloadExcelTemplate({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/WmsControlRuleDetail/index.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue
new file mode 100644
index 0000000..7eff19e
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsControlRuleDetail/index.vue
@@ -0,0 +1,604 @@
+锘�<template>
+ <div ref="boxOutWrap" class="boxOutWrap">
+ <div ref="boxForm" class="boxForm">
+ <a-card :bordered="false" :bodyStyle="tstyle">
+
+ <div class="table-page-search-wrapper" v-if="hasPerm('WmsControlRuleDetail:page')">
+ <a-form layout="inline">
+ <a-row :gutter="48">
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鎺у埗灞炴�ц鍒橧D">
+ <a-input v-model="queryParam.controlRuleId" allow-clear placeholder="璇疯緭鍏ユ帶鍒跺睘鎬ц鍒橧D"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏈�楂樺簱瀛�">
+ <a-input v-model="queryParam.maxImumqty" allow-clear placeholder="璇疯緭鍏ユ渶楂樺簱瀛�"/>
+ </a-form-item>
+ </a-col><template v-if="advanced">
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏈�浣庡簱瀛�">
+ <a-input v-model="queryParam.minImumqty" allow-clear placeholder="璇疯緭鍏ユ渶浣庡簱瀛�"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="瀹夊叏搴撳瓨">
+ <a-input v-model="queryParam.safeImumqty" allow-clear placeholder="璇疯緭鍏ュ畨鍏ㄥ簱瀛�"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏈�灏忓簱榫�">
+ <a-input v-model="queryParam.minStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶灏忓簱榫�"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏈�澶у簱榫�">
+ <a-input v-model="queryParam.maxStorageAge" allow-clear placeholder="璇疯緭鍏ユ渶澶у簱榫�"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏄惁鍏嶆">
+ <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isNotChek" placeholder="璇烽�夋嫨鏄惁鍏嶆">
+ <a-select-option v-for="(item,index) in isNotChekData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-col>
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="淇濊川鏈熷ぉ鏁�">
+ <a-input v-model="queryParam.shelfLifeDays" allow-clear placeholder="璇疯緭鍏ヤ繚璐ㄦ湡澶╂暟"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏄惁绂佺敤">
+ <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="璇烽�夋嫨鏄惁绂佺敤">
+ <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-col>
+ <!--骞存湀鏃ユ椂鍒嗙-->
+ <!--鏃堕棿鑼冨洿-->
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鍒涘缓鏃堕棿">
+ <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangecreatedTime"/>
+
+ </a-form-item>
+ </a-col>
+ <!--骞存湀鏃ユ椂鍒嗙-->
+ <!--鏃堕棿鑼冨洿-->
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鏇存柊鏃堕棿">
+ <a-range-picker style="width: 100%" :placeholder="['寮�濮嬫椂闂�', '缁撴潫鏃堕棿']" :show-time="{
+format: 'HH:mm:ss', defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" @change="onChangeupdatedTime"/>
+
+ </a-form-item>
+ </a-col>
+
+ <a-col :md="8" :sm="24">
+ <a-form-item label="鍒涘缓鑰呭悕绉�">
+ <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤鸿�呭悕绉�"/>
+ </a-form-item>
+ </a-col>
+ <a-col :md="8" :sm="24">
+ <a-form-item label="淇敼鑰呭悕绉�">
+ <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="璇疯緭鍏ヤ慨鏀硅�呭悕绉�"/>
+ </a-form-item>
+ </a-col> </template>
+
+ <a-col :md="8" :sm="24" >
+ <span class="table-page-search-submitButtons">
+ <a-button type="primary" @click="$refs.table.refresh(true)" >鏌ヨ</a-button>
+ <a-button style="margin-left: 8px" @click="() => queryParam = {}">閲嶇疆</a-button>
+ <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+ <a-icon :type="advanced ? 'up' : 'down'"/>
+ </a>
+ </span>
+ </a-col>
+
+ </a-row>
+ </a-form>
+ </div>
+ </a-card>
+ </div>
+ <a-card :bordered="false">
+ <!-- :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" -->
+ <s-table
+ ref="table"
+ :columns="columns"
+ :data="loadData"
+ :alert="true"
+ @changeTablePage="pageInfo = $event"
+ :scroll="{x: true,y:tableHeight}"
+ :rowKey="(record) => record.id"
+ >
+ <template class="table-operator" slot="operator" v-if="hasPerm('WmsControlRuleDetail:add')" >
+ <div ref="actionBar" class="actionBar">
+ <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
+ 瀵煎叆
+ </a-button>
+ <a-button type="info" v-if="hasPerm('WmsControlRuleDetail:exportExcel')" icon="download" @click="WmsControlRuleDetailToExcel()">
+ 瀵煎嚭
+ </a-button>
+ <a-button type="primary" v-if="hasPerm('WmsControlRuleDetail:add')" icon="plus" @click="$refs.addForm.add()">鏂板鎺у埗灞炴�ц鍒欐槑缁�</a-button>
+ </div>
+ </template>
+ <span slot="isNotChekscopedSlots" slot-scope="text">
+ <div v-if="text===true ">
+ <a-tag color="green">鏄�</a-tag>
+ </div>
+ <div v-else-if="text==false">
+ <a-tag color="volcano">鍚�</a-tag>
+ </div>
+ <div v-else=""></div>
+ </span>
+ <span slot="isDisabledscopedSlots" slot-scope="text">
+ <div v-if="text===true ">
+ <a-tag color="green">鏄�</a-tag>
+ </div>
+ <div v-else-if="text==false">
+ <a-tag color="volcano">鍚�</a-tag>
+ </div>
+ <div v-else=""></div>
+ </span>
+ <span slot="action" slot-scope="text, record">
+
+ <a v-if="hasPerm('WmsControlRuleDetail:edit')" @click="$refs.editForm.edit(record)">缂栬緫</a>
+ <a-divider type="vertical" v-if="hasPerm('WmsControlRuleDetail:edit') & hasPerm('WmsControlRuleDetail:delete')"/>
+ <a-popconfirm v-if="hasPerm('WmsControlRuleDetail:delete')" placement="topRight" title="纭鍒犻櫎锛�" @confirm="() => WmsControlRuleDetailDelete(record)">
+ <a>鍒犻櫎</a>
+ </a-popconfirm>
+ </span>
+ </s-table>
+ <add-form ref="addForm" @ok="handleOk" />
+ <edit-form ref="editForm" @ok="handleOk" />
+ <excel-form ref="excelForm" @ok="handleOk" />
+ </a-card>
+ </div>
+</template>
+<script>
+ import { STable } from '@/components'
+ import moment from 'moment'
+ import { WmsControlRuleDetailPage, WmsControlRuleDetailDelete, WmsControlRuleDetailToExcel } from '@/api/modular/main/WmsBase/WmsControlRuleDetailManage'
+ //鑷畾涔塼able楂樺害
+ import setTableHtMixin from '@/mixins/handleTableHt.js'
+ import addForm from './addForm.vue'
+ import { exportExcel } from '@/utils/exportToExcel'
+ import { downloadFile } from '@/utils/util'
+ import editForm from './editForm.vue'
+ import excelForm from './excelForm.vue'
+ export default {
+ mixins: [setTableHtMixin],
+ components: {
+ STable,
+ addForm,
+ editForm,
+ excelForm
+ },
+ data () {
+ return {
+ advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+ queryParam: {},
+ pageInfo: {
+ current: 1,
+ pageSize: 10
+ },
+ columns: [
+ {
+ title:'搴忓彿',
+ width: '60px',
+ align: 'center',
+ customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
+ },
+ {
+ title: '鎺у埗灞炴�ц鍒橧D',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '140px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '140px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'controlRuleId'
+ },
+ {
+ title: '鏈�楂樺簱瀛�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'maxImumqty'
+ },
+ {
+ title: '鏈�浣庡簱瀛�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'minImumqty'
+ },
+ {
+ title: '瀹夊叏搴撳瓨',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'safeImumqty'
+ },
+ {
+ title: '鏈�灏忓簱榫�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'minStorageAge'
+ },
+ {
+ title: '鏈�澶у簱榫�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'maxStorageAge'
+ },
+ {
+ title: '鏄惁鍏嶆',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'isNotChek',
+ scopedSlots: { customRender: 'isNotChekscopedSlots' }
+ },
+ {
+ title: '淇濊川鏈熷ぉ鏁�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'shelfLifeDays'
+ },
+ {
+ title: '鏄惁绂佺敤',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'isDisabled',
+ scopedSlots: { customRender: 'isDisabledscopedSlots' }
+ },
+ {
+ title: '鍒涘缓鏃堕棿',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'createdTime'
+ },
+ {
+ title: '鏇存柊鏃堕棿',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'updatedTime'
+ },
+ {
+ title: '鍒涘缓鑰呭悕绉�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'createdUserName'
+ },
+ {
+ title: '淇敼鑰呭悕绉�',
+ align: 'center',
+ customHeaderCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ customCell: () => {
+ return {
+ style: {
+ 'min-width': '120px'//鏈�灏忓垪瀹借缃�
+ }
+ }
+ },
+ sorter: true,
+ dataIndex: 'updatedUserName'
+ }
+ ],
+ tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
+ // 鍔犺浇鏁版嵁鏂规硶 蹇呴』涓� Promise 瀵硅薄
+ loadData: parameter => {
+ return WmsControlRuleDetailPage(Object.assign(parameter, this.switchingDate())).then((res) => {
+ return res.data
+ })
+ },
+ selectedRowKeys: [],
+ selectedRows: []
+ }
+ },
+ created () {
+ if (this.hasPerm('WmsControlRuleDetail:edit') || this.hasPerm('WmsControlRuleDetail:delete')) {
+ this.columns.push({
+ title: '鎿嶄綔',
+ width: '150px',
+ dataIndex: 'action',
+ scopedSlots: { customRender: 'action' }
+ })
+ }
+ const path = this.$route.path
+ const columnStr = window.localStorage.getItem(path)
+ if(columnStr) {
+ var _columns = JSON.parse(columnStr)
+ this.columns.forEach(element => {
+ var fObj = _columns.find((item, index) => {
+ return item.dataIndex === element.dataIndex;
+ })
+ if(fObj!=undefined && fObj!=null){
+ element.checked=fObj.checked;
+ }
+ });
+ }
+ const isNotChekOption = this.$options
+ this.isNotChekData = isNotChekOption.filters['dictData']('yes_true_false')
+ const isDisabledOption = this.$options
+ this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
+
+ this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+ window.addEventListener(
+ 'resize',
+ () => {
+ this.handleTableHt() // 鐩戝惉灞忓箷澶у皬鏀瑰彉琛ㄦ牸楂樺害
+ },
+ false
+ )
+
+ },
+ methods: {
+ moment,
+ /**
+ * 鏌ヨ鍙傛暟缁勮
+ */
+ switchingDate () {
+ const obj = JSON.parse(JSON.stringify(this.queryParam))
+ return obj
+ },
+ WmsControlRuleDetailDelete (record) {
+ WmsControlRuleDetailDelete(record).then((res) => {
+ if (res.success) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.$refs.table.refresh()
+ } else {
+ this.$message.error('鍒犻櫎澶辫触') // + res.message
+ }
+ })
+ },
+
+
+ WmsControlRuleDetailToExcel() {
+ this.loading = true
+ let entozh = {};
+ const path = this.$route.path;
+ if (window.localStorage.getItem(path)) {
+ JSON.parse(window.localStorage.getItem(path)).forEach(item => {
+ if (item.dataIndex != 'action' && item.checked) {
+ entozh[item.dataIndex] = item.title
+ }
+ })
+ } else { //鐩存帴鐐瑰鍑�
+ this.columns.forEach(item => {
+ if (item.dataIndex != 'action') {
+ entozh[item.dataIndex] = item.title
+ }
+ })
+ }
+ WmsControlRuleDetailPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
+ this.loading = false;
+ //闇�瑕佹埅鍙栨棩鏈熺殑瀛楁
+ var arrDataCutout = this.columns.filter(v => v.customCutout == true);
+ res.data.rows.forEach(item => {
+ var arrKeys = Object.keys(item);
+ arrKeys.forEach(key => {
+ var strFieldDic = key + 'Data';
+ //鏋氫妇杞��
+ if (this[strFieldDic] && this[strFieldDic].length > 0) {
+ let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
+ if (arrFieldDic.length > 0) {
+ item[key] = arrFieldDic[0]?.name || '娌℃湁鏋氫妇鍊�';
+ }
+ }
+ // 鏃ユ湡鎴彇
+ if (arrDataCutout.length > 0) {
+ arrDataCutout.forEach(itemIn => {
+ if (key == itemIn.dataIndex && item[key]) {
+ item[key] = item[key].split(" ")[0]
+ }
+ })
+ }
+ });
+ })
+ exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
+ }).catch((err) => {
+ this.loading = false
+ this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+ })
+ },
+
+
+ toggleAdvanced () {
+ this.advanced = !this.advanced
+ this.handleTableHt() //璁剧疆涓昏〃琛ㄦ牸楂樺害
+ },
+ onChangecreatedTime(date, dateString) {
+ this.queryParam.createdTime = dateString
+ },
+ onChangeupdatedTime(date, dateString) {
+ this.queryParam.updatedTime = dateString
+ },
+ handleOk () {
+ this.$refs.table.refresh()
+ },
+ onSelectChange (selectedRowKeys, selectedRows) {
+ this.selectedRowKeys = selectedRowKeys
+ this.selectedRows = selectedRows
+ }
+ }
+ }
+</script>
+<style lang="less">
+ .table-operator {
+ margin-bottom: 18px;
+ }
+ button {
+ margin-right: 8px;
+ }
+</style>
diff --git a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
index dc89591..a916adf 100644
--- a/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
+++ b/iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsMaterial/tabForm.vue
@@ -17,7 +17,7 @@
Content of Tab Pane 2
</a-tab-pane>
<a-tab-pane key="3" tab="鎵规灞炴��">
- Content of Tab Pane 3
+ 闇�姹傚緟瀹�
</a-tab-pane>
<a-tab-pane key="4" tab="鏇夸唬鍝佺鐞�">
<add-form-sub ref="addFormWmsSubstituteGood" @ok="handleOk" />
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs
new file mode 100644
index 0000000..cb04d39
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleInput.cs
@@ -0,0 +1,166 @@
+锘縰sing Admin.NET.Core;
+using Admin.NET.Core.Service;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application
+{
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐煡璇㈠弬鏁�
+ /// </summary>
+ public class WmsControlRuleSearch : PageInputBase
+ {
+ /// <summary>
+ /// 瑙勫垯缂栧彿
+ /// </summary>
+ public virtual string RuleCode { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鍚嶇О
+ /// </summary>
+ public virtual string RuleName { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鎻忚堪
+ /// </summary>
+ public virtual string RuleDesc { 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 WmsControlRuleSearchNonPage : PageInputNonPageBase
+ {
+ /// <summary>
+ /// 瑙勫垯缂栧彿
+ /// </summary>
+ public virtual string RuleCode { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鍚嶇О
+ /// </summary>
+ public virtual string RuleName { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鎻忚堪
+ /// </summary>
+ public virtual string RuleDesc { 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 WmsControlRuleInput
+ {
+ /// <summary>
+ /// 瑙勫垯缂栧彿
+ /// </summary>
+ [Required(ErrorMessage = "瑙勫垯缂栧彿涓嶈兘涓虹┖")]
+ public virtual string RuleCode { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "瑙勫垯鍚嶇О涓嶈兘涓虹┖")]
+ public virtual string RuleName { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鎻忚堪
+ /// </summary>
+ public virtual string RuleDesc { get; set; }
+
+ /// <summary>
+ /// 鏄惁绂佺敤
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")]
+ public virtual bool IsDisabled { get; set; }
+
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐柊澧炲弬鏁�
+ /// </summary>
+ public class AddWmsControlRuleInput : WmsControlRuleInput
+ {
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欏垹闄ゅ弬鏁�
+ /// </summary>
+ public class DeleteWmsControlRuleInput : BaseId
+ {
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐洿鏂板弬鏁�
+ /// </summary>
+ public class UpdateWmsControlRuleInput : WmsControlRuleInput
+ {
+ /// <summary>
+ /// Id涓婚敭
+ /// </summary>
+ [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欒幏鍙栧崟涓弬鏁�
+ /// </summary>
+ public class QueryeWmsControlRuleInput : BaseId
+ {
+
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs
new file mode 100644
index 0000000..62887e5
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Dto/WmsControlRuleOutput.cs
@@ -0,0 +1,57 @@
+锘縰sing Admin.NET.Core.Util.LowCode.Dto;
+using System;
+
+namespace Admin.NET.Application
+{
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欒緭鍑哄弬鏁�
+ /// </summary>
+ public class WmsControlRuleOutput
+ {
+ /// <summary>
+ /// 瑙勫垯缂栧彿
+ /// </summary>
+ public string RuleCode { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鍚嶇О
+ /// </summary>
+ public string RuleName { get; set; }
+
+ /// <summary>
+ /// 瑙勫垯鎻忚堪
+ /// </summary>
+ public string RuleDesc { 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/WmsControlRule/IWmsControlRuleService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.cs
new file mode 100644
index 0000000..d52e0a8
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/IWmsControlRuleService.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 IWmsControlRuleService
+ {
+ Task<WmsControlRuleOutput> Get([FromQuery] QueryeWmsControlRuleInput input);
+ Task<List<WmsControlRuleOutput>> List([FromQuery] WmsControlRuleInput input);
+ Task<PageResult<WmsControlRuleOutput>> Page([FromQuery] WmsControlRuleSearch input);
+ Task<List<WmsControlRuleOutput>> ListNonPageAsync([FromQuery] WmsControlRuleSearchNonPage input);
+
+ Task Add(AddWmsControlRuleInput input);
+ Task Update(UpdateWmsControlRuleInput input);
+ Task Delete(DeleteWmsControlRuleInput 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/WmsControlRule/Map/WmsControlRuleMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs
new file mode 100644
index 0000000..95b5891
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/Map/WmsControlRuleMapper.cs
@@ -0,0 +1,18 @@
+锘縰sing Mapster;
+using Admin.NET.Core;
+
+namespace Admin.NET.Application
+{
+ public class WmsControlRuleMapper : IRegister
+ {
+ public void Register(TypeAdapterConfig config)
+ {
+ config.ForType<AddWmsControlRuleInput, WmsControlRule>()
+ ;
+ config.ForType<UpdateWmsControlRuleInput, WmsControlRule>()
+ ;
+ config.ForType<WmsControlRule, WmsControlRuleOutput>()
+ ;
+ }
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs
new file mode 100644
index 0000000..ba26582
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRule/WmsControlRuleService.cs
@@ -0,0 +1,418 @@
+锘縰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 = "WmsControlRule", Order = 100)]
+ [Route("api")]
+ public class WmsControlRuleService : IWmsControlRuleService, IDynamicApiController, ITransient
+ {
+ private readonly IRepository<WmsControlRule,MasterDbContextLocator> _wmsControlRuleRep;
+ private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
+ private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
+ private readonly ISysExcelTemplateService _sysExcelTemplateService;
+ private readonly static object _lock = new();
+
+ public WmsControlRuleService(
+ IRepository<WmsControlRule,MasterDbContextLocator> wmsControlRuleRep
+ ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
+ ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
+ ,ISysExcelTemplateService sysExcelTemplateService
+ )
+ {
+ _wmsControlRuleRep = wmsControlRuleRep;
+ _sysDictTypeRep = sysDictTypeRep;
+ _sysDictDataRep = sysDictDataRep;
+ _sysExcelTemplateService = sysExcelTemplateService;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ鎺у埗灞炴�ц鍒�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRule/page")]
+ public async Task<PageResult<WmsControlRuleOutput>> Page([FromQuery] WmsControlRuleSearch input)
+ {
+ var wmsControlRules = await _wmsControlRuleRep.DetachedEntities
+ .Where(!string.IsNullOrEmpty(input.RuleCode), u => u.RuleCode == input.RuleCode)
+ .Where(!string.IsNullOrEmpty(input.RuleName), u => u.RuleName == input.RuleName)
+ .Where(!string.IsNullOrEmpty(input.RuleDesc), u => u.RuleDesc == input.RuleDesc)
+ .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<WmsControlRuleSearch>(input))
+ .ProjectToType<WmsControlRuleOutput>()
+ .ToADPagedListAsync(input.PageNo, input.PageSize);
+ return wmsControlRules;
+ }
+
+ /// <summary>
+ /// 涓嶅垎椤垫煡璇㈡帶鍒跺睘鎬ц鍒欏垪琛�
+ /// </summary>
+ /// <param name="input">鎺у埗灞炴�ц鍒欐煡璇㈠弬鏁�</param>
+ /// <returns>(鎺у埗灞炴�ц鍒�)瀹炰緥鍒楄〃</returns>
+ [HttpGet("WmsControlRule/listNonPage")]
+ public async Task<List<WmsControlRuleOutput>> ListNonPageAsync([FromQuery] WmsControlRuleSearchNonPage input)
+ {
+ var pRuleCode = input.RuleCode?.Trim() ?? "";
+ var pRuleName = input.RuleName?.Trim() ?? "";
+ var pRuleDesc = input.RuleDesc?.Trim() ?? "";
+ var pIsDisabled = input.IsDisabled;
+ var pCreatedTime = input.CreatedTime;
+ var pUpdatedTime = input.UpdatedTime;
+ var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
+ var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
+ var wmsControlRules = await _wmsControlRuleRep.DetachedEntities
+ .Where(!string.IsNullOrEmpty(pRuleCode), u => u.RuleCode == pRuleCode)
+ .Where(!string.IsNullOrEmpty(pRuleName), u => u.RuleName == pRuleName)
+ .Where(!string.IsNullOrEmpty(pRuleDesc), u => u.RuleDesc == pRuleDesc)
+ .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<WmsControlRuleOutput>()
+ .ToListAsync();
+ return wmsControlRules;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎺у埗灞炴�ц鍒�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRule/detail")]
+ public async Task<WmsControlRuleOutput> Get([FromQuery] QueryeWmsControlRuleInput input)
+ {
+ return (await _wmsControlRuleRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsControlRuleOutput>();
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎺у埗灞炴�ц鍒欏垪琛�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRule/list")]
+ public async Task<List<WmsControlRuleOutput>> List([FromQuery] WmsControlRuleInput input)
+ {
+ return await _wmsControlRuleRep.DetachedEntities.ProjectToType<WmsControlRuleOutput>().ToListAsync();
+ }
+
+ #region 澧炪�佸垹銆佹敼
+
+ /// <summary>
+ /// 澧炲姞鎺у埗灞炴�ц鍒�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRule/add")]
+ public async Task Add(AddWmsControlRuleInput input)
+ {
+ var wmsControlRule = input.Adapt<WmsControlRule>();
+ //楠岃瘉
+ await CheckExisit(wmsControlRule);
+
+ wmsControlRule.CreatedUserId = wmsControlRule.UpdatedUserId = SysHelper.GetUserId();
+ wmsControlRule.CreatedUserName = wmsControlRule.UpdatedUserName = SysHelper.GetUserName();
+ wmsControlRule.CreatedTime = wmsControlRule.UpdatedTime = SysHelper.GetNowTime();
+ await _wmsControlRuleRep.InsertAsync(wmsControlRule);
+ }
+
+ /// <summary>
+ /// 鍒犻櫎鎺у埗灞炴�ц鍒�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRule/delete")]
+ public async Task Delete(DeleteWmsControlRuleInput input)
+ {
+ var wmsControlRule = await _wmsControlRuleRep.FirstOrDefaultAsync(u => u.Id == input.Id);
+ await _wmsControlRuleRep.DeleteAsync(wmsControlRule);
+
+ }
+
+ /// <summary>
+ /// 鏇存柊鎺у埗灞炴�ц鍒�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRule/edit")]
+ public async Task Update(UpdateWmsControlRuleInput input)
+ {
+ var isExist = await _wmsControlRuleRep.AnyAsync(u => u.Id == input.Id, false);
+ if (!isExist) throw Oops.Oh(ErrorCode.D1002);
+
+ var wmsControlRule = input.Adapt<WmsControlRule>();
+ //楠岃瘉
+ await CheckExisit(wmsControlRule,true);
+
+ wmsControlRule.UpdatedUserId = SysHelper.GetUserId();
+ wmsControlRule.UpdatedUserName = SysHelper.GetUserName();
+ wmsControlRule.UpdatedTime = SysHelper.GetNowTime();
+ await _wmsControlRuleRep.UpdateAsync(wmsControlRule,ignoreNullValues:true);
+ }
+
+ #endregion
+
+ #region 瀵煎叆
+
+ /// <summary>
+ /// Excel妯℃澘瀵煎叆鎺у埗灞炴�ц鍒欏姛鑳�
+ /// </summary>
+ /// <param name="file">Excel妯℃澘鏂囦欢</param>
+ /// <returns>瀵煎叆鐨勮褰曟暟</returns>
+ [HttpPost("WmsControlRule/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)
+ {
+ _wmsControlRuleRep.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<WmsControlRule>> CommonImport(DataTable dataTable, int dataStartLine)
+ {
+
+ var details = new List<WmsControlRule>();
+ int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭
+ foreach (System.Data.DataRow row in dataTable.Rows)
+ {
+ index++;
+
+ //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛�
+
+ var addItem = new WmsControlRule()
+ {
+ CreatedTime = SysHelper.GetNowTime(),
+ CreatedUserId = SysHelper.GetUserId(),
+ CreatedUserName = SysHelper.GetUserName(),
+ UpdatedTime = SysHelper.GetNowTime(),
+ UpdatedUserId = SysHelper.GetUserId(),
+ UpdatedUserName = SysHelper.GetUserName()
+ };
+ #region 瀹氫箟鍙橀噺
+ var _RuleCode = "";//瑙勫垯缂栧彿
+ var _RuleName = "";//瑙勫垯鍚嶇О
+ var _RuleDesc = "";//瑙勫垯鎻忚堪
+ var _IsDisabled = "";//鏄惁绂佺敤
+ var _Id = "";//Id涓婚敭
+ #endregion
+
+
+ #region 鍙栧��
+ _RuleCode = row["瑙勫垯缂栧彿"]?.ToString() ;
+ _RuleName = row["瑙勫垯鍚嶇О"]?.ToString() ;
+ _RuleDesc = row["瑙勫垯鎻忚堪"]?.ToString() ;
+ _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ;
+ _Id = row["Id涓婚敭"]?.ToString() ;
+ #endregion
+
+
+ #region 楠岃瘉
+
+ if (string.IsNullOrEmpty(_RuleCode))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾瑙勫垯缂栧彿]{_RuleCode}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_RuleCode))
+ {
+ addItem.RuleCode = (string)_RuleCode;
+ }
+
+ if (string.IsNullOrEmpty(_RuleName))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾瑙勫垯鍚嶇О]{_RuleName}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_RuleName))
+ {
+ addItem.RuleName = (string)_RuleName;
+ }
+ if(!string.IsNullOrEmpty(_RuleDesc))
+ {
+ addItem.RuleDesc = (string)_RuleDesc;
+ }
+
+ 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("WmsControlRule/downloadExcelTemplate")]
+ public IActionResult DownloadExcelTemplate([FromQuery] string version)
+ {
+ string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsControlRule{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( WmsControlRule input,bool isEdit=false)
+ {
+
+
+
+ bool isExist = false;
+ if (!isEdit)//鏂板
+ {
+ //鏁版嵁鏄惁瀛樺湪閲嶅
+ isExist = await _wmsControlRuleRep.AnyAsync(u =>
+ u.RuleCode.Equals(input.RuleCode)
+ ,false);
+ }
+ else//缂栬緫
+ {
+
+
+
+ //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅
+ isExist = await _wmsControlRuleRep.AnyAsync(u =>
+ u.Id != input.Id
+ &&u.RuleCode.Equals(input.RuleCode)
+ ,false);
+ }
+
+
+
+ if (isExist) throw Oops.Oh(ErrorCode.E0001);
+ }
+
+ /// <summary>
+ /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇�
+ /// </summary>
+ /// <param name="inputs"></param>
+ /// <returns></returns>
+ private async Task CheckExisitForImport(List<WmsControlRule> inputs)
+ {
+ //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+ if (inputs?.Count <= 0)
+ {
+ throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+ }
+ //鏁版嵁鏄惁閲嶅
+ var existExcelItem = inputs.GroupBy(g => new {
+ g.RuleCode
+ })
+ .Where(g => g.Count() > 1)
+ .Select(s => new {
+ s.Key.RuleCode
+ }).FirstOrDefault();
+ if (existExcelItem != null)
+ {
+ var wmsControlRule = existExcelItem.Adapt<WmsControlRule>();
+ var item= existExcelItem.Adapt<WmsControlRule>();
+ throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,瑙勫垯缂栧彿[{item.RuleCode}]宸插瓨鍦�");
+ }
+
+
+
+
+ //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+ var existDBItem = await _wmsControlRuleRep.DetachedEntities.FirstOrDefaultAsync(w=>
+ inputs.Select(s=>""
+ +s.RuleCode
+ )
+ .Contains(""
+ +w.RuleCode
+ ));
+ if (existDBItem != null)
+ {
+ var wmsControlRule = existExcelItem.Adapt<WmsControlRule>();
+ var item= existExcelItem.Adapt<WmsControlRule>();
+ throw Oops.Oh($"绯荤粺涓�,瑙勫垯缂栧彿[{item.RuleCode}]宸插瓨鍦�");
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs
new file mode 100644
index 0000000..edc5546
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailInput.cs
@@ -0,0 +1,247 @@
+锘縰sing Admin.NET.Core;
+using Admin.NET.Core.Service;
+using System.ComponentModel.DataAnnotations;
+
+namespace Admin.NET.Application
+{
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗘煡璇㈠弬鏁�
+ /// </summary>
+ public class WmsControlRuleDetailSearch : PageInputBase
+ {
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒橧D
+ /// </summary>
+ public virtual long? ControlRuleId { get; set; }
+
+ /// <summary>
+ /// 鏈�楂樺簱瀛�
+ /// </summary>
+ public virtual decimal? MaxImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�浣庡簱瀛�
+ /// </summary>
+ public virtual decimal? MinImumqty { get; set; }
+
+ /// <summary>
+ /// 瀹夊叏搴撳瓨
+ /// </summary>
+ public virtual decimal? SafeImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�灏忓簱榫�
+ /// </summary>
+ public virtual decimal? MinStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏈�澶у簱榫�
+ /// </summary>
+ public virtual decimal? MaxStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍏嶆
+ /// </summary>
+ public virtual bool? IsNotChek { get; set; }
+
+ /// <summary>
+ /// 淇濊川鏈熷ぉ鏁�
+ /// </summary>
+ public virtual decimal? ShelfLifeDays { 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 WmsControlRuleDetailSearchNonPage : PageInputNonPageBase
+ {
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒橧D
+ /// </summary>
+ public virtual long? ControlRuleId { get; set; }
+
+ /// <summary>
+ /// 鏈�楂樺簱瀛�
+ /// </summary>
+ public virtual decimal? MaxImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�浣庡簱瀛�
+ /// </summary>
+ public virtual decimal? MinImumqty { get; set; }
+
+ /// <summary>
+ /// 瀹夊叏搴撳瓨
+ /// </summary>
+ public virtual decimal? SafeImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�灏忓簱榫�
+ /// </summary>
+ public virtual decimal? MinStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏈�澶у簱榫�
+ /// </summary>
+ public virtual decimal? MaxStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍏嶆
+ /// </summary>
+ public virtual bool? IsNotChek { get; set; }
+
+ /// <summary>
+ /// 淇濊川鏈熷ぉ鏁�
+ /// </summary>
+ public virtual decimal? ShelfLifeDays { 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 WmsControlRuleDetailInput
+ {
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒橧D
+ /// </summary>
+ [Required(ErrorMessage = "鎺у埗灞炴�ц鍒橧D涓嶈兘涓虹┖")]
+ public virtual long ControlRuleId { get; set; }
+
+ /// <summary>
+ /// 鏈�楂樺簱瀛�
+ /// </summary>
+ [Required(ErrorMessage = "鏈�楂樺簱瀛樹笉鑳戒负绌�")]
+ public virtual decimal MaxImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�浣庡簱瀛�
+ /// </summary>
+ [Required(ErrorMessage = "鏈�浣庡簱瀛樹笉鑳戒负绌�")]
+ public virtual decimal MinImumqty { get; set; }
+
+ /// <summary>
+ /// 瀹夊叏搴撳瓨
+ /// </summary>
+ [Required(ErrorMessage = "瀹夊叏搴撳瓨涓嶈兘涓虹┖")]
+ public virtual decimal SafeImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�灏忓簱榫�
+ /// </summary>
+ [Required(ErrorMessage = "鏈�灏忓簱榫勪笉鑳戒负绌�")]
+ public virtual decimal MinStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏈�澶у簱榫�
+ /// </summary>
+ [Required(ErrorMessage = "鏈�澶у簱榫勪笉鑳戒负绌�")]
+ public virtual decimal MaxStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍏嶆
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍏嶆涓嶈兘涓虹┖")]
+ public virtual bool IsNotChek { get; set; }
+
+ /// <summary>
+ /// 淇濊川鏈熷ぉ鏁�
+ /// </summary>
+ [Required(ErrorMessage = "淇濊川鏈熷ぉ鏁颁笉鑳戒负绌�")]
+ public virtual decimal ShelfLifeDays { get; set; }
+
+ /// <summary>
+ /// 鏄惁绂佺敤
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁绂佺敤涓嶈兘涓虹┖")]
+ public virtual bool IsDisabled { get; set; }
+
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗘柊澧炲弬鏁�
+ /// </summary>
+ public class AddWmsControlRuleDetailInput : WmsControlRuleDetailInput
+ {
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗗垹闄ゅ弬鏁�
+ /// </summary>
+ public class DeleteWmsControlRuleDetailInput : BaseId
+ {
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗘洿鏂板弬鏁�
+ /// </summary>
+ public class UpdateWmsControlRuleDetailInput : WmsControlRuleDetailInput
+ {
+ /// <summary>
+ /// Id涓婚敭
+ /// </summary>
+ [Required(ErrorMessage = "Id涓婚敭涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ }
+
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗚幏鍙栧崟涓弬鏁�
+ /// </summary>
+ public class QueryeWmsControlRuleDetailInput : BaseId
+ {
+
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs
new file mode 100644
index 0000000..667c7c1
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Dto/WmsControlRuleDetailOutput.cs
@@ -0,0 +1,82 @@
+锘縰sing Admin.NET.Core.Util.LowCode.Dto;
+using System;
+
+namespace Admin.NET.Application
+{
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒欐槑缁嗚緭鍑哄弬鏁�
+ /// </summary>
+ public class WmsControlRuleDetailOutput
+ {
+ /// <summary>
+ /// 鎺у埗灞炴�ц鍒橧D
+ /// </summary>
+ public long ControlRuleId { get; set; }
+
+ /// <summary>
+ /// 鏈�楂樺簱瀛�
+ /// </summary>
+ public decimal MaxImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�浣庡簱瀛�
+ /// </summary>
+ public decimal MinImumqty { get; set; }
+
+ /// <summary>
+ /// 瀹夊叏搴撳瓨
+ /// </summary>
+ public decimal SafeImumqty { get; set; }
+
+ /// <summary>
+ /// 鏈�灏忓簱榫�
+ /// </summary>
+ public decimal MinStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏈�澶у簱榫�
+ /// </summary>
+ public decimal MaxStorageAge { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍏嶆
+ /// </summary>
+ public bool IsNotChek { get; set; }
+
+ /// <summary>
+ /// 淇濊川鏈熷ぉ鏁�
+ /// </summary>
+ public decimal ShelfLifeDays { 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/WmsControlRuleDetail/IWmsControlRuleDetailService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.cs
new file mode 100644
index 0000000..98cdfde
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/IWmsControlRuleDetailService.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 IWmsControlRuleDetailService
+ {
+ Task<WmsControlRuleDetailOutput> Get([FromQuery] QueryeWmsControlRuleDetailInput input);
+ Task<List<WmsControlRuleDetailOutput>> List([FromQuery] WmsControlRuleDetailInput input);
+ Task<PageResult<WmsControlRuleDetailOutput>> Page([FromQuery] WmsControlRuleDetailSearch input);
+ Task<List<WmsControlRuleDetailOutput>> ListNonPageAsync([FromQuery] WmsControlRuleDetailSearchNonPage input);
+
+ Task Add(AddWmsControlRuleDetailInput input);
+ Task Update(UpdateWmsControlRuleDetailInput input);
+ Task Delete(DeleteWmsControlRuleDetailInput 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/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs
new file mode 100644
index 0000000..f091eb4
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/Map/WmsControlRuleDetailMapper.cs
@@ -0,0 +1,18 @@
+锘縰sing Mapster;
+using Admin.NET.Core;
+
+namespace Admin.NET.Application
+{
+ public class WmsControlRuleDetailMapper : IRegister
+ {
+ public void Register(TypeAdapterConfig config)
+ {
+ config.ForType<AddWmsControlRuleDetailInput, WmsControlRuleDetail>()
+ ;
+ config.ForType<UpdateWmsControlRuleDetailInput, WmsControlRuleDetail>()
+ ;
+ config.ForType<WmsControlRuleDetail, WmsControlRuleDetailOutput>()
+ ;
+ }
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs
new file mode 100644
index 0000000..43c03b9
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsControlRuleDetail/WmsControlRuleDetailService.cs
@@ -0,0 +1,592 @@
+锘縰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 = "WmsControlRuleDetail", Order = 100)]
+ [Route("api")]
+ public class WmsControlRuleDetailService : IWmsControlRuleDetailService, IDynamicApiController, ITransient
+ {
+ private readonly IRepository<WmsControlRuleDetail,MasterDbContextLocator> _wmsControlRuleDetailRep;
+ private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
+ private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
+ private readonly ISysExcelTemplateService _sysExcelTemplateService;
+ private readonly static object _lock = new();
+
+ public WmsControlRuleDetailService(
+ IRepository<WmsControlRuleDetail,MasterDbContextLocator> wmsControlRuleDetailRep
+ ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
+ ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
+ ,ISysExcelTemplateService sysExcelTemplateService
+ )
+ {
+ _wmsControlRuleDetailRep = wmsControlRuleDetailRep;
+ _sysDictTypeRep = sysDictTypeRep;
+ _sysDictDataRep = sysDictDataRep;
+ _sysExcelTemplateService = sysExcelTemplateService;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ鎺у埗灞炴�ц鍒欐槑缁�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRuleDetail/page")]
+ public async Task<PageResult<WmsControlRuleDetailOutput>> Page([FromQuery] WmsControlRuleDetailSearch input)
+ {
+ var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities
+ .Where(input.ControlRuleId != null, u => u.ControlRuleId == input.ControlRuleId)
+ .Where(input.MaxImumqty != null, u => u.MaxImumqty == input.MaxImumqty)
+ .Where(input.MinImumqty != null, u => u.MinImumqty == input.MinImumqty)
+ .Where(input.SafeImumqty != null, u => u.SafeImumqty == input.SafeImumqty)
+ .Where(input.MinStorageAge != null, u => u.MinStorageAge == input.MinStorageAge)
+ .Where(input.MaxStorageAge != null, u => u.MaxStorageAge == input.MaxStorageAge)
+ .Where(input.IsNotChek != null, u => u.IsNotChek == input.IsNotChek)
+ .Where(input.ShelfLifeDays != null, u => u.ShelfLifeDays == input.ShelfLifeDays)
+ .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<WmsControlRuleDetailSearch>(input))
+ .ProjectToType<WmsControlRuleDetailOutput>()
+ .ToADPagedListAsync(input.PageNo, input.PageSize);
+ return wmsControlRuleDetails;
+ }
+
+ /// <summary>
+ /// 涓嶅垎椤垫煡璇㈡帶鍒跺睘鎬ц鍒欐槑缁嗗垪琛�
+ /// </summary>
+ /// <param name="input">鎺у埗灞炴�ц鍒欐槑缁嗘煡璇㈠弬鏁�</param>
+ /// <returns>(鎺у埗灞炴�ц鍒欐槑缁�)瀹炰緥鍒楄〃</returns>
+ [HttpGet("WmsControlRuleDetail/listNonPage")]
+ public async Task<List<WmsControlRuleDetailOutput>> ListNonPageAsync([FromQuery] WmsControlRuleDetailSearchNonPage input)
+ {
+ var pControlRuleId = input.ControlRuleId;
+ var pMaxImumqty = input.MaxImumqty;
+ var pMinImumqty = input.MinImumqty;
+ var pSafeImumqty = input.SafeImumqty;
+ var pMinStorageAge = input.MinStorageAge;
+ var pMaxStorageAge = input.MaxStorageAge;
+ var pIsNotChek = input.IsNotChek;
+ var pShelfLifeDays = input.ShelfLifeDays;
+ var pIsDisabled = input.IsDisabled;
+ var pCreatedTime = input.CreatedTime;
+ var pUpdatedTime = input.UpdatedTime;
+ var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
+ var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
+ var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities
+ .Where(pControlRuleId != null, u => u.ControlRuleId == pControlRuleId)
+ .Where(pMaxImumqty != null, u => u.MaxImumqty == pMaxImumqty)
+ .Where(pMinImumqty != null, u => u.MinImumqty == pMinImumqty)
+ .Where(pSafeImumqty != null, u => u.SafeImumqty == pSafeImumqty)
+ .Where(pMinStorageAge != null, u => u.MinStorageAge == pMinStorageAge)
+ .Where(pMaxStorageAge != null, u => u.MaxStorageAge == pMaxStorageAge)
+ .Where(pIsNotChek != null, u => u.IsNotChek == pIsNotChek)
+ .Where(pShelfLifeDays != null, u => u.ShelfLifeDays == pShelfLifeDays)
+ .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<WmsControlRuleDetailOutput>()
+ .ToListAsync();
+ return wmsControlRuleDetails;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎺у埗灞炴�ц鍒欐槑缁�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRuleDetail/detail")]
+ public async Task<WmsControlRuleDetailOutput> Get([FromQuery] QueryeWmsControlRuleDetailInput input)
+ {
+ return (await _wmsControlRuleDetailRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsControlRuleDetailOutput>();
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎺у埗灞炴�ц鍒欐槑缁嗗垪琛�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpGet("WmsControlRuleDetail/list")]
+ public async Task<List<WmsControlRuleDetailOutput>> List([FromQuery] WmsControlRuleDetailInput input)
+ {
+ return await _wmsControlRuleDetailRep.DetachedEntities.ProjectToType<WmsControlRuleDetailOutput>().ToListAsync();
+ }
+
+ #region 澧炪�佸垹銆佹敼
+
+ /// <summary>
+ /// 澧炲姞鎺у埗灞炴�ц鍒欐槑缁�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRuleDetail/add")]
+ public async Task Add(AddWmsControlRuleDetailInput input)
+ {
+ var wmsControlRuleDetail = input.Adapt<WmsControlRuleDetail>();
+ //楠岃瘉
+ await CheckExisit(wmsControlRuleDetail);
+
+ wmsControlRuleDetail.CreatedUserId = wmsControlRuleDetail.UpdatedUserId = SysHelper.GetUserId();
+ wmsControlRuleDetail.CreatedUserName = wmsControlRuleDetail.UpdatedUserName = SysHelper.GetUserName();
+ wmsControlRuleDetail.CreatedTime = wmsControlRuleDetail.UpdatedTime = SysHelper.GetNowTime();
+ await _wmsControlRuleDetailRep.InsertAsync(wmsControlRuleDetail);
+ }
+
+ /// <summary>
+ /// 鍒犻櫎鎺у埗灞炴�ц鍒欐槑缁�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRuleDetail/delete")]
+ public async Task Delete(DeleteWmsControlRuleDetailInput input)
+ {
+ var wmsControlRuleDetail = await _wmsControlRuleDetailRep.FirstOrDefaultAsync(u => u.Id == input.Id);
+ await _wmsControlRuleDetailRep.DeleteAsync(wmsControlRuleDetail);
+
+ }
+
+ /// <summary>
+ /// 鏇存柊鎺у埗灞炴�ц鍒欐槑缁�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [HttpPost("WmsControlRuleDetail/edit")]
+ public async Task Update(UpdateWmsControlRuleDetailInput input)
+ {
+ var isExist = await _wmsControlRuleDetailRep.AnyAsync(u => u.Id == input.Id, false);
+ if (!isExist) throw Oops.Oh(ErrorCode.D1002);
+
+ var wmsControlRuleDetail = input.Adapt<WmsControlRuleDetail>();
+ //楠岃瘉
+ await CheckExisit(wmsControlRuleDetail,true);
+
+ wmsControlRuleDetail.UpdatedUserId = SysHelper.GetUserId();
+ wmsControlRuleDetail.UpdatedUserName = SysHelper.GetUserName();
+ wmsControlRuleDetail.UpdatedTime = SysHelper.GetNowTime();
+ await _wmsControlRuleDetailRep.UpdateAsync(wmsControlRuleDetail,ignoreNullValues:true);
+ }
+
+ #endregion
+
+ #region 瀵煎叆
+
+ /// <summary>
+ /// Excel妯℃澘瀵煎叆鎺у埗灞炴�ц鍒欐槑缁嗗姛鑳�
+ /// </summary>
+ /// <param name="file">Excel妯℃澘鏂囦欢</param>
+ /// <returns>瀵煎叆鐨勮褰曟暟</returns>
+ [HttpPost("WmsControlRuleDetail/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)
+ {
+ _wmsControlRuleDetailRep.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<WmsControlRuleDetail>> CommonImport(DataTable dataTable, int dataStartLine)
+ {
+
+ var details = new List<WmsControlRuleDetail>();
+ int index = dataStartLine;//妯$増鍒楀悕寮�濮嬭
+ foreach (System.Data.DataRow row in dataTable.Rows)
+ {
+ index++;
+
+ //瀵煎叆妯$増瀹氬埗鍖栦唬鐮侊紙鏇挎崲妯$増浣跨敤锛�
+
+ var addItem = new WmsControlRuleDetail()
+ {
+ CreatedTime = SysHelper.GetNowTime(),
+ CreatedUserId = SysHelper.GetUserId(),
+ CreatedUserName = SysHelper.GetUserName(),
+ UpdatedTime = SysHelper.GetNowTime(),
+ UpdatedUserId = SysHelper.GetUserId(),
+ UpdatedUserName = SysHelper.GetUserName()
+ };
+ #region 瀹氫箟鍙橀噺
+ var _ControlRuleId = "";//鎺у埗灞炴�ц鍒橧D
+ var _MaxImumqty = "";//鏈�楂樺簱瀛�
+ var _MinImumqty = "";//鏈�浣庡簱瀛�
+ var _SafeImumqty = "";//瀹夊叏搴撳瓨
+ var _MinStorageAge = "";//鏈�灏忓簱榫�
+ var _MaxStorageAge = "";//鏈�澶у簱榫�
+ var _IsNotChek = "";//鏄惁鍏嶆
+ var _ShelfLifeDays = "";//淇濊川鏈熷ぉ鏁�
+ var _IsDisabled = "";//鏄惁绂佺敤
+ var _Id = "";//Id涓婚敭
+ #endregion
+
+
+ #region 鍙栧��
+ _ControlRuleId = row["鎺у埗灞炴�ц鍒橧D"]?.ToString() ;
+ _MaxImumqty = row["鏈�楂樺簱瀛�"]?.ToString() ;
+ _MinImumqty = row["鏈�浣庡簱瀛�"]?.ToString() ;
+ _SafeImumqty = row["瀹夊叏搴撳瓨"]?.ToString() ;
+ _MinStorageAge = row["鏈�灏忓簱榫�"]?.ToString() ;
+ _MaxStorageAge = row["鏈�澶у簱榫�"]?.ToString() ;
+ _IsNotChek = row["鏄惁鍏嶆"]?.ToString() ;
+ _ShelfLifeDays = row["淇濊川鏈熷ぉ鏁�"]?.ToString() ;
+ _IsDisabled = row["鏄惁绂佺敤"]?.ToString() ;
+ _Id = row["Id涓婚敭"]?.ToString() ;
+ #endregion
+
+
+ #region 楠岃瘉
+
+ if (string.IsNullOrEmpty(_ControlRuleId))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_ControlRuleId))
+ {
+ if (!long.TryParse(_ControlRuleId, out long outControlRuleId)&&!string.IsNullOrEmpty(_ControlRuleId))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}鍊间笉姝g‘锛�");
+ }
+ if (outControlRuleId <= 0&&!string.IsNullOrEmpty(_ControlRuleId))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橧D]{_ControlRuleId}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.ControlRuleId = outControlRuleId;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_MaxImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_MaxImumqty))
+ {
+ if (!decimal.TryParse(_MaxImumqty, out decimal outMaxImumqty)&&!string.IsNullOrEmpty(_MaxImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}鍊间笉姝g‘锛�");
+ }
+ if (outMaxImumqty <= 0&&!string.IsNullOrEmpty(_MaxImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�楂樺簱瀛榏{_MaxImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.MaxImumqty = outMaxImumqty;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_MinImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_MinImumqty))
+ {
+ if (!decimal.TryParse(_MinImumqty, out decimal outMinImumqty)&&!string.IsNullOrEmpty(_MinImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}鍊间笉姝g‘锛�");
+ }
+ if (outMinImumqty <= 0&&!string.IsNullOrEmpty(_MinImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�浣庡簱瀛榏{_MinImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.MinImumqty = outMinImumqty;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_SafeImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_SafeImumqty))
+ {
+ if (!decimal.TryParse(_SafeImumqty, out decimal outSafeImumqty)&&!string.IsNullOrEmpty(_SafeImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}鍊间笉姝g‘锛�");
+ }
+ if (outSafeImumqty <= 0&&!string.IsNullOrEmpty(_SafeImumqty))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾瀹夊叏搴撳瓨]{_SafeImumqty}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.SafeImumqty = outSafeImumqty;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_MinStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_MinStorageAge))
+ {
+ if (!decimal.TryParse(_MinStorageAge, out decimal outMinStorageAge)&&!string.IsNullOrEmpty(_MinStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}鍊间笉姝g‘锛�");
+ }
+ if (outMinStorageAge <= 0&&!string.IsNullOrEmpty(_MinStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�灏忓簱榫刔{_MinStorageAge}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.MinStorageAge = outMinStorageAge;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_MaxStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_MaxStorageAge))
+ {
+ if (!decimal.TryParse(_MaxStorageAge, out decimal outMaxStorageAge)&&!string.IsNullOrEmpty(_MaxStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}鍊间笉姝g‘锛�");
+ }
+ if (outMaxStorageAge <= 0&&!string.IsNullOrEmpty(_MaxStorageAge))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏈�澶у簱榫刔{_MaxStorageAge}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.MaxStorageAge = outMaxStorageAge;
+ }
+
+ }
+
+ if (string.IsNullOrEmpty(_IsNotChek))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏄惁鍏嶆]{_IsNotChek}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_IsNotChek))
+ {
+ if(!_IsNotChek.Equals("鏄�") && !_IsNotChek.Equals("鍚�"))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾鏄惁鍏嶆]{_IsNotChek}鍊间笉姝g‘锛�");
+ }
+ else
+ {
+ bool outIsNotChek = _IsNotChek.Equals("鏄�") ? true : false;
+ addItem.IsNotChek = outIsNotChek;
+ }
+ }
+
+
+ if (string.IsNullOrEmpty(_ShelfLifeDays))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}涓嶈兘涓虹┖锛�");
+ }
+
+ if(!string.IsNullOrEmpty(_ShelfLifeDays))
+ {
+ if (!decimal.TryParse(_ShelfLifeDays, out decimal outShelfLifeDays)&&!string.IsNullOrEmpty(_ShelfLifeDays))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}鍊间笉姝g‘锛�");
+ }
+ if (outShelfLifeDays <= 0&&!string.IsNullOrEmpty(_ShelfLifeDays))
+ {
+ throw Oops.Oh($"绗瑊index}琛孾淇濊川鏈熷ぉ鏁癩{_ShelfLifeDays}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
+ }
+ else
+ {
+ addItem.ShelfLifeDays = outShelfLifeDays;
+ }
+
+ }
+
+ 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("WmsControlRuleDetail/downloadExcelTemplate")]
+ public IActionResult DownloadExcelTemplate([FromQuery] string version)
+ {
+ string _path = TemplateConst.EXCEL_TEMPLATEFILE_瀵煎叆妯$増璺緞 + $"\\WmsControlRuleDetail{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( WmsControlRuleDetail input,bool isEdit=false)
+ {
+
+
+
+ bool isExist = false;
+ if (!isEdit)//鏂板
+ {
+ //鏁版嵁鏄惁瀛樺湪閲嶅
+ isExist = await _wmsControlRuleDetailRep.AnyAsync(u =>
+ u.ControlRuleId.Equals(input.ControlRuleId)
+ ,false);
+ }
+ else//缂栬緫
+ {
+
+
+
+ //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅
+ isExist = await _wmsControlRuleDetailRep.AnyAsync(u =>
+ u.Id != input.Id
+ &&u.ControlRuleId.Equals(input.ControlRuleId)
+ ,false);
+ }
+
+
+
+ if (isExist) throw Oops.Oh(ErrorCode.E0001);
+ }
+
+ /// <summary>
+ /// 鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁鏄惁宸插瓨鍦�-瀵煎叆鏃堕獙璇�
+ /// </summary>
+ /// <param name="inputs"></param>
+ /// <returns></returns>
+ private async Task CheckExisitForImport(List<WmsControlRuleDetail> inputs)
+ {
+ //鏍规嵁鑱斿悎涓婚敭楠岃瘉琛ㄦ牸涓腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+ if (inputs?.Count <= 0)
+ {
+ throw Oops.Oh($"瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+ }
+ //鏁版嵁鏄惁閲嶅
+ var existExcelItem = inputs.GroupBy(g => new {
+ g.ControlRuleId
+ })
+ .Where(g => g.Count() > 1)
+ .Select(s => new {
+ s.Key.ControlRuleId
+ }).FirstOrDefault();
+ if (existExcelItem != null)
+ {
+ var wmsControlRuleDetail = existExcelItem.Adapt<WmsControlRuleDetail>();
+ var item= existExcelItem.Adapt<WmsControlRuleDetail>();
+ throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,鎺у埗灞炴�ц鍒橧D[{item.ControlRuleId}]宸插瓨鍦�");
+ }
+
+
+
+
+ //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+ var existDBItem = await _wmsControlRuleDetailRep.DetachedEntities.FirstOrDefaultAsync(w=>
+ inputs.Select(s=>""
+ +s.ControlRuleId
+ )
+ .Contains(""
+ +w.ControlRuleId
+ ));
+ if (existDBItem != null)
+ {
+ var wmsControlRuleDetail = existExcelItem.Adapt<WmsControlRuleDetail>();
+ var item= existExcelItem.Adapt<WmsControlRuleDetail>();
+ throw Oops.Oh($"绯荤粺涓�,鎺у埗灞炴�ц鍒橧D[{item.ControlRuleId}]宸插瓨鍦�");
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx
new file mode 100644
index 0000000..77203b6
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleDetailImport.xlsx
Binary files differ
diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx
new file mode 100644
index 0000000..129095f
--- /dev/null
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsControlRuleImport.xlsx
Binary files differ
--
Gitblit v1.9.3