|
|
|
|
@ -28,6 +28,18 @@
|
|
|
|
|
<el-option v-for="dict in wcs_is_flag" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="创建时间" style="width: 410px">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="dateRange"
|
|
|
|
|
:format="CREATED_TIME_PICKER_FORMAT"
|
|
|
|
|
:value-format="CREATED_TIME_VALUE_FORMAT"
|
|
|
|
|
type="datetimerange"
|
|
|
|
|
range-separator="-"
|
|
|
|
|
start-placeholder="开始时间"
|
|
|
|
|
end-placeholder="结束时间"
|
|
|
|
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
|
|
|
></el-date-picker>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
|
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
|
|
@ -90,9 +102,9 @@
|
|
|
|
|
<dict-tag :options="wcs_is_flag" :value="scope.row.isFlag" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="创建时间" align="center" prop="createdTime" width="100">
|
|
|
|
|
<el-table-column label="创建时间" align="center" prop="createdTime" width="180">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<span>{{ parseTime(scope.row.createdTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
|
<span>{{ parseTime(scope.row.createdTime, CREATED_TIME_DISPLAY_FORMAT) }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="创建人" align="center" prop="createdByName" width="100" />
|
|
|
|
|
@ -137,7 +149,7 @@
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="物料条码" prop="materialBarcode">
|
|
|
|
|
<el-input v-model="form.materialBarcode" placeholder="请输入物料条码" />
|
|
|
|
|
<el-input v-model="form.materialBarcode" placeholder="物料条码" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -222,7 +234,7 @@
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="物料条码" align="center" prop="materialBarcode" min-width="130">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.materialBarcode" placeholder="物料条码" size="small" />
|
|
|
|
|
<el-input v-model="scope.row.materialBarcode" placeholder="物料条码" size="small" disabled />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="数量" align="center" prop="materialCount" width="120">
|
|
|
|
|
@ -313,6 +325,12 @@ import { getMaterialInfoList } from '@/api/wcs/materialInfo';
|
|
|
|
|
import { MaterialInfoVO } from '@/api/wcs/materialInfo/types';
|
|
|
|
|
import { getPathInfoList } from '@/api/wcs/pathInfo';
|
|
|
|
|
import { PathInfoVO } from '@/api/wcs/pathInfo/types';
|
|
|
|
|
import {
|
|
|
|
|
CREATED_TIME_DISPLAY_FORMAT,
|
|
|
|
|
CREATED_TIME_PICKER_FORMAT,
|
|
|
|
|
CREATED_TIME_VALUE_FORMAT,
|
|
|
|
|
getTodayCreatedTimeRange
|
|
|
|
|
} from '../utils/createdTimeRange';
|
|
|
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
|
|
const { wcs_is_flag, wcs_task_category, wcs_task_type, wcs_task_status } = toRefs<any>(
|
|
|
|
|
@ -332,6 +350,9 @@ const single = ref(true);
|
|
|
|
|
const multiple = ref(true);
|
|
|
|
|
const total = ref(0);
|
|
|
|
|
|
|
|
|
|
// 创建时间范围筛选,与 SysUser 一致由 addDateRange 注入到 params.beginTime/endTime。
|
|
|
|
|
const dateRange = ref<[string, string]>(getTodayCreatedTimeRange());
|
|
|
|
|
|
|
|
|
|
const queryFormRef = ref<ElFormInstance>();
|
|
|
|
|
const taskQueueFormRef = ref<ElFormInstance>();
|
|
|
|
|
|
|
|
|
|
@ -391,7 +412,8 @@ const { queryParams, form, rules } = toRefs(data);
|
|
|
|
|
const getList = async () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
try {
|
|
|
|
|
const res = await listTaskQueue(queryParams.value);
|
|
|
|
|
// 走 addDateRange 把日期范围塞到 params.beginTime/endTime,对齐后端 SysUser 的范围筛选契约。
|
|
|
|
|
const res = await listTaskQueue(proxy?.addDateRange(queryParams.value, dateRange.value));
|
|
|
|
|
taskQueueList.value = res.rows;
|
|
|
|
|
total.value = res.total;
|
|
|
|
|
} finally {
|
|
|
|
|
@ -417,14 +439,14 @@ const loadFormOptions = async () => {
|
|
|
|
|
|
|
|
|
|
const handleMaterialChange = (materialCode?: string) => {
|
|
|
|
|
const material = materialList.value.find(item => item.materialCode === materialCode);
|
|
|
|
|
// 选择物料后顺带回填条码,降低主表物料编码与条码不一致的概率。
|
|
|
|
|
form.value.materialBarcode = material?.materialBarcode || form.value.materialBarcode;
|
|
|
|
|
// 物料条码来自物料主数据,只能随物料选择同步,避免现场手工改出编码与条码不一致的数据。
|
|
|
|
|
form.value.materialBarcode = material?.materialBarcode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleDetailMaterialChange = (row: TaskDetailForm) => {
|
|
|
|
|
const material = materialList.value.find(item => item.materialCode === row.materialCode);
|
|
|
|
|
// 明细物料条码跟随选中物料默认回填,用户仍可按现场扫码结果手动调整。
|
|
|
|
|
row.materialBarcode = material?.materialBarcode || row.materialBarcode;
|
|
|
|
|
// 明细物料条码同样由主数据带出,清空物料时同步清空派生条码,避免残留旧值。
|
|
|
|
|
row.materialBarcode = material?.materialBarcode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const cancel = () => {
|
|
|
|
|
@ -446,6 +468,8 @@ const handleQuery = () => {
|
|
|
|
|
|
|
|
|
|
const resetQuery = () => {
|
|
|
|
|
queryFormRef.value?.resetFields();
|
|
|
|
|
// 重置后恢复当天完整范围,避免刚新增的数据落在旧结束时间之后。
|
|
|
|
|
dateRange.value = getTodayCreatedTimeRange();
|
|
|
|
|
handleQuery();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -513,32 +537,51 @@ const handleDelDetail = (index: number) => {
|
|
|
|
|
detailList.value.splice(index, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const buildSubmitData = (): TaskQueueForm => ({
|
|
|
|
|
objId: form.value.objId,
|
|
|
|
|
taskCode: form.value.taskCode,
|
|
|
|
|
materialCode: form.value.materialCode,
|
|
|
|
|
palletBarcode: form.value.palletBarcode,
|
|
|
|
|
materialBarcode: form.value.materialBarcode,
|
|
|
|
|
materialCount: form.value.materialCount,
|
|
|
|
|
taskType: form.value.taskType,
|
|
|
|
|
taskCategory: form.value.taskCategory,
|
|
|
|
|
startPoint: form.value.startPoint,
|
|
|
|
|
endPoint: form.value.endPoint,
|
|
|
|
|
pathCode: form.value.pathCode,
|
|
|
|
|
taskStatus: form.value.taskStatus,
|
|
|
|
|
taskSteps: form.value.taskSteps,
|
|
|
|
|
isFlag: form.value.isFlag,
|
|
|
|
|
remark: form.value.remark,
|
|
|
|
|
// 明细与主表通过任务编号关联,提交前只保留业务字段,避免把展示名称等派生字段回传。
|
|
|
|
|
details: detailList.value.map(item => ({
|
|
|
|
|
objId: item.objId,
|
|
|
|
|
taskCode: form.value.taskCode || '',
|
|
|
|
|
materialCode: item.materialCode,
|
|
|
|
|
palletBarcode: item.palletBarcode,
|
|
|
|
|
materialBarcode: item.materialBarcode,
|
|
|
|
|
materialCount: item.materialCount,
|
|
|
|
|
taskType: item.taskType,
|
|
|
|
|
taskCategory: item.taskCategory,
|
|
|
|
|
startPoint: item.startPoint,
|
|
|
|
|
endPoint: item.endPoint,
|
|
|
|
|
isValidate: item.isValidate,
|
|
|
|
|
pathCode: item.pathCode,
|
|
|
|
|
taskStatus: item.taskStatus,
|
|
|
|
|
isFlag: item.isFlag,
|
|
|
|
|
remark: item.remark
|
|
|
|
|
}))
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const submitForm = () => {
|
|
|
|
|
taskQueueFormRef.value?.validate(async (valid: boolean) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
buttonLoading.value = true;
|
|
|
|
|
// 明细与主表通过任务编号关联,提交前只保留业务字段,避免把展示名称等技术字段回传。
|
|
|
|
|
form.value.details = detailList.value.map(item => ({
|
|
|
|
|
objId: item.objId,
|
|
|
|
|
taskCode: form.value.taskCode || '',
|
|
|
|
|
materialCode: item.materialCode,
|
|
|
|
|
palletBarcode: item.palletBarcode,
|
|
|
|
|
materialBarcode: item.materialBarcode,
|
|
|
|
|
materialCount: item.materialCount,
|
|
|
|
|
taskType: item.taskType,
|
|
|
|
|
taskCategory: item.taskCategory,
|
|
|
|
|
startPoint: item.startPoint,
|
|
|
|
|
endPoint: item.endPoint,
|
|
|
|
|
isValidate: item.isValidate,
|
|
|
|
|
pathCode: item.pathCode,
|
|
|
|
|
taskStatus: item.taskStatus,
|
|
|
|
|
isFlag: item.isFlag,
|
|
|
|
|
remark: item.remark
|
|
|
|
|
}));
|
|
|
|
|
if (form.value.objId) {
|
|
|
|
|
await updateTaskQueue(form.value).finally(() => buttonLoading.value = false);
|
|
|
|
|
const submitData = buildSubmitData();
|
|
|
|
|
if (submitData.objId) {
|
|
|
|
|
await updateTaskQueue(submitData).finally(() => buttonLoading.value = false);
|
|
|
|
|
} else {
|
|
|
|
|
await addTaskQueue(form.value).finally(() => buttonLoading.value = false);
|
|
|
|
|
await addTaskQueue(submitData).finally(() => buttonLoading.value = false);
|
|
|
|
|
}
|
|
|
|
|
proxy?.$modal.msgSuccess("操作成功");
|
|
|
|
|
dialog.visible = false;
|
|
|
|
|
|