qushaowei
2025-07-03 4c8b185fea72bc3bb8fc380a196b8fe2a8e5f1af
src/views/eam/purchase/modules/EamEquipmentPurchasePlanForm.vue
@@ -1,101 +1,247 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
      <a-form-model
        ref="form"
        :model="model"
        :rules="validatorRules"
        slot="detail"
      >
        <a-row>
          <a-col :span="12">
            <a-form-model-item label="采购计划编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planCode">
              <a-input v-model="model.planCode" placeholder="系统自动生成" disabled ></a-input>
            <a-form-model-item
              label="采购计划编码"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planCode"
            >
              <a-input
                v-model="model.planCode"
                placeholder="系统自动生成"
                disabled
              ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="采购计划名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planName">
              <a-input v-model="model.planName" placeholder="请输入采购计划名称"  ></a-input>
            <a-form-model-item
              label="采购计划名称"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planName"
            >
              <a-input
                v-model="model.planName"
                placeholder="请输入采购计划名称"
              ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12" v-if="disabled">
            <a-form-model-item label="计划状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStatus">
              <j-dict-select-tag dict-code="equipment_purchase_plan_status" placeholder="请选择计划状态"
                                 v-model="model.planStatus" />
          <a-col
            :span="12"
            v-if="disabled"
          >
            <a-form-model-item
              label="计划状态"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planStatus"
            >
              <j-dict-select-tag
                dict-code="equipment_purchase_plan_status"
                placeholder="请选择计划状态"
                v-model="model.planStatus"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="型号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentModel">
              <a-input v-model="model.equipmentModel" placeholder="请输入型号"  ></a-input>
            <a-form-model-item
              label="型号"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="equipmentModel"
            >
              <a-input
                v-model="model.equipmentModel"
                placeholder="请输入型号"
              ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="采购数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="purchaseNumber">
              <a-input-number v-model="model.purchaseNumber" placeholder="请输入采购数量" style="width: 100%" />
            <a-form-model-item
              label="采购数量"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="purchaseNumber"
            >
              <a-input-number
                v-model="model.purchaseNumber"
                placeholder="请输入采购数量"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="预计单价" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="estimatedUnitPrice">
              <a-input-number v-model="model.estimatedUnitPrice" placeholder="请输入预计单价" style="width: 100%" />
            <a-form-model-item
              label="预计单价"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="estimatedUnitPrice"
            >
              <a-input-number
                v-model="model.estimatedUnitPrice"
                placeholder="请输入预计单价"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="总价" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalPrice">
              <a-input-number v-model="model.totalPrice" placeholder="请输入总价" style="width: 100%" />
            <a-form-model-item
              label="总价"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="totalPrice"
            >
              <a-input-number
                v-model="model.totalPrice"
                placeholder="请输入总价"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="合同总金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="overallContractAmount">
              <a-input-number v-model="model.overallContractAmount" placeholder="请输入合同总金额" style="width: 100%" />
            <a-form-model-item
              label="合同总金额"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="overallContractAmount"
            >
              <a-input-number
                v-model="model.overallContractAmount"
                placeholder="请输入合同总金额"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="管理分类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentImportance">
              <j-dict-select-tag dict-code="equipment_abc_flag" placeholder="请选择管理分类"
                                 v-model="model.equipmentImportance" />
            <a-form-model-item
              label="管理分类"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="equipmentImportance"
            >
              <j-dict-select-tag
                dict-code="equipment_abc_flag"
                placeholder="请选择管理分类"
                v-model="model.equipmentImportance"
              />
            </a-form-model-item>
          </a-col>
<!--          <a-col :span="12">-->
<!--            <a-form-model-item label="计划类别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planCategory">-->
<!--              <a-input v-model="model.planCategory" placeholder="请输入计划类别"  ></a-input>-->
<!--            </a-form-model-item>-->
<!--          </a-col>-->
          <!--          <a-col :span="12">-->
          <!--            <a-form-model-item label="计划类别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planCategory">-->
          <!--              <a-input v-model="model.planCategory" placeholder="请输入计划类别"  ></a-input>-->
          <!--            </a-form-model-item>-->
          <!--          </a-col>-->
          <a-col :span="12">
            <a-form-model-item label="申请人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicant">
              <j-search-select-tag  placeholder="请选择申请人" v-model="model.applicant" dict="sys_user,realname, username, del_flag=0 and status=1"/>
            <a-form-model-item
              label="申请人"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="applicant"
            >
              <j-search-select-tag
                placeholder="请选择申请人"
                v-model="model.applicant"
                dict="sys_user,realname, realname, del_flag=0 and status=1"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="申请车间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicantProduction">
              <a-tree-select v-model="model.applicantProduction"
                             style="width: 100%"
                             :tree-data="treeData"
                             :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
                             placeholder="请选择使用车间"
                             allow-clear
                             tree-default-expand-all
                >
            <a-form-model-item
              label="申请车间"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="applicantProduction"
            >
              <a-tree-select
                v-model="model.applicantProduction"
                style="width: 100%"
                :tree-data="treeData"
                :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
                placeholder="请选择使用车间"
                allow-clear
                tree-default-expand-all
              >
              </a-tree-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="计划开始日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStartDate">
              <j-date :show-time="true" dateFormat="YYYY-MM-DD HH" placeholder="请选择计划开始日期" v-model="model.planStartDate"  style="width: 100%" />
            <a-form-model-item
              label="计划开始日期"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planStartDate"
            >
              <j-date
                :show-time="true"
                dateFormat="YYYY-MM-DD HH"
                placeholder="请选择计划开始日期"
                v-model="model.planStartDate"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="计划完成日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planEndDate">
              <j-date :show-time="true" dateFormat="YYYY-MM-DD HH" placeholder="请选择计划完成日期" v-model="model.planEndDate"  style="width: 100%" />
            <a-form-model-item
              label="计划完成日期"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planEndDate"
            >
              <j-date
                :show-time="true"
                dateFormat="YYYY-MM-DD HH"
                placeholder="请选择计划完成日期"
                v-model="model.planEndDate"
                style="width: 100%"
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="计划描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planDescription">
              <a-textarea v-model="model.planDescription" placeholder="请输入计划描述"  ></a-textarea>
            <a-form-model-item
              label="计划描述"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="planDescription"
            >
              <a-textarea
                v-model="model.planDescription"
                placeholder="请输入计划描述"
              ></a-textarea>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="实施及协助部门" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relatedDeparts">
              <a-input v-model="model.relatedDeparts" placeholder="请输入实施及协助部门"  ></a-input>
            <a-form-model-item
              label="实施及协助部门"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="relatedDeparts"
            >
              <a-input
                v-model="model.relatedDeparts"
                placeholder="请输入实施及协助部门"
              ></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
              <a-textarea v-model="model.remark" placeholder="请输入备注"  ></a-textarea>
            <a-form-model-item
              label="备注"
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              prop="remark"
            >
              <a-textarea
                v-model="model.remark"
                placeholder="请输入备注"
              ></a-textarea>
            </a-form-model-item>
          </a-col>
        </a-row>
@@ -106,126 +252,126 @@
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
  export default {
    name: 'EamEquipmentPurchasePlanForm',
    components: {
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model:{
         },
        treeData: [],
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
           planName: [
              { required: true, message: '请输入采购计划名称!'},
           ],
           equipmentModel: [
              { required: true, message: '请输入型号!'},
           ],
           purchaseNumber: [
              { required: true, message: '请输入采购数量!'},
           ],
           estimatedUnitPrice: [
              { required: true, message: '请输入预计单价!'},
           ],
           totalPrice: [
              { required: true, message: '请输入总价!'},
           ],
           overallContractAmount: [
              { required: true, message: '请输入合同总金额!'},
           ],
           planStartDate: [
              { required: true, message: '请输入计划开始日期!'},
           ],
           planEndDate: [
              { required: true, message: '请输入计划完成日期!'},
           ],
        },
        url: {
          add: "/eam/eamEquipmentPurchasePlan/add",
          edit: "/eam/eamEquipmentPurchasePlan/edit",
          queryById: "/eam/eamEquipmentPurchasePlan/queryById",
          loadWorkShopOptions:'/mdc/mdcProduction/loadProductionTreeOptions'
        }
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
      this.loadWorkShopTree()
    },
    methods: {
      loadWorkShopTree() {
        //加载车间选择树
        getAction(this.url.loadWorkShopOptions).then(res => {
          if (res.success) {
            this.treeData = [...res.result]
          }else {
            that.$message.warning(res.message)
          }
        })
      },
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // 触发表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
export default {
  name: 'EamEquipmentPurchasePlanForm',
  components: {
  },
  props: {
    //表单禁用
    disabled: {
      type: Boolean,
      default: false,
      required: false
    }
  },
  data() {
    return {
      model: {
      },
      treeData: [],
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 },
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 },
      },
      confirmLoading: false,
      validatorRules: {
        planName: [
          { required: true, message: '请输入采购计划名称!' },
        ],
        equipmentModel: [
          { required: true, message: '请输入型号!' },
        ],
        purchaseNumber: [
          { required: true, message: '请输入采购数量!' },
        ],
        estimatedUnitPrice: [
          { required: true, message: '请输入预计单价!' },
        ],
        totalPrice: [
          { required: true, message: '请输入总价!' },
        ],
        overallContractAmount: [
          { required: true, message: '请输入合同总金额!' },
        ],
        planStartDate: [
          { required: true, message: '请输入计划开始日期!' },
        ],
        planEndDate: [
          { required: true, message: '请输入计划完成日期!' },
        ],
      },
      url: {
        add: "/eam/eamEquipmentPurchasePlan/add",
        edit: "/eam/eamEquipmentPurchasePlan/edit",
        queryById: "/eam/eamEquipmentPurchasePlan/queryById",
        loadWorkShopOptions: '/mdc/mdcProduction/loadProductionTreeOptions'
      }
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    },
  },
  created() {
    //备份model原始值
    this.modelDefault = JSON.parse(JSON.stringify(this.model));
    this.loadWorkShopTree()
  },
  methods: {
    loadWorkShopTree() {
      //加载车间选择树
      getAction(this.url.loadWorkShopOptions).then(res => {
        if (res.success) {
          this.treeData = [...res.result]
        } else {
          that.$message.warning(res.message)
        }
      })
    },
    add() {
      this.edit(this.modelDefault);
    },
    edit(record) {
      this.model = Object.assign({}, record);
      this.visible = true;
    },
    submitForm() {
      const that = this;
      // 触发表单验证
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true;
          let httpurl = '';
          let method = '';
          if (!this.model.id) {
            httpurl += this.url.add;
            method = 'post';
          } else {
            httpurl += this.url.edit;
            method = 'put';
          }
          httpAction(httpurl, this.model, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message);
              that.$emit('ok');
            } else {
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          })
        }
      })
    },
  }
}
</script>