zenglf
2023-09-18 92ff846fb659c62037a32b1d8c15eae9df9d9b54
src/views/spare/modules/sparePart/SparePartModel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,532 @@
<template>
  <a-modal
    :title="title"
    :width="1000"
    :visible="visible"
    :maskClosable="false"
    :confirmLoading="confirmLoading"
    :okButtonProps="{ props: {disabled: disableSubmit} }"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭"
  >
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-row style="width: 100%">
        </a-row>
        <a-row style="width: 100%">
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="备件编码"
            >
              <a-input
                placeholder="将由系统生成"
                v-decorator="['num', validatorRules.num]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2 ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="备件名称"
            >
              <a-input
                placeholder="请输入备件名称"
                v-decorator="['name', validatorRules.name]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="型号编码"
            >
              <a-input
                placeholder="请输入型号编码"
                v-decorator="['model', validatorRules.model]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="规格"
            >
              <a-input
                placeholder="请输入规格"
                v-decorator="['specification', validatorRules.specification]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="制造商"
            >
              <j-dict-select-tag
                allow-clear
                :disabled="disableSubmit"
                :placeholder="disableSubmit?'':'请选择制造商'"
                :triggerChange="true"
                dictCode="mom_base_constructor,name,id,status!='0' and del_flag!='1'"
                v-decorator="['constructorId', validatorRules.constructorId]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="单位"
            >
              <j-dict-select-tag
                allow-clear
                :disabled="disableSubmit"
                :placeholder="disableSubmit?'':'请选择单位'"
                :triggerChange="true"
                dictCode="mom_base_unit,name,id,status!='0' and del_flag!='1'"
                v-decorator="['mainUnitId', validatorRules.mainUnitId]"
                @change="(e)=>handle2Change(e)"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
<!--          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="辅单位"
            >
              <a-select
                :placeholder="disableSubmit?'':'请选择辅单位'"
                :options="this.auxiliaryUnits"
                style="width: 100%"
                :disabled="disableSubmit"
                v-decorator="['auxiliaryUnitId', validatorRules.auxiliaryUnitId]"
                @change="(e)=>handle3Change(e)"
              />
            </a-form-item>
          </a-col>-->
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="有效期"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入有效期"
                v-decorator="['validityPeriod', validatorRules.validityPeriod]"
              />
            </a-form-item>
          </a-col>
        </a-row>
<!--        <a-row style="width: 100%">
          &lt;!&ndash; hidden &ndash;&gt;
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="换算比例"
            >
              <a-input
                style="width: 100%"
                placeholder="请输入换算比例"
                v-decorator="['conversionRatio', validatorRules.conversionRatio]"
              />
            </a-form-item>
          </a-col>
        </a-row>-->
        <a-row style="width: 100%">
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="有效期单位"
            >
              <j-dict-select-tag
                allow-clear
                :disabled="disableSubmit"
                :placeholder="disableSubmit?'':'请选择有效期单位'"
                :triggerChange="true"
                dictCode="mom_base_unit,name,id,status!='0' and del_flag!='1'"
                v-decorator="['validityPeriodUnitId', validatorRules.validityPeriodUnitId]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="库存上限值"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入有效期"
                v-decorator="['inventoryUpperLimit', validatorRules.inventoryUpperLimit]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="库存下限值"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入库存下限值"
                v-decorator="['inventoryLowerLimit', validatorRules.inventoryLowerLimit]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="库存预警下限"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入库存预警下限"
                v-decorator="['inventoryWarnLimit', validatorRules.inventoryWarnLimit]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
          <a-col :span="24 / 2">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="经济订货量"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入经济订货量"
                v-decorator="['economicOrderQuantity', validatorRules.economicOrderQuantity]"
              />
            </a-form-item>
          </a-col>
          <a-col :span="24 / 2  ">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="采购提前期"
            >
              <a-input-number
                style="width: 100%"
                placeholder="请输入采购提前期"
                v-decorator="['purchaseLeadTime', validatorRules.purchaseLeadTime]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-item
              :labelCol="{ span: 3 }"
              :wrapperCol="{ span: 21 }"
              label="备注"
            >
              <a-textarea
                allow-clear
                :disabled="disableSubmit"
                :placeholder="disableSubmit?'':'请输入备注'"
                v-decorator="['remark', validatorRules.remark]"
              />
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>
    </a-spin>
    <template slot="footer">
      <a-button
        :style="{marginRight: '8px'}"
        @click="handleCancel"
      >
        å…³é—­
      </a-button>
      <a-button
        :disabled="disableSubmit || confirmLoading"
        :loading="confirmLoading"
        @click="handleOk"
        type="primary"
      >确定</a-button>
    </template>
  </a-modal>
</template>
<script>
import pick from 'lodash.pick'
import { postAction, requestPut, getAction } from '@/api/manage'
import { duplicateCheck } from '@/api/api'
import moment from 'moment'
import JImageUpload from '@/components/jeecg/JImage2Upload'
import Vue from 'vue'
export default {
  name: 'SparePartModel',
  components: {
    JImageUpload
  },
  data() {
    return {
      title: "操作",
      visible: false,
      codeDisable: true,
      disableSubmit: false,
      sparePartCategoryId: '',
      auxiliaryUnits: [],
      model: {},
      labelCol: {
        xs: { span: 24 },
        sm: { span: 6 },
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 18 },
      },
      confirmLoading: false,
      form: this.$form.createForm(this),
      validatorRules: {
        num: {
          rules: [
            // { required: true, message: '请输入设备分类编号!' },
            { min: 2, max: 30, message: '长度在 2 åˆ° 30 ä¸ªå­—符', trigger: 'blur' },
            // { validator: this.validateNum },
          ]
        },
        name: {
          rules: [
            { required: true, message: '请输入设备分类名称!' },
            { min: 2, max: 30, message: '长度在 2 åˆ° 30 ä¸ªå­—符', trigger: 'blur' },
          ]
        },
        remark: {
          rules: [
            { min: 0, max: 100, message: '长度不超过 100 ä¸ªå­—符', trigger: 'blur' },
          ]
        }
      },
      url: {
        add: "/spare/sparePart/add",
        edit: "/spare/sparePart/edit",
        getAuxiliaryUnits: "/spare/sparePart/getAuxiliaryUnits",
        getConversionRatio: "/spare/sparePart/getConversionRatio",
        getNum: '/eam/sysIdentity/getNumNew',
      },
      //新增、编辑、删除、批量删除操作改变数据后刷新关联的组件的监听属性
      alterFlag: "",
    }
  },
  created() {
    // this.getSysDeparts()
  },
  methods: {
    moment,
    add() {
      this.edit({});
    },
    edit(record) {
      this.form.resetFields();
      this.model = Object.assign({}, record);
      this.visible = true;
      this.disableSubmit = false;
      this.auxiliaryUnits = record.auxiliaryUnits
      this.$nextTick(() => {
        this.form.setFieldsValue(pick(this.model,
          'num',
          'name',
          'specification',
          'model',
          'constructorId',
          'mainUnitId',
          'auxiliaryUnitId',
          'conversionRatio',
          'validityPeriod',
          'validityPeriodUnitId',
          'inventoryUpperLimit',
          'inventoryLowerLimit',
          'economicOrderQuantity',
          'purchaseLeadTime',
          'inventoryWarnLimit',
          'remark'));
      });
      if (record.id) {
        this.codeDisable = true;
      } else {
        this.codeDisable = false;
        // this.$nextTick(() => {
        //   getAction(this.url.getNum, { type: 'SparePart', length: '4' }).then((res) => {
        //     if (res.success) {
        //       this.form.setFieldsValue({ num: res.message });
        //     }
        //   })
        // });
      }
    },
    close() {
      this.$emit('close');
      this.visible = false;
    },
    handleOk() {
      const that = this;
      // è§¦å‘表单验证
      this.form.validateFields(async (err, values) => {
        if (!err) {
          that.confirmLoading = true;
          let formData = Object.assign(this.model, values);
          let obj;
          if (!this.model.id) {
            if(!formData.num){
                await getAction(this.url.getNum, { type: 'SparePart', length: '4' }).then((res) => {
                if (res.success) {
                  formData.num = res.message;
                }
              });
            }
            formData.sparePartCategoryId = this.sparePartCategoryId
            obj = postAction(this.url.add, formData);
          } else {
            obj = requestPut(this.url.edit, formData, { id: this.model.id });
          }
          obj.then((res) => {
            if (res.success) {
              that.$message.success(res.message);
              that.$emit('ok');
              that.alterFlag = new Date();
            } else {
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
            that.close();
          })
        }
      })
    },
    handle2Change(val) {
      this.auxiliaryUnits = [];
      this.form.setFieldsValue({ "auxiliaryUnitId": null, "conversionRatio": null })
      this.getAuxiliaryUnits(val);
    },
    getAuxiliaryUnits(mainUnitId) {
      getAction(this.url.getAuxiliaryUnits, { mainUnitId: mainUnitId }).then((res) => {
        if (res.success) {
          this.auxiliaryUnits = res.result
        }
      })
    },
    handle3Change(val) {
      let data = this.form.getFieldsValue(['mainUnitId']);
      if (data.mainUnitId === "" || data.mainUnitId === null || data.mainUnitId === undefined) {
        this.$message.warning("请选择主单位!");
        return
      }
      this.form.setFieldsValue({ "conversionRatio": null })
      getAction(this.url.getConversionRatio, { mainUnitId: data.mainUnitId, auxiliaryUnitId: val }).then((res) => {
        if (res.success) {
          this.form.setFieldsValue({ "conversionRatio": res.result })
        }
      })
    },
    handleCancel() {
      this.close()
    },
    //验证 ç¼–号
    validateNum(rule, value, callback) {
      var params = {
        tableName: 'mom_eam_equipment',
        fieldName: 'num',
        fieldVal: value,
        dataId: this.model.id,
        //数据库中存在字段del_flag并使用该字段作为未删除策略,真删除:false å‡åˆ é™¤ï¼štrue
        delFlag: '0',
      };
      duplicateCheck(params).then((res) => {
        if (res.success) {
          callback();
        } else {
          callback("编号已存在!");
        }
      })
    },
    //验证 åç§°
    validateName(rule, value, callback) {
      var params = {
        tableName: 'mom_eam_equipment',
        fieldName: 'name',
        fieldVal: value,
        dataId: this.model.id,
        //数据库中存在字段del_flag并使用该字段作为未删除策略,真删除:false å‡åˆ é™¤ï¼štrue
        delFlag: '0',
      };
      duplicateCheck(params).then((res) => {
        if (res.success) {
          callback();
        } else {
          callback("名称已存在!");
        }
      })
    },
  },
  watch: {
    alterFlag() {
      this.$bus.$emit('queryTreeData');
    },
  }
}
</script>
<style scoped>
.ant-btn {
  padding: 0 10px;
  margin-left: 3px;
}
.ant-form-item-control {
  line-height: 0px;
}
/** ä¸»è¡¨å•行间距 */
.ant-form .ant-form-item {
  margin-bottom: 10px;
}
/** Tab页面行间距 */
.ant-tabs-content .ant-form-item {
  margin-bottom: 0px;
}
</style>