Commit 6ce504d632686d7fcad5721409f42638748304aa

Authored by 肖超群
1 parent 2a5e1411

曾加所有任务的界面

ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue 0 → 100644
  1 +<template>
  2 + <a-card :bordered="false">
  3 + <!-- 查询区域 -->
  4 + <div class="table-page-search-wrapper">
  5 + <a-form layout="inline" @keyup.enter.native="searchQuery">
  6 + <a-row :gutter="24">
  7 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  8 + <a-form-item label="库区">
  9 + <a-form-model-item prop="zoneOptions">
  10 + <j-multi-select-tag
  11 + v-model="queryParam.zoneCode"
  12 + :options="zoneOptions"
  13 + placeholder="请选择库区">
  14 + </j-multi-select-tag>
  15 + </a-form-model-item>
  16 + </a-form-item>
  17 + </a-col>
  18 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  19 + <a-form-item label="任务ID">
  20 + <a-input placeholder="请输入任务ID" v-model="queryParam.id"></a-input>
  21 + </a-form-item>
  22 + </a-col>
  23 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  24 + <a-form-item label="任务类型">
  25 + <j-dict-select-tag placeholder="请选择任务类型" v-model="queryParam.taskType" dictCode="task_type"/>
  26 + </a-form-item>
  27 + </a-col>
  28 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  29 + <a-form-item label="容器编码">
  30 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
  31 + </a-form-item>
  32 + </a-col>
  33 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  34 + <a-form-item label="起始库位">
  35 + <a-input placeholder="请输入起始库位" v-model="queryParam.fromLocationCode"></a-input>
  36 + </a-form-item>
  37 + </a-col>
  38 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  39 + <a-form-item label="目标库位">
  40 + <a-input placeholder="请输入目标库位" v-model="queryParam.toLocationCode"></a-input>
  41 + </a-form-item>
  42 + </a-col>
  43 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  44 + <a-form-item label="任务状态">
  45 + <j-dict-select-tag placeholder="请选择任务状态" v-model="queryParam.status" dictCode="task_header_status"/>
  46 + </a-form-item>
  47 + </a-col>
  48 + <template v-if="toggleSearchStatus">
  49 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  50 + <a-form-item label="起始出入口">
  51 + <a-input placeholder="请输入起始出入口" v-model="queryParam.fromPortCode"></a-input>
  52 + </a-form-item>
  53 + </a-col>
  54 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  55 + <a-form-item label="目标出入口">
  56 + <a-input placeholder="请输入目标出入口" v-model="queryParam.toPortCode"></a-input>
  57 + </a-form-item>
  58 + </a-col>
  59 + <a-col :xl="12" :lg="14" :md="16" :sm="24">
  60 + <a-form-item label="创建日期">
  61 + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间"
  62 + class="query-group-cust" v-model="queryParam.createTime_begin"></j-date>
  63 + <span class="query-group-split-cust"></span>
  64 + <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间"
  65 + class="query-group-cust" v-model="queryParam.createTime_end"></j-date>
  66 + </a-form-item>
  67 + </a-col>
  68 + </template>
  69 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  70 + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
  71 + <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
  72 + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
  73 + <a @click="handleToggleSearch" style="margin-left: 8px">
  74 + {{ toggleSearchStatus ? '收起' : '展开' }}
  75 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
  76 + </a>
  77 + </span>
  78 + </a-col>
  79 + </a-row>
  80 + </a-form>
  81 + </div>
  82 + <!-- 查询区域-END -->
  83 +
  84 + <!-- 操作按钮区域 -->
  85 +<!-- <div class="table-operator">-->
  86 +<!-- <a-button @click="createEmptyIn()" v-has="'taskHeader:emptyIn'" type="primary">空托入库</a-button>-->
  87 +<!-- <a-button @click="createManyEmptyIn()" v-has="'taskHeader:manyEmptyIn'" type="primary">空托组入库</a-button>-->
  88 +<!-- <a-button @click="openDemo()" type="primary">弹出demo</a-button>-->
  89 +<!-- </div>-->
  90 +
  91 + <!-- table区域-begin -->
  92 + <div>
  93 +<!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
  94 +<!-- <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a-->
  95 +<!-- style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项-->
  96 +<!-- <a style="margin-left: 24px" @click="onClearSelected">清空</a>-->
  97 +<!-- </div>-->
  98 +
  99 + <a-table
  100 + ref="table"
  101 + size="middle"
  102 + bordered
  103 + rowKey="id"
  104 + class="j-table-force-nowrap"
  105 + :scroll="{x:true}"
  106 + :columns="columns"
  107 + :dataSource="dataSource"
  108 + :pagination="ipagination"
  109 + :loading="loading"
  110 + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}"
  111 + :customRow="clickThenSelect"
  112 + @change="handleTableChange">
  113 +
  114 + <span slot="status_dictText" slot-scope="status_dictText">
  115 + <a-tag :key="status_dictText" :color="getStatusColor(status_dictText)">
  116 + {{ status_dictText }}
  117 + </a-tag>
  118 + </span>
  119 +
  120 +
  121 + <span slot="taskType_dictText" slot-scope="taskType_dictText">
  122 + <a-tag :key="taskType_dictText" :color="getStatusColor(taskType_dictText)">
  123 + {{ taskType_dictText }}
  124 + </a-tag>
  125 + </span>
  126 +
  127 + <span slot="zoneCode" slot-scope="zoneCode">
  128 + <a-tag :key="zoneCode" color=blue>
  129 + {{ solutionZoneCode(zoneCode) }}
  130 + </a-tag>
  131 + </span>
  132 +
  133 + <template slot="htmlSlot" slot-scope="text">
  134 + <div v-html="text"></div>
  135 + </template>
  136 + <template slot="imgSlot" slot-scope="text">
  137 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
  138 + <img v-else :src="getImgView(text)" height="25px" alt=""
  139 + style="max-width:80px;font-size: 12px;font-style: italic;"/>
  140 + </template>
  141 + <template slot="fileSlot" slot-scope="text">
  142 + <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
  143 + <a-button
  144 + v-else
  145 + :ghost="true"
  146 + type="primary"
  147 + icon="download"
  148 + size="small"
  149 + @click="downloadFile(text)">下载
  150 + </a-button>
  151 + </template>
  152 +
  153 + <span slot="action" slot-scope="text, record">
  154 + <a v-if="record.status == 1" v-has="'taskHeader:executeTask'" @click="executeTask(record)"><a-button type="primary">执行</a-button> <a-divider type="vertical"/></a>
  155 + <a v-if="record.isEmptyOut == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleEmptyOutTask(record)"><a-button type="danger">修复空出数据</a-button>
  156 + <a-divider type="vertical"/></a>
  157 + <a v-if="record.isPickupError == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handlePickupErrorTask(record)"><a-button type="danger">修复取货错数据</a-button>
  158 + <a-divider type="vertical"/></a>
  159 + <a v-if="record.isDoubleIn == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleDoubleInTask(record)"><a-button type="danger">修复重入数据</a-button>
  160 + <a-divider type="vertical"/></a>
  161 + <!-- <a v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" @click="cancelTask(record)" >取消</a>-->
  162 + <a-popconfirm v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" title="确定取消任务吗?" @confirm="() => cancelTask(record)">
  163 + <a-button type="danger">取消</a-button>
  164 + </a-popconfirm>
  165 + </span>
  166 +
  167 + </a-table>
  168 + </div>
  169 +
  170 + <a-tabs defaultActiveKey="1">
  171 + <a-tab-pane tab="任务详情" key="1">
  172 + <TaskDetailList :mainId="selectedMainId"/>
  173 + </a-tab-pane>
  174 + </a-tabs>
  175 +
  176 + <taskHeader-modal ref="modalForm" @ok="modalFormOk"></taskHeader-modal>
  177 + <empty-in-task-modal ref="emptyInModal" @ok="modalFormOk"></empty-in-task-modal>
  178 + <many-empty-in-task-modal ref="manyEmptyInModal" @ok="modalFormOk"></many-empty-in-task-modal>
  179 + <MaterialTaskModal ref="materialTaskModal"></MaterialTaskModal>
  180 + </a-card>
  181 +</template>
  182 +
  183 +<script>
  184 +
  185 +import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  186 +import TaskHeaderModal from './modules/TaskHeaderModal'
  187 +import {getAction} from '@/api/manage'
  188 +import TaskDetailList from './TaskDetailList'
  189 +import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelectUtil'
  190 +import '@/assets/less/TableExpand.less'
  191 +import {completeTaskByWMS, cancelTask} from '@/api/api'
  192 +import {execute} from '@/api/api'
  193 +import {getZoneList, handleEmptyOut, handlePickupError, handleDoubleIn} from '@/api/api'
  194 +import EmptyInTaskModal from './modules/EmptyInTaskModal'
  195 +import ManyEmptyInTaskModal from "./modules/ManyEmptyInTaskModal";
  196 +import {filterObj} from "@/utils/util";
  197 +import MaterialTaskModal from "./modules/MaterialTaskModal";
  198 +
  199 +export default {
  200 + name: "TaskHeaderList",
  201 + mixins: [JeecgListMixin],
  202 + components: {
  203 + ManyEmptyInTaskModal,
  204 + EmptyInTaskModal,
  205 + TaskDetailList,
  206 + TaskHeaderModal,
  207 + MaterialTaskModal
  208 + },
  209 + data() {
  210 + return {
  211 + description: '任务表管理页面',
  212 + zoneList: [],
  213 + zoneOptions:[],
  214 + isorter: {
  215 + column: 'status',
  216 + order: 'asc'
  217 + },
  218 + // 表头
  219 + columns: [
  220 + {
  221 + title: '任务ID',
  222 + align: "center",
  223 + dataIndex: 'id',
  224 + sorter: true,
  225 + },
  226 + {
  227 + title: '任务类型',
  228 + align: "center",
  229 + dataIndex: 'taskType_dictText',
  230 + scopedSlots: {customRender: 'taskType_dictText'}
  231 + },
  232 + {
  233 + title: '容器编码',
  234 + align: "center",
  235 + dataIndex: 'containerCode'
  236 + },
  237 + {
  238 + title: '库区',
  239 + align: "center",
  240 + dataIndex: 'zoneCode',
  241 + key: 'zoneCode',
  242 + scopedSlots: {customRender: 'zoneCode'}
  243 + },
  244 + {
  245 + title: '起始库位',
  246 + align: "center",
  247 + dataIndex: 'fromLocationCode'
  248 + },
  249 + {
  250 + title: '目标库位',
  251 + align: "center",
  252 + dataIndex: 'toLocationCode'
  253 + },
  254 + {
  255 + title: '目标出入口',
  256 + align: "center",
  257 + dataIndex: 'toPortCode'
  258 + },
  259 + {
  260 + title: '任务状态',
  261 + align: "center",
  262 + dataIndex: 'status_dictText',
  263 + key: 'status_dictText',
  264 + scopedSlots: {customRender: 'status_dictText'}
  265 + },
  266 + {
  267 + title: '异常信息',
  268 + align: "center",
  269 + dataIndex: 'exceptionName'
  270 + },
  271 + {
  272 + title: '创建人',
  273 + align: "center",
  274 + dataIndex: 'createBy'
  275 + },
  276 + {
  277 + title: '创建日期',
  278 + align: "center",
  279 + dataIndex: 'createTime'
  280 + },
  281 + {
  282 + title: '更新人',
  283 + align: "center",
  284 + dataIndex: 'updateBy'
  285 + },
  286 + {
  287 + title: '更新日期',
  288 + align: "center",
  289 + dataIndex: 'updateTime'
  290 + },
  291 + {
  292 + title: '下发时间',
  293 + align: "center",
  294 + dataIndex: 'executeTime'
  295 + },
  296 + {
  297 + title: '库位分配时间',
  298 + align: "center",
  299 + dataIndex: 'allocationTime'
  300 + },
  301 + {
  302 + title: '到达分拣口时间',
  303 + align: "center",
  304 + dataIndex: 'arrivalTime'
  305 + },
  306 + {
  307 + title: '完成时间',
  308 + align: "center",
  309 + dataIndex: 'completeTime'
  310 + },
  311 + {
  312 + title: '操作',
  313 + dataIndex: 'action',
  314 + align: "center",
  315 + fixed: "right",
  316 + width: 147,
  317 + scopedSlots: {customRender: 'action'},
  318 + }
  319 + ],
  320 + url: {
  321 + list: "/task/taskHeader/list",
  322 + delete: "/task/taskHeader/delete",
  323 + deleteBatch: "/task/taskHeader/deleteBatch",
  324 + exportXlsUrl: "/task/taskHeader/exportXls",
  325 + importExcelUrl: "task/taskHeader/importExcel",
  326 + },
  327 + dictOptions: {
  328 + taskType: [],
  329 + isEmptyOut: [],
  330 + isDoubleIn: [],
  331 + status: [],
  332 + },
  333 + /* 分页参数 */
  334 + ipagination: {
  335 + current: 1,
  336 + pageSize: 5,
  337 + pageSizeOptions: ['5', '10', '50'],
  338 + showTotal: (total, range) => {
  339 + return range[0] + "-" + range[1] + " 共" + total + "条"
  340 + },
  341 + showQuickJumper: true,
  342 + showSizeChanger: true,
  343 + total: 0
  344 + },
  345 + selectedMainId: '',
  346 + superFieldList: [],
  347 +
  348 + }
  349 + },
  350 + created() {
  351 + this.getSuperFieldList();
  352 + this.loadFrom();
  353 + },
  354 + computed: {
  355 + importExcelUrl: function () {
  356 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
  357 + }
  358 + },
  359 + methods: {
  360 + getStatusColor(status) {
  361 + const colors = {
  362 + '生成任务': 'green',
  363 + '下发任务': 'blue',
  364 + '到达拣选站台': 'orange',
  365 + '任务完成': 'grey',
  366 +
  367 + '整盘入库': 'blue',
  368 + '补充入库': 'green',
  369 + default: 'blue'
  370 + };
  371 + return colors[status] || colors.default;
  372 + },
  373 + initDictConfig() {
  374 + },
  375 + clickThenSelect(record) {
  376 + return {
  377 + on: {
  378 + click: () => {
  379 + this.onSelectChange(record.id.toString().split(","), [record]);
  380 + }
  381 + }
  382 + }
  383 + },
  384 + onClearSelected() {
  385 + this.selectedRowKeys = [];
  386 + this.selectionRows = [];
  387 + this.selectedMainId = ''
  388 + },
  389 + onSelectChange(selectedRowKeys, selectionRows) {
  390 + this.selectedMainId = selectedRowKeys[0].toString();
  391 + this.selectedRowKeys = selectedRowKeys;
  392 + this.selectionRows = selectionRows;
  393 + },
  394 + loadData(arg) {
  395 + if (!this.url.list) {
  396 + this.$message.error("请设置url.list属性!")
  397 + return
  398 + }
  399 + //加载数据 若传入参数1则加载第一页的内容
  400 + if (arg === 1) {
  401 + this.ipagination.current = 1;
  402 + }
  403 + this.onClearSelected();
  404 + var params = this.getQueryParams();//查询条件
  405 + this.loading = true;
  406 + getAction(this.url.list, params).then((res) => {
  407 + if (res.success) {
  408 + this.dataSource = res.result.records;
  409 + this.ipagination.total = res.result.total;
  410 + }
  411 + if (res.code === 510) {
  412 + this.$message.warning(res.message)
  413 + }
  414 + this.loading = false;
  415 + })
  416 + },
  417 + loadFrom() {
  418 + getZoneList().then((res) => {
  419 + if (res.success) {
  420 + this.zoneList = res.result
  421 + //延迟半秒执行,避免组件未加载完,数据已经加载完
  422 + setTimeout(()=>{
  423 + //slice可以在数组的任何位置进行删除/添加操作
  424 + this.zoneOptions.splice(0, 1);
  425 + for (let i = 0; i < res.result.length; i++) {
  426 + this.zoneOptions.push({value:res.result[i].code,text:res.result[i].name})
  427 + }
  428 + },500)
  429 + }
  430 + });
  431 + },
  432 + // createEmptyIn() {
  433 + // this.$refs.emptyInModal.edit();
  434 + // this.$refs.emptyInModal.title = "创建空托盘入库";
  435 + // },
  436 + // createManyEmptyIn() {
  437 + // this.$refs.manyEmptyInModal.edit();
  438 + // this.$refs.manyEmptyInModal.title = "创建空托盘组入库";
  439 + // },
  440 + // openDemo(){
  441 + // this.$refs.materialTaskModal.edit();
  442 + // },
  443 + solutionZoneCode(value) {
  444 + var actions = []
  445 + Object.keys(this.zoneList).some((key) => {
  446 + if (this.zoneList[key].code == ('' + value)) {
  447 + actions.push(this.zoneList[key].name)
  448 + return true
  449 + }
  450 + })
  451 + return actions.join('')
  452 + },
  453 + // cancelTask(record) {
  454 + // this.loading = true;
  455 + // this.model = Object.assign({}, record);
  456 + // cancelTask(this.model.id).then((res) => {
  457 + // this.loading = false;
  458 + // if (res.success) {
  459 + // this.$message.success(res.message);
  460 + // } else {
  461 + // this.$message.error(res.message);
  462 + // }
  463 + // this.searchQuery();
  464 + // });
  465 + // },
  466 + // executeTask(record) {
  467 + // this.loading = true;
  468 + // this.model = Object.assign({}, record);
  469 + // execute(this.model).then((res) => {
  470 + // this.loading = false;
  471 + // if (res.success) {
  472 + // this.$message.success(res.message);
  473 + // } else {
  474 + // this.$message.error(res.message);
  475 + // }
  476 + // this.searchQuery();
  477 + // });
  478 + // },
  479 + // handleEmptyOutTask(record) {
  480 + // this.loading = true;
  481 + // this.model = Object.assign({}, record);
  482 + // handleEmptyOut(this.model.id).then((res) => {
  483 + // this.loading = false;
  484 + // if (res.success) {
  485 + // this.$message.success(res.message);
  486 + // } else {
  487 + // this.$message.error(res.message);
  488 + // }
  489 + // this.searchQuery();
  490 + // });
  491 + // },
  492 + // handlePickupErrorTask(record) {
  493 + // this.loading = true;
  494 + // this.model = Object.assign({}, record);
  495 + // handlePickupError(this.model.id).then((res) => {
  496 + // this.loading = false;
  497 + // if (res.success) {
  498 + // this.$message.success(res.message);
  499 + // } else {
  500 + // this.$message.error(res.message);
  501 + // }
  502 + // this.searchQuery();
  503 + // });
  504 + // },
  505 + // handleDoubleInTask(record) {
  506 + // this.loading = true;
  507 + // this.model = Object.assign({}, record);
  508 + // handleDoubleIn(this.model.id).then((res) => {
  509 + // this.loading = false;
  510 + // if (res.success) {
  511 + // this.$message.success(res.message);
  512 + // } else {
  513 + // this.$message.error(res.message);
  514 + // }
  515 + // this.searchQuery();
  516 + // });
  517 + // },
  518 + getSuperFieldList() {
  519 + let fieldList = [];
  520 + fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'})
  521 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
  522 + fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
  523 + fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
  524 + fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'})
  525 + fieldList.push({type: 'int', value: 'isDoubleIn', text: '是否重入', dictCode: 'is_or_not'})
  526 + fieldList.push({type: 'string', value: 'originLocationCode', text: '重入库位编码', dictCode: ''})
  527 + fieldList.push({type: 'int', value: 'status', text: '任务状态', dictCode: 'task_header_status'})
  528 + fieldList.push({type: 'string', value: 'fromPortCode', text: '起始出入口', dictCode: ''})
  529 + fieldList.push({type: 'string', value: 'toPortCode', text: '目标出入口', dictCode: ''})
  530 + fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
  531 + fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})
  532 + fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})
  533 + fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'})
  534 + this.superFieldList = fieldList
  535 + }
  536 + }
  537 +}
  538 +</script>
  539 +<style scoped>
  540 +@import '~@assets/less/common.less'
  541 +</style>
0 542 \ No newline at end of file
... ...
ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
... ... @@ -85,7 +85,7 @@
85 85 <div class="table-operator">
86 86 <a-button @click="createEmptyIn()" v-has="'taskHeader:emptyIn'" type="primary">空托入库</a-button>
87 87 <a-button @click="createManyEmptyIn()" v-has="'taskHeader:manyEmptyIn'" type="primary">空托组入库</a-button>
88   - <!-- <a-button @click="openDemo()" type="primary">弹出demo</a-button> -->
  88 + <a-button @click="openDemo()" type="primary">弹出demo</a-button>
89 89 </div>
90 90  
91 91 <!-- table区域-begin -->
... ...