EmptyOutTaskModal.vue 6 KB
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    :confirmLoading="confirmLoading"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
              <j-select-multi-empty-container v-model="model.containerCode" @change="getPortList" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="出库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPortCode">
              <a-select
                show-search
                placeholder="请选择出库口"
                option-filter-prop="children"
                v-model="model.toPortCode">
                <a-select-option v-for="item in portList" :key="item.name" :value="item.code">{{
                    item.name
                  }}
                </a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>

          <!-- 新增:Agv去向位置输入框 -->
          <a-col :span="24">
            <a-form-model-item v-has="'taskHeader:hasToLocation'" label="Agv去向位置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toAgvPort">
              <a-input v-model="model.toAgvPort" placeholder="请输入Agv去向位置"></a-input>
            </a-form-model-item>
          </a-col>

          <!-- 新增:是否生成AGV任务选项 -->
          <a-col :span="24">
            <a-form-model-item label="是否生成AGV任务" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-checkbox :checked="isAgvChecked" @change="handleAgvTaskChange"></a-checkbox>
            </a-form-model-item>
          </a-col>

        </a-row>
      </a-form-model>
    </a-spin>
  </j-modal>
</template>

<script>
import {httpAction} from '@/api/manage'
import {validateDuplicateValue} from '@/utils/util'
import {createEmptyOut} from '@/api/api'
import {selectOutPort} from '@/api/api'
import JSelectMultiEmptyContainer from "@comp/jeecgbiz/JSelectMultiEmptyContainer";

export default {
  name: "EmptyOutTaskModal",
  components: {JSelectMultiEmptyContainer},
  data() {
    return {
      title: "操作",
      width: 500,
      portList: [],
      querySource: {},
      visible: false,
      // 新增:是否生成AGV任务的勾选状态,默认勾选
      isAgvChecked: true,
      model: {
        // 新增:用于后端交互的AGV任务状态值,默认1(勾选)
        isGenerateAgv: 1,
        containerCode: '',
        toPortCode: '',
        // 新增:Agv去向位置字段
        toAgvPort: ''
      },
      // 调整布局比例,优化小窗口显示
      labelCol: {
        xs: {span: 24},
        sm: {span: 6},
      },
      wrapperCol: {
        xs: {span: 24},
        sm: {span: 14},
      },
      confirmLoading: false,
      validatorRules: {
        containerCode: [
          {required: true, message: '请输入容器编码!'}
        ],
        toPortCode: [
          {required: true, message: '请选择出库口!'}
        ],
        // 新增:Agv去向位置验证规则,默认必填(因默认勾选)
        toAgvPort: [
          {required: true, message: '请输入Agv去向位置!'}
        ]
      },
      url: {
        add: "/task/taskHeader/createEmptyOut",
      }
    }
  },
  created() {
    this.modelDefault = JSON.parse(JSON.stringify(this.model));
  },
  methods: {
    add() {
      this.edit(this.modelDefault);
    },
    edit() {
      this.visible = true;
    },
    close() {
      this.$emit('close');
      this.visible = false;
      this.resetForm(); // 关闭时重置表单状态
    },
    getPortList() {
      this.querySource.containerCode = this.model.containerCode;
      selectOutPort(this.querySource).then((res) => {
        if (res.success) {
          this.portList = res.result;
          if (this.portList.length == 1) {
            this.model.toPortCode = this.portList[0].code;
          }
        }
      });
    },
    handleOk() {
      const that = this;
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true;
          // 同步复选框状态到model
          that.model.isGenerateAgv = that.isAgvChecked ? 1 : 0;

          createEmptyOut(this.model).then((res) => {
            if (res.success) {
              that.$message.success(res.message);
              that.$emit('ok');
              that.resetForm(); // 成功后重置表单
            } else {
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
            that.close();
          })
        } else {
          return false;
        }
      })
    },
    handleCancel() {
      this.close();
    },
    // 新增:处理AGV任务复选框状态变化
    handleAgvTaskChange(checked) {
      this.isAgvChecked = checked.target.checked;
      this.model.isGenerateAgv = this.isAgvChecked ? 1 : 0;

      // 动态更新Agv去向位置的验证规则
      this.$set(this.validatorRules.toAgvPort, 0, {
        required: this.isAgvChecked,
        message: '请输入Agv去向位置!'
      });

      // 取消勾选时清空输入并清除验证
      if (!this.isAgvChecked) {
        this.model.toAgvPort = '';
        this.$refs.form.clearValidate(['toAgvPort']);
      }

      this.$forceUpdate();
    },
    // 新增:重置表单方法
    resetForm() {
      this.model.containerCode = '';
      this.model.toPortCode = '';
      this.model.toAgvPort = '';
      // 重置为默认勾选状态
      this.isAgvChecked = true;
      this.model.isGenerateAgv = 1;
      // 恢复验证规则为必填
      this.$set(this.validatorRules.toAgvPort, 0, {
        required: true,
        message: '请输入Agv去向位置!'
      });
      this.$refs.form.clearValidate();
    }
  }
}
</script>