EmptyInTaskModal.vue 4.88 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">
              <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item v-has="'taskHeader:hasToLocation'" label="起点库位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fromPortCode">
              <a-input  v-model="model.fromPortCode" placeholder="请输入起点库位"></a-input>
            </a-form-model-item>
          </a-col>
          <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>
          <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 {createEmptyIn} from '@/api/api'

export default {
  name: "EmptyInTaskModal",
  components: {},
  data() {
    return {
      title: "操作",
      width: 500,
      visible: false,
      // 默认勾选状态
      isAgvChecked: true,
      model: {
        isGenerateAgv: 1, // 默认值为1(勾选状态)
        containerCode: '',
        fromPortCode: '',
        toAgvPort: ''
      },
      // 调整布局比例,适应小窗口显示
      labelCol: {
        xs: {span: 24},
        sm: {span: 6},
      },
      wrapperCol: {
        xs: {span: 24},
        sm: {span: 14},
      },
      confirmLoading: false,
      validatorRules: {
        containerCode: [
          {required: true, message: '请输入容器编码!'}
        ],
        toAgvPort: [
          {required: true, message: '请输入Agv去向位置!'} // 默认勾选,所以初始为必填
        ]
      },
      url: {
        add: "/task/taskHeader/createEmptyIn",
      }
    }
  },
  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(); // 关闭时重置表单
    },
    handleOk() {
      const that = this;
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true;
          // 同步复选框状态到model
          that.model.isGenerateAgv = that.isAgvChecked ? 1 : 0;

          createEmptyIn(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();
    },
    // 处理复选框状态变化
    handleAgvTaskChange(checked) {
      this.isAgvChecked = checked.target.checked;
      this.model.isGenerateAgv = this.isAgvChecked ? 1 : 0;

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

      // 取消勾选时的处理
      if (!this.isAgvChecked) {
        this.model.toAgvPort = ''; // 清空Agv去向位置
        this.$refs.form.clearValidate(['toAgvPort']);
      }

      this.$forceUpdate();
    },
    // 重置表单方法
    resetForm() {
      this.model.containerCode = '';
      this.model.fromPortCode = '';
      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>