1
xiazhengtongxue
2 天以前 5b34a1458e74f8902d01ebd844c2954f554c9e74
Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue
@@ -1,8 +1,29 @@
<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>
@@ -11,16 +32,30 @@
        </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>
@@ -35,10 +70,25 @@
  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,           // 任务总数
      },
    };
  },
@@ -49,40 +99,110 @@
      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) => {
@@ -90,7 +210,7 @@
          });
        })
        .catch((err) => {
          this.$message.error("创建换盘机械手任务失败:" + (err.message || "未知错误"));
          this.$message.error(`创建${taskTypeName}失败:` + (err.message || "未知错误"));
        });
    },
  },