<template>
|
<div class="wcsTask-container">
|
<el-row :gutter="8" style="width: 100%; height: 100%; flex: 1">
|
<el-col :span="14" :xs="24" style="display: flex; height: 100%; flex: 1">
|
<el-card class="full-table" shadow="hover" :body-style="{ height: 'calc(100% - 51px)' }">
|
<template #header>
|
<el-icon size="16"
|
style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务日志
|
</template>
|
<el-form :model="queryParams" ref="queryForm" labelWidth="90">
|
<el-row>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
|
<el-form-item label="关键字">
|
<el-input v-model="queryParams.searchKey" clearable="" placeholder="请输入模糊查询关键字" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="任务号">
|
<el-input v-model="queryParams.taskNo" clearable="" placeholder="请输入任务号" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="任务类型">
|
<el-select clearable="" v-model="queryParams.taskType" placeholder="请选择任务类型">
|
<el-option v-for="(item, index) in dl('TaskTypeEnum')" :key="index" :value="item.value"
|
:label="`${item.name} (${item.code}) [${item.value}] `" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="状态">
|
<el-select clearable="" v-model="queryParams.status" placeholder="请选择状态">
|
<el-option v-for="(item, index) in dl('TaskStatusEnum')" :key="index" :value="item.value"
|
:label="`${item.name} (${item.code}) [${item.value}] `" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="托盘号">
|
<el-input v-model="queryParams.palletNo" clearable="" placeholder="请输入托盘号" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="单据号">
|
<el-input v-model="queryParams.orderNo" clearable="" placeholder="请输入单据号" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
|
<el-form-item label="来源">
|
<el-input v-model="queryParams.origin" clearable="" placeholder="请输入来源" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
|
<el-form-item>
|
<el-button-group style="display: flex; align-items: center;">
|
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'wcsTask:page'"> 查询
|
</el-button>
|
<el-button icon="ele-Refresh" @click="() => queryParams = {}"> 重置 </el-button>
|
<el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI"
|
style="margin-left:5px;"> 高级查询 </el-button>
|
<el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI"
|
style="margin-left:5px;"> 隐藏 </el-button>
|
<el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWcsTask"
|
v-auth="'wcsTask:add'"> 新增 </el-button>
|
|
</el-button-group>
|
</el-form-item>
|
|
</el-col>
|
</el-row>
|
</el-form>
|
<el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id"
|
@cell-click="handleClick" @sort-change="sortChange" border="">
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
<el-table-column prop="taskNo" label="任务号" width="130" show-overflow-tooltip="" />
|
<el-table-column prop="levels" label="优先级" width="55" show-overflow-tooltip="" />
|
<el-table-column prop="taskType" width="85" label="任务类型" show-overflow-tooltip="">
|
<template #default="scope">
|
<el-tag :type="dv('TaskTypeEnum', scope.row.taskType)?.tagType"> {{ dv('TaskTypeEnum',
|
scope.row.taskType)?.name }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="status" width="85" label="状态" show-overflow-tooltip="">
|
<template #default="scope">
|
<el-tag :type="dv('TaskStatusEnum', scope.row.status)?.tagType"> {{ dv('TaskStatusEnum',
|
scope.row.status)?.name }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="origin" label="来源" show-overflow-tooltip="" />
|
<el-table-column prop="startLocate" label="起始位置" show-overflow-tooltip="" />
|
<el-table-column prop="endLocate" label="结束位置" show-overflow-tooltip="" />
|
<el-table-column prop="palletNo" label="托盘号" show-overflow-tooltip="" />
|
<el-table-column prop="orderNo" label="单据号" show-overflow-tooltip="" />
|
<el-table-column prop="qty" label="拆垛箱数" show-overflow-tooltip="" />
|
<el-table-column prop="palletQty" label="整跺箱数" show-overflow-tooltip="" />
|
<el-table-column prop="lotNo" label="批次号" show-overflow-tooltip="" />
|
<el-table-column prop="skuNo" label="物料编码" show-overflow-tooltip="" />
|
<el-table-column prop="skuName" label="物料名称" show-overflow-tooltip="" />
|
<el-table-column prop="unstackingMode" width="100" label="拆垛方式" show-overflow-tooltip="">
|
<template #default="scope">
|
<span v-if="scope.row.unstackingMode">
|
<el-tag :type="dv('UnstackingModeEnum', scope.row.unstackingMode)?.tagType"> {{
|
dv('UnstackingModeEnum',
|
scope.row.unstackingMode)?.name }}</el-tag>
|
</span>
|
</template>
|
</el-table-column>
|
<el-table-column prop="isBind" width="85" label="是否绑定" show-overflow-tooltip="">
|
<template #default="scope">
|
<span v-if="scope.row.isBind != null">
|
<el-tag :type="dv('IsBindEnum', scope.row.isBind)?.tagType"> {{ dv('IsBindEnum',
|
scope.row.isBind)?.name }}</el-tag>
|
</span>
|
</template>
|
</el-table-column>
|
<el-table-column prop="stationNum" label="拆垛工位号" show-overflow-tooltip="" />
|
<el-table-column prop="cancelDate" label="取消时间" show-overflow-tooltip="" />
|
<el-table-column prop="finishDate" label="完成时间" show-overflow-tooltip="" />
|
<!-- <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
|
<template #default="scope">
|
<ModifyRecord :data="scope.row" />
|
</template>
|
</el-table-column> -->
|
<el-table-column prop="操作" label="操作" width="200" align="center" fixed="right" show-overflow-tooltip=""
|
v-if="auth('wcsTask:complete') || auth('wcsTask:cancell')">
|
<template #default="scope">
|
<template v-if="scope.row.status <= 1">
|
<el-button icon="ele-Check" size="small" text="" type="primary" @click="completeTask(scope.row)"
|
v-auth="'wcsTask:complete'"> 完成 </el-button>
|
<el-button icon="ele-Close" size="small" text="" type="primary" @click="cancellTask(scope.row)"
|
v-auth="'wcsTask:cancell'"> 取消 </el-button>
|
</template>
|
<template v-if="scope.row.status == 2 && scope.row.origin == 'WMS'">
|
<el-button icon="ele-Upload" size="small" text="" type="primary" @click="uploadTask(scope.row)"
|
v-auth="'wcsTask:cancell'"> 上传 </el-button>
|
</template>
|
<template v-if="scope.row.status == 0">
|
<el-button icon="ele-Top" size="small" text="" type="primary" @click="topUpTask(scope.row)"
|
v-auth="'wcsTask:cancell'"> 置顶 </el-button>
|
</template>
|
</template>
|
</el-table-column>
|
</el-table>
|
<el-pagination v-model:currentPage="tableParams.page" v-model:page-size="tableParams.pageSize"
|
:total="tableParams.total" :page-sizes="[10, 20, 50, 100, 200, 500]" size="small" background=""
|
@size-change="handleSizeChange" @current-change="handleCurrentChange"
|
layout="total, sizes, prev, pager, next, jumper" />
|
<printDialog ref="printDialogRef" :title="printWcsTaskTitle" @reloadTable="handleQuery" />
|
<editDialog ref="editDialogRef" :title="editWcsTaskTitle" @reloadTable="handleQuery" />
|
</el-card>
|
</el-col>
|
<el-col :span="10" :xs="24" style="display: flex; height: 100%; flex: 1">
|
<el-card class="full-table" shadow="hover" :body-style="{ height: 'calc(100% - 51px)' }">
|
<template #header>
|
<el-icon size="16"
|
style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务详情
|
</template>
|
<el-form :model="queryParams2" ref="queryForm2" labelWidth="90">
|
<el-row>
|
<el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="8" class="mb10">
|
<el-form-item label="任务号">
|
<el-input v-model="queryParams2.taskNo" clearable="" placeholder="请输入任务号" style="width: 130px;" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="8" class="mb10" style="margin-left: 20px;">
|
<el-form-item>
|
<el-button type="primary" icon="ele-Search" @click="handleQuery2"> 查询
|
</el-button>
|
</el-form-item>
|
|
</el-col>
|
</el-row>
|
</el-form>
|
<el-table :data="tableData2" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id"
|
border="">
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
<el-table-column prop="taskNo" label="任务号" show-overflow-tooltip="" />
|
<!-- <el-table-column prop="plcId" label="交互工位号" show-overflow-tooltip="" /> -->
|
<el-table-column prop="plcName" label="交互位置" show-overflow-tooltip="" />
|
<el-table-column prop="interactiveMsg" label="交互信息" show-overflow-tooltip="" />
|
<el-table-column prop="createTime" label="交互时间" show-overflow-tooltip="" />
|
<!-- <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
|
<template #default="scope">
|
<ModifyRecord :data="scope.row" />
|
</template>
|
</el-table-column> -->
|
</el-table>
|
<el-pagination v-model:currentPage="tableParams2.page" v-model:page-size="tableParams2.pageSize"
|
:total="tableParams2.total" :page-sizes="[10, 20, 50, 100, 200, 500]" size="small" background=""
|
@size-change="handleSizeChange2" @current-change="handleCurrentChange2"
|
layout="total, sizes, prev, pager, next, jumper" />
|
</el-card>
|
</el-col>
|
</el-row>
|
</div>
|
</template>
|
|
<script lang="ts" setup="" name="wcsTask">
|
import ModifyRecord from '/@/components/table/modifyRecord.vue';
|
import { onMounted, reactive, ref } from 'vue';
|
import { ElMessageBox, ElMessage } from "element-plus";
|
import { auth } from '/@/utils/authFunction';
|
|
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
|
import { getDictLabelByVal as dv } from '/@/utils/dict-utils';
|
|
import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
|
import editDialog from '/@/views/wcs/wcsTask/component/editDialog.vue'
|
import { pageWcsTask, finshWcsTask, uploadWcsTask,topUpWcsTask } from '/@/api/wcs/wcsTask';
|
import { pageWcsMonitorTask } from '/@/api/wcs/wcsTaskMonitor';
|
import { signalR } from './signalR';
|
|
const showAdvanceQueryUI = ref(false);
|
const printDialogRef = ref();
|
const editDialogRef = ref();
|
const loading = ref(false);
|
const tableData = ref<any>([]);
|
const tableData2 = ref<any>([]);
|
const queryParams = ref<any>({});
|
const queryParams2 = ref<any>({});
|
const tableParams = ref({
|
page: 1,
|
pageSize: 20,
|
total: 0,
|
});
|
const tableParams2 = ref({
|
page: 1,
|
pageSize: 20,
|
total: 0,
|
});
|
const printWcsTaskTitle = ref("");
|
const editWcsTaskTitle = ref("");
|
//连接signalR 监听后台任务日志变更
|
onMounted(async () => {
|
signalR.off('PublicTask');
|
signalR.on('PublicTask', (data: any) => {
|
console.log(data)
|
var listTask = tableData.value.filter(t => t.id == data.id);
|
if (listTask.length == 0) {
|
tableData.value.unshift(data)
|
}
|
else {
|
//如果已经存在就更新数据
|
const index = tableData.value.findIndex(t => t.id == data.id);
|
tableData.value.splice(index, 1, data);
|
}
|
});
|
signalR.off('PublicTaskMonitor');
|
signalR.on('PublicTaskMonitor', async (data: any) => {
|
console.log(data);
|
if (queryParams2.value.taskNo == undefined || queryParams2.value.taskNo == data.taskNo) {
|
if (tableData2.value.filter(t => t.id == data.id).length == 0) {
|
tableData2.value.unshift(data)
|
}
|
}
|
});
|
});
|
// 改变高级查询的控件显示状态
|
const changeAdvanceQueryUI = () => {
|
showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
|
}
|
|
// 查询操作
|
const handleQuery = async () => {
|
loading.value = true;
|
var res = await pageWcsTask(Object.assign(queryParams.value, tableParams.value));
|
tableData.value = res.data.result?.items ?? [];
|
tableParams.value.total = res.data.result?.total;
|
loading.value = false;
|
};
|
// 查询操作
|
const handleQuery2 = async () => {
|
loading.value = true;
|
var res = await pageWcsMonitorTask(Object.assign(queryParams2.value, tableParams2.value));
|
tableData2.value = res.data.result?.items ?? [];
|
tableParams2.value.total = res.data.result?.total;
|
loading.value = false;
|
};
|
|
// 列排序
|
const sortChange = async (column: any) => {
|
queryParams.value.field = column.prop;
|
queryParams.value.order = column.order;
|
await handleQuery();
|
};
|
|
// 打开新增页面
|
const openAddWcsTask = () => {
|
editWcsTaskTitle.value = '添加任务表';
|
editDialogRef.value.openDialog({});
|
};
|
|
// 打开打印页面
|
const openPrintWcsTask = async (row: any) => {
|
printWcsTaskTitle.value = '打印任务表';
|
}
|
|
// 打开编辑页面
|
const openEditWcsTask = (row: any) => {
|
editWcsTaskTitle.value = '编辑任务表';
|
editDialogRef.value.openDialog(row);
|
};
|
//完成任务
|
const completeTask = async (row: any) => {
|
ElMessageBox.confirm(`确定要完成任务吗?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(async () => {
|
var param = Object.assign(row);
|
param.status = 2;
|
await finshWcsTask(param);
|
handleQuery();
|
handleQuery2();
|
ElMessage.success("完成任务成功");
|
})
|
.catch(() => { });
|
}
|
//取消任务
|
const cancellTask = async (row: any) => {
|
ElMessageBox.confirm(`确定要取消任务吗?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(async () => {
|
var param = Object.assign(row);
|
param.status = 4;
|
await finshWcsTask(param);
|
handleQuery();
|
handleQuery2();
|
ElMessage.success("取消任务成功");
|
})
|
.catch(() => { });
|
|
}
|
//上传任务
|
const uploadTask = async (row: any) => {
|
ElMessageBox.confirm(`确定要上传任务吗?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(async () => {
|
var param = Object.assign(row);
|
await topUpTask(param);
|
handleQuery();
|
handleQuery2();
|
ElMessage.success("上传任务成功!");
|
})
|
.catch(() => { });
|
|
}
|
//置顶任务
|
const topUpTask = async (row: any) => {
|
ElMessageBox.confirm(`确定要置顶任务吗?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(async () => {
|
var param = Object.assign(row);
|
await topUpWcsTask(param);
|
handleQuery();
|
handleQuery2();
|
ElMessage.success("置顶任务成功");
|
})
|
.catch(() => { });
|
|
}
|
// 点击表格
|
const handleClick = (row, column, cell, event) => {
|
if (column.property === '操作') {
|
return;
|
}
|
queryParams2.value.taskNo = row.taskNo;
|
handleQuery2();
|
};
|
// 改变页面容量
|
const handleSizeChange = (val: number) => {
|
tableParams.value.pageSize = val;
|
handleQuery();
|
};
|
|
// 改变页码序号
|
const handleCurrentChange = (val: number) => {
|
tableParams.value.page = val;
|
handleQuery();
|
};
|
// 改变页面容量
|
const handleSizeChange2 = (val: number) => {
|
tableParams2.value.pageSize = val;
|
handleQuery();
|
};
|
|
// 改变页码序号
|
const handleCurrentChange2 = (val: number) => {
|
tableParams2.value.page = val;
|
handleQuery();
|
};
|
handleQuery();
|
handleQuery2();
|
</script>
|
<style scoped>
|
:deep(.el-input),
|
:deep(.el-select),
|
:deep(.el-input-number) {
|
width: 100%;
|
}
|
|
/* :deep(.el-input__inner)
|
{
|
width: 50%;
|
} */
|
</style>
|