From 6ce504d632686d7fcad5721409f42638748304aa Mon Sep 17 00:00:00 2001 From: youjie <272855983@qq.com> Date: Mon, 31 Jul 2023 15:19:06 +0800 Subject: [PATCH] 曾加所有任务的界面 --- ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue | 541 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue | 2 +- 2 files changed, 542 insertions(+), 1 deletion(-) create mode 100644 ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue diff --git a/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue new file mode 100644 index 0000000..51050e6 --- /dev/null +++ b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue @@ -0,0 +1,541 @@ +<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"> + <a-form-item label="库区"> + <a-form-model-item prop="zoneOptions"> + <j-multi-select-tag + v-model="queryParam.zoneCode" + :options="zoneOptions" + placeholder="请选择库区"> + </j-multi-select-tag> + </a-form-model-item> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="任务ID"> + <a-input placeholder="请输入任务ID" v-model="queryParam.id"></a-input> + </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="task_type"/> + </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.containerCode"></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.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="任务状态"> + <j-dict-select-tag placeholder="请选择任务状态" v-model="queryParam.status" dictCode="task_header_status"/> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="起始出入口"> + <a-input placeholder="请输入起始出入口" v-model="queryParam.fromPortCode"></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.toPortCode"></a-input> + </a-form-item> + </a-col> + <a-col :xl="12" :lg="14" :md="16" :sm="24"> + <a-form-item label="创建日期"> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间" + class="query-group-cust" v-model="queryParam.createTime_begin"></j-date> + <span class="query-group-split-cust"></span> + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" + class="query-group-cust" v-model="queryParam.createTime_end"></j-date> + </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 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 --> + + <!-- 操作按钮区域 --> +<!-- <div class="table-operator">--> +<!-- <a-button @click="createEmptyIn()" v-has="'taskHeader:emptyIn'" type="primary">空托入库</a-button>--> +<!-- <a-button @click="createManyEmptyIn()" v-has="'taskHeader:manyEmptyIn'" type="primary">空托组入库</a-button>--> +<!-- <a-button @click="openDemo()" type="primary">弹出demo</a-button>--> +<!-- </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> 项--> +<!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>--> +<!-- </div>--> + + <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" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}" + :customRow="clickThenSelect" + @change="handleTableChange"> + + <span slot="status_dictText" slot-scope="status_dictText"> + <a-tag :key="status_dictText" :color="getStatusColor(status_dictText)"> + {{ status_dictText }} + </a-tag> + </span> + + + <span slot="taskType_dictText" slot-scope="taskType_dictText"> + <a-tag :key="taskType_dictText" :color="getStatusColor(taskType_dictText)"> + {{ taskType_dictText }} + </a-tag> + </span> + + <span slot="zoneCode" slot-scope="zoneCode"> + <a-tag :key="zoneCode" color=blue> + {{ solutionZoneCode(zoneCode) }} + </a-tag> + </span> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </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;"/> + </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> + </template> + + <span slot="action" slot-scope="text, record"> + <a v-if="record.status == 1" v-has="'taskHeader:executeTask'" @click="executeTask(record)"><a-button type="primary">执行</a-button> <a-divider type="vertical"/></a> + <a v-if="record.isEmptyOut == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleEmptyOutTask(record)"><a-button type="danger">修复空出数据</a-button> + <a-divider type="vertical"/></a> + <a v-if="record.isPickupError == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handlePickupErrorTask(record)"><a-button type="danger">修复取货错数据</a-button> + <a-divider type="vertical"/></a> + <a v-if="record.isDoubleIn == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleDoubleInTask(record)"><a-button type="danger">修复重入数据</a-button> + <a-divider type="vertical"/></a> + <!-- <a v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" @click="cancelTask(record)" >取消</a>--> + <a-popconfirm v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" title="确定取消任务吗?" @confirm="() => cancelTask(record)"> + <a-button type="danger">取消</a-button> + </a-popconfirm> + </span> + + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="任务详情" key="1"> + <TaskDetailList :mainId="selectedMainId"/> + </a-tab-pane> + </a-tabs> + + <taskHeader-modal ref="modalForm" @ok="modalFormOk"></taskHeader-modal> + <empty-in-task-modal ref="emptyInModal" @ok="modalFormOk"></empty-in-task-modal> + <many-empty-in-task-modal ref="manyEmptyInModal" @ok="modalFormOk"></many-empty-in-task-modal> + <MaterialTaskModal ref="materialTaskModal"></MaterialTaskModal> + </a-card> +</template> + +<script> + +import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import TaskHeaderModal from './modules/TaskHeaderModal' +import {getAction} from '@/api/manage' +import TaskDetailList from './TaskDetailList' +import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelectUtil' +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 EmptyInTaskModal from './modules/EmptyInTaskModal' +import ManyEmptyInTaskModal from "./modules/ManyEmptyInTaskModal"; +import {filterObj} from "@/utils/util"; +import MaterialTaskModal from "./modules/MaterialTaskModal"; + +export default { + name: "TaskHeaderList", + mixins: [JeecgListMixin], + components: { + ManyEmptyInTaskModal, + EmptyInTaskModal, + TaskDetailList, + TaskHeaderModal, + MaterialTaskModal + }, + data() { + return { + description: '任务表管理页面', + zoneList: [], + zoneOptions:[], + isorter: { + column: 'status', + order: 'asc' + }, + // 表头 + columns: [ + { + title: '任务ID', + align: "center", + dataIndex: 'id', + sorter: true, + }, + { + title: '任务类型', + align: "center", + dataIndex: 'taskType_dictText', + scopedSlots: {customRender: 'taskType_dictText'} + }, + { + title: '容器编码', + align: "center", + dataIndex: 'containerCode' + }, + { + title: '库区', + align: "center", + dataIndex: 'zoneCode', + key: 'zoneCode', + scopedSlots: {customRender: 'zoneCode'} + }, + { + title: '起始库位', + align: "center", + dataIndex: 'fromLocationCode' + }, + { + title: '目标库位', + align: "center", + dataIndex: 'toLocationCode' + }, + { + title: '目标出入口', + align: "center", + dataIndex: 'toPortCode' + }, + { + title: '任务状态', + align: "center", + dataIndex: 'status_dictText', + key: 'status_dictText', + scopedSlots: {customRender: 'status_dictText'} + }, + { + title: '异常信息', + align: "center", + dataIndex: 'exceptionName' + }, + { + title: '创建人', + align: "center", + dataIndex: 'createBy' + }, + { + title: '创建日期', + align: "center", + dataIndex: 'createTime' + }, + { + title: '更新人', + align: "center", + dataIndex: 'updateBy' + }, + { + title: '更新日期', + align: "center", + dataIndex: 'updateTime' + }, + { + title: '下发时间', + align: "center", + dataIndex: 'executeTime' + }, + { + title: '库位分配时间', + align: "center", + dataIndex: 'allocationTime' + }, + { + title: '到达分拣口时间', + align: "center", + dataIndex: 'arrivalTime' + }, + { + title: '完成时间', + align: "center", + dataIndex: 'completeTime' + }, + { + title: '操作', + dataIndex: 'action', + align: "center", + fixed: "right", + width: 147, + scopedSlots: {customRender: 'action'}, + } + ], + url: { + list: "/task/taskHeader/list", + delete: "/task/taskHeader/delete", + deleteBatch: "/task/taskHeader/deleteBatch", + exportXlsUrl: "/task/taskHeader/exportXls", + importExcelUrl: "task/taskHeader/importExcel", + }, + dictOptions: { + taskType: [], + isEmptyOut: [], + isDoubleIn: [], + status: [], + }, + /* 分页参数 */ + ipagination: { + current: 1, + pageSize: 5, + pageSizeOptions: ['5', '10', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 共" + total + "条" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + selectedMainId: '', + superFieldList: [], + + } + }, + created() { + this.getSuperFieldList(); + this.loadFrom(); + }, + computed: { + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + getStatusColor(status) { + const colors = { + '生成任务': 'green', + '下发任务': 'blue', + '到达拣选站台': 'orange', + '任务完成': 'grey', + + '整盘入库': 'blue', + '补充入库': 'green', + default: 'blue' + }; + return colors[status] || colors.default; + }, + initDictConfig() { + }, + clickThenSelect(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.toString().split(","), [record]); + } + } + } + }, + onClearSelected() { + this.selectedRowKeys = []; + this.selectionRows = []; + this.selectedMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId = selectedRowKeys[0].toString(); + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error("请设置url.list属性!") + return + } + //加载数据 若传入参数1则加载第一页的内容 + if (arg === 1) { + this.ipagination.current = 1; + } + this.onClearSelected(); + var params = this.getQueryParams();//查询条件 + 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; + }) + }, + loadFrom() { + getZoneList().then((res) => { + if (res.success) { + this.zoneList = res.result + //延迟半秒执行,避免组件未加载完,数据已经加载完 + 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}) + } + },500) + } + }); + }, + // createEmptyIn() { + // this.$refs.emptyInModal.edit(); + // this.$refs.emptyInModal.title = "创建空托盘入库"; + // }, + // createManyEmptyIn() { + // this.$refs.manyEmptyInModal.edit(); + // this.$refs.manyEmptyInModal.title = "创建空托盘组入库"; + // }, + // openDemo(){ + // this.$refs.materialTaskModal.edit(); + // }, + solutionZoneCode(value) { + var actions = [] + Object.keys(this.zoneList).some((key) => { + if (this.zoneList[key].code == ('' + value)) { + actions.push(this.zoneList[key].name) + return true + } + }) + return actions.join('') + }, + // cancelTask(record) { + // this.loading = true; + // this.model = Object.assign({}, record); + // cancelTask(this.model.id).then((res) => { + // this.loading = false; + // if (res.success) { + // this.$message.success(res.message); + // } else { + // this.$message.error(res.message); + // } + // this.searchQuery(); + // }); + // }, + // executeTask(record) { + // this.loading = true; + // this.model = Object.assign({}, record); + // execute(this.model).then((res) => { + // this.loading = false; + // if (res.success) { + // this.$message.success(res.message); + // } else { + // this.$message.error(res.message); + // } + // this.searchQuery(); + // }); + // }, + // handleEmptyOutTask(record) { + // this.loading = true; + // this.model = Object.assign({}, record); + // handleEmptyOut(this.model.id).then((res) => { + // this.loading = false; + // if (res.success) { + // this.$message.success(res.message); + // } else { + // this.$message.error(res.message); + // } + // this.searchQuery(); + // }); + // }, + // handlePickupErrorTask(record) { + // this.loading = true; + // this.model = Object.assign({}, record); + // handlePickupError(this.model.id).then((res) => { + // this.loading = false; + // if (res.success) { + // this.$message.success(res.message); + // } else { + // this.$message.error(res.message); + // } + // this.searchQuery(); + // }); + // }, + // handleDoubleInTask(record) { + // this.loading = true; + // this.model = Object.assign({}, record); + // handleDoubleIn(this.model.id).then((res) => { + // this.loading = false; + // if (res.success) { + // this.$message.success(res.message); + // } else { + // this.$message.error(res.message); + // } + // this.searchQuery(); + // }); + // }, + getSuperFieldList() { + let fieldList = []; + fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) + fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) + fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) + fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) + fieldList.push({type: 'int', value: 'isDoubleIn', text: '是否重入', dictCode: 'is_or_not'}) + fieldList.push({type: 'string', value: 'originLocationCode', text: '重入库位编码', dictCode: ''}) + fieldList.push({type: 'int', value: 'status', text: '任务状态', dictCode: 'task_header_status'}) + fieldList.push({type: 'string', value: 'fromPortCode', text: '起始出入口', dictCode: ''}) + fieldList.push({type: 'string', value: 'toPortCode', 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' +</style> \ No newline at end of file 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 f8621b0..941211b 100644 --- a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue @@ -85,7 +85,7 @@ <div class="table-operator"> <a-button @click="createEmptyIn()" v-has="'taskHeader:emptyIn'" type="primary">空托入库</a-button> <a-button @click="createManyEmptyIn()" v-has="'taskHeader:manyEmptyIn'" type="primary">空托组入库</a-button> - <!-- <a-button @click="openDemo()" type="primary">弹出demo</a-button> --> + <a-button @click="openDemo()" type="primary">弹出demo</a-button> </div> <!-- table区域-begin --> -- libgit2 0.22.2