1
2
3
4
5
6
7
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
8
9
<a-form-item label="容器号">
<a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input>
10
11
12
13
14
15
16
17
</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.taskType" dictCode="shipment_task_type"/>
</a-form-item>
</a-col>
<template v-if="toggleSearchStatus">
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="状态">
<j-dict-select-tag placeholder="请选择状态" v-model="queryParam.status"
dictCode="shipment_container_status"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="起始库位">
<a-input placeholder="请输入起始库位" v-model="queryParam.fromLocationCode"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="目标库位">
<a-input placeholder="请输入目标库位" v-model="queryParam.toLocationCode"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="目标出入口">
<a-input placeholder="请输入目标出入口" v-model="queryParam.toPort"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="创建人">
<a-input placeholder="请输入创建人" v-model="queryParam.createBy"></a-input>
</a-form-item>
</a-col>
44
<a-col :xl="12" :lg="14" :md="16" :sm="24">
45
<a-form-item label="创建日期">
曾湘平
authored
about a year ago
46
<j-date :show-date="true" date-format="YYYY-MM-DD" placeholder="请选择开始时间"
47
class="query-group-cust" v-model="queryParam.createTime_begin"></j-date>
48
<span class="query-group-split-cust"></span>
曾湘平
authored
about a year ago
49
<j-date :show-date="true" date-format="YYYY-MM-DD" placeholder="请选择结束时间"
50
class="query-group-cust" v-model="queryParam.createTime_end"></j-date>
51
52
53
54
55
</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">
肖超群
authored
about a year ago
56
<a-button id="search" type="primary" @click="searchQuery" icon="search">查询</a-button>
57
58
59
60
61
62
63
64
65
66
67
<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>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
68
69
70
<!-- 操作按钮区域 -->
<div class="table-operator">
71
<a-button @click="handleAdd" v-has="'shipmentContainerHeader:add'" type="primary" icon="plus">新增</a-button>
72
<a-button v-has="'shipmentContainerHeader:export'" type="primary" icon="download" @click="handleExportXls('出库配盘')">导出</a-button>
73
74
<a-upload v-has="'shipmentContainerHeader:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader"
:action="importExcelUrl"
75
@change="handleImportExcel">
76
77
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
78
79
<a-button @click="createBatchTask" type="primary">批量生成任务</a-button>
<a-button @click="cancelBatchTask" type="primary">批量取消配盘</a-button>
易文鹏
authored
about a year ago
80
81
<j-super-query :fieldList="superFieldList" v-has="'shipmentContainerHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/>
82
83
84
85
</div>
<!-- table区域-begin -->
<div>
86
87
88
89
90
<!-- <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>-->
91
92
93
94
95
96
97
98
99
100
101
102
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
class="j-table-force-nowrap"
:scroll="{x:true}"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
103
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'checkbox'}"
104
:customRow="clickThenSelect"
105
:rowClassName="rowClassName"
106
@change="handleTableChange">
肖超群
authored
about a year ago
107
108
109
110
111
112
113
<span slot="zoneCode" slot-scope="zoneCode">
<a-tag :key="zoneCode" color=blue>
{{ solutionZoneCode(zoneCode) }}
</a-tag>
</span>
114
115
116
117
118
119
120
121
122
123
<span slot="taskType_dictText" slot-scope="taskType_dictText">
<a-tag :key="taskType_dictText" :color="getStatusColor(taskType_dictText)">
{{ taskType_dictText }}
</a-tag>
</span>
<span slot="status_dictText" slot-scope="status_dictText">
<a-tag :key="status_dictText" :color="getStatusColor(status_dictText)">
{{ status_dictText }}
</a-tag>
</span>
124
125
<span slot="action" slot-scope="text, record">
126
127
128
129
130
131
132
133
134
<a v-if="record.status == 0 && record.zoneType =='A'" @click="openCreateShipmentTaskAndAgvTask(record)"><a-button
type="primary">生成任务</a-button><a-divider type="vertical"/></a>
<a v-if="record.status == 0 && record.zoneType =='L'" @click="selectPort(record)"><a-button type="primary">生成任务</a-button><a-divider
type="vertical"/></a>
<a v-if="record.status == 0 && record.zoneType =='P'" @click="completeFlatShipment(record)"><a-button type="primary">平库出库</a-button><a-divider
type="vertical"/></a>
<!-- <a v-if="record.status == 0 && record.zoneType =='L'" @click="openCreateShipmentTaskAgv(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>-->
<a-popconfirm v-if="record.status == 0" v-has="'shipmentContainerHeader:delete'" title="确定取消配盘吗?"
@confirm="() => handleDelete(record.id)">
135
<a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a>
136
</a-popconfirm>
肖超群
authored
about a year ago
137
<a v-has="'shipmentContainerHeader:edit'" @click="handleEdit(record)"><a-button type="default">编辑</a-button> <a-divider type="vertical"/></a>
138
139
<a v-if="record.status == 10 && record.taskType == 400 && record.advice == 1" v-has="'shipmentContainerHeader:reduceInventoryDetailBySn'"
@click="openReduce(record)"><a-button type="primary">扣减库存</a-button></a>
140
141
142
143
144
</span>
</a-table>
</div>
<a-tabs defaultActiveKey="1">
145
<a-tab-pane tab="出库配盘详情" key="1">
146
<ShipmentContainerDetailList :mainId="selectedMainId"/>
147
148
149
150
</a-tab-pane>
</a-tabs>
<shipmentContainerHeader-modal ref="modalForm" @ok="modalFormOk"></shipmentContainerHeader-modal>
151
<shipmentContainerSelect-modal ref="modalForm2" @ok="modalFormOk"></shipmentContainerSelect-modal>
肖超群
authored
about a year ago
152
<createShipmentTaskByAgv-modal ref="modalForm3" @ok="modalFormOk"></createShipmentTaskByAgv-modal>
肖超群
authored
about a year ago
153
<createShipmentTaskAndAgvTask-modal ref="modalForm4" @ok="modalFormOk"></createShipmentTaskAndAgvTask-modal>
肖超群
authored
about a year ago
154
<ReduceInventoryBySnModal ref="modalForm5" @ok="modalFormOk"></ReduceInventoryBySnModal>
155
156
157
158
159
</a-card>
</template>
<script>
160
161
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import ShipmentContainerHeaderModal from './modules/ShipmentContainerHeaderModal'
162
import {deleteAction, getAction} from '@/api/manage'
163
164
import ShipmentContainerDetailList from './ShipmentContainerDetailList'
import '@/assets/less/TableExpand.less'
165
import {completeFlatShipment, getZoneList} from '@/api/api'
166
import ShipmentContainerSelectModal from "./modules/ShipmentContainerSelectModal";
肖超群
authored
about a year ago
167
import CreateShipmentTaskByAgvModal from "./modules/CreateShipmentTaskByAgvModal";
肖超群
authored
about a year ago
168
import CreateShipmentTaskAndAgvTaskModal from "@views/system/shipment/modules/createShipmentTaskAndAgvTaskModal";
肖超群
authored
about a year ago
169
import ReduceInventoryBySnModal from "@views/system/shipment/modules/ReduceInventoryBySnModal.vue";
170
171
172
173
174
export default {
name: "ShipmentContainerHeaderList",
mixins: [JeecgListMixin],
components: {
肖超群
authored
about a year ago
175
ReduceInventoryBySnModal,
肖超群
authored
about a year ago
176
CreateShipmentTaskAndAgvTaskModal,
肖超群
authored
about a year ago
177
CreateShipmentTaskByAgvModal,
178
179
180
181
182
183
ShipmentContainerSelectModal,
ShipmentContainerDetailList,
ShipmentContainerHeaderModal
},
data() {
return {
184
selectIndex: null,
185
description: '出库配盘管理页面',
186
187
querySource: {},
portList: [],
肖超群
authored
about a year ago
188
zoneList: [],
189
190
hh: '123',
firstLoad: 0,
肖超群
authored
about a year ago
191
192
193
194
isorter: {
column: 'status',
order: 'asc',
},
195
196
197
// 表头
columns: [
{
198
title: '容器号',
199
200
align: "center",
dataIndex: 'containerCode'
201
},
202
203
204
205
{
title: '任务类型',
align: "center",
dataIndex: 'taskType_dictText',
206
scopedSlots: {customRender: 'taskType_dictText'}
207
},
208
209
210
211
{
title: '状态',
align: "center",
dataIndex: 'status_dictText',
212
scopedSlots: {customRender: 'status_dictText'}
213
},
214
{
肖超群
authored
about a year ago
215
216
217
218
219
220
221
title: '库区',
align: "center",
dataIndex: 'zoneCode',
key: 'zoneCode',
scopedSlots: {customRender: 'zoneCode'}
},
{
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
title: '起始库位',
align: "center",
dataIndex: 'fromLocationCode'
},
{
title: '目标库位',
align: "center",
dataIndex: 'toLocationCode'
},
{
title: '目标出入口',
align: "center",
dataIndex: 'toPort'
},
{
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'},
263
}
264
265
266
267
268
269
270
],
url: {
list: "/shipment/shipmentContainerHeader/list",
delete: "/shipment/shipmentContainerHeader/delete",
deleteBatch: "/shipment/shipmentContainerHeader/deleteBatch",
exportXlsUrl: "/shipment/shipmentContainerHeader/exportXls",
importExcelUrl: "shipment/shipmentContainerHeader/importExcel",
271
},
272
273
274
dictOptions: {
taskType: [],
status: [],
275
},
276
277
278
279
280
281
282
283
284
285
286
/* 分页参数 */
ipagination: {
current: 1,
pageSize: 5,
pageSizeOptions: ['5', '10', '50'],
showTotal: (total, range) => {
return range[0] + "-" + range[1] + " 共" + total + "条"
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
287
},
288
289
290
291
292
293
selectedMainId: '',
superFieldList: [],
}
},
created() {
this.getSuperFieldList();
肖超群
authored
about a year ago
294
this.loadFrom();
295
},
肖超群
authored
about a year ago
296
mounted() {
297
if (this.firstLoad == 0) {
肖超群
authored
about a year ago
298
299
300
301
this.firstLoad = 1;
return;
}
//页面没加载完,此时methods里的方法找不到,使用定时器模拟点击
302
303
304
let timeSearch = setInterval(() => {
let eleSearch = document.getElementById("search");
if (eleSearch != null) {
肖超群
authored
about a year ago
305
306
307
308
//调用成功,清除定时器
clearInterval(timeSearch)
eleSearch.click();
}
309
}, 200)
肖超群
authored
about a year ago
310
},
311
312
313
314
315
316
computed: {
importExcelUrl: function () {
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
}
},
methods: {
317
318
319
320
321
322
323
324
325
326
327
328
getStatusColor(status) {
const colors = {
'新建': 'green',
'生成任务': 'blue',
'下架完成': 'gray',
'整出任务': 'blue',
'分拣任务': 'green',
default: 'blue'
};
return colors[status] || colors.default;
},
329
330
initDictConfig() {
},
331
clickThenSelect(record, index) {
332
333
334
return {
on: {
click: () => {
335
this.selectIndex = index
336
this.onSelectChange(record.id.toString().split(","), [record]);
337
}
338
}
339
}
340
},
341
342
343
rowClassName(record, index) {
return index === this.selectIndex ? 'Rowactive' : ''
},
344
345
346
347
348
349
onClearSelected() {
this.selectedRowKeys = [];
this.selectionRows = [];
this.selectedMainId = ''
},
onSelectChange(selectedRowKeys, selectionRows) {
350
351
352
if (selectedRowKeys.length > 0) {
this.selectedMainId = selectedRowKeys[0].toString();
}
353
354
355
356
357
358
359
this.selectedRowKeys = selectedRowKeys;
this.selectionRows = selectionRows;
},
selectPort(record) {
this.$refs.modalForm2.edit(record);
this.$refs.modalForm2.title = "选择出库口";
},
肖超群
authored
about a year ago
360
361
362
363
openCreateShipmentTaskAgv(record) {
this.$refs.modalForm3.edit(record);
this.$refs.modalForm3.title = "选择出库口";
},
肖超群
authored
about a year ago
364
365
366
openCreateShipmentTaskAndAgvTask(record) {
this.$refs.modalForm4.edit(record);
this.$refs.modalForm4.title = "选择出库口";
肖超群
authored
about a year ago
367
},
肖超群
authored
about a year ago
368
369
370
371
openReduce(record) {
this.$refs.modalForm5.edit(record);
this.$refs.modalForm5.title = "扣减库存";
},
肖超群
authored
about a year ago
372
373
374
375
376
377
378
379
380
381
382
383
384
385
completeFlatShipment(record) {
const that = this;
that.confirmLoading = true;
completeFlatShipment(record).then((res) => {
if (res.success) {
that.$message.success(res.message);
} else {
that.$message.warning(res.message);
}
that.searchQuery();
}).finally(() => {
that.confirmLoading = false;
});
},
386
createBatchTask() {
387
388
if (this.selectedRowKeys.length <= 0) {
this.$message.warning('至少选择一条记录!')
389
return
390
}
391
392
393
394
let shipmentContainerHeaderList = []
let shipmentContainerHeader = null
for (let a = 0; a < this.selectedRowKeys.length; a++) {
if (this.selectionRows[a] != null && this.selectionRows[a].status === 0) {
395
396
397
if (shipmentContainerHeader == null) {
shipmentContainerHeader = this.selectionRows[a]
}
398
if (shipmentContainerHeader.taskType === this.selectionRows[a].taskType) {
399
shipmentContainerHeaderList.push(this.selectionRows[a])
400
}
401
402
}
}
403
404
405
406
if (shipmentContainerHeaderList.length > 0) {
this.$refs.modalForm2.batchEdit(shipmentContainerHeaderList)
this.$refs.modalForm2.title = '选择出库口'
} else {
407
this.$message.error("没有符合生成条件的记录!")
408
}
409
410
411
},
cancelBatchTask() {
if (!this.url.deleteBatch) {
412
this.$message.error('请设置url.deleteBatch属性!')
413
414
415
return
}
if (this.selectedRowKeys.length <= 0) {
416
this.$message.warning('至少选择一条记录!')
417
418
return
}
419
420
let ids = ''
for (let a = 0; a < this.selectedRowKeys.length; a++) {
曾湘平
authored
about a year ago
421
if (this.selectedRowKeys[a] != null && typeof this.selectedRowKeys[a] == "number") {
422
ids += this.selectedRowKeys[a] + ','
423
}
424
425
426
427
428
}
if (ids == '') {
this.$message.warning('没有符合取消条件的记录!')
return
}
429
let that = this
430
431
432
this.$confirm({
title: '确认删除',
content: '是否删除选中数据?',
433
onOk: function () {
434
that.loading = true
435
deleteAction(that.url.deleteBatch, {ids: ids})
436
.then(res => {
437
438
439
if (res.success) {
//重新计算分页问题
that.reCalculatePage(that.selectedRowKeys.length)
440
441
442
that.$message.success(res.message)
that.loadData()
that.onClearSelected()
443
} else {
444
that.$message.warning(res.message)
445
}
446
447
448
449
450
451
})
.finally(() => {
that.loading = false
})
}
})
452
},
肖超群
authored
about a year ago
453
solutionZoneCode(value) {
454
let actions = []
肖超群
authored
about a year ago
455
// console.log("solutionZoneCode " + this.zoneList);
肖超群
authored
about a year ago
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
Object.keys(this.zoneList).some((key) => {
if (this.zoneList[key].code == ('' + value)) {
actions.push(this.zoneList[key].name)
return true
}
})
return actions.join('')
},
loadFrom() {
getZoneList().then((res) => {
if (res.success) {
this.zoneList = res.result
}
});
},
471
472
473
474
475
476
477
478
479
480
loadData(arg) {
if (!this.url.list) {
this.$message.error("请设置url.list属性!")
return
}
//加载数据 若传入参数1则加载第一页的内容
if (arg === 1) {
this.ipagination.current = 1;
}
this.onClearSelected()
481
let params = this.getQueryParams();//查询条件
482
483
484
485
486
487
488
489
490
491
492
493
494
495
this.loading = true;
getAction(this.url.list, params).then((res) => {
if (res.success) {
this.dataSource = res.result.records;
this.ipagination.total = res.result.total;
}
if (res.code === 510) {
this.$message.warning(res.message)
}
this.loading = false;
})
},
getSuperFieldList() {
let fieldList = [];
496
fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''})
497
498
499
500
501
502
503
504
505
506
fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'shipment_task_type'})
fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'shipment_container_status'})
fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
fieldList.push({type: 'string', value: 'toPort', 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
507
508
}
}
509
}
510
511
</script>
<style scoped>
512
@import '~@assets/less/common.less'
513
</style>