<template>
|
<div>
|
<!-- 手动创建机器人任务弹窗 -->
|
<vol-box v-model="showManualCreate" :lazy="true" width="550px" :padding="15" title="手动创建机器人任务">
|
<el-form :model="manualFormData" ref="form" label-width="120px">
|
<!-- 任务类型选择 -->
|
<el-form-item label="任务类型" prop="robotRoadway" required>
|
<el-select v-model="manualFormData.robotRoadway" placeholder="请选择任务类型" @change="onTaskTypeChange">
|
<el-option label="组盘任务" value="GroupPallet"></el-option>
|
<el-option label="换盘任务" value="ChangePallet"></el-option>
|
<el-option label="拆盘任务" value="SplitPallet"></el-option>
|
</el-select>
|
</el-form-item>
|
|
<!-- 组盘任务:仅需目标地址托盘码和任务总数 -->
|
<template v-if="manualFormData.robotRoadway === 'GroupPallet'">
|
<el-form-item label="目标地址托盘码" prop="robotTargetAddressPalletCode" required>
|
<el-input v-model="manualFormData.robotTargetAddressPalletCode" placeholder="请输入目标地址托盘码"></el-input>
|
</el-form-item>
|
<el-form-item label="任务总数" prop="robotTaskTotalNum" required>
|
<el-input-number v-model="manualFormData.robotTaskTotalNum" :min="1" :max="999" label="任务总数"></el-input-number>
|
</el-form-item>
|
</template>
|
|
<!-- 换盘任务:需来源、目标托盘码和4个方向 -->
|
<template v-if="manualFormData.robotRoadway === 'ChangePallet'">
|
<el-form-item label="来源地址托盘码" prop="robotSourceAddressPalletCode" required>
|
<el-input v-model="manualFormData.robotSourceAddressPalletCode" placeholder="请输入来源地址托盘码"></el-input>
|
</el-form-item>
|
<el-form-item label="目标地址托盘码" prop="robotTargetAddressPalletCode" required>
|
<el-input v-model="manualFormData.robotTargetAddressPalletCode" placeholder="请输入目标地址托盘码"></el-input>
|
</el-form-item>
|
<el-form-item label="方向" prop="forward" required>
|
<el-radio-group v-model="manualFormData.forward">
|
<el-radio :label="1">去化成1: 源:1(11010) → 目标:3(2103)</el-radio>
|
<el-radio :label="2">去化成2: 源:2(11001) → 目标:4(2101)</el-radio>
|
<el-radio :label="3">回高温3: 源:4(2103) → 目标:2(11010)</el-radio>
|
<el-radio :label="4">回高温4: 源:4(2101) → 目标:2(11001)</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="任务总数" prop="robotTaskTotalNum" required>
|
<el-input-number v-model="manualFormData.robotTaskTotalNum" :min="1" :max="999" label="任务总数"></el-input-number>
|
</el-form-item>
|
</template>
|
|
<!-- 拆盘任务:仅需来源地址托盘码和任务总数 -->
|
<template v-if="manualFormData.robotRoadway === 'SplitPallet'">
|
<el-form-item label="来源地址托盘码" prop="robotSourceAddressPalletCode" required>
|
<el-input v-model="manualFormData.robotSourceAddressPalletCode" placeholder="请输入来源地址托盘码"></el-input>
|
</el-form-item>
|
<el-form-item label="任务总数" prop="robotTaskTotalNum" required>
|
<el-input-number v-model="manualFormData.robotTaskTotalNum" :min="1" :max="999" label="任务总数"></el-input-number>
|
</el-form-item>
|
</template>
|
</el-form>
|
<template #footer>
|
<el-button type="primary" size="small" @click="submitManualCreate">确定</el-button>
|
<el-button type="danger" size="small" @click="closeDialog">关闭</el-button>
|
</template>
|
</vol-box>
|
</div>
|
</template>
|
|
<script>
|
import VolBox from "@/components/basic/VolBox.vue";
|
|
export default {
|
components: { VolBox },
|
emits: ["parentCall"],
|
data() {
|
return {
|
showManualCreate: false,
|
// 任务类型映射(用于显示中文名称)
|
taskTypeMap: {
|
GroupPallet: "组盘任务",
|
ChangePallet: "换盘任务",
|
SplitPallet: "拆盘任务",
|
},
|
// 方向描述映射
|
directionMap: {
|
1: "去化成1: 源:1(11010) → 目标:3(2103)",
|
2: "去化成2: 源:2(11001) → 目标:4(2101)",
|
3: "回高温3: 源:4(2103) → 目标:2(11010)",
|
4: "回高温4: 源:4(2101) → 目标:2(11001)",
|
},
|
manualFormData: {
|
robotRoadway: "", // 机器人名称/任务类型
|
robotSourceAddressPalletCode: "", // 来源地址托盘码
|
robotTargetAddressPalletCode: "", // 目标地址托盘码
|
forward: 1, // 方向(换盘任务使用,1-4)
|
robotTaskTotalNum: 1, // 任务总数
|
},
|
};
|
},
|
methods: {
|
// 打开弹窗
|
open() {
|
this.showManualCreate = true;
|
this.resetManualForm();
|
},
|
|
// 关闭弹窗
|
closeDialog() {
|
this.showManualCreate = false;
|
},
|
|
// 重置表单
|
resetManualForm() {
|
this.manualFormData = {
|
robotRoadway: "",
|
robotSourceAddressPalletCode: "",
|
robotTargetAddressPalletCode: "",
|
forward: 1,
|
robotTaskTotalNum: 1,
|
};
|
},
|
|
// 任务类型切换时重置相关字段
|
onTaskTypeChange(value) {
|
this.manualFormData.robotSourceAddressPalletCode = "";
|
this.manualFormData.robotTargetAddressPalletCode = "";
|
this.manualFormData.forward = 1;
|
},
|
|
// 表单验证
|
validateForm() {
|
const data = this.manualFormData;
|
|
// 1. 必选任务类型
|
if (!data.robotRoadway) {
|
this.$message.error("请选择任务类型");
|
return false;
|
}
|
|
// 2. 根据任务类型验证必填字段
|
const taskType = data.robotRoadway;
|
|
if (taskType === "GroupPallet") {
|
if (!data.robotTargetAddressPalletCode) {
|
this.$message.error("组盘任务:请输入目标地址托盘码");
|
return false;
|
}
|
} else if (taskType === "ChangePallet") {
|
if (!data.robotSourceAddressPalletCode) {
|
this.$message.error("换盘任务:请输入来源地址托盘码");
|
return false;
|
}
|
if (!data.robotTargetAddressPalletCode) {
|
this.$message.error("换盘任务:请输入目标地址托盘码");
|
return false;
|
}
|
// 验证方向 1-4
|
if (![1, 2, 3, 4].includes(data.forward)) {
|
this.$message.error("换盘任务:请选择有效的方向(1-4)");
|
return false;
|
}
|
} else if (taskType === "SplitPallet") {
|
if (!data.robotSourceAddressPalletCode) {
|
this.$message.error("拆盘任务:请输入来源地址托盘码");
|
return false;
|
}
|
}
|
|
// 3. 验证任务总数
|
if (data.robotTaskTotalNum < 1) {
|
this.$message.error("任务总数不能小于1");
|
return false;
|
}
|
|
return true;
|
},
|
|
// 提交手动创建任务
|
submitManualCreate() {
|
// 表单验证
|
if (!this.validateForm()) {
|
return;
|
}
|
|
// 构建请求参数(与后端 ManualRobotTaskDto 对应)
|
const params = {
|
robotRoadway: this.manualFormData.robotRoadway,
|
robotSourceAddressPalletCode: this.manualFormData.robotSourceAddressPalletCode,
|
robotTargetAddressPalletCode: this.manualFormData.robotTargetAddressPalletCode,
|
robotTaskTotalNum: this.manualFormData.robotTaskTotalNum,
|
forward: this.manualFormData.forward, // 方向,整型 1-4
|
};
|
|
// 获取任务类型中文名称用于提示
|
const taskTypeName = this.taskTypeMap[params.robotRoadway] || "机器人";
|
|
// 获取方向描述(仅换盘任务)
|
let directionDesc = "";
|
if (params.robotRoadway === "ChangePallet") {
|
directionDesc = this.directionMap[params.forward] || "";
|
}
|
|
// 调用后端API创建机器人任务
|
this.http
|
.post("api/RobotTask/CreateRobotTaskManually", params, `创建${taskTypeName}${directionDesc ? ' - ' + directionDesc : ''}中...`)
|
.then((res) => {
|
if (!res.status) {
|
return this.$message.error(res.message);
|
}
|
this.$message.success(`${taskTypeName}${directionDesc ? ' - ' + directionDesc : ''}创建成功`);
|
this.showManualCreate = false;
|
// 刷新父页面数据
|
this.$emit("parentCall", ($vue) => {
|
$vue.refresh();
|
});
|
})
|
.catch((err) => {
|
this.$message.error(`创建${taskTypeName}失败:` + (err.message || "未知错误"));
|
});
|
},
|
},
|
};
|
</script>
|