diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js index 15aa53c..82c1aa8 100644 --- a/ant-design-vue-jeecg/src/api/api.js +++ b/ant-design-vue-jeecg/src/api/api.js @@ -137,6 +137,8 @@ export const completeTaskByWMS = (params) => postAction('/task/taskHeader/comple export const execute = (params) => postAction('/task/taskHeader/execute', params); //取消任务 export const cancelTask = (params) => postAction('/task/taskHeader/cancelTask?ids=' + params, params); +//切换任务 +export const switchTask = (params) => postAction('/task/taskHeader/switchTask?ids=' + params, params); //自动配盘 export const autoCombination = (params) => postAction('/shipment/shipmentCombination/autoCombination', params); //自动出库 diff --git a/ant-design-vue-jeecg/src/views/system/UserList.vue b/ant-design-vue-jeecg/src/views/system/UserList.vue index 68aabfb..d6be64b 100644 --- a/ant-design-vue-jeecg/src/views/system/UserList.vue +++ b/ant-design-vue-jeecg/src/views/system/UserList.vue @@ -82,7 +82,7 @@ </a-menu> <a-button style="margin-left: 8px">批量操作<a-icon type="down"/></a-button> </a-dropdown> - <j-super-query :fieldList="superQueryFieldList" @handleSuperQuery="handleSuperQuery"/> + <j-super-query :fieldList="superQueryFieldList" v-has="'user:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue index 28e1b76..d2dfa53 100644 --- a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue @@ -37,7 +37,8 @@ <div class="table-operator"> <a-button @click="handleAdd" v-has="'address:add'" type="primary" icon="plus">新增</a-button> <a-button v-has="'address:export'" type="primary" icon="download" @click="handleExportXls('接口地址')" - >导出</a-button + >导出 + </a-button > <a-upload v-has="'address:import'" @@ -52,13 +53,19 @@ </a-upload> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'address:deleteBatch'"> - <a-menu-item key="1" @click="batchDel"> <a-icon type="delete" /> 删除 </a-menu-item> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete"/> + 删除 + </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'address:superQuery'" ref="superQueryModal" + @handleSuperQuery="handleSuperQuery"></j-super-query> + </div> <!-- table区域-begin --> @@ -85,7 +92,7 @@ <span slot="action" slot-scope="text, record"> <a v-has="'address:edit'" @click="handleEdit(record)">编辑</a> - <a-divider type="vertical" /> + <a-divider type="vertical"/> <a-dropdown> <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> <a-menu slot="overlay"> @@ -109,10 +116,10 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import AddressModal from './modules/AddressModal' -import { getZoneList } from '@/api/api' +import {getZoneList} from '@/api/api' export default { name: 'AddressList', @@ -133,7 +140,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -152,7 +159,7 @@ export default { align: 'center', dataIndex: 'zoneCode', key: 'zoneCode', - scopedSlots: { customRender: 'zoneCode' } + scopedSlots: {customRender: 'zoneCode'} }, { title: '接口地址', @@ -185,7 +192,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -209,28 +216,30 @@ export default { //slice可以在数组的任何位置进行删除/添加操作 this.zoneOptions.splice(0, 1) for (let i = 0; i < res.result.length; i++) { - this.zoneOptions.push({ value: res.result[i].code, text: res.result[i].name }) + this.zoneOptions.push({value: res.result[i].code, text: res.result[i].name}) } }, 500) } }) }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'zoneCode', text: '库区', dictCode: '' }) - fieldList.push({ type: 'string', value: 'url', text: '接口地址', dictCode: '' }) - fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) - fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) + fieldList.push({type: 'string', value: 'remark', text: '接口名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''}) + fieldList.push({type: 'string', value: 'url', text: '接口地址', dictCode: ''}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) this.superFieldList = fieldList }, solutionZoneCode(value) { diff --git a/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue b/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue index c7da03b..dc8a452 100644 --- a/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue @@ -32,22 +32,32 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'agvPort:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'agvPort:export'" type="primary" icon="download" @click="handleExportXls('AGV点位')">导出</a-button> - <a-upload v-has="'agvPort:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button v-has="'agvPort:export'" type="primary" icon="download" @click="handleExportXls('AGV点位')">导出 + </a-button> + <a-upload v-has="'agvPort:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay"> - <a-menu-item key="1" v-has="'agvPort:delete'" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> + <a-menu-item key="1" v-has="'agvPort:delete'" @click="batchDel"> + <a-icon type="delete"/> + 删除 + </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button> + <a-button style="margin-left: 8px"> 批量操作 + <a-icon type="down"/> + </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'agvPort:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> <div> <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 <a style="margin-left: 24px" @click="onClearSelected">清空</a> </div> @@ -70,7 +80,8 @@ </template> <template slot="imgSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + <img v-else :src="getImgView(text)" height="25px" alt="" + style="max-width:80px;font-size: 12px;font-style: italic;"/> </template> <template slot="fileSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> @@ -88,9 +99,9 @@ <span slot="action" slot-scope="text, record"> <a v-has="'agvPort:edit'" @click="handleEdit(record)">编辑</a> - <a-divider type="vertical" /> + <a-divider type="vertical"/> <a-dropdown> - <a class="ant-dropdown-link">更多 <a-icon type="down" /></a> + <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> <a-menu slot="overlay"> <a-menu-item> <a @click="handleDetail(record)">详情</a> @@ -113,113 +124,113 @@ <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import AgvPortModal from './modules/AgvPortModal' +import '@/assets/less/TableExpand.less' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import AgvPortModal from './modules/AgvPortModal' - export default { - name: 'AgvPortList', - mixins:[JeecgListMixin, mixinDevice], - components: { - AgvPortModal - }, - data () { - return { - description: 'AGV点位管理页面', - // 表头 - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title:'编码', - align:"center", - dataIndex: 'code' - }, - { - title:'名称', - align:"center", - dataIndex: 'name' - }, - { - title:'备注', - align:"center", - dataIndex: 'remark' - }, - { - title:'创建人', - align:"center", - dataIndex: 'createBy' - }, - { - title:'创建日期', - align:"center", - dataIndex: 'createTime' - }, - { - title:'更新人', - align:"center", - dataIndex: 'updateBy' - }, - { - title:'更新日期', - align:"center", - dataIndex: 'updateTime' - }, - { - title: '操作', - dataIndex: 'action', - align:"center", - fixed:"right", - width:147, - scopedSlots: { customRender: 'action' } +export default { + name: 'AgvPortList', + mixins: [JeecgListMixin, mixinDevice], + components: { + AgvPortModal + }, + data() { + return { + description: 'AGV点位管理页面', + // 表头 + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: "center", + customRender: function (t, r, index) { + return parseInt(index) + 1; } - ], - url: { - list: "/config/agvPort/list", - delete: "/config/agvPort/delete", - deleteBatch: "/config/agvPort/deleteBatch", - exportXlsUrl: "/config/agvPort/exportXls", - importExcelUrl: "config/agvPort/importExcel", - }, - dictOptions:{}, - superFieldList:[], - } - }, - created() { + { + title: '编码', + align: "center", + dataIndex: 'code' + }, + { + title: '名称', + align: "center", + dataIndex: 'name' + }, + { + title: '备注', + align: "center", + dataIndex: 'remark' + }, + { + title: '创建人', + align: "center", + dataIndex: 'createBy' + }, + { + title: '创建日期', + align: "center", + dataIndex: 'createTime' + }, + { + title: '更新人', + align: "center", + dataIndex: 'updateBy' + }, + { + title: '更新日期', + align: "center", + dataIndex: 'updateTime' + }, + { + title: '操作', + dataIndex: 'action', + align: "center", + fixed: "right", + width: 147, + scopedSlots: {customRender: 'action'} + } + ], + url: { + list: "/config/agvPort/list", + delete: "/config/agvPort/delete", + deleteBatch: "/config/agvPort/deleteBatch", + exportXlsUrl: "/config/agvPort/exportXls", + importExcelUrl: "config/agvPort/importExcel", + + }, + dictOptions: {}, + superFieldList: [], + } + }, + created() { this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; }, - computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, + }, + methods: { + initDictConfig() { }, - methods: { - initDictConfig(){ - }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'string',value:'code',text:'编码',dictCode:''}) - fieldList.push({type:'string',value:'name',text:'名称',dictCode:''}) - fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''}) - fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''}) - fieldList.push({type:'datetime',value:'createTime',text:'创建日期'}) - fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''}) - fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'}) - this.superFieldList = fieldList - } + getSuperFieldList() { + let fieldList = []; + fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'remark', text: '备注', dictCode: ''}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) + this.superFieldList = fieldList } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/ant-design-vue-jeecg/src/views/system/config/BomHeaderList.vue b/ant-design-vue-jeecg/src/views/system/config/BomHeaderList.vue index 3f52b3a..b9c2d64 100644 --- a/ant-design-vue-jeecg/src/views/system/config/BomHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/BomHeaderList.vue @@ -37,6 +37,8 @@ @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> + + <j-super-query :fieldList="superFieldList" v-has="'bomHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/CarrierList.vue b/ant-design-vue-jeecg/src/views/system/config/CarrierList.vue index ddc9007..9fb0920 100644 --- a/ant-design-vue-jeecg/src/views/system/config/CarrierList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/CarrierList.vue @@ -12,8 +12,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'carrier:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'carrier:export'" type="primary" icon="download" @click="handleExportXls('承运商管理')">导出</a-button> - <a-upload v-has="'carrier:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'carrier:export'" type="primary" icon="download" @click="handleExportXls('承运商管理')">导出 + </a-button> + <a-upload v-has="'carrier:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -28,6 +30,8 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'carrier:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/CompanyList.vue b/ant-design-vue-jeecg/src/views/system/config/CompanyList.vue index 4a3553b..037ce22 100644 --- a/ant-design-vue-jeecg/src/views/system/config/CompanyList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/CompanyList.vue @@ -20,7 +20,7 @@ <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> </a> </span> </a-col> @@ -47,15 +47,17 @@ <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'company:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="deleteBatch" /> + <a-icon type="deleteBatch"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'company:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -101,7 +103,7 @@ </template> <span slot="action" slot-scope="text, record"> - <a v-has="'company:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical" /></a> + <a v-has="'company:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a> <a-dropdown> <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> <a-menu slot="overlay"> @@ -125,8 +127,8 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import CompanyModal from './modules/CompanyModal' export default { @@ -146,7 +148,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -206,7 +208,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -224,24 +226,25 @@ export default { this.getSuperFieldList() }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'code', text: '货主编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'name', text: '货主名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'address', text: '地址', dictCode: '' }) - fieldList.push({ type: 'string', value: 'district', text: '区县', dictCode: '' }) - fieldList.push({ type: 'string', value: 'city', text: '城市', dictCode: '' }) - fieldList.push({ type: 'string', value: 'province', text: '省份', dictCode: '' }) - fieldList.push({ type: 'string', value: 'country', text: '国家', dictCode: '' }) - fieldList.push({ type: 'string', value: 'postalcode', text: '邮编', dictCode: '' }) - fieldList.push({ type: 'string', value: 'attentionto', text: '联系人', dictCode: '' }) - fieldList.push({ type: 'string', value: 'phonenum', text: '联系电话', dictCode: '' }) + fieldList.push({type: 'string', value: 'code', text: '货主编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'name', text: '货主名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'address', text: '地址', dictCode: ''}) + fieldList.push({type: 'string', value: 'district', text: '区县', dictCode: ''}) + fieldList.push({type: 'string', value: 'city', text: '城市', dictCode: ''}) + fieldList.push({type: 'string', value: 'province', text: '省份', dictCode: ''}) + fieldList.push({type: 'string', value: 'country', text: '国家', dictCode: ''}) + fieldList.push({type: 'string', value: 'postalcode', text: '邮编', dictCode: ''}) + fieldList.push({type: 'string', value: 'attentionto', text: '联系人', dictCode: ''}) + fieldList.push({type: 'string', value: 'phonenum', text: '联系电话', dictCode: ''}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/config/ContainerCapacityList.vue b/ant-design-vue-jeecg/src/views/system/config/ContainerCapacityList.vue index af39123..60f3a62 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ContainerCapacityList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ContainerCapacityList.vue @@ -25,7 +25,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="是否可用"> - <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status" /> + <j-dict-select-tag placeholder="请选择是否可用" v-model="queryParam.enable" dictCode="enable_status"/> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> @@ -64,15 +64,17 @@ <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'containerCapacity:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete" /> + <a-icon type="delete"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'containerCapacity:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -147,11 +149,11 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import ContainerCapacityModal from './modules/ContainerCapacityModal' -import { filterMultiDictText } from '@/components/dict/JDictSelectUtil' -import { getZoneList, getContainerTypeList } from '@/api/api' +import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' +import {getZoneList, getContainerTypeList} from '@/api/api' export default { name: 'ContainerCapacityList', @@ -171,7 +173,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -180,7 +182,7 @@ export default { align: 'center', dataIndex: 'containerTypeCode', key: 'containerTypeCode', - scopedSlots: { customRender: 'containerTypeCode' } + scopedSlots: {customRender: 'containerTypeCode'} }, { title: '物料编码', @@ -233,7 +235,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -252,12 +254,13 @@ export default { this.loadFrom() }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, solutionContainerType(value) { var actions = [] Object.keys(this.containerTypeList).some(key => { @@ -277,18 +280,18 @@ export default { }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: '' }) - fieldList.push({ type: 'string', value: 'warehouseCode', text: '仓库编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialCode', text: '物料编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialName', text: '物料名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialUnit', text: '物料单位', dictCode: '' }) - fieldList.push({ type: 'BigDecimal', value: 'qty', text: '存放数量', dictCode: '' }) - fieldList.push({ type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status' }) - fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) - fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) + fieldList.push({type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: ''}) + fieldList.push({type: 'string', value: 'warehouseCode', text: '仓库编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialCode', text: '物料编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialName', text: '物料名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialUnit', text: '物料单位', dictCode: ''}) + fieldList.push({type: 'BigDecimal', value: 'qty', text: '存放数量', dictCode: ''}) + fieldList.push({type: 'int', value: 'enable', text: '是否可用', dictCode: 'enable_status'}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue index ac83874..4732409 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ContainerList.vue @@ -46,10 +46,16 @@ /> </a-form-item> </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="位置"> + <j-dict-select-tag placeholder="请选择位置" v-model="queryParam.inLocation" + dictCode="inLocation"/> + </a-form-item> + </a-col> </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -91,6 +97,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'container:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -208,6 +217,7 @@ export default { return { description: '容器管理管理页面', zoneList: [], + firstLoad:0, containerTypeList: [], // 表头 columns: [ @@ -251,6 +261,21 @@ export default { scopedSlots: {customRender: 'fillStatus_dictText'} }, { + title: '位置', + align: 'center', + dataIndex: 'inLocation_dictText', + }, + { + title: '任务总数', + align: "center", + dataIndex: 'taskTimes', + }, + { + title: '移库任务数', + align: "center", + dataIndex: 'moveTaskTimes', + }, + { title: '库区', align: "center", dataIndex: 'zoneCode', @@ -301,6 +326,21 @@ export default { this.getSuperFieldList() this.loadFrom() }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` @@ -329,6 +369,7 @@ export default { fieldList.push({type: 'string', value: 'containerTypeCode', text: '容器类型', dictCode: ''}) fieldList.push({type: 'string', value: 'status', text: '容器状态', dictCode: 'container_status'}) fieldList.push({type: 'string', value: 'fillStatus', text: '容器填充状态', dictCode: 'fill_status'}) + fieldList.push({type: 'string', value: 'inLocation', text: '容器填充状态', dictCode: 'inLocation'}) fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) diff --git a/ant-design-vue-jeecg/src/views/system/config/ContainerTypeList.vue b/ant-design-vue-jeecg/src/views/system/config/ContainerTypeList.vue index f5aba2e..212dc50 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ContainerTypeList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ContainerTypeList.vue @@ -49,15 +49,17 @@ <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'containerType:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete" /> + <a-icon type="delete"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'containerType:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -88,7 +90,7 @@ </a-tag> </span> - <span slot="locationTypes" slot-scope="locationTypes" > + <span slot="locationTypes" slot-scope="locationTypes"> <a-tag v-for="locationType in locationTypes" :key="locationType" color=pink> {{ solutionLocationType(locationType) }} </a-tag> @@ -139,10 +141,10 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import ContainerTypeModal from './modules/ContainerTypeModal' -import {getCompanyList, getLocationTypeList } from '@/api/api' +import {getCompanyList, getLocationTypeList} from '@/api/api' export default { name: 'ContainerTypeList', @@ -163,7 +165,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -242,7 +244,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -261,12 +263,13 @@ export default { this.loadFrom() }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, loadFrom() { getCompanyList().then((res) => { if (res.success) { @@ -301,19 +304,19 @@ export default { }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'companyCode', text: '货主编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'locationType', text: '绑定的库位类型', dictCode: '' }) - fieldList.push({ type: 'int', value: 'length', text: '长', dictCode: '' }) - fieldList.push({ type: 'int', value: 'width', text: '宽', dictCode: '' }) - fieldList.push({ type: 'int', value: 'height', text: '高', dictCode: '' }) - fieldList.push({ type: 'int', value: 'emptyweight', text: '空容器重量', dictCode: '' }) - fieldList.push({ type: 'int', value: 'maxweight', text: '容器最大承重', dictCode: '' }) - fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) - fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) + fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'companyCode', text: '货主编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'locationType', text: '绑定的库位类型', dictCode: ''}) + fieldList.push({type: 'int', value: 'length', text: '长', dictCode: ''}) + fieldList.push({type: 'int', value: 'width', text: '宽', dictCode: ''}) + fieldList.push({type: 'int', value: 'height', text: '高', dictCode: ''}) + fieldList.push({type: 'int', value: 'emptyweight', text: '空容器重量', dictCode: ''}) + fieldList.push({type: 'int', value: 'maxweight', text: '容器最大承重', dictCode: ''}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/config/CustomerList.vue b/ant-design-vue-jeecg/src/views/system/config/CustomerList.vue index 2a69a15..f1f3aa6 100644 --- a/ant-design-vue-jeecg/src/views/system/config/CustomerList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/CustomerList.vue @@ -12,8 +12,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'customer:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'customer:export'" type="primary" icon="download" @click="handleExportXls('客户管理')">导出</a-button> - <a-upload v-has="'customer:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'customer:export'" type="primary" icon="download" @click="handleExportXls('客户管理')">导出 + </a-button> + <a-upload v-has="'customer:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -28,6 +30,8 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'customer:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/CycleCountPreferenceList.vue b/ant-design-vue-jeecg/src/views/system/config/CycleCountPreferenceList.vue index 852e50e..664646f 100644 --- a/ant-design-vue-jeecg/src/views/system/config/CycleCountPreferenceList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/CycleCountPreferenceList.vue @@ -12,8 +12,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'cycleCountPreference:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'cycleCountPreference:export'" type="primary" icon="download" @click="handleExportXls('盘点首选项')">导出</a-button> - <a-upload v-has="'cycleCountPreference:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'cycleCountPreference:export'" type="primary" icon="download" + @click="handleExportXls('盘点首选项')">导出 + </a-button> + <a-upload v-has="'cycleCountPreference:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -28,6 +31,8 @@ <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'cycleCountPreference:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue index 86d4edb..05e143c 100644 --- a/ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue @@ -41,8 +41,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'locationHigh:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'locationHigh:export'" type="primary" icon="download" @click="handleExportXls('库位高度管理')">导出</a-button> - <a-upload v-has="'locationHigh:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'locationHigh:export'" type="primary" icon="download" @click="handleExportXls('库位高度管理')"> + 导出 + </a-button> + <a-upload v-has="'locationHigh:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -57,6 +60,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'locationHigh:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -88,7 +94,7 @@ </a-tag> </span> - <span slot="locationTypeCode" slot-scope="locationTypeCode"> + <span slot="locationTypeCode" slot-scope="locationTypeCode"> <a-tag :key="locationTypeCode" color=pink> {{ solutionLocationType(locationTypeCode) }} </a-tag> @@ -274,11 +280,11 @@ export default { this.locationTypeList = res.result } }), - getZoneList().then((res) => { - if (res.success) { - this.zoneList = res.result - } - }); + getZoneList().then((res) => { + if (res.success) { + this.zoneList = res.result + } + }); }, solutionZoneCode(value) { var actions = [] diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue index 1395af4..cdb9ded 100644 --- a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue @@ -59,7 +59,8 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="库内是否有托盘"> - <j-dict-select-tag placeholder="请选择库内是否有托盘" v-model="queryParam.haveContainer" dictCode="have_container_in_location"/> + <j-dict-select-tag placeholder="请选择库内是否有托盘" v-model="queryParam.haveContainer" + dictCode="have_container_in_location"/> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -91,7 +92,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -135,6 +136,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'location:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -265,6 +269,7 @@ export default { description: '库位管理页面', zoneList: [], locationTypeList: [], + firstLoad:0, // 表头 columns: [ { @@ -406,6 +411,21 @@ export default { this.getSuperFieldList() this.loadFrom() }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue index ca2c299..a8f0c63 100644 --- a/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue @@ -53,15 +53,18 @@ <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'locationType:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete" /> + <a-icon type="delete"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'locationType:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -137,10 +140,10 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import LocationTypeModal from './modules/LocationTypeModal' -import { getZoneList } from '@/api/api' +import {getZoneList} from '@/api/api' export default { name: 'LocationTypeList', @@ -161,7 +164,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -180,7 +183,7 @@ export default { align: 'center', dataIndex: 'zoneCode', key: 'zoneCode', - scopedSlots: { customRender: 'zoneCode' } + scopedSlots: {customRender: 'zoneCode'} }, { title: '长度', @@ -228,7 +231,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -252,19 +255,20 @@ export default { //slice可以在数组的任何位置进行删除/添加操作 this.zoneOptions.splice(0, 1) for (let i = 0; i < res.result.length; i++) { - this.zoneOptions.push({ value: res.result[i].code, text: res.result[i].name }) + this.zoneOptions.push({value: res.result[i].code, text: res.result[i].name}) } }, 500) } }) }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, solutionZoneCode(value) { var actions = [] Object.keys(this.zoneList).some(key => { @@ -277,16 +281,16 @@ export default { }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' }) - fieldList.push({ type: 'int', value: 'length', text: '长度', dictCode: '' }) - fieldList.push({ type: 'int', value: 'weight', text: '宽度', dictCode: '' }) - fieldList.push({ type: 'int', value: 'height', text: '高度', dictCode: '' }) - fieldList.push({ type: 'int', value: 'maxWeight', text: '最大承重', dictCode: '' }) - fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) - fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) + fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''}) + fieldList.push({type: 'int', value: 'length', text: '长度', dictCode: ''}) + fieldList.push({type: 'int', value: 'weight', text: '宽度', dictCode: ''}) + fieldList.push({type: 'int', value: 'height', text: '高度', dictCode: ''}) + fieldList.push({type: 'int', value: 'maxWeight', text: '最大承重', dictCode: ''}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialAreaList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialAreaList.vue index bd3de02..1d5ddd6 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialAreaList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialAreaList.vue @@ -12,8 +12,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'materialArea:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'materialArea:export'" type="primary" icon="download" @click="handleExportXls('物料分区')">导出</a-button> - <a-upload v-has="'materialArea:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'materialArea:export'" type="primary" icon="download" @click="handleExportXls('物料分区')">导出 + </a-button> + <a-upload v-has="'materialArea:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -28,6 +30,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'materialArea:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialList.vue index 9644e4e..ab1a7e3 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialList.vue @@ -21,7 +21,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> </span> </a-col> @@ -33,8 +33,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'material:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'material:export'" type="primary" icon="download" @click="handleExportXls('物料管理')">导出</a-button> - <a-upload v-has="'material:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'material:export'" type="primary" icon="download" @click="handleExportXls('物料管理')">导出 + </a-button> + <a-upload v-has="'material:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> <a-button v-has="'material:print'" @click="batchPrint()" type="primary">打印</a-button> @@ -50,6 +52,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'material:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -141,6 +146,7 @@ export default { data() { return { description: '物料管理管理页面', + firstLoad:0, // 表头 columns: [ { @@ -247,6 +253,21 @@ export default { created() { this.getSuperFieldList(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialMultipleList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialMultipleList.vue index 13fbe40..b2f5689 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialMultipleList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialMultipleList.vue @@ -12,8 +12,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'materialMultiple:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'materialMultiple:export'" type="primary" icon="download" @click="handleExportXls('物料单位换算')">导出</a-button> - <a-upload v-has="'materialMultiple:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'materialMultiple:export'" type="primary" icon="download" + @click="handleExportXls('物料单位换算')">导出 + </a-button> + <a-upload v-has="'materialMultiple:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -28,6 +31,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'materialMultiple:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialTypeList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialTypeList.vue index b1988f7..c5e7b9e 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialTypeList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialTypeList.vue @@ -28,8 +28,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'materialType:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'materialType:export'" type="primary" icon="download" @click="handleExportXls('物料类别')">导出</a-button> - <a-upload v-has="'materialType:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'materialType:export'" type="primary" icon="download" @click="handleExportXls('物料类别')">导出 + </a-button> + <a-upload v-has="'materialType:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -44,6 +46,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'materialType:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialUnitList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialUnitList.vue index 0cb37a9..eec8fe0 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialUnitList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialUnitList.vue @@ -33,8 +33,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'materialUnit:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'materialUnit:export'" type="primary" icon="download" @click="handleExportXls('物料单位')">导出</a-button> - <a-upload v-has="'materialUnit:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'materialUnit:export'" type="primary" icon="download" @click="handleExportXls('物料单位')">导出 + </a-button> + <a-upload v-has="'materialUnit:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -49,6 +51,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'materialUnit:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/MaterialWarningList.vue b/ant-design-vue-jeecg/src/views/system/config/MaterialWarningList.vue index 0e95513..2dc2d93 100644 --- a/ant-design-vue-jeecg/src/views/system/config/MaterialWarningList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/MaterialWarningList.vue @@ -32,8 +32,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'materialWarning:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'materialWarning:export'" type="primary" icon="download" @click="handleExportXls('物料预警')">导出</a-button> - <a-upload v-has="'materialWarning:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'materialWarning:export'" type="primary" icon="download" @click="handleExportXls('物料预警')"> + 导出 + </a-button> + <a-upload v-has="'materialWarning:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -48,6 +51,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'materialWarning:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue b/ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue index 8406d99..abc41f8 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue @@ -53,8 +53,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button @click="handleAdd" v-has="'parameterConfiguration:add'" type="primary" icon="plus">新增</a-button> - <a-button v-has="'parameterConfiguration:export'" type="primary" icon="download" @click="handleExportXls('参数配置')">导出</a-button> - <a-upload v-has="'parameterConfiguration:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'parameterConfiguration:export'" type="primary" icon="download" + @click="handleExportXls('参数配置')">导出 + </a-button> + <a-upload v-has="'parameterConfiguration:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -69,6 +72,9 @@ <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'ParameterConfiguration:superQuery'" + @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/PortList.vue b/ant-design-vue-jeecg/src/views/system/config/PortList.vue index d416de4..303ba5e 100644 --- a/ant-design-vue-jeecg/src/views/system/config/PortList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/PortList.vue @@ -56,6 +56,8 @@ <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'port:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/SupplierList.vue b/ant-design-vue-jeecg/src/views/system/config/SupplierList.vue index 0c77223..a3fec24 100644 --- a/ant-design-vue-jeecg/src/views/system/config/SupplierList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/SupplierList.vue @@ -39,8 +39,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'supplier:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'supplier:export'" type="primary" icon="download" @click="handleExportXls('供应商管理')">导出</a-button> - <a-upload v-has="'supplier:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'supplier:export'" type="primary" icon="download" @click="handleExportXls('供应商管理')">导出 + </a-button> + <a-upload v-has="'supplier:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -55,6 +57,8 @@ <a-icon type="down"/> </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'supplier:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/WarehouseList.vue b/ant-design-vue-jeecg/src/views/system/config/WarehouseList.vue index e0c23be..6d4023e 100644 --- a/ant-design-vue-jeecg/src/views/system/config/WarehouseList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/WarehouseList.vue @@ -39,8 +39,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'warehouse:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'warehouse:export'" type="primary" icon="download" @click="handleExportXls('仓库')">导出</a-button> - <a-upload v-has="'warehouse:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + <a-button v-has="'warehouse:export'" type="primary" icon="download" @click="handleExportXls('仓库')">导出 + </a-button> + <a-upload v-has="'warehouse:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" + :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> @@ -50,6 +52,8 @@ <!-- </a-menu>--> <!-- <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>--> <!-- </a-dropdown>--> + <j-super-query :fieldList="superFieldList" v-has="'warehouse:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/config/ZoneList.vue b/ant-design-vue-jeecg/src/views/system/config/ZoneList.vue index 00abf86..73a9135 100644 --- a/ant-design-vue-jeecg/src/views/system/config/ZoneList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/ZoneList.vue @@ -20,7 +20,7 @@ <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> </a> </span> </a-col> @@ -33,7 +33,8 @@ <div class="table-operator"> <a-button v-has="'zone:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> <a-button v-has="'zone:export'" type="primary" icon="download" @click="handleExportXls('库区管理')" - >导出</a-button + >导出 + </a-button > <a-upload v-has="'zone:import'" @@ -49,15 +50,16 @@ <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'zone:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete" /> + <a-icon type="delete"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down" /> + <a-icon type="down"/> </a-button> </a-dropdown> + <j-super-query :fieldList="superFieldList" v-has="'zone:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -82,7 +84,7 @@ class="j-table-force-nowrap" @change="handleTableChange" > - <span slot="locationTypeCodes" slot-scope="locationTypeCodes" > + <span slot="locationTypeCodes" slot-scope="locationTypeCodes"> <a-tag v-for="locationTypeCode in locationTypeCodes" :key="locationTypeCode" color=pink> {{ solutionLocationType(locationTypeCode) }} </a-tag> @@ -133,10 +135,10 @@ <script> import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import ZoneModal from './modules/ZoneModal' -import { getLocationTypeList } from '@/api/api' +import {getLocationTypeList} from '@/api/api' export default { name: 'ZoneList', @@ -156,7 +158,7 @@ export default { key: 'rowIndex', width: 60, align: 'center', - customRender: function(t, r, index) { + customRender: function (t, r, index) { return parseInt(index) + 1 } }, @@ -203,7 +205,7 @@ export default { align: 'center', fixed: 'right', width: 147, - scopedSlots: { customRender: 'action' } + scopedSlots: {customRender: 'action'} } ], url: { @@ -222,22 +224,23 @@ export default { this.loadFrom() }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { - initDictConfig() {}, + initDictConfig() { + }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'name', text: '名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'companyCode', text: '货主编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: '' }) - fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) - fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) + fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'name', text: '名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'companyCode', text: '货主编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'locationTypeCode', text: '库位类型', dictCode: ''}) + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) this.superFieldList = fieldList }, loadFrom() { diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue index ded4c9f..ac8349d 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue @@ -47,7 +47,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <!-- <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -70,6 +70,7 @@ </a-upload> <a-button v-has="'inventoryHeader:quickShipmentInventoryHeader'" @click="quickShipment()" type="primary">快速出库</a-button> <a-button v-has="'inventoryHeader:together'" @click="together()" type="primary">合托</a-button> + <j-super-query :fieldList="superFieldList" v-has="'inventoryHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -183,6 +184,7 @@ export default { zoneList: [], description: '库存表管理页面', zoneOptions:[], + firstLoad:0, // 表头 columns: [ { @@ -285,6 +287,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryMaterialSummaryList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryMaterialSummaryList.vue index 515c10d..cc08ac0 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryMaterialSummaryList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryMaterialSummaryList.vue @@ -6,7 +6,7 @@ <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="库区"> - <a-form-model-item prop="zoneOptions"> + <a-form-model-item prop="zoneOptions"> <j-multi-select-tag v-model="queryParam.zoneCode" :options="zoneOptions" @@ -53,11 +53,11 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> </a> </span> </a-col> @@ -69,7 +69,11 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <!-- <a-button v-has="'inventoryMaterialSummary:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> --> - <a-button v-has="'inventoryMaterialSummary:export'" type="primary" icon="download" @click="handleExportXls('库存物料汇总')">导出</a-button> + <a-button v-has="'inventoryMaterialSummary:export'" type="primary" icon="download" + @click="handleExportXls('库存物料汇总')">导出 + </a-button> + <j-super-query :fieldList="superFieldList" v-has="'inventoryMaterialSummary:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -110,7 +114,7 @@ <a-tabs defaultActiveKey="1"> <a-tab-pane tab="库存详情" key="1"> - <InventoryDetailSubTable :mainId="selectedMainId" /> + <InventoryDetailSubTable :mainId="selectedMainId"/> </a-tab-pane> </a-tabs> @@ -120,10 +124,10 @@ <script> import '@/assets/less/TableExpand.less' -import { filterObj } from '@/utils/util' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' -import { getCompanyList, getZoneList, ajaxGetDictItems } from '@/api/api' +import {filterObj} from '@/utils/util' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import {getCompanyList, getZoneList, ajaxGetDictItems} from '@/api/api' // import InventoryDetailList from './InventoryDetailList' import InventoryDetailSubTable from './subTables/InventoryDetailSubTable' @@ -136,9 +140,10 @@ export default { data() { return { zoneList: [], - zoneOptions:[], + zoneOptions: [], companyList: [], selectedMainId: '', + firstLoad:0, description: '物料汇总主表管理页面', // 表头 columns: [ @@ -147,14 +152,14 @@ export default { align: 'center', dataIndex: 'zoneCode', key: 'zoneCode', - scopedSlots: { customRender: 'zoneCode' } + scopedSlots: {customRender: 'zoneCode'} }, { title: '货主', align: 'center', dataIndex: 'companyCode', key: 'companyCode', - scopedSlots: { customRender: 'companyCode' } + scopedSlots: {customRender: 'companyCode'} }, { title: '物料编码', @@ -195,8 +200,23 @@ export default { this.getSuperFieldList() this.loadFrom() }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, @@ -239,13 +259,13 @@ export default { if (res.success) { this.zoneList = res.result //延迟半秒执行,避免组件未加载完,数据已经加载完 - setTimeout(()=>{ + setTimeout(() => { //slice可以在数组的任何位置进行删除/添加操作 this.zoneOptions.splice(0, 1); for (let i = 0; i < res.result.length; i++) { - this.zoneOptions.push({value:res.result[i].code,text:res.result[i].name}) + this.zoneOptions.push({value: res.result[i].code, text: res.result[i].name}) } - },500) + }, 500) } }); ajaxGetDictItems('box_type').then(res => { @@ -269,7 +289,7 @@ export default { } }, onSelectChange(selectedRowKeys, selectionRows) { - this.selectedMainId = selectionRows[0].zoneCode.toString() + "_" + selectionRows[0].materialCode.toString() + this.selectedMainId = selectionRows[0].zoneCode.toString() + "_" + selectionRows[0].materialCode.toString() this.selectedRowKeys = selectedRowKeys this.selectionRows = selectionRows }, @@ -278,16 +298,17 @@ export default { this.selectedRowKeys = [] this.selectionRows = [] }, - initDictConfig() {}, + initDictConfig() { + }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'zoneCode', text: '库区', dictCode: '' }) - fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialCode', text: '物料编码', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialName', text: '物料名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialSpec', text: '物料规格', dictCode: '' }) - fieldList.push({ type: 'string', value: 'materialUnit', text: '物料单位', dictCode: '' }) - fieldList.push({ type: 'BigDecimal', value: 'qty', text: '物料总数', dictCode: '' }) + fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''}) + fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialCode', text: '物料编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialName', text: '物料名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialSpec', text: '物料规格', dictCode: ''}) + fieldList.push({type: 'string', value: 'materialUnit', text: '物料单位', dictCode: ''}) + fieldList.push({type: 'BigDecimal', value: 'qty', text: '物料总数', dictCode: ''}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue index 4307ba3..b93a253 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue @@ -6,7 +6,7 @@ <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="库区"> - <a-form-model-item prop="zoneOptions"> + <a-form-model-item prop="zoneOptions"> <j-multi-select-tag v-model="queryParam.zoneCode" :options="zoneOptions" @@ -51,12 +51,14 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="交易类型"> - <j-dict-select-tag placeholder="请选择交易类型" v-model="queryParam.type" dictCode="inventory_transaction_type"/> + <j-dict-select-tag placeholder="请选择交易类型" v-model="queryParam.type" + dictCode="inventory_transaction_type"/> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="库存状态"> - <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus" dictCode="inventory_status"/> + <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus" + dictCode="inventory_status"/> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -102,7 +104,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -117,10 +119,15 @@ <!-- 操作按钮区域 --> <div class="table-operator"> - <a-button v-has="'inventoryTransaction:export'" type="primary" icon="download" @click="handleExportXls('库存交易记录')">导出</a-button> - <a-upload v-has="'inventoryTransaction:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button v-has="'inventoryTransaction:export'" type="primary" icon="download" + @click="handleExportXls('库存交易记录')">导出 + </a-button> + <a-upload v-has="'inventoryTransaction:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> + <j-super-query :fieldList="superFieldList" v-has="'inventoryTransaction:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -218,7 +225,8 @@ export default { description: '库存交易记录管理页面', companyList: [], zoneList: [], - zoneOptions:[], + zoneOptions: [], + firstLoad:0, // 表头 columns: [ { @@ -233,7 +241,7 @@ export default { align: 'center', dataIndex: 'zoneCode', key: 'zoneCode', - scopedSlots: { customRender: 'zoneCode' } + scopedSlots: {customRender: 'zoneCode'} }, // { // title: '货主', @@ -363,6 +371,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; @@ -386,13 +409,13 @@ export default { if (res.success) { this.zoneList = res.result //延迟半秒执行,避免组件未加载完,数据已经加载完 - setTimeout(()=>{ + setTimeout(() => { //slice可以在数组的任何位置进行删除/添加操作 this.zoneOptions.splice(0, 1); for (let i = 0; i < res.result.length; i++) { - this.zoneOptions.push({value:res.result[i].code,text:res.result[i].name}) + this.zoneOptions.push({value: res.result[i].code, text: res.result[i].name}) } - },500) + }, 500) } }); getCompanyList().then((res) => { diff --git a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue index 5eb753d..7999cdf 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue @@ -6,7 +6,7 @@ <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="库区"> - <a-form-model-item prop="zoneOptions"> + <a-form-model-item prop="zoneOptions"> <j-multi-select-tag v-model="queryParam.zoneCode" :options="zoneOptions" @@ -105,7 +105,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -120,6 +120,7 @@ <!-- 操作按钮区域 --> <div class="table-operator"> + <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')" >导出 @@ -137,15 +138,14 @@ <a-button type="primary" icon="import">导入</a-button> </a-upload> <a-button v-has="'inventoryDetail:controller'" @click='controller()' type='primary'>冻结</a-button> - <a-button v-has="'inventoryDetail:releaseController'" @click='releaseController()' type='primary'>释放冻结</a-button> - <a-button v-has="'inventoryHeader:quickShipmentInventoryHeader'" @click='quickShipment()' type='primary'>快速出库</a-button> + <a-button v-has="'inventoryDetail:releaseController'" @click='releaseController()' type='primary'>释放冻结 + </a-button> + <a-button v-has="'inventoryHeader:quickShipmentInventoryHeader'" @click='quickShipment()' type='primary'> + 快速出库 + </a-button> <!-- 高级查询区域 --> - <j-super-query - :fieldList="superFieldList" - v-has="'inventoryDetail:superSearch'" - ref="superQueryModal" - @handleSuperQuery="handleSuperQuery" - ></j-super-query> + <j-super-query :fieldList="superFieldList" v-has="'inventoryDetail:superQuery'" + @handleSuperQuery="handleSuperQuery"/> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">--> <!-- <a-menu slot="overlay">--> <!-- <a-menu-item v-has="'inventoryDetail:delete'" key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>--> @@ -156,10 +156,11 @@ <!-- table区域-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 - <a style="margin-left: 24px" @click="onClearSelected">清空</a> - </div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 + <a style="margin-left: 24px" @click="onClearSelected">清空</a> + </div> <a-table ref="table" @@ -220,7 +221,8 @@ </template> <template slot="fileSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> - <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">下载</a-button> + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">下载 + </a-button> </template> <span slot="action" slot-scope="text, record"> <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a> @@ -242,7 +244,7 @@ import {mixinDevice} from '@/utils/mixin' import {JeecgListMixin} from '@/mixins/JeecgListMixin' import SimpleInventoryDetailModal from './modules/SimpleInventoryDetailModal' import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' -import {getCompanyList, getZoneList, } from "@api/api"; +import {getCompanyList, getZoneList,} from "@api/api"; import {postAction} from '@/api/manage' import QuickShipmentDetailModel from "@views/system/shipment/modules/QuickShipmentDetailModal"; @@ -256,8 +258,9 @@ export default { data() { return { zoneList: [], - zoneOptions:[], + zoneOptions: [], companyList: [], + firstLoad:0, description: '库存详情管理页面', // 表头 columns: [ @@ -409,13 +412,28 @@ export default { }, dictOptions: {}, superFieldList: [], - selectRecord:[], + selectRecord: [], } }, created() { this.loadFrom() this.getSuperFieldList() }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` @@ -438,13 +456,13 @@ export default { if (res.success) { this.zoneList = res.result //延迟半秒执行,避免组件未加载完,数据已经加载完 - setTimeout(()=>{ + setTimeout(() => { //slice可以在数组的任何位置进行删除/添加操作 this.zoneOptions.splice(0, 1); for (let i = 0; i < res.result.length; i++) { - this.zoneOptions.push({value:res.result[i].code,text:res.result[i].name}) + this.zoneOptions.push({value: res.result[i].code, text: res.result[i].name}) } - },500) + }, 500) } }); getCompanyList().then(res => { @@ -453,7 +471,7 @@ export default { } }) }, - controller: function() { + controller: function () { if (this.selectedRowKeys.length <= 0) { this.$message.warning('请选择一条记录!') } else { @@ -461,7 +479,7 @@ export default { this.$confirm({ title: '确认冻结', content: '是否冻结选中数据?', - onOk: function() { + onOk: function () { that.loading = true; postAction(that.url.controller, that.selectedRowKeys).then((res) => { if (res.success) { @@ -489,7 +507,7 @@ export default { this.$confirm({ title: '释放冻结', content: '释放冻结选中数据?', - onOk: function() { + onOk: function () { that.loading = true; postAction(that.url.releaseController, that.selectedRowKeys).then((res) => { if (res.success) { diff --git a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue index 08e88f0..1927cfb 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue @@ -6,7 +6,8 @@ <a-row :gutter="24"> <a-col :xl='6' :lg='7' :md='8' :sm='24'> <a-form-item label='接口名称'> - <a-select show-search placeholder='请输入接口名称' option-filter-prop='children' v-model='queryParam.apiName'> + <a-select show-search placeholder='请输入接口名称' option-filter-prop='children' + v-model='queryParam.apiName'> <a-select-option v-for='name in apiNameList' :key='name' :value='name'> {{ name }} </a-select-option> @@ -73,7 +74,7 @@ <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> </a> </span> </a-col> @@ -85,7 +86,10 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'apiLog:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')">导出</a-button> + <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')">导出 + </a-button> + <j-super-query :fieldList="superFieldList" v-has="'apiLog:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> @@ -106,22 +110,40 @@ <template :slot="expandedRowRender" slot-scope="record"> <div style="margin: 0"> <div> - <a-button @click="copyToClipboard(record.requestHeader)" type="link" icon="copy" style="vertical-align: revert;"></a-button> - <span style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#b3b3b3;">请求头:</span> - <a-button @click="record.expandHeader = !record.expandHeader" type="link" icon="down-circle" style="vertical-align: revert;"></a-button> - <span v-if="record.expandHeader" style="padding:0 0 0 32px;display: block; vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#b3b3b3;">{{ record.requestHeader }}</span> + <a-button @click="copyToClipboard(record.requestHeader)" type="link" icon="copy" + style="vertical-align: revert;"></a-button> + <span + style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#b3b3b3;">请求头:</span> + <a-button @click="record.expandHeader = !record.expandHeader" type="link" icon="down-circle" + style="vertical-align: revert;"></a-button> + <span v-if="record.expandHeader" + style="padding:0 0 0 32px;display: block; vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#b3b3b3;">{{ + record.requestHeader + }}</span> </div> <div> - <a-button @click="copyToClipboard(record.requestBody)" type="link" icon="copy" style="vertical-align: revert;"></a-button> - <span style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color: saddlebrown;">请求内容:{{ record.requestBody }}</span> + <a-button @click="copyToClipboard(record.requestBody)" type="link" icon="copy" + style="vertical-align: revert;"></a-button> + <span + style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color: saddlebrown;">请求内容:{{ + record.requestBody + }}</span> </div> <div> - <a-button @click="copyToClipboard(record.responseBody)" type="link" icon="copy" style="vertical-align: revert;"></a-button> - <span style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#0066CC;">响应内容:{{ record.responseBody }}</span> + <a-button @click="copyToClipboard(record.responseBody)" type="link" icon="copy" + style="vertical-align: revert;"></a-button> + <span + style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#0066CC;">响应内容:{{ + record.responseBody + }}</span> </div> - <div v-if="record.exception" > - <a-button @click="copyToClipboard(record.exception)" type="link" icon="copy" style="vertical-align: revert;"></a-button> - <span style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:red">异常堆栈信息:{{ record.exception }}</span> + <div v-if="record.exception"> + <a-button @click="copyToClipboard(record.exception)" type="link" icon="copy" + style="vertical-align: revert;"></a-button> + <span + style="vertical-align: initial; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:red">异常堆栈信息:{{ + record.exception + }}</span> </div> </div> </template> @@ -139,8 +161,8 @@ <script> import moment from 'moment' import '@/assets/less/TableExpand.less' -import { mixinDevice } from '@/utils/mixin' -import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' import ApiLogModal from './modules/ApiLogModal' import JEllipsis from '@comp/jeecg/JEllipsis' import {getApiNameList} from '@api/api' @@ -238,7 +260,7 @@ export default { this.expandedRowRender = "expandedRowRender"; }, computed: { - importExcelUrl: function() { + importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, @@ -272,26 +294,27 @@ export default { clipboard.onClick(event); // 添加这一行来触发点击事件 }, - initDictConfig() {}, + initDictConfig() { + }, getSuperFieldList() { let fieldList = [] - fieldList.push({ type: 'string', value: 'apiName', text: '接口名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'apiMethod', text: '请求类型', dictCode: '' }) - fieldList.push({ type: 'string', value: 'ip', text: '请求方IP', dictCode: '' }) - fieldList.push({ type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'responseBy', text: '响应方名称', dictCode: '' }) - fieldList.push({ type: 'string', value: 'url', text: '请求地址', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'requestTime', text: '请求时间' }) - fieldList.push({ type: 'datetime', value: 'responseTime', text: '响应时间' }) - fieldList.push({ type: 'Text', value: 'requestHeader', text: '请求头', dictCode: '' }) - fieldList.push({ type: 'Text', value: 'requestBody', text: '请求内容', dictCode: '' }) - fieldList.push({ type: 'Text', value: 'responseHeader', text: '响应头', dictCode: '' }) - fieldList.push({ type: 'Text', value: 'responseBody', text: '响应内容', dictCode: '' }) - fieldList.push({ type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: '' }) - fieldList.push({ type: 'int', value: 'httpCode', text: 'httpCode', dictCode: '' }) - fieldList.push({ type: 'int', value: 'retCode', text: '业务响应码', dictCode: '' }) - fieldList.push({ type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: '' }) - fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) + fieldList.push({type: 'string', value: 'apiName', text: '接口名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'apiMethod', text: '请求类型', dictCode: ''}) + fieldList.push({type: 'string', value: 'ip', text: '请求方IP', dictCode: ''}) + fieldList.push({type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'responseBy', text: '响应方名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'url', text: '请求地址', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'requestTime', text: '请求时间'}) + fieldList.push({type: 'datetime', value: 'responseTime', text: '响应时间'}) + fieldList.push({type: 'Text', value: 'requestHeader', text: '请求头', dictCode: ''}) + fieldList.push({type: 'Text', value: 'requestBody', text: '请求内容', dictCode: ''}) + fieldList.push({type: 'Text', value: 'responseHeader', text: '响应头', dictCode: ''}) + fieldList.push({type: 'Text', value: 'responseBody', text: '响应内容', dictCode: ''}) + fieldList.push({type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: ''}) + fieldList.push({type: 'int', value: 'httpCode', text: 'httpCode', dictCode: ''}) + fieldList.push({type: 'int', value: 'retCode', text: '业务响应码', dictCode: ''}) + fieldList.push({type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/monitor/ApkInfoList.vue b/ant-design-vue-jeecg/src/views/system/monitor/ApkInfoList.vue index 7ec5db3..137deaf 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/ApkInfoList.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/ApkInfoList.vue @@ -53,23 +53,31 @@ </a-upload> <!--<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>--> <a-button type="primary" icon="download" @click="handleExportXls('apk_info')">导出</a-button> - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" + @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> <!-- 高级查询区域 --> - <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query> + <j-super-query :fieldList="superFieldList" ref="superQueryModal" + v-has="'apkInfo:superQuery'" @handleSuperQuery="handleSuperQuery"></j-super-query> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete"/> + 删除 + </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button> + <a-button style="margin-left: 8px"> 批量操作 + <a-icon type="down"/> + </a-button> </a-dropdown> </div> <!-- table区域-begin --> <div> <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a>项 <a style="margin-left: 24px" @click="onClearSelected">清空</a> </div> @@ -92,7 +100,8 @@ </template> <template slot="imgSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + <img v-else :src="getImgView(text)" height="25px" alt="" + style="max-width:80px;font-size: 12px;font-style: italic;"/> </template> <template slot="fileSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> @@ -110,9 +119,9 @@ <span slot="action" slot-scope="text, record"> <a @click="handleEdit(record)">编辑</a> <a @click="handleDetail(record)">详情</a> - <a-divider type="vertical" /> + <a-divider type="vertical"/> <a-dropdown> - <a class="ant-dropdown-link">更多 <a-icon type="down" /></a> + <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> <a-menu slot="overlay"> <a-menu-item> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"> @@ -131,147 +140,147 @@ </template> <script> - import {httpAction, getAction} from '@/api/manage' - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import ApkInfoModal from './modules/ApkInfoModal' +import {httpAction, getAction} from '@/api/manage' +import '@/assets/less/TableExpand.less' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import ApkInfoModal from './modules/ApkInfoModal' - export default { - name: 'ApkInfoList', - mixins:[JeecgListMixin, mixinDevice], - components: { - ApkInfoModal - }, - data () { - return { - description: 'apk_info管理页面', - // 表头 - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title:'应用名称', - align:"center", - dataIndex: 'pkgname' - }, - { - title:'版本号', - align:"center", - dataIndex: 'versioncode' - }, - { - title:'版本名称', - align:"center", - dataIndex: 'versionname' - }, - { - title:'下载地址', - align:"center", - dataIndex: 'url', - customRender: function (t, r, index) { - return window._CONFIG['domianURL'] + t - } - }, - { - title:'md5校验码', - align:"center", - dataIndex: 'md5' - }, - { - title: '操作', - dataIndex: 'action', - align:"center", - fixed:"right", - width:147, - scopedSlots: { customRender: 'action' } +export default { + name: 'ApkInfoList', + mixins: [JeecgListMixin, mixinDevice], + components: { + ApkInfoModal + }, + data() { + return { + description: 'apk_info管理页面', + // 表头 + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: "center", + customRender: function (t, r, index) { + return parseInt(index) + 1; } - ], - url: { - list: "/monitor/apkinfo/list", - delete: "/monitor/apkinfo/delete", - deleteBatch: "/monitor/apkinfo/deleteBatch", - exportXlsUrl: "/monitor/apkinfo/exportXls", - importExcelUrl: "monitor/apkinfo/importExcel", - upload: "/sys/common/upload", - parse: "/monitor/apkinfo/parseApk" }, - dictOptions:{}, - superFieldList:[], - } - }, - created() { + { + title: '应用名称', + align: "center", + dataIndex: 'pkgname' + }, + { + title: '版本号', + align: "center", + dataIndex: 'versioncode' + }, + { + title: '版本名称', + align: "center", + dataIndex: 'versionname' + }, + { + title: '下载地址', + align: "center", + dataIndex: 'url', + customRender: function (t, r, index) { + return window._CONFIG['domianURL'] + t + } + }, + { + title: 'md5校验码', + align: "center", + dataIndex: 'md5' + }, + { + title: '操作', + dataIndex: 'action', + align: "center", + fixed: "right", + width: 147, + scopedSlots: {customRender: 'action'} + } + ], + url: { + list: "/monitor/apkinfo/list", + delete: "/monitor/apkinfo/delete", + deleteBatch: "/monitor/apkinfo/deleteBatch", + exportXlsUrl: "/monitor/apkinfo/exportXls", + importExcelUrl: "monitor/apkinfo/importExcel", + upload: "/sys/common/upload", + parse: "/monitor/apkinfo/parseApk" + }, + dictOptions: {}, + superFieldList: [], + } + }, + created() { this.getSuperFieldList(); + }, + computed: { + uploadAction() { + return window._CONFIG['domianURL'] + this.url.upload; }, - computed: { - uploadAction() { - return window._CONFIG['domianURL'] + this.url.upload; - }, - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; }, - methods: { - beforeUpload(file) { - var fileType = file.type; - if (fileType === 'image') { - if (fileType.indexOf('image') < 0) { - this.$message.warning('请上传图片'); - return false; - } - } else if (fileType === 'file') { - if (fileType.indexOf('image') >= 0) { - this.$message.warning('请上传文件'); - return false; - } + }, + methods: { + beforeUpload(file) { + var fileType = file.type; + if (fileType === 'image') { + if (fileType.indexOf('image') < 0) { + this.$message.warning('请上传图片'); + return false; } - return true - }, - handleChange(info) { - if (info.file.status === 'done') { - if (info.file.response.success) { - this.loadData() - this.$message.success(`${info.file.name} 上传成功!`); - this.$options.methods.parseApk(this, info.file.name) - } else { - this.$message.error(`${info.file.response.message}`); - } - } else if (info.file.status === 'error') { + } else if (fileType === 'file') { + if (fileType.indexOf('image') >= 0) { + this.$message.warning('请上传文件'); + return false; + } + } + return true + }, + handleChange(info) { + if (info.file.status === 'done') { + if (info.file.response.success) { + this.loadData() + this.$message.success(`${info.file.name} 上传成功!`); + this.$options.methods.parseApk(this, info.file.name) + } else { this.$message.error(`${info.file.response.message}`); } - }, + } else if (info.file.status === 'error') { + this.$message.error(`${info.file.response.message}`); + } + }, - parseApk(parent, filename){ - getAction(parent.url.parse, {filename: filename}).then((res) => { - if (res.success) { + parseApk(parent, filename) { + getAction(parent.url.parse, {filename: filename}).then((res) => { + if (res.success) { parent.loadData() - }else{ + } else { alert("解析apk失败!") } }) - }, - initDictConfig(){ - }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'string',value:'pkgname',text:'应用名称',dictCode:''}) - fieldList.push({type:'int',value:'versioncode',text:'版本号',dictCode:''}) - fieldList.push({type:'string',value:'versionname',text:'版本名称',dictCode:''}) - fieldList.push({type:'string',value:'url',text:'下载地址',dictCode:''}) - fieldList.push({type:'string',value:'md5',text:'md5校验码',dictCode:''}) - this.superFieldList = fieldList - } + }, + initDictConfig() { + }, + getSuperFieldList() { + let fieldList = []; + fieldList.push({type: 'string', value: 'pkgname', text: '应用名称', dictCode: ''}) + fieldList.push({type: 'int', value: 'versioncode', text: '版本号', dictCode: ''}) + fieldList.push({type: 'string', value: 'versionname', text: '版本名称', dictCode: ''}) + fieldList.push({type: 'string', value: 'url', text: '下载地址', dictCode: ''}) + fieldList.push({type: 'string', value: 'md5', text: 'md5校验码', dictCode: ''}) + this.superFieldList = fieldList } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue b/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue index ebca003..ad85722 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue @@ -11,7 +11,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="业务类型"> - <j-input placeholder="请选择业务类型" v-model="queryParam.bizType" /> + <j-input placeholder="请选择业务类型" v-model="queryParam.bizType"/> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> @@ -35,21 +35,31 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="操作结果状态"> - <j-dict-select-tag placeholder="请输入操作结果状态容" v-model="queryParam.operationStatus" dictCode="operation_status"/> + <j-dict-select-tag placeholder="请输入操作结果状态容" v-model="queryParam.operationStatus" + dictCode="operation_status"/> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> - <a-button v-has="'operationLog:export'" type="primary" @click="handleExportXls('操作记录')" icon="download" style="margin-left: 8px">导出</a-button> + <a-button v-has="'operationLog:export'" type="primary" @click="handleExportXls('操作记录')" + icon="download" style="margin-left: 8px">导出</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> </span> </a-col> + </a-row> + </a-form> </div> <!-- 查询区域-END --> + + <!-- 操作按钮区域 --> + <div class="table-operator"> + <j-super-query :fieldList="superFieldList" v-has="'operationLog:superQuery'" + @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> <div> <a-table @@ -70,7 +80,8 @@ </template> <template slot="imgSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + <img v-else :src="getImgView(text)" height="25px" alt="" + style="max-width:80px;font-size: 12px;font-style: italic;"/> </template> <template slot="fileSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> @@ -94,130 +105,131 @@ </a-card> </template> -<script> - import {filterObj} from '@/utils/util'; - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import OperationLogModal from './modules/OperationLogModal' - import JEllipsis from "@comp/jeecg/JEllipsis" - export default { - name: 'OperationLogList', - mixins:[JeecgListMixin, mixinDevice], - components: { - OperationLogModal, - JEllipsis - }, - data () { - let ellipsis1 = (v, l = 80) => (<j-ellipsis value={v} length={l}/>) - return { - description: '操作记录管理页面', - // 表头 - columns: [ - { - title:'业务ID', - align:"center", - dataIndex: 'bizId', - sorter: true, - }, - { - title:'业务类型', - align:"center", - dataIndex: 'bizType' - }, - { - title:'业务标签', - align:"center", - dataIndex: 'bizTag' - }, - { - title:'操作内容', - align:"center", - dataIndex: 'operationMsg', - customRender: (t) => ellipsis1(t) - }, - { - title:'操作时间', - align:"center", - dataIndex: 'operationTime' - }, - { - title:'操作耗时', - align:"center", - dataIndex: 'operationCostTime' - }, - { - title:'操作人姓名', - align:"center", - dataIndex: 'operatorName' - }, - { - title:'操作结果状态', - align:"center", - dataIndex: 'operationStatus_dictText' - }, - { - title: '操作', - dataIndex: 'action', - align: "center", - fixed: "right", - width: 80, - scopedSlots: {customRender: 'action'} - } - ], - url: { - list: "/config/operationLog/list", - delete: "/config/operationLog/delete", - deleteBatch: "/config/operationLog/deleteBatch", - exportXlsUrl: "/config/operationLog/exportXls", - importExcelUrl: "config/operationLog/importExcel", +<script> +import {filterObj} from '@/utils/util'; +import '@/assets/less/TableExpand.less' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import OperationLogModal from './modules/OperationLogModal' +import JEllipsis from "@comp/jeecg/JEllipsis" +export default { + name: 'OperationLogList', + mixins: [JeecgListMixin, mixinDevice], + components: { + OperationLogModal, + JEllipsis + }, + data() { + let ellipsis1 = (v, l = 80) => (<j-ellipsis value={v} length={l}/>) + return { + description: '操作记录管理页面', + // 表头 + columns: [ + { + title: '业务ID', + align: "center", + dataIndex: 'bizId', + sorter: true, }, - dictOptions:{}, - superFieldList:[], - } - }, - created() { - this.getSuperFieldList(); - }, - computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, - }, - methods: { - getQueryParams() { - // 重写查询条件 - let sqp = {} - if (this.superQueryParams) { - sqp['superQueryParams'] = encodeURI(this.superQueryParams) - sqp['superQueryMatchType'] = this.superQueryMatchType + { + title: '业务类型', + align: "center", + dataIndex: 'bizType' + }, + { + title: '业务标签', + align: "center", + dataIndex: 'bizTag' + }, + { + title: '操作内容', + align: "center", + dataIndex: 'operationMsg', + customRender: (t) => ellipsis1(t) + }, + { + title: '操作时间', + align: "center", + dataIndex: 'operationTime' + }, + { + title: '操作耗时', + align: "center", + dataIndex: 'operationCostTime' + }, + { + title: '操作人姓名', + align: "center", + dataIndex: 'operatorName' + }, + { + title: '操作结果状态', + align: "center", + dataIndex: 'operationStatus_dictText' + }, + { + title: '操作', + dataIndex: 'action', + align: "center", + fixed: "right", + width: 80, + scopedSlots: {customRender: 'action'} } - var param = Object.assign(sqp, this.queryParam, {}, this.filters) - param.field = this.getQueryField() - param.pageNo = this.ipagination.current - param.pageSize = this.ipagination.pageSize - return filterObj(param) - }, - initDictConfig(){ + ], + url: { + list: "/config/operationLog/list", + delete: "/config/operationLog/delete", + deleteBatch: "/config/operationLog/deleteBatch", + exportXlsUrl: "/config/operationLog/exportXls", + importExcelUrl: "config/operationLog/importExcel", + }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'string',value:'bizId',text:'业务ID',dictCode:''}) - fieldList.push({type:'string',value:'bizType',text:'业务类型',dictCode:''}) - fieldList.push({type:'string',value:'operationMsg',text:'操作内容',dictCode:''}) - fieldList.push({type:'datetime',value:'operationTime',text:'操作时间'}) - fieldList.push({type:'int',value:'operationCostTime',text:'操作耗时',dictCode:''}) - fieldList.push({type:'string',value:'contentReturn',text:'方法返回内容',dictCode:''}) - fieldList.push({type:'string',value:'contentException',text:'方法异常内容',dictCode:''}) - fieldList.push({type:'string',value:'operatorName',text:'操作人姓名',dictCode:''}) - fieldList.push({type:'int',value:'operationStatus',text:'操作结果状态',dictCode:'operation_status'}) - this.superFieldList = fieldList + dictOptions: {}, + superFieldList: [], + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + getQueryParams() { + // 重写查询条件 + let sqp = {} + if (this.superQueryParams) { + sqp['superQueryParams'] = encodeURI(this.superQueryParams) + sqp['superQueryMatchType'] = this.superQueryMatchType } + var param = Object.assign(sqp, this.queryParam, {}, this.filters) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + return filterObj(param) + }, + initDictConfig() { + }, + getSuperFieldList() { + let fieldList = []; + fieldList.push({type: 'string', value: 'bizId', text: '业务ID', dictCode: ''}) + fieldList.push({type: 'string', value: 'bizType', text: '业务类型', dictCode: ''}) + fieldList.push({type: 'string', value: 'operationMsg', text: '操作内容', dictCode: ''}) + fieldList.push({type: 'datetime', value: 'operationTime', text: '操作时间'}) + fieldList.push({type: 'int', value: 'operationCostTime', text: '操作耗时', dictCode: ''}) + fieldList.push({type: 'string', value: 'contentReturn', text: '方法返回内容', dictCode: ''}) + fieldList.push({type: 'string', value: 'contentException', text: '方法异常内容', dictCode: ''}) + fieldList.push({type: 'string', value: 'operatorName', text: '操作人姓名', dictCode: ''}) + fieldList.push({type: 'int', value: 'operationStatus', text: '操作结果状态', dictCode: 'operation_status'}) + this.superFieldList = fieldList } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue index 5eeb08d..9a21754 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue @@ -52,7 +52,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -75,6 +75,8 @@ <a-button v-has="'receiptContainerHeader:createTask'" @click="createBatchTask" type="primary" >批量生成任务</a-button> <a-button v-has="'receiptContainerHeader:delete'" @click="cancelBatchTask" type="primary" >批量取消组盘</a-button> <a-button v-has="'receiptContainerHeader:suppleReceipt'" @click="suppleReceipt" type="primary" >补充入库</a-button> + <j-super-query :fieldList="superFieldList" v-has="'receiptContainerHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> @@ -183,6 +185,7 @@ export default { selectIndex: null, description: '入库组盘管理页面', querySource: {}, + firstLoad:0, isorter: { column: 'status', order: 'asc', @@ -285,6 +288,21 @@ export default { created() { this.getSuperFieldList(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailList.vue index ca53e87..f30ea55 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailList.vue @@ -170,6 +170,11 @@ export default { dataIndex: 'taskQty' }, { + title: '入库数量', + align: "center", + dataIndex: 'receiptQty' + }, + { title: '库存状态', align: "center", dataIndex: 'inventoryStatus_dictText', diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue index 70dcb24..5c7e071 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue @@ -102,6 +102,9 @@ @change='handleImportExcel'> <!-- <a-button type="primary" icon="import">导入</a-button>--> </a-upload> + + <j-super-query :fieldList="superFieldList" v-has="'receiptHeaderHistory:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue index 29755e9..065876b 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue @@ -102,6 +102,8 @@ <a-button type="primary" icon="import">导入</a-button> <a-button v-has="'receiptHeader:print'" @click="batchPrint()" type="primary">打印</a-button> </a-upload> + <j-super-query :fieldList="superFieldList" v-has="'receiptHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> @@ -254,6 +256,7 @@ export default { receiptTypeList: [], supplierList: [], flowOff:'', + firstLoad:0, // 表头 columns: [ { @@ -392,6 +395,10 @@ export default { } }, mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 let timeSearch=setInterval(()=>{ let eleSearch= document.getElementById("search"); diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue index 6a74c09..3af08ca 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue @@ -53,7 +53,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -76,6 +76,8 @@ </a-upload> <a-button @click="createBatchTask" type="primary" >批量生成任务</a-button> <a-button @click="cancelBatchTask" type="primary" >批量取消配盘</a-button> + <j-super-query :fieldList="superFieldList" v-has="'shipmentContainerHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> @@ -160,6 +162,7 @@ export default { querySource: {}, portList: [], hh:'123', + firstLoad:0, // 表头 columns: [ { @@ -253,6 +256,21 @@ export default { created() { this.getSuperFieldList(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue index a965bc8..674c036 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue @@ -106,6 +106,8 @@ @change="handleImportExcel"> <!-- <a-button type="primary" icon="import">导入</a-button>--> </a-upload> + <j-super-query :fieldList="superFieldList" v-has="'shipmentHeaderHistory:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue index a2efa50..ddda8b3 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue @@ -103,7 +103,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -128,6 +128,8 @@ <!-- <!– 高级查询区域 –>--> <!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal"--> <!-- @handleSuperQuery="handleSuperQuery"></j-super-query>--> + <j-super-query :fieldList="superFieldList" v-has="'shipmentHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + </div> <!-- table区域-begin --> @@ -292,6 +294,7 @@ export default { username: '', flowStatus: '', flowOff:'', + firstLoad:0, // 表头 columns: [ { @@ -429,6 +432,21 @@ export default { this.username = store.getters.userInfo.username this.getDocumentAduitFlowStaus(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/stocktaking/CycleCountHeaderList.vue b/ant-design-vue-jeecg/src/views/system/stocktaking/CycleCountHeaderList.vue index 0b3b830..5f1d239 100644 --- a/ant-design-vue-jeecg/src/views/system/stocktaking/CycleCountHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/stocktaking/CycleCountHeaderList.vue @@ -12,22 +12,34 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'cycleCountHeader:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'cycleCountHeader:export'" type="primary" icon="download" @click="handleExportXls('盘点主表')">导出</a-button> - <a-upload v-has="'cycleCountHeader:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button v-has="'cycleCountHeader:export'" type="primary" icon="download" @click="handleExportXls('盘点主表')"> + 导出 + </a-button> + <a-upload v-has="'cycleCountHeader:import'" name="file" :showUploadList="false" :multiple="false" + :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay"> - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete"/> + 删除 + </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button> + <a-button style="margin-left: 8px"> 批量操作 + <a-icon type="down"/> + </a-button> </a-dropdown> + + <j-super-query :fieldList="superFieldList" v-has="'cycleCountHeader:superQuery'" + @handleSuperQuery="handleSuperQuery"/> </div> <!-- table区域-begin --> <div> <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 <a style="margin-left: 24px" @click="onClearSelected">清空</a> </div> @@ -74,7 +86,8 @@ </template> <template slot="imgSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + <img v-else :src="getImgView(text)" height="25px" alt="" + style="max-width:80px;font-size: 12px;font-style: italic;"/> </template> <template slot="fileSlot" slot-scope="text"> <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> @@ -89,10 +102,11 @@ </a-button> </template> <span slot="action" slot-scope="text, record"> - <j-select-multi-cycle-count v-if="record.statusCyc!=100" :query-config="selectUserQueryConfig" :test-config="record.id" :header-code="record.code"/> - <a-divider type="vertical" v-if="record.statusCyc!=100" /> + <j-select-multi-cycle-count v-if="record.statusCyc!=100" :query-config="selectUserQueryConfig" + :test-config="record.id" :header-code="record.code"/> + <a-divider type="vertical" v-if="record.statusCyc!=100"/> <a-dropdown> - <a class="ant-dropdown-link">更多 <a-icon type="down" /></a> + <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> <a-menu slot="overlay"> <a-menu-item> <a v-has="'cycleCountHeader:edit'" @click="handleEdit(record)">编辑</a> @@ -101,7 +115,8 @@ <a @click="handleDetail(record)">详情</a> </a-menu-item> <a-menu-item> - <a-popconfirm v-has="'cycleCountHeader:delete'" title="确定删除吗?" @confirm="() => handleDelete(record.id)"> + <a-popconfirm v-has="'cycleCountHeader:delete'" title="确定删除吗?" + @confirm="() => handleDelete(record.id)"> <a>删除</a> </a-popconfirm> </a-menu-item> @@ -118,206 +133,206 @@ <script> - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import {getCompanyList} from '@/api/api' - import {getCountTypeList} from '@/api/api' - import CycleCountHeaderModal from './modules/CycleCountHeaderModal' - import CycleCountDetailList from "./CycleCountDetailList"; +import '@/assets/less/TableExpand.less' +import {mixinDevice} from '@/utils/mixin' +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import {getCompanyList} from '@/api/api' +import {getCountTypeList} from '@/api/api' +import CycleCountHeaderModal from './modules/CycleCountHeaderModal' +import CycleCountDetailList from "./CycleCountDetailList"; - export default { - name: 'CycleCountHeaderList', - mixins:[JeecgListMixin, mixinDevice], - components: { - CycleCountHeaderModal, - CycleCountDetailList, - }, - data () { - return { - // 选择用户查询条件配置 - selectUserQueryConfig: [ - {key: 'locationCode', label: '库位'}, - ], - description: '盘点主表管理页面', - companyList: [], - CountTypeList:[], - // 表头 - columns: [ - { - title: 'ID', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - { - title:'盘点单编码', - align:"center", - dataIndex: 'code' - }, - { - title:'货主编码', - align: "center", - dataIndex: 'companyCode', - key: 'companyCode', - scopedSlots: {customRender: 'companyCode'} - }, - { - title:'总货位数', - align:"center", - dataIndex: 'totalLocs' - }, - { - title:'总物料数', - align:"center", - dataIndex: 'totalItems' - }, - { - title:'盘点类型', - align:"center", - dataIndex: 'countType', - key: 'countType', - scopedSlots: {customRender: 'countType'} - }, - { - title:'盘点主单状态', - align:"center", - dataIndex: 'statusCyc_dictText' - }, - { - title:'指定盘点人员', - align:"center", - dataIndex: 'stocktakingAs' - }, - { - title:'实际盘点人员', - align:"center", - dataIndex: 'stocktakingAc' - }, - { - title:'是否有效', - align:"center", - dataIndex: 'enable_dictText' - }, - // { - // title:'回传时间', - // align:"center", - // dataIndex: 'uploadTime' - // }, - // { - // title:'回传状态', - // align:"center", - // dataIndex: 'uploadStatusString' - // }, - // { - // title:'关闭人', - // align:"center", - // dataIndex: 'closedBy' - // }, - { - title:'备注', - align:"center", - dataIndex: 'remark' - }, - { - title: '操作', - dataIndex: 'action', - align:"center", - // fixed:"right", - width:147, - scopedSlots: { customRender: 'action' } +export default { + name: 'CycleCountHeaderList', + mixins: [JeecgListMixin, mixinDevice], + components: { + CycleCountHeaderModal, + CycleCountDetailList, + }, + data() { + return { + // 选择用户查询条件配置 + selectUserQueryConfig: [ + {key: 'locationCode', label: '库位'}, + ], + description: '盘点主表管理页面', + companyList: [], + CountTypeList: [], + // 表头 + columns: [ + { + title: 'ID', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: "center", + customRender: function (t, r, index) { + return parseInt(index) + 1; } - ], - url: { - list: "/cycleCountHeader/cycleCountHeader/list", - delete: "/cycleCountHeader/cycleCountHeader/delete", - deleteBatch: "/cycleCountHeader/cycleCountHeader/deleteBatch", - exportXlsUrl: "/cycleCountHeader/cycleCountHeader/exportXls", - importExcelUrl: "cycleCountHeader/cycleCountHeader/importExcel", - }, - dictOptions:{ - status: [], + { + title: '盘点单编码', + align: "center", + dataIndex: 'code' }, - superFieldList:[], - } - }, - created() { + { + title: '货主编码', + align: "center", + dataIndex: 'companyCode', + key: 'companyCode', + scopedSlots: {customRender: 'companyCode'} + }, + { + title: '总货位数', + align: "center", + dataIndex: 'totalLocs' + }, + { + title: '总物料数', + align: "center", + dataIndex: 'totalItems' + }, + { + title: '盘点类型', + align: "center", + dataIndex: 'countType', + key: 'countType', + scopedSlots: {customRender: 'countType'} + }, + { + title: '盘点主单状态', + align: "center", + dataIndex: 'statusCyc_dictText' + }, + { + title: '指定盘点人员', + align: "center", + dataIndex: 'stocktakingAs' + }, + { + title: '实际盘点人员', + align: "center", + dataIndex: 'stocktakingAc' + }, + { + title: '是否有效', + align: "center", + dataIndex: 'enable_dictText' + }, + // { + // title:'回传时间', + // align:"center", + // dataIndex: 'uploadTime' + // }, + // { + // title:'回传状态', + // align:"center", + // dataIndex: 'uploadStatusString' + // }, + // { + // title:'关闭人', + // align:"center", + // dataIndex: 'closedBy' + // }, + { + title: '备注', + align: "center", + dataIndex: 'remark' + }, + { + title: '操作', + dataIndex: 'action', + align: "center", + // fixed:"right", + width: 147, + scopedSlots: {customRender: 'action'} + } + ], + url: { + list: "/cycleCountHeader/cycleCountHeader/list", + delete: "/cycleCountHeader/cycleCountHeader/delete", + deleteBatch: "/cycleCountHeader/cycleCountHeader/deleteBatch", + exportXlsUrl: "/cycleCountHeader/cycleCountHeader/exportXls", + importExcelUrl: "cycleCountHeader/cycleCountHeader/importExcel", + + }, + dictOptions: { + status: [], + }, + superFieldList: [], + } + }, + created() { this.getSuperFieldList(); this.loadFrom(); + }, + computed: { + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; }, - computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, + }, + methods: { + initDictConfig() { + }, + getSuperFieldList() { + let fieldList = []; + fieldList.push({type: 'string', value: 'code', text: '盘点主表编号', dictCode: ''}) + fieldList.push({type: 'string', value: 'companyCode', text: '货主编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'countType', text: '盘点类型', dictCode: ''}) + fieldList.push({type: 'int', value: 'statusCyc', text: '盘点状态', dictCode: 'cyclecount_status'}) + fieldList.push({type: 'string', value: 'remark', text: '备注', dictCode: ''}) + fieldList.push({type: 'int', value: 'totalLocs', text: '总货位数', dictCode: ''}) + fieldList.push({type: 'int', value: 'totalItems', text: '总物料数', dictCode: ''}) + fieldList.push({type: 'string', value: 'stocktakingAs', text: '指定盘点人员', dictCode: ''}) + fieldList.push({type: 'string', value: 'stocktakingAc', text: '实际盘点人员', dictCode: ''}) + fieldList.push({type: 'int', value: 'enable', text: '是否有效', dictCode: 'valid_status'}) + fieldList.push({type: 'datetime', value: 'uploadTime', text: '回传时间'}) + fieldList.push({type: 'int', value: 'uploadStatus', text: '回传状态', dictCode: 'valid_status'}) + fieldList.push({type: 'string', value: 'closedBy', text: '关闭人', dictCode: ''}) + this.superFieldList = fieldList + }, + loadFrom() { + getCompanyList().then((res) => { + if (res.success) { + this.companyList = res.result + } + }); + getCountTypeList().then((res) => { + if (res.success) { + this.CountTypeList = res.result + } + }); }, - methods: { - initDictConfig(){ - }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'string',value:'code',text:'盘点主表编号',dictCode:''}) - fieldList.push({type:'string',value:'companyCode',text:'货主编码',dictCode:''}) - fieldList.push({type:'string',value:'countType',text:'盘点类型',dictCode:''}) - fieldList.push({type:'int',value:'statusCyc',text:'盘点状态',dictCode:'cyclecount_status'}) - fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''}) - fieldList.push({type:'int',value:'totalLocs',text:'总货位数',dictCode:''}) - fieldList.push({type:'int',value:'totalItems',text:'总物料数',dictCode:''}) - fieldList.push({type:'string',value:'stocktakingAs',text:'指定盘点人员',dictCode:''}) - fieldList.push({type:'string',value:'stocktakingAc',text:'实际盘点人员',dictCode:''}) - fieldList.push({type:'int',value:'enable',text:'是否有效',dictCode:'valid_status'}) - fieldList.push({type:'datetime',value:'uploadTime',text:'回传时间'}) - fieldList.push({type:'int',value:'uploadStatus',text:'回传状态',dictCode:'valid_status'}) - fieldList.push({type:'string',value:'closedBy',text:'关闭人',dictCode:''}) - this.superFieldList = fieldList - }, - loadFrom() { - getCompanyList().then((res) => { - if (res.success) { - this.companyList = res.result - } - }); - getCountTypeList().then((res) => { - if (res.success) { - this.CountTypeList = res.result - } - }); - }, - loadDataaa(){ - var _this = this; - _this.testaa(); - }, - solutionCompany(value) { - var actions = [] - Object.keys(this.companyList).some((key) => { - if (this.companyList[key].code == ('' + value)) { - actions.push(this.companyList[key].name) - return true - } - }) - return actions.join('') - }, + loadDataaa() { + var _this = this; + _this.testaa(); + }, + solutionCompany(value) { + var actions = [] + Object.keys(this.companyList).some((key) => { + if (this.companyList[key].code == ('' + value)) { + actions.push(this.companyList[key].name) + return true + } + }) + return actions.join('') + }, - solutionCountType(value) { - var actions = [] - Object.keys(this.CountTypeList).some((key) => { - if (this.CountTypeList[key].code == ('' + value)) { - actions.push(this.CountTypeList[key].name) - return true - } - }) - return actions.join('') - }, + solutionCountType(value) { + var actions = [] + Object.keys(this.CountTypeList).some((key) => { + if (this.CountTypeList[key].code == ('' + value)) { + actions.push(this.CountTypeList[key].name) + return true + } + }) + return actions.join('') + }, - } } +} </script> <style scoped> - @import '~@assets/less/common.less'; +@import '~@assets/less/common.less'; </style> \ No newline at end of file diff --git a/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue b/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue index 31d7e48..8f6d231 100644 --- a/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue @@ -36,7 +36,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> </span> </a-col> @@ -53,6 +53,9 @@ <a-upload v-has="'agvTask:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" + @handleSuperQuery="handleSuperQuery"/> + </a-upload> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">--> <!-- <a-menu slot="overlay">--> @@ -92,7 +95,8 @@ <span slot="action" slot-scope="text, record"> <a v-if="record.status == 1" v-has="'agvTask:executeTask'" @click="executeAgvTask(record)"> <a-button type="primary">执行</a-button><a-divider type="vertical"/></a> - <a-popconfirm v-if="record.status < 100" title="确定删除吗?" v-has="'agvTask:delete'" @confirm="() => handleDelete(record.id)"> + <a-popconfirm v-if="record.status < 100" title="确定删除吗?" v-has="'agvTask:delete'" + @confirm="() => handleDelete(record.id)"> <a><a-button type="danger">取消</a-button><a-divider type="vertical"/></a> </a-popconfirm> <a-dropdown> @@ -134,6 +138,7 @@ export default { data() { return { description: 'AGV任务管理页面', + firstLoad:0, isorter: { column: 'status', order: 'asc', @@ -226,6 +231,21 @@ export default { created() { this.getSuperFieldList(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue index 819b7b9..7154eb3 100644 --- a/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue @@ -68,7 +68,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -87,6 +87,8 @@ <!-- <a-button @click="createManyEmptyIn()" v-has="'taskHeader:manyEmptyIn'" type="primary">空托组入库</a-button>--> <!-- <a-button @click="openDemo()" type="primary">弹出demo</a-button>--> <!-- </div>--> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + <a-button v-has="'taskHeader:export'" type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button> <!-- table区域-begin --> <div> @@ -213,6 +215,7 @@ export default { description: '任务表管理页面', zoneList: [], zoneOptions:[], + firstLoad:0, isorter: { column: 'status', order: 'asc' @@ -353,6 +356,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue index 3745620..608fa7e 100644 --- a/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue @@ -69,7 +69,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -91,6 +91,8 @@ <!-- </a-upload>--> <!-- <!– 高级查询区域 –>--> <!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>--> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + <a-button v-has="'taskHeader:export'" type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button> </div> <!-- table区域-begin --> @@ -213,6 +215,7 @@ export default { description: '任务表管理页面', zoneList: [], zoneOptions:[], + firstLoad:0, isorter: { column: 'status', order: 'asc', @@ -352,6 +355,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue index 5cb1cc7..d4962e2 100644 --- a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue @@ -68,7 +68,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -88,6 +88,8 @@ <a-button v-has="'taskHeader:quickReceipt'" @click="quickReceipt()" type="primary">快速入库</a-button> <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptBox()" type="primary" >呼叫入库有货托盘</a-button> <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptEmptyBox()" type="primary" >呼叫入库空托盘</a-button> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + <a-button v-has="'taskHeader:export'" type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button> </div> <!-- table区域-begin --> @@ -222,6 +224,7 @@ export default { description: '任务表管理页面', zoneList: [], zoneOptions:[], + firstLoad:0, isorter: { column: 'status', order: 'asc' @@ -362,6 +365,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue index 3ff6c7f..b2c6516 100644 --- a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue @@ -68,7 +68,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -86,6 +86,8 @@ <a-button @click="createEmptyOut()" v-has="'taskHeader:emptyOut'" type="primary">空托出库</a-button> <a-button @click="createManyEmptyOut()" v-has="'taskHeader:manyEmptyOut'" type="primary">空托组出库</a-button> <a-button v-has="'taskHeader:callShipmentBox'" @click="callShipmentBox()" type="primary" >呼叫出库托盘</a-button> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + <a-button v-has="'taskHeader:export'" type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button> </div> <!-- table区域-begin --> @@ -162,6 +164,11 @@ <a-divider type="vertical"/></a> <a-popconfirm v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" title="确定取消任务吗?" @confirm="() => cancelTask(record)"> <a-button type="danger">取消</a-button> + <a-divider type="vertical"/> + </a-popconfirm> + + <a-popconfirm v-if="record.status < 100" v-has="'taskHeader:switchTask'" title="确定切换任务吗?" @confirm="() => switchTask(record)"> + <a-button type="danger">切换任务</a-button> </a-popconfirm> </span> @@ -192,7 +199,7 @@ import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelec import '@/assets/less/TableExpand.less' import {completeTaskByWMS, cancelTask} from '@/api/api' import {execute} from '@/api/api' -import {getZoneList, handleEmptyOut, handlePickupError, handleDoubleIn} from '@/api/api' +import {getZoneList, handleEmptyOut, handlePickupError, handleDoubleIn, switchTask} from '@/api/api' import EmptyOutTaskModal from './modules/EmptyOutTaskModal' import ManyEmptyOutTaskModal from "./modules/ManyEmptyOutTaskModal"; import CallShipmentBoxModal from "@views/system/task/modules/CallShipmentBoxModal"; @@ -212,6 +219,7 @@ export default { selectIndex: null, description: '任务表管理页面', zoneList: [], + firstLoad:0, isorter: { column: 'status', order: 'asc', @@ -352,6 +360,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; @@ -457,6 +480,19 @@ export default { this.loading = false; }) }, + switchTask(record) { + this.loading = true; + this.model = Object.assign({}, record); + switchTask(this.model.id).then((res) => { + this.loading = false; + if (res.success) { + this.$message.success(res.message); + } else { + this.$message.error(res.message); + } + this.searchQuery(); + }); + }, cancelTask(record) { this.loading = true; this.model = Object.assign({}, record); diff --git a/ant-design-vue-jeecg/src/views/system/task/TaskHeaderHistoryList.vue b/ant-design-vue-jeecg/src/views/system/task/TaskHeaderHistoryList.vue index 8cdcb04..c22c565 100644 --- a/ant-design-vue-jeecg/src/views/system/task/TaskHeaderHistoryList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/TaskHeaderHistoryList.vue @@ -80,6 +80,7 @@ </a-form> </div> <!-- 查询区域-END --> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> diff --git a/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue index 95b4d24..5398a6e 100644 --- a/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue @@ -68,7 +68,7 @@ </template> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> + <a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} @@ -85,7 +85,8 @@ <div class="table-operator"> <a-button @click="createTransfer()" v-has="'taskHeader:transfer'" type="primary">移库任务</a-button> <a-button @click="createOverStation()" v-has="'taskHeader:overStation'" type="primary">跨站任务</a-button> - <!-- <a-button type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button>--> + <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/> + <a-button v-has="'taskHeader:export'" type="primary" icon="download" @click="handleExportXls('任务表')">导出</a-button> <!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">--> <!-- <a-button type="primary" icon="import">导入</a-button>--> <!-- </a-upload>--> @@ -210,6 +211,7 @@ export default { description: '任务表管理页面', zoneList: [], zoneOptions:[], + firstLoad:0, isorter: { column: 'status', order: 'asc', @@ -353,6 +355,21 @@ export default { this.getSuperFieldList(); this.loadFrom(); }, + mounted() { + if(this.firstLoad == 0) { + this.firstLoad = 1; + return; + } + //页面没加载完,此时methods里的方法找不到,使用定时器模拟点击 + let timeSearch=setInterval(()=>{ + let eleSearch= document.getElementById("search"); + if (eleSearch!=null){ + //调用成功,清除定时器 + clearInterval(timeSearch) + eleSearch.click(); + } + },200) + }, computed: { importExcelUrl: function () { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java index bc16604..58b17b2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java @@ -153,7 +153,7 @@ public class ErpServiceImpl implements IErpService { receiptDetail.setReceiptId(receiptHeader.getId()); receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD); receiptDetail.setQty(qty); - Material material = materialService.getMaterialByCode(materialCode); + Material material = materialService.isMaterialExsit(materialCode); if (material == null) { material = new Material(); material.setCode(materialCode); @@ -287,7 +287,7 @@ public class ErpServiceImpl implements IErpService { shipmentDetail.setShipmentId(shipmentHeader.getId()); shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_BUILD); shipmentDetail.setQty(qty); - Material material = materialService.getMaterialByCode(materialCode); + Material material = materialService.isMaterialExsit(materialCode); if (material == null) { throw new JeecgBootException("出库单下发, 没有找到物料信息" + materialCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/controller/WisController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/controller/WisController.java index 081a54f..90db294 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/controller/WisController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/controller/WisController.java @@ -3,7 +3,8 @@ package org.jeecg.modules.wms.api.wms.controller; import javax.annotation.Resource; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.modules.wms.api.erp.entity.InventoryQueryParam; +import org.jeecg.modules.wms.api.erp.service.IErpService; import org.jeecg.modules.wms.api.wms.entity.WmsEntity; import org.jeecg.modules.wms.api.wms.service.WmsService; import org.jeecg.modules.wms.framework.controller.HuahengBaseController; @@ -23,8 +24,9 @@ public class WisController extends HuahengBaseController { @Resource private WmsService wmsService; + @Resource + private IErpService erpService; - @AutoLog(value = "下发WMS任务") @PostMapping("/sendWmsTask") @ResponseBody @ApiOperation("下发WMS任务") @@ -39,4 +41,29 @@ public class WisController extends HuahengBaseController { }); return result; } + + @PostMapping("/cancelWmsTask") + @ResponseBody + @ApiOperation("取消WMS任务") + @ApiLogger(apiName = "取消WMS任务", from = "WMS") + public Result cancelWmsTask(@RequestBody String taskNo) { + Result result = handleMultiProcess("cancelWmsTask", new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = wmsService.cancelTaskByUpstreamTaskNo(taskNo); + return result; + } + }); + return result; + } + + @PostMapping("/searchInventory") + @ResponseBody + @ApiOperation("查询库存") + @ApiLogger(apiName = "查询库存", from = "WMS") + public Result searchInventory(@RequestBody InventoryQueryParam inventoryQueryParam) { + Result result = erpService.searchInventory(inventoryQueryParam); + return result; + } + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java index c341d92..a213cd6 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java @@ -28,23 +28,33 @@ public interface WmsService { Result createShipmentTask(WmsEntity wmsEntity); /** - * 创建空托入库 + * 创建整出出库任务通过托盘 * @param wmsEntity * @return */ - Result createEmptyIn(WmsEntity wmsEntity); + Result createShipmentTaskByContainer(WmsEntity wmsEntity); /** - * 创建空托出库 + * 创建出库任务通过托盘 * @param wmsEntity * @return */ - Result createEmptyOut(WmsEntity wmsEntity); + Result createShipmentTaskByDetail(WmsEntity wmsEntity); /** - * 创建出库查看 + * 创建空托入库 * @param wmsEntity * @return */ - Result createCheckOut(WmsEntity wmsEntity); + Result createEmptyIn(WmsEntity wmsEntity); + + /** + * 创建空托出库 + * @param wmsEntity + * @return + */ + Result createEmptyOut(WmsEntity wmsEntity); + + Result cancelTaskByUpstreamTaskNo(String taskNo); + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java index b591eec..3bc53e9 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java @@ -1,5 +1,6 @@ package org.jeecg.modules.wms.api.wms.service; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -13,6 +14,10 @@ import org.jeecg.modules.wms.api.erp.service.IErpService; import org.jeecg.modules.wms.api.wms.entity.WmsEntity; import org.jeecg.modules.wms.api.wms.entity.WmsInventory; import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; +import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; +import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; @@ -30,12 +35,16 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail; import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService; import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService; +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + import lombok.extern.slf4j.Slf4j; /** @@ -71,6 +80,10 @@ public class WmsServiceImpl implements WmsService { private IShipmentContainerHeaderService shipmentContainerHeaderService; @Resource private IShipmentContainerDetailService shipmentContainerDetailService; + @Resource + private IInventoryDetailService inventoryDetailService; + @Resource + private IInventoryHeaderService inventoryHeaderService; @Override @Transactional(rollbackFor = Exception.class) @@ -83,12 +96,21 @@ public class WmsServiceImpl implements WmsService { result = wmsService.createReceiptTask(wmsEntity); break; case QuantityConstant.TASK_TYPE_WHOLESHIPMENT: + result = wmsService.createShipmentTaskByContainer(wmsEntity); // 指定托盘,整盘出库 +// result = wmsService.createShipmentTask(wmsEntity); // 不指定托盘出库,只指定物料和数量。适用于客户不管理每个托盘的库存 + break; case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT: - result = wmsService.createShipmentTask(wmsEntity); + result = wmsService.createShipmentTaskByDetail(wmsEntity); // 指定托盘出库 +// result = wmsService.createShipmentTask(wmsEntity); // 不指定托盘出库,只指定物料和数量。适用于客户不管理每个托盘的库存 break; case QuantityConstant.TASK_TYPE_EMPTYRECEIPT: - result = wmsService.createReceiptTask(wmsEntity); + result = wmsService.createEmptyIn(wmsEntity); + break; + case QuantityConstant.TASK_TYPE_EMPTYSHIPMENT: + result = wmsService.createEmptyOut(wmsEntity); break; + default: + throw new JeecgBootException("WMS下发入库任务失败,任务类型不匹配"); } return result; } @@ -166,6 +188,12 @@ public class WmsServiceImpl implements WmsService { if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } + TaskHeader taskHeader = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode); + if (taskHeader != null) { + if (!taskHeaderService.updateUpstreamTaskNoById(referCode, taskHeader.getId())) { + throw new JeecgBootException("WMS下发入库信息,更新入库任务失败"); + } + } return result; } @@ -248,10 +276,94 @@ public class WmsServiceImpl implements WmsService { @Override @Transactional(rollbackFor = Exception.class) + public Result createShipmentTaskByContainer(WmsEntity wmsEntity) { + String warehouseCode = wmsEntity.getWarehouseCode(); + String remark = wmsEntity.getRemark(); + String toPort = wmsEntity.getToPort(); + String containerCode = wmsEntity.getContainerCode(); + String referCode = wmsEntity.getTaskNo(); + List<WmsInventory> wmsInventoryList = wmsEntity.getWmsInventoryList(); + if (wmsInventoryList == null) { + return Result.error("WMS下发出库任务失败,库存为空"); + } + if (StringUtils.isEmpty(containerCode)) { + return Result.error("WMS下发出库任务失败,没有找到托盘" + containerCode); + } + if (StringUtils.isEmpty(toPort)) { + return Result.error("WMS下发出库任务失败,没有找到出库口" + toPort); + } + + InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); + if (inventoryHeader == null) { + return Result.error("WMS下发出库任务失败, 没有找到托盘库存" + containerCode); + } + inventoryHeader.setToPortCode(toPort); + List<InventoryHeader> inventoryHeaderList = new ArrayList<>(); + inventoryHeaderList.add(inventoryHeader); + Result result = inventoryHeaderService.shipmentInventoryHeader(inventoryHeaderList, warehouseCode); + if (!result.isSuccess()) { + throw new JeecgBootException("WMS下发出库任务失败," + result.getMessage()); + } + TaskHeader taskHeader = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode); + if (taskHeader != null) { + if (!taskHeaderService.updateUpstreamTaskNoById(referCode, taskHeader.getId())) { + throw new JeecgBootException("WMS下发出库任务失败,更新上游任务号失败"); + } + } + return Result.ok("WMS下发出库任务成功"); + } + + @Override + public Result createShipmentTaskByDetail(WmsEntity wmsEntity) { + String warehouseCode = wmsEntity.getWarehouseCode(); + String remark = wmsEntity.getRemark(); + String toPort = wmsEntity.getToPort(); + String containerCode = wmsEntity.getContainerCode(); + String referCode = wmsEntity.getTaskNo(); + List<WmsInventory> wmsInventoryList = wmsEntity.getWmsInventoryList(); + if (wmsInventoryList == null) { + return Result.error("WMS下发出库任务失败,库存为空"); + } + if (StringUtils.isEmpty(containerCode)) { + return Result.error("WMS下发出库任务失败,没有找到托盘" + containerCode); + } + if (StringUtils.isEmpty(toPort)) { + return Result.error("WMS下发出库任务失败,没有找到出库口" + toPort); + } + + List<InventoryDetail> inventoryDetailList = new ArrayList<>(); + for (WmsInventory wmsInventory : wmsInventoryList) { + String materialCode = wmsInventory.getMaterialCode(); + BigDecimal qty = wmsInventory.getQty(); + String batch = wmsInventory.getBatch(); + String inventoryStatus = wmsInventory.getInventoryStatus(); + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, materialCode).le(InventoryDetail::getQty, qty) + .eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getBatch, batch).eq(InventoryDetail::getInventoryStatus, inventoryStatus); + InventoryDetail inventoryDetail = inventoryDetailService.getOne(inventoryDetailLambdaQueryWrapper); + if (inventoryDetail == null) { + return Result.error("WMS下发出库任务失败,没有找到合适库存"); + } + inventoryDetail.setToPortCode(toPort); + inventoryDetailList.add(inventoryDetail); + } + Result result = inventoryHeaderService.shipmentInventoryDetail(inventoryDetailList, warehouseCode); + if (!result.isSuccess()) { + throw new JeecgBootException("WMS下发出库任务失败," + result.getMessage()); + } + TaskHeader taskHeader = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode); + if (taskHeader != null) { + if (!taskHeaderService.updateUpstreamTaskNoById(referCode, taskHeader.getId())) { + throw new JeecgBootException("WMS下发出库任务失败,更新上游任务号失败"); + } + } + return Result.ok("WMS下发出库任务成功"); + } + + @Override + @Transactional(rollbackFor = Exception.class) public Result createEmptyIn(WmsEntity wmsEntity) { String warehouseCode = wmsEntity.getWarehouseCode(); -// String toPort = wmsEntity.getToPort(); -// String referCode = wmsEntity.getTaskNo(); String contaienrCode = wmsEntity.getContainerCode(); Result result = taskHeaderService.createEmptyIn(contaienrCode, QuantityConstant.EMPTY_STRING, warehouseCode); @@ -263,7 +375,6 @@ public class WmsServiceImpl implements WmsService { public Result createEmptyOut(WmsEntity wmsEntity) { String warehouseCode = wmsEntity.getWarehouseCode(); String toPort = wmsEntity.getToPort(); -// String referCode = wmsEntity.getTaskNo(); String contaienrCode = wmsEntity.getContainerCode(); Result result = taskHeaderService.createEmptyOut(contaienrCode, toPort, warehouseCode); @@ -271,15 +382,8 @@ public class WmsServiceImpl implements WmsService { } @Override - @Transactional(rollbackFor = Exception.class) - public Result createCheckOut(WmsEntity wmsEntity) { - String warehouseCode = wmsEntity.getWarehouseCode(); - String toPort = wmsEntity.getToPort(); -// String referCode = wmsEntity.getTaskNo(); - String contaienrCode = wmsEntity.getContainerCode(); - - Result result = taskHeaderService.createCheckOutTask(contaienrCode, toPort, warehouseCode); - return result; + public Result cancelTaskByUpstreamTaskNo(String taskNo) { + return taskHeaderService.cancelTaskByUpstreamTaskNo(taskNo); } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/controller/ContainerController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/controller/ContainerController.java index 3bb1f5d..a05227f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/controller/ContainerController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/controller/ContainerController.java @@ -19,6 +19,7 @@ import org.jeecg.modules.wms.config.location.entity.Location; import org.jeecg.modules.wms.config.location.service.ILocationService; import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; +import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -62,8 +63,17 @@ public class ContainerController extends JeecgController<Container, IContainerSe public Result<IPage<Container>> queryPageList(Container container, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { HuahengJwtUtil.setWarehouseCode(req, container); + Integer inLocation = container.haveInLocation(); + container.setInLocation(null); QueryWrapper<Container> queryWrapper = QueryGenerator.initQueryWrapper(container, null); LambdaQueryWrapper<Container> containerLambdaQueryWrapper = queryWrapper.lambda(); + if (inLocation != null) { + if (inLocation == QuantityConstant.STATUS_LOCATION_OUT) { + containerLambdaQueryWrapper.eq(Container::getLocationCode, QuantityConstant.EMPTY_STRING); + } else if (inLocation == QuantityConstant.STATUS_LOCATION_IN) { + containerLambdaQueryWrapper.ne(Container::getLocationCode, QuantityConstant.EMPTY_STRING); + } + } containerLambdaQueryWrapper.orderByAsc(Container::getId); Page<Container> page = new Page<Container>(pageNo, pageSize); IPage<Container> pageList = containerService.page(page, containerLambdaQueryWrapper); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java index b2c3e40..da1c6fc 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/entity/Container.java @@ -1,20 +1,21 @@ package org.jeecg.modules.wms.config.container.entity; import java.io.Serializable; -import java.io.UnsupportedEncodingException; import java.util.Date; -import java.math.BigDecimal; + +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.utils.StringUtils; +import org.jeecg.utils.constant.QuantityConstant; +import org.jeecgframework.poi.excel.annotation.Excel; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -69,16 +70,21 @@ public class Container implements Serializable { @Dict(dicCode = "fill_status") @ApiModelProperty(value = "填充状态") private String fillStatus; + @ApiModelProperty(value = "任务总数") + private Integer taskTimes; + @ApiModelProperty(value = "移库任务数") + private Integer moveTaskTimes; + @ApiModelProperty(value = "位置") + @TableField(exist = false) + @Dict(dicCode = "inLocation") + private Integer inLocation; /** 备用字段1 */ - @Excel(name = "备用字段1", width = 15) @ApiModelProperty(value = "备用字段1") private String userdef1; /** 备用字段2 */ - @Excel(name = "备用字段2", width = 15) @ApiModelProperty(value = "备用字段2") private String userdef2; /** 备用字段3 */ - @Excel(name = "备用字段3", width = 15) @ApiModelProperty(value = "备用字段3") private String userdef3; /** 创建人 */ @@ -93,4 +99,20 @@ public class Container implements Serializable { /** 更新日期 */ @ApiModelProperty(value = "更新日期") private Date updateTime; + + public Integer getInLocation() { + if (StringUtils.isNotEmpty(locationCode)) { + return QuantityConstant.STATUS_LOCATION_IN; + } else { + return QuantityConstant.STATUS_LOCATION_OUT; + } + } + + public void setInLocation(Integer inLocation) { + this.inLocation = inLocation; + } + + public Integer haveInLocation() { + return this.inLocation; + } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java index 0bd6629..22dee38 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java @@ -77,6 +77,9 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container @Override public Container getContainerByCode(String containCode, String warehouseCode) { + if (StringUtils.isEmpty(containCode)) { + throw new JeecgBootException("容器编码为空"); + } if (StringUtils.havaLowerCase(containCode)) { throw new JeecgBootException("容器不能有小字母" + containCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java index 9e08049..de58ceb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/entity/Material.java @@ -1,19 +1,19 @@ package org.jeecg.modules.wms.config.material.entity; import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; import java.math.BigDecimal; +import java.util.Date; + +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -63,6 +63,14 @@ public class Material implements Serializable { @Excel(name = "类别", width = 15) @ApiModelProperty(value = "类别") private String type; + /** 入库数 */ + @Excel(name = "入库数", width = 15) + @ApiModelProperty(value = "入库数") + private BigDecimal receiptQty; + /** 任务数 */ + @Excel(name = "任务数", width = 15) + @ApiModelProperty(value = "任务数") + private BigDecimal taskQty; /** ABC分类 */ @Excel(name = "ABC分类", width = 15) @ApiModelProperty(value = "ABC分类") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/IMaterialService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/IMaterialService.java index ca64524..42b7219 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/IMaterialService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/IMaterialService.java @@ -1,10 +1,10 @@ package org.jeecg.modules.wms.config.material.service; -import com.baomidou.mybatisplus.extension.service.IService; -import org.jeecg.common.api.vo.Result; +import java.util.List; + import org.jeecg.modules.wms.config.material.entity.Material; -import java.util.List; +import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: 物料管理 @@ -16,5 +16,7 @@ public interface IMaterialService extends IService<Material> { public Material getMaterialByCode(String code); + public Material isMaterialExsit(String code); + public List<Material> searchMaterialByCode(String code); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/impl/MaterialServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/impl/MaterialServiceImpl.java index 3161ad3..2ec1174 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/impl/MaterialServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/material/service/impl/MaterialServiceImpl.java @@ -34,6 +34,17 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i } @Override + public Material isMaterialExsit(String code) { + if (StringUtils.isEmpty(code)) { + return null; + } + LambdaQueryWrapper<Material> materialLambdaQueryWrapper = Wrappers.lambdaQuery(); + materialLambdaQueryWrapper.eq(Material::getCode, code); + Material material = this.getOne(materialLambdaQueryWrapper); + return material; + } + + @Override public List<Material> searchMaterialByCode(String code) { LambdaQueryWrapper<Material> materialLambdaQueryWrapper = Wrappers.lambdaQuery(); materialLambdaQueryWrapper.like(StringUtils.isNotEmpty(code), Material::getCode, code); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java index 11c7d52..cf188e8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java @@ -130,6 +130,9 @@ public class InventoryDetail implements Serializable { @Dict(dicCode = "inventory_enable") @ApiModelProperty(value = "是否可用") private Integer enable; + /** 巷道 */ + @ApiModelProperty(value = "巷道") + private Integer roadWay; /** 备用字段1 */ @Excel(name = "备用字段1", width = 15) @ApiModelProperty(value = "备用字段1") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java index 4daf9c3..9023300 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java @@ -78,6 +78,9 @@ public class InventoryHeader implements Serializable { @TableField(exist = false) @ApiModelProperty(value = "物料编码") private String materialCode; + /** 巷道 */ + @ApiModelProperty(value = "巷道") + private Integer roadWay; /** 备用字段1 */ @Excel(name = "备用字段1", width = 15) @ApiModelProperty(value = "备用字段1") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java index 572289d..67fc03b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java @@ -29,6 +29,10 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { List<InventoryDetail> getInventoryDetailListByMaterialCode(String materialCode, String warehouseCode); + List<InventoryDetail> getInventoryDetailListByMaterialCodeToShipment(String materialCode, BigDecimal qty, String warehouseCode); + + InventoryDetail getInventoryDetailByMaterialCodeToShipment(String containerCode, String materialCode, BigDecimal qty, String warehouseCode); + // 求一种物料的库存之和(总数) BigDecimal getInventorySumQty(InventoryDetail inventoryDetail); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java index 0556a94..72fc5c8 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java @@ -34,7 +34,7 @@ public interface IInventoryHeaderService extends IService<InventoryHeader> { boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id); - boolean updateInventoryContainerLocationZoneById(String containerCode, String locationCode, String zoneCode, Integer id); + boolean updateInventoryContainerLocationZoneById(String containerCode, String locationCode, String zoneCode, Integer roadWay, Integer id); boolean updateContainerStatusById(String containerStatus, Integer id); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java index 11d84e8..8baa3ef 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java @@ -98,6 +98,30 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe } @Override + public List<InventoryDetail> getInventoryDetailListByMaterialCodeToShipment(String materialCode, BigDecimal qty, String warehouseCode) { + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, materialCode).ge(InventoryDetail::getQty, qty) + .eq(InventoryDetail::getContainerStatus, QuantityConstant.STATUS_CONTAINER_EMPTY).eq(InventoryDetail::getInventoryStatus, QuantityConstant.QUALITY_GOOD) + .eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getEnable, QuantityConstant.INVENTORY_DETAIL_STATUS_ENABLE); + List<InventoryDetail> inventoryDetailList = list(inventoryDetailLambdaQueryWrapper); + return inventoryDetailList; + } + + @Override + public InventoryDetail getInventoryDetailByMaterialCodeToShipment(String containerCode, String materialCode, BigDecimal qty, String warehouseCode) { + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, materialCode).ge(InventoryDetail::getQty, qty) + .eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getContainerStatus, QuantityConstant.STATUS_CONTAINER_EMPTY) + .eq(InventoryDetail::getInventoryStatus, QuantityConstant.QUALITY_GOOD).eq(InventoryDetail::getWarehouseCode, warehouseCode) + .eq(InventoryDetail::getEnable, QuantityConstant.INVENTORY_DETAIL_STATUS_ENABLE); + List<InventoryDetail> inventoryDetailList = list(inventoryDetailLambdaQueryWrapper); + if (CollectionUtils.isEmpty(inventoryDetailList)) { + return null; + } + return inventoryDetailList.get(0); + } + + @Override public BigDecimal getInventorySumQty(InventoryDetail inventoryDetail) { LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryStatus, inventoryDetail.getInventoryStatus()) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java index a954f5c..410043d 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java @@ -149,12 +149,13 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe } @Override - public boolean updateInventoryContainerLocationZoneById(String containerCode, String locationCode, String zoneCode, Integer id) { + public boolean updateInventoryContainerLocationZoneById(String containerCode, String locationCode, String zoneCode, Integer roadWay, Integer id) { InventoryHeader inventoryHeader = new InventoryHeader(); inventoryHeader.setId(id); inventoryHeader.setContainerCode(containerCode); inventoryHeader.setLocationCode(locationCode); inventoryHeader.setZoneCode(zoneCode); + inventoryHeader.setRoadWay(roadWay); return inventoryHeaderService.updateById(inventoryHeader); } @@ -455,7 +456,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe return false; } String zoneCode = toLocation.getZoneCode(); - boolean success = inventoryHeaderService.updateInventoryContainerLocationZoneById(containerCode, locationCode, zoneCode, inventoryHeader.getId()); + boolean success = + inventoryHeaderService.updateInventoryContainerLocationZoneById(containerCode, locationCode, zoneCode, toLocation.getRoadWay(), inventoryHeader.getId()); if (!success) { return success; } @@ -466,6 +468,7 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe inventoryDetail1.setContainerCode(containerCode); inventoryDetail1.setLocationCode(locationCode); inventoryDetail1.setZoneCode(zoneCode); + inventoryDetail1.setRoadWay(toLocation.getRoadWay()); updateInventoryDetailList.add(inventoryDetail1); } success = inventoryDetailService.updateBatchById(updateInventoryDetailList); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java new file mode 100644 index 0000000..114aff8 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCheckoutTask.java @@ -0,0 +1,80 @@ +package org.jeecg.modules.wms.monitor.job; + +import java.util.List; + +import javax.annotation.Resource; + +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.wms.config.container.entity.Container; +import org.jeecg.modules.wms.config.container.service.IContainerService; +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; +import org.jeecg.modules.wms.monitor.job.dto.AutoCheckOutDto; +import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; +import org.jeecg.utils.StringUtils; +import org.jeecg.utils.constant.QuantityConstant; +import org.quartz.*; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import lombok.extern.slf4j.Slf4j; + +/** + * 定时任务 + * @author 游杰 + */ + +@Slf4j +@PersistJobDataAfterExecution +@DisallowConcurrentExecution +public class AutoCheckoutTask implements Job { + + @Resource + private ITaskHeaderService taskHeaderService; + + @Resource + private IHuahengMultiHandlerService huahengMultiHandlerService; + + @Resource + private IContainerService containerService; + @Resource + private IParameterConfigurationService parameterConfigurationService; + + private String parameter; + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + + log.info(String.format(" AutoCheckoutTask 执行任务! 时间:" + DateUtils.getTimestamp())); + List<AutoCheckOutDto> autoCheckOutDtoList = JSON.parseArray(this.parameter, AutoCheckOutDto.class); + String value = parameterConfigurationService.getValueByCode(QuantityConstant.CONTAINER_MOVE_QTY); + int containerMoveQty = 5; + if (StringUtils.isNotEmpty(value)) { + containerMoveQty = Integer.parseInt(value); + } + LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); + containerLambdaQueryWrapper.ge(Container::getMoveTaskTimes, containerMoveQty); + List<Container> containerList = containerService.list(containerLambdaQueryWrapper); + for (Container container : containerList) { + String zoneCode = container.getZoneCode(); + String warehouseCode = container.getWarehouseCode(); + String toPort = null; + if (StringUtils.isEmpty(zoneCode)) { + toPort = autoCheckOutDtoList.get(0).getToPort(); + } else { + for (AutoCheckOutDto autoCheckOutDto : autoCheckOutDtoList) { + if (zoneCode.equals(autoCheckOutDto.getZoneCode())) { + toPort = autoCheckOutDto.getToPort(); + } + } + } + taskHeaderService.createCheckOutTask(container.getCode(), toPort, warehouseCode); + } + } +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java new file mode 100644 index 0000000..21bf916 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/dto/AutoCheckOutDto.java @@ -0,0 +1,10 @@ +package org.jeecg.modules.wms.monitor.job.dto; + +import lombok.Data; + +@Data +public class AutoCheckOutDto { + + private String zoneCode; + private String toPort; +} diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/entity/ReceiptDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/entity/ReceiptDetail.java index fa0ba70..10a549d 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/entity/ReceiptDetail.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/entity/ReceiptDetail.java @@ -71,6 +71,10 @@ public class ReceiptDetail implements Serializable { @Excel(name = "组盘数量", width = 15) @ApiModelProperty(value = "组盘数量") private java.math.BigDecimal taskQty; + /** 入库数量 */ + @Excel(name = "入库数量", width = 15) + @ApiModelProperty(value = "入库数量") + private java.math.BigDecimal receiptQty; /** 库存状态 */ @Excel(name = "库存状态", width = 15) @Dict(dicCode = "inventory_status") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java index 03f33a3..c8ff986 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java @@ -65,6 +65,14 @@ public interface IShipmentContainerHeaderService extends IService<ShipmentContai boolean updateTaskTypeById(int taskType, int id); /** + * 更新去向位置 + * @param toPort + * @param id + * @return + */ + boolean updateToPortById(String toPort, int id); + + /** * 更新出库配盘状态 * @param status * @param id diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java index 9f134c4..9339429 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java @@ -217,7 +217,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont } int status = shipmentContainerHeader.getStatus(); if (status >= QuantityConstant.SHIPMENT_CONTAINER_TASK) { - return Result.error("取消出库配盘失败,已经生成出库任务"); + return Result.error("取消出库配盘失败,出库配盘状态是生成出库任务"); } List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByHeaderId(id); for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetailList) { @@ -264,6 +264,15 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont } @Override + public boolean updateToPortById(String toPort, int id) { + ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader(); + shipmentContainerHeader.setToPort(toPort); + shipmentContainerHeader.setId(id); + boolean success = this.updateById(shipmentContainerHeader); + return success; + } + + @Override public boolean updateStatusById(int status, int id) { ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader(); shipmentContainerHeader.setStatus(status); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java index 18b8bb7..c5a8ea5 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java @@ -376,6 +376,31 @@ public class TaskHeaderController extends HuahengBaseController { } /** + * 任务切换 + */ + @AutoLog(value = "任务表-任务切换") + @ApiOperation(value = "任务表-任务切换", notes = "任务表-任务切换") + @PostMapping("/switchTask") + @ResponseBody + @RequiresPermissions("taskHeader:switchTask") + public Result switchTask(@RequestParam(name = "ids", required = true) String ids) { + if (StringUtils.isEmpty(ids)) { + return Result.error("taskId不能为空"); + } + Result result = null; + Integer[] idList = ConvertUtils.toIntArray(ids); + for (int taskId : idList) { + result = handleMultiProcess("switchTask", new MultiProcessListener() { + @Override + public Result<?> doProcess() { + return taskHeaderService.switchTask(taskId); + } + }); + } + return result; + } + + /** * 执行任务 */ @AutoLog(value = "任务表-执行任务") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java index fe401de..f98ec02 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java @@ -36,6 +36,10 @@ public class TaskHeader implements Serializable { @Excel(name = "前置任务号", width = 15) @ApiModelProperty(value = "前置任务号") private Integer preTaskNo; + /** 上游任务号 */ + @Excel(name = "上游任务号", width = 15) + @ApiModelProperty(value = "上游任务号") + private String upstreamTaskNo; /** 入库组盘ID */ @Excel(name = "入库组盘ID", width = 15) @ApiModelProperty(value = "入库组盘ID") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java index d452ff9..51801d2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java @@ -36,6 +36,8 @@ public interface ITaskHeaderService extends IService<TaskHeader> { */ boolean haveUncompleteTaskInNear(Location location); + boolean updateUpstreamTaskNoById(String upstreamTaskNo, int id); + /** * 通过AGV任务ID,获取任务信息 * @param agvTaskId @@ -107,6 +109,13 @@ public interface ITaskHeaderService extends IService<TaskHeader> { Result cancelTask(Integer taskId); /** + * 取消WMS任务 + * @param taskId + * @return + */ + Result cancelTaskByUpstreamTaskNo(String taskId); + + /** * 下发任务给WCS * @param taskId * @return @@ -374,4 +383,12 @@ public interface ITaskHeaderService extends IService<TaskHeader> { * @return */ Result quickReceipt(QucikReceiptEntity qucikReceiptEntity); + + /** + * 切换任务 + * @param id + * @return + */ + Result switchTask(int id); + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index 6a06e1a..20b657b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -2,10 +2,7 @@ package org.jeecg.modules.wms.task.taskHeader.service.impl; import java.io.Serializable; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -43,6 +40,8 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService; import org.jeecg.modules.wms.receipt.receiving.domain.Receive; import org.jeecg.modules.wms.receipt.receiving.service.IReceiveService; +import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel; +import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService; import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail; import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader; import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService; @@ -62,6 +61,7 @@ import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper; import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService; +import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; @@ -69,8 +69,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; +import com.aliyun.oss.ServiceException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -146,6 +148,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea private IReceiveService receiveService; @Resource private ITaskHeaderHistoryService taskHeaderHistoryService; + @Resource + private IShipmentCombinationService shipmentCombinationService; @Override @Transactional @@ -182,6 +186,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } @Override + public boolean updateUpstreamTaskNoById(String upstreamTaskNo, int id) { + TaskHeader taskHeader = new TaskHeader(); + taskHeader.setUpstreamTaskNo(upstreamTaskNo); + taskHeader.setId(id); + return taskHeaderService.updateById(taskHeader); + } + + @Override public TaskHeader getTaskHeaderByAgvTaskId(int agvTaskId) { LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper.eq(TaskHeader::getAgvTaskId, agvTaskId); @@ -911,6 +923,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } @Override + public Result cancelTaskByUpstreamTaskNo(String upstreamTaskNo) { + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + taskHeaderLambdaQueryWrapper.eq(TaskHeader::getUpstreamTaskNo, upstreamTaskNo); + TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper); + if (taskHeader == null) { + return Result.error("取消任务失败,上游任务号" + upstreamTaskNo); + } + Result result = taskHeaderService.cancelTask(taskHeader.getId()); + return result; + } + + @Override @Transactional public Result sendTaskToWcs(Integer taskId) { TaskHeader taskHeader = taskHeaderService.getById(taskId); @@ -1105,11 +1129,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea taskDetail.setReceiptCode(receiptDetail.getReceiptCode()); BigDecimal taskQty = receiptDetail.getTaskQty(); BigDecimal qty = receiptDetail.getQty(); + BigDecimal receiptDetailReceiptQty = receiptDetail.getReceiptQty(); + receiptDetailReceiptQty = receiptDetailReceiptQty.add(taskDetail.getQty()); int receiptId = receiptDetail.getReceiptId(); ReceiptDetail receiptDetail1 = new ReceiptDetail(); receiptDetail1.setId(receiptDetail.getId()); receiptDetail1.setReceiptId(receiptId); - if (taskQty.compareTo(qty) >= 0) { + receiptDetail1.setReceiptQty(receiptDetailReceiptQty); + if (receiptDetailReceiptQty.compareTo(qty) >= 0) { receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); } else { receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_SHELF); @@ -1781,6 +1808,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("任务类型" + taskType + "完成任务时,更新库存信息失败"); } + LambdaUpdateWrapper<Container> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(Container::getCode, containerCode); + HuahengJwtUtil.calculateQuantity(lambdaUpdateWrapper, "task_times", BigDecimal.ONE); + if (taskType == QuantityConstant.TASK_TYPE_TRANSFER) { + HuahengJwtUtil.calculateQuantity(lambdaUpdateWrapper, "move_task_times", BigDecimal.ONE); + } else { + lambdaUpdateWrapper.setSql(true, "move_task_times = 0"); + } + if (!containerService.update(lambdaUpdateWrapper)) { + throw new ServiceException("任务类型" + taskType + "更新容器失败"); + } return Result.OK("任务类型" + taskType + "完成任务成功"); } @@ -1897,6 +1935,120 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.OK("快速入库成功"); } + @Override + @Transactional(rollbackFor = Exception.class) + public Result switchTask(int id) { + TaskHeader taskHeader = taskHeaderService.getById(id); + if (taskHeader == null) { + return Result.error("切换任务失败,没有找到任务:" + id); + } + int taskType = taskHeader.getTaskType(); + int status = taskHeader.getStatus(); + if (taskType != QuantityConstant.TASK_TYPE_SORTINGSHIPMENT && taskType != QuantityConstant.TASK_TYPE_WHOLESHIPMENT) { + return Result.error("切换任务失败, 只有出库任务才可以做任务切换:" + id); + } + if (status > QuantityConstant.TASK_STATUS_RELEASE) { + return Result.error("切换任务失败, 任务状态不满足切换任务,目前状态为" + status); + } + List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(id); + if (taskDetailList.size() == 0) { + return Result.error("切换任务失败, 没有找到任务详情:" + id); + } + if (taskDetailList.size() > 3) { + return Result.error("切换任务失败, 没有找到任务详情:" + id); + } + String warehouseCode = taskHeader.getWarehouseCode(); + String fromLocationCode = taskHeader.getFromLocationCode(); + String toPortCode = taskHeader.getToPortCode(); + Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); + if (fromLocation == null) { + return Result.error("切换任务失败, 没有找到起始库位:" + fromLocationCode); + } + Integer roadWay = fromLocation.getRoadWay(); + List<String> allContainerCodeList = new ArrayList<>(); + List<ShipmentDetail> shipmentDetailList = new ArrayList<>(); + List<BigDecimal> shipmentQtyList = new ArrayList<>(); + for (TaskDetail taskDetail : taskDetailList) { + String materialCode = taskDetail.getMaterialCode(); + BigDecimal qty = taskDetail.getQty(); + int shipmentDetailId = taskDetail.getShipmentDetailId(); + ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentDetailId); + if (shipmentDetail == null) { + return Result.error("切换任务失败, 没有找到出库单详情:" + shipmentDetailId); + } + shipmentDetailList.add(shipmentDetail); + shipmentQtyList.add(qty); + List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByMaterialCodeToShipment(materialCode, qty, warehouseCode); + List<InventoryDetail> removeInventoryDetailList = new ArrayList<>(); + for (InventoryDetail inventoryDetail : inventoryDetailList) { + if (roadWay.intValue() == inventoryDetail.getRoadWay().intValue()) { + removeInventoryDetailList.add(inventoryDetail); + } + } + inventoryDetailList.removeAll(removeInventoryDetailList); + if (CollectionUtils.isEmpty(inventoryDetailList)) { + return Result.error("切换任务失败, 没有匹配的库存物料:" + materialCode); + } + // 去重 + List<String> containerCodeList = inventoryDetailList.stream().map(InventoryDetail::getContainerCode).collect(Collectors.toList()); + containerCodeList = containerCodeList.stream().distinct().collect(Collectors.toList()); + allContainerCodeList.addAll(containerCodeList); + } + String switchContainerCode = null; + for (String containerCode1 : allContainerCodeList) { + int frequency = Collections.frequency(allContainerCodeList, containerCode1); + if (frequency == taskDetailList.size()) { + switchContainerCode = containerCode1; + break; + } + } + if (StringUtils.isEmpty(switchContainerCode)) { + return Result.error("切换任务失败, 其它巷道没有匹配的库存"); + } + Result result = taskHeaderService.cancelTask(id); + if (!result.isSuccess()) { + throw new JeecgBootException("切换任务失败," + result.getMessage()); + } + for (int i = 0; i < shipmentDetailList.size(); i++) { + int shipmentDetailId = shipmentDetailList.get(i).getId(); + ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentDetailId); + BigDecimal shipQty = shipmentQtyList.get(i); + InventoryDetail inventoryDetail = + inventoryDetailService.getInventoryDetailByMaterialCodeToShipment(switchContainerCode, shipmentDetail.getMaterialCode(), shipQty, warehouseCode); + CombinationModel combinationModel = new CombinationModel(); + combinationModel.setShipmentDetail(shipmentDetail); + combinationModel.setInventoryDetail(inventoryDetail); + combinationModel.setShipQty(shipQty); + result = shipmentCombinationService.combination(combinationModel); + if (!result.isSuccess()) { + throw new JeecgBootException("切换任务失败," + result.getMessage()); + } + } + ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getUnCompleteShipmentContainerByCode(switchContainerCode, warehouseCode); + if (shipmentContainerHeader == null) { + throw new JeecgBootException("切换任务失败, 出库配盘为空"); + } + result = shipmentCombinationService.createShipmentTask(shipmentContainerHeader, warehouseCode, 0, 0, 0); + if (!result.isSuccess()) { + throw new JeecgBootException("切换任务失败," + result.getMessage()); + } + TaskHeader taskHeader1 = taskHeaderService.getUnCompleteTaskByContainerCode(switchContainerCode, warehouseCode); + if (taskHeader1 == null) { + throw new JeecgBootException("切换任务失败, 没有任务"); + } + if (taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) { + int taskHeader1Id = taskHeader1.getId(); + taskHeader1 = new TaskHeader(); + taskHeader1.setId(taskHeader1Id); + taskHeader1.setTaskType(taskType); + taskHeader1.setToPortCode(toPortCode); + if (!taskHeaderService.updateById(taskHeader1)) { + throw new JeecgBootException("切换任务失败, 更新任务状态失败"); + } + } + return Result.ok("切换任务成功"); + } + /** * 完成空托盘入库任务 * @param taskHeader 任务 diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java index b7c4214..3d91398 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java @@ -302,7 +302,11 @@ public class HuahengJwtUtil { public static <T> void calculateQuantity(LambdaUpdateWrapper<T> lambdaUpdateWrapper, T t, String fieldName, BigDecimal quantity, Boolean geZero) { String sqlFieldName = StrUtil.toUnderlineCase(fieldName); - lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + " + " + quantity); + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + quantity); + } else { + lambdaUpdateWrapper.setSql(quantity != null, sqlFieldName + " = " + sqlFieldName + " + " + quantity); + } if (t != null) { // Object fieldValue = ReflectUtil.getFieldValue(t, fieldName); // lambdaUpdateWrapper.apply(fieldValue != null, sqlFieldName + " = {0}", fieldValue); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java index 9975328..6c3c77e 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java @@ -485,6 +485,7 @@ public class QuantityConstant { public static final String DOUBLE_FORK_RESERVE_LOCATION = "doubleForkReserveLocation"; public static final String DOUBLE_FORK_SEARCH_LOCATION = "doubleForkSearchLocation"; public static final String MAX_ROADWAY_RECEIPT = "maxRoadWayReceipt"; + public static final String CONTAINER_MOVE_QTY = "containerMoveQty"; public static final String WAREHOUSING_WEIGHING = "warehousingWeighing"; public static final String EXCEPTION_TO_CACHE = "exceptionToCache"; public static final String CONTAINER_SPEC = "containerSpec"; @@ -593,6 +594,11 @@ public class QuantityConstant { /* 不可用 */ public static final int STATUS_DISABLE = 0; + /* 在库外 */ + public static final int STATUS_LOCATION_OUT = 0; + /* 在库内 */ + public static final int STATUS_LOCATION_IN = 1; + /* 可用 */ public static final int INVENTORY_DETAIL_STATUS_ENABLE = 0; /* 受控 */ diff --git a/实施文档/Navicat15.rar b/实施文档/Navicat15.rar new file mode 100644 index 0000000..8782f24 --- /dev/null +++ b/实施文档/Navicat15.rar diff --git a/实施文档/linux服务器配置.docx b/实施文档/linux服务器配置.docx new file mode 100644 index 0000000..02aa7a0 --- /dev/null +++ b/实施文档/linux服务器配置.docx diff --git a/实施文档/windows服务设置.zip b/实施文档/windows服务设置.zip new file mode 100644 index 0000000..92e1ec7 --- /dev/null +++ b/实施文档/windows服务设置.zip diff --git a/实施文档/华恒WMS项目实施要求2.2.docx b/实施文档/华恒WMS项目实施要求2.2.docx new file mode 100644 index 0000000..7190422 --- /dev/null +++ b/实施文档/华恒WMS项目实施要求2.2.docx diff --git a/实施文档/参加培训人员签到表.docx b/实施文档/参加培训人员签到表.docx new file mode 100644 index 0000000..e78d54c --- /dev/null +++ b/实施文档/参加培训人员签到表.docx diff --git a/验收文档模板/APTIV接口协议V2.5.pdf b/验收文档模板/APTIV接口协议V2.5.pdf new file mode 100644 index 0000000..ac46517 --- /dev/null +++ b/验收文档模板/APTIV接口协议V2.5.pdf diff --git a/验收文档模板/IP地址/安波福软件IP表.xlsx b/验收文档模板/IP地址/安波福软件IP表.xlsx new file mode 100644 index 0000000..a00db8f --- /dev/null +++ b/验收文档模板/IP地址/安波福软件IP表.xlsx diff --git a/验收文档模板/WCS操作说明书/上海安波福导线桶仓使用说明书1.0 .docx b/验收文档模板/WCS操作说明书/上海安波福导线桶仓使用说明书1.0 .docx new file mode 100644 index 0000000..8e166d3 --- /dev/null +++ b/验收文档模板/WCS操作说明书/上海安波福导线桶仓使用说明书1.0 .docx diff --git a/验收文档模板/WCS操作说明书/上海安波福成品仓使用说明书1.0.docx b/验收文档模板/WCS操作说明书/上海安波福成品仓使用说明书1.0.docx new file mode 100644 index 0000000..2a05f4f --- /dev/null +++ b/验收文档模板/WCS操作说明书/上海安波福成品仓使用说明书1.0.docx diff --git a/验收文档模板/WMS操作说明书/上海安波福WMS网页端操作说明书v1.1.doc b/验收文档模板/WMS操作说明书/上海安波福WMS网页端操作说明书v1.1.doc new file mode 100644 index 0000000..c5664fc --- /dev/null +++ b/验收文档模板/WMS操作说明书/上海安波福WMS网页端操作说明书v1.1.doc diff --git a/验收文档模板/WMS操作说明书/上海安波福手持端系统说明书v1.0.docx b/验收文档模板/WMS操作说明书/上海安波福手持端系统说明书v1.0.docx new file mode 100644 index 0000000..0331175 --- /dev/null +++ b/验收文档模板/WMS操作说明书/上海安波福手持端系统说明书v1.0.docx diff --git a/验收文档模板/上海安波福程序部署.xls b/验收文档模板/上海安波福程序部署.xls new file mode 100644 index 0000000..72585f7 --- /dev/null +++ b/验收文档模板/上海安波福程序部署.xls diff --git a/验收文档模板/会议纪要/Raw Material Auto Warehouse digization solution.pdf b/验收文档模板/会议纪要/Raw Material Auto Warehouse digization solution.pdf new file mode 100644 index 0000000..85581f6 --- /dev/null +++ b/验收文档模板/会议纪要/Raw Material Auto Warehouse digization solution.pdf diff --git a/验收文档模板/会议纪要/Taiyun Plant Auto Warehouse SOW(2)(1).docx b/验收文档模板/会议纪要/Taiyun Plant Auto Warehouse SOW(2)(1).docx new file mode 100644 index 0000000..872126b --- /dev/null +++ b/验收文档模板/会议纪要/Taiyun Plant Auto Warehouse SOW(2)(1).docx diff --git a/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.05.doc b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.05.doc new file mode 100644 index 0000000..9c2c250 --- /dev/null +++ b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.05.doc diff --git a/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.06.doc b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.06.doc new file mode 100644 index 0000000..4bdc53b --- /dev/null +++ b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.06.doc diff --git a/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.12.doc b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.12.doc new file mode 100644 index 0000000..66f81ff --- /dev/null +++ b/验收文档模板/会议纪要/安波福内部方案讨论会议纪要23.01.12.doc diff --git a/验收文档模板/开发计划/安波福 软件调试计划 .xls b/验收文档模板/开发计划/安波福 软件调试计划 .xls new file mode 100644 index 0000000..8962187 --- /dev/null +++ b/验收文档模板/开发计划/安波福 软件调试计划 .xls diff --git a/验收文档模板/开发计划/软件开发计划.xls b/验收文档模板/开发计划/软件开发计划.xls new file mode 100644 index 0000000..90e75c5 --- /dev/null +++ b/验收文档模板/开发计划/软件开发计划.xls diff --git a/验收文档模板/接口文档/IIH_WMS_WebApi技术文档17.docx b/验收文档模板/接口文档/IIH_WMS_WebApi技术文档17.docx new file mode 100644 index 0000000..ccff181 --- /dev/null +++ b/验收文档模板/接口文档/IIH_WMS_WebApi技术文档17.docx diff --git a/验收文档模板/接口文档/WMS_WebApi技术文档V1.2 (1).docx b/验收文档模板/接口文档/WMS_WebApi技术文档V1.2 (1).docx new file mode 100644 index 0000000..5474811 --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi技术文档V1.2 (1).docx diff --git a/验收文档模板/接口文档/WMS_WebApi技术文档V1.3.docx b/验收文档模板/接口文档/WMS_WebApi技术文档V1.3.docx new file mode 100644 index 0000000..2e6a78e --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi技术文档V1.3.docx diff --git a/验收文档模板/接口文档/WMS_WebApi技术文档V1.4.docx b/验收文档模板/接口文档/WMS_WebApi技术文档V1.4.docx new file mode 100644 index 0000000..5ab0330 --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi技术文档V1.4.docx diff --git a/验收文档模板/接口文档/WMS_WebApi技术文档V1.5.docx b/验收文档模板/接口文档/WMS_WebApi技术文档V1.5.docx new file mode 100644 index 0000000..1ca8ef8 --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi技术文档V1.5.docx diff --git a/验收文档模板/接口文档/WMS_WebApi技术文档V1.6.docx b/验收文档模板/接口文档/WMS_WebApi技术文档V1.6.docx new file mode 100644 index 0000000..685adb5 --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi技术文档V1.6.docx diff --git a/验收文档模板/接口文档/WMS_WebApi接口文档1.1.docx b/验收文档模板/接口文档/WMS_WebApi接口文档1.1.docx new file mode 100644 index 0000000..9298cb4 --- /dev/null +++ b/验收文档模板/接口文档/WMS_WebApi接口文档1.1.docx diff --git a/验收文档模板/程序部署清单/上海安波福--程序部署说明V1.0.docx b/验收文档模板/程序部署清单/上海安波福--程序部署说明V1.0.docx new file mode 100644 index 0000000..61f6ef4 --- /dev/null +++ b/验收文档模板/程序部署清单/上海安波福--程序部署说明V1.0.docx diff --git a/验收文档模板/网络拓扑图/上海安波福网络拓扑图.png b/验收文档模板/网络拓扑图/上海安波福网络拓扑图.png new file mode 100644 index 0000000..074f05e --- /dev/null +++ b/验收文档模板/网络拓扑图/上海安波福网络拓扑图.png diff --git a/验收文档模板/网络拓扑图/安波福成品仓导线仓拓扑图.drawio b/验收文档模板/网络拓扑图/安波福成品仓导线仓拓扑图.drawio new file mode 100644 index 0000000..c7c3a49 --- /dev/null +++ b/验收文档模板/网络拓扑图/安波福成品仓导线仓拓扑图.drawio @@ -0,0 +1,81 @@ +<mxfile host="Electron" modified="2023-07-07T03:08:54.978Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.1 Chrome/112.0.5615.204 Electron/24.6.1 Safari/537.36" etag="-QGorfQODYb77niynJA8" version="21.6.1" type="device"> + <diagram name="第 1 页" id="uBLssKjZSJGIRTdHroud"> + <mxGraphModel dx="1434" dy="2005" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-56" value="" style="whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxGeometry x="590" y="250" width="380" height="190" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-55" value="" style="whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxGeometry x="620" y="90" width="180" height="90" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-54" value="" style="whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"> + <mxGeometry x="330" y="206.5" width="216" height="235" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-52" value="" style="whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"> + <mxGeometry x="20" y="80" width="300" height="200" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.514;entryY=-0.05;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-10" target="VyDNnv1cJVr2Vyl7Voic-19"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=-0.017;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-10" target="VyDNnv1cJVr2Vyl7Voic-18"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-10" target="VyDNnv1cJVr2Vyl7Voic-31"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.588;entryY=-0.039;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-10" target="VyDNnv1cJVr2Vyl7Voic-32"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-10"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="720" y="140" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-10" value="客户内网" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="180" y="-20" width="390" height="60" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-18" value="" style="html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;shadow=0;dashed=0;strokeWidth=1;shape=mxgraph.ios7.misc.iphone;strokeColor=#c0c0c0;" vertex="1" parent="1"> + <mxGeometry x="340" y="270" width="70" height="120" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-19" value="" style="html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;shadow=0;dashed=0;strokeWidth=1;shape=mxgraph.ios7.misc.iphone;strokeColor=#c0c0c0;" vertex="1" parent="1"> + <mxGeometry x="460" y="270" width="70" height="120" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-31" value="<font style="font-size: 24px">WMS服务器<br>10.13.80.17<br></font>" style="verticalLabelPosition=bottom;aspect=fixed;html=1;verticalAlign=top;strokeColor=default;shape=mxgraph.citrix.hq_enterprise;fillColor=#fff2cc;fontSize=14;" vertex="1" parent="1"> + <mxGeometry x="50" y="130" width="79.97" height="76.5" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-32" value="<font style="font-size: 24px">WMS服务器<br>10.13.80.18<br></font>" style="verticalLabelPosition=bottom;aspect=fixed;html=1;verticalAlign=top;strokeColor=default;shape=mxgraph.citrix.hq_enterprise;fillColor=#fff2cc;fontSize=14;" vertex="1" parent="1"> + <mxGeometry x="200" y="130" width="79.97" height="76.5" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.449;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-40" target="VyDNnv1cJVr2Vyl7Voic-45"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.315;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-40" target="VyDNnv1cJVr2Vyl7Voic-46"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-40" value="" style="fontColor=#0066CC;verticalAlign=top;verticalLabelPosition=bottom;labelPosition=center;align=center;html=1;outlineConnect=0;fillColor=#CCCCCC;strokeColor=#6881B3;gradientColor=none;gradientDirection=north;strokeWidth=2;shape=mxgraph.networks.switch;" vertex="1" parent="1"> + <mxGeometry x="670" y="140" width="100" height="30" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-44" value="<b><font style="font-size: 24px;">交换机</font></b>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="610" y="100" width="100" height="40" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-45" value="" style="verticalLabelPosition=bottom;aspect=fixed;html=1;verticalAlign=top;strokeColor=none;shape=mxgraph.citrix.desktop;fillColor=#66B2FF;gradientColor=#0066CC;fontSize=14;" vertex="1" parent="1"> + <mxGeometry x="630" y="270" width="89" height="98" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-46" value="" style="verticalLabelPosition=bottom;aspect=fixed;html=1;verticalAlign=top;strokeColor=none;shape=mxgraph.citrix.desktop;fillColor=#66B2FF;gradientColor=#0066CC;fontSize=14;" vertex="1" parent="1"> + <mxGeometry x="810" y="270" width="89" height="98" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-47" value="<font style="font-size: 24px;"><font style="">10.13</font>.83.2<br style="border-color: var(--border-color);"><span style="">导线仓工控机</span></font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="580" y="368" width="170" height="70" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-48" value="<font style="font-size: 24px;">10<font style="">.13.83.5<br style="border-color: var(--border-color);"></font>成品仓工控机</font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="780" y="370" width="170" height="70" as="geometry" /> + </mxCell> + <mxCell id="VyDNnv1cJVr2Vyl7Voic-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="VyDNnv1cJVr2Vyl7Voic-40" target="VyDNnv1cJVr2Vyl7Voic-40"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/验收文档模板/软件方案规格书/安波福立体仓储系统方案书-20221119.docx b/验收文档模板/软件方案规格书/安波福立体仓储系统方案书-20221119.docx new file mode 100644 index 0000000..87195b5 --- /dev/null +++ b/验收文档模板/软件方案规格书/安波福立体仓储系统方案书-20221119.docx diff --git a/验收文档模板/软件物料采购清单/软件物料采购单-安波福.xlsx b/验收文档模板/软件物料采购清单/软件物料采购单-安波福.xlsx new file mode 100644 index 0000000..81cfd0c --- /dev/null +++ b/验收文档模板/软件物料采购清单/软件物料采购单-安波福.xlsx diff --git a/验收文档模板/项目分享-安波福项目.pptx b/验收文档模板/项目分享-安波福项目.pptx new file mode 100644 index 0000000..2fc85b6 --- /dev/null +++ b/验收文档模板/项目分享-安波福项目.pptx