| | |
| | | <template>
|
| | | <div>
|
| | | <!-- 手动创建换盘机械手任务弹窗 -->
|
| | | <vol-box v-model="showManualCreate" :lazy="true" width="500px" :padding="15" title="手动创建换盘机械手任务">
|
| | | <!-- 手动创建机器人任务弹窗 -->
|
| | | <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>
|
| | | <el-form-item label="方向" prop="forward" required>
|
| | | <el-radio-group v-model="manualFormData.forward">
|
| | | <el-radio :label="1">去化成(源:1→目标:3)</el-radio>
|
| | | <el-radio :label="2">去化成(源:2→目标:4)</el-radio>
|
| | | <el-radio :label="3">回高温(源:3→目标:1)</el-radio>
|
| | | <el-radio :label="4">回高温(源:4→目标:2)</el-radio>
|
| | | <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="showManualCreate = false">关闭</el-button>
|
| | | <el-button type="danger" size="small" @click="closeDialog">关闭</el-button>
|
| | | </template>
|
| | | </vol-box>
|
| | | </div>
|
| | |
| | | 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: {
|
| | | robotSourceAddressPalletCode: "",
|
| | | robotTargetAddressPalletCode: "",
|
| | | forward: 1, // 1=去化成(1→3), 2=去化成(2→4), 3=回高温(3→1), 4=回高温(4→2)
|
| | | robotRoadway: "", // 机器人名称/任务类型
|
| | | robotSourceAddressPalletCode: "", // 来源地址托盘码
|
| | | robotTargetAddressPalletCode: "", // 目标地址托盘码
|
| | | forward: 1, // 方向(换盘任务使用,1-4)
|
| | | robotTaskTotalNum: 1, // 任务总数
|
| | | },
|
| | | };
|
| | | },
|
| | |
| | | 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.manualFormData.robotSourceAddressPalletCode) {
|
| | | return this.$message.error("请输入来源地址托盘码");
|
| | | }
|
| | | if (!this.manualFormData.robotTargetAddressPalletCode) {
|
| | | return this.$message.error("请输入目标地址托盘码");
|
| | | }
|
| | | if (this.manualFormData.forward === undefined || this.manualFormData.forward === null) {
|
| | | return this.$message.error("请选择方向");
|
| | | if (!this.validateForm()) {
|
| | | return;
|
| | | }
|
| | |
|
| | | // 调用后端API创建换盘机械手任务
|
| | | this.http
|
| | | .post("api/RobotTask/AddRobotTask", {
|
| | | // 构建请求参数(与后端 ManualRobotTaskDto 对应)
|
| | | const params = {
|
| | | robotRoadway: this.manualFormData.robotRoadway,
|
| | | robotSourceAddressPalletCode: this.manualFormData.robotSourceAddressPalletCode,
|
| | | robotTargetAddressPalletCode: this.manualFormData.robotTargetAddressPalletCode,
|
| | | forward: this.manualFormData.forward, // 注意字段名改为forward,类型为整数
|
| | | }, "创建换盘机械手任务中...")
|
| | | 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("换盘机械手任务创建成功");
|
| | | this.$message.success(`${taskTypeName}${directionDesc ? ' - ' + directionDesc : ''}创建成功`);
|
| | | this.showManualCreate = false;
|
| | | // 刷新父页面数据
|
| | | this.$emit("parentCall", ($vue) => {
|
| | |
| | | });
|
| | | })
|
| | | .catch((err) => {
|
| | | this.$message.error("创建换盘机械手任务失败:" + (err.message || "未知错误"));
|
| | | this.$message.error(`创建${taskTypeName}失败:` + (err.message || "未知错误"));
|
| | | });
|
| | | },
|
| | | },
|