zenglf
2023-09-18 92ff846fb659c62037a32b1d8c15eae9df9d9b54
src/views/spare/modules/sparePartScrapRequirement/SparePartScrapRequirementForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,524 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <!-- ä¸»è¡¨å•区域 -->
      <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="num">
              <a-input v-model="model.num" placeholder="请输入单据号" :disabled="true"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="申请部门" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departId">
              <!--              <a-input v-model="model.departId" placeholder="请输入领用部门ID" ></a-input>-->
              <!--              <j-dict-select-tag
                              allow-clear
                              :placeholder="'请选择申请部门'"
                              v-model='model.departId'
                              dictCode="sys_depart,depart_name,id,del_flag!='1'"
                            />-->
              <a-tree-select
                style="width: 100%"
                :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
                :tree-data="treeData"
                placeholder="请选择申请部门"
                tree-default-expand-all
                v-model="model.departId"
              />
              <!--              <a-select
                              :placeholder="'请选择申请部门'"
                              :options="this.departs"
                              style="width: 100%"
                              v-model='model.departId'
                            />-->
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
              <!--              <a-input v-model="model.userId" placeholder="请输入领用人员ID" ></a-input>-->
              <a-textarea
                allow-clear
                :placeholder="'请输入备注'"
                v-model="model.remark"
              />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
    <!-- å­è¡¨å•区域 -->
    <a-tabs v-model="activeKey" @change="handleChangeTabs">
      <a-tab-pane tab="备件报废明细表" :key="refKeys[0]" :forceRender="true">
        <j-vxe-table
          keep-source
          :ref="refKeys[0]"
          :loading="sparesScrapRequirementDetailTable.loading"
          :columns="sparesScrapRequirementDetailTable.columns"
          :dataSource="sparesScrapRequirementDetailTable.dataSource"
          :maxHeight="300"
          :disabled="formDisabled"
          :alwaysEdit="true"
          :rowNumber="true"
          :bordered="bordered"
          :rowSelection="true"
          :toolbar="true"
          :toolbarConfig="toolbarConfig"
        >
          <template slot="toolbarPrefix">
            <a-button type="primary" @click="selectEquipmentList" :disabled="formDisabled">选择备件
            </a-button>
          </template>
          <!--          <template slot='toolbarPrefix'>
                      <a-button type='primary' @click='selectNewEquipmentList' :disabled='formDisabled'>选择新备件
                      </a-button>
                    </template>-->
        </j-vxe-table>
      </a-tab-pane>
    </a-tabs>
    <spare-select-list ref="SparesSelectModal"></spare-select-list>
  </a-spin>
</template>
<script>
import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import { JVXETypes } from '@comp/jeecg/JVxeTable'
import { getRefPromise, VALIDATE_FAILED } from '@comp/jeecg/JVxeTable/utils/vxeUtils.js'
import JFormContainer from '@comp/jeecg/JFormContainer'
import SpareSelectList from './SpareSelectList'
import { getAction } from '@api/manage'
export default {
  name: 'SparePartScrapRequirementForm',
  mixins: [JVxeTableModelMixin],
  components: {
    JFormContainer,
    SpareSelectList
  },
  data() {
    return {
      treeData: [],
      bordered: true,
      departs: [],
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      toolbarConfig: {
        // prefix å‰ç¼€ï¼›suffix åŽç¼€
        slot: ['prefix', 'suffix'],
        // add æ–°å¢žæŒ‰é’®ï¼›remove åˆ é™¤æŒ‰é’®ï¼›clearSelection æ¸…空选择按钮
        btn: ['remove', 'clearSelection']
      },
      model: {},
      // æ–°å¢žæ—¶å­è¡¨é»˜è®¤æ·»åŠ å‡ è¡Œç©ºæ•°æ®
      addDefaultRowNum: 0,
      validatorRules: {
        num: [
          { required: true, message: '请输入单据号!' }
        ],
        departId: [
          { required: true, message: '请输入领用部门!' }
        ],
        userId: [
          { required: true, message: '请输入领用人员!' }
        ]
      },
      refKeys: ['sparesScrapRequirementDetail'],
      tableKeys: ['sparesScrapRequirementDetail'],
      activeKey: 'sparesScrapRequirementDetail',
      // è®¾å¤‡æŠ¥åºŸæ˜Žç»†è¡¨
      sparesScrapRequirementDetailTable: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '备件编码',
            key: 'spareNum',
            fixed: 'left',
            align: 'center',
            type: JVXETypes.normal,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '备件名称',
            key: 'spareName',
            align: 'center',
            fixed: 'left',
            type: JVXETypes.normal,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '型号',
            key: 'model',
            type: JVXETypes.normal,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '规格',
            key: 'specification',
            type: JVXETypes.normal,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '单位',
            key: 'mainUnitIdName',
            type: JVXETypes.normal,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '单位',
            key: 'mainUnitId',
            type: JVXETypes.hidden,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          /*  {
             title: '辅单位',
             key: 'auxiliaryUnitIdName',
             align:'center',
             type: JVXETypes.normal,
             width: '200px',
             placeholder: '请输入${title}',
             defaultValue: ''
           },
           {
             title: '辅单位',
             key: 'auxiliaryUnitId',
             type: JVXETypes.hidden,
             align:'center',
             width: '200px',
             placeholder: '请输入${title}',
             defaultValue: ''
           }, */
          {
            title: '主数量',
            key: 'mainQuantity',
            type: JVXETypes.inputNumber,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: 0,
            /*             Function({cellValue, row, column}){
                          console.log(cellValue)
                          console.log(row)
                          console.log(column)
                          if (cellValue != null) {
                            let conversionRatio = row.conversionRatio
                            console.log(conversionRatio)
                            row.auxiliaryQuantity = Math.abs(cellValue * conversionRatio)
                          }
                          console.log(cellValue)
                          return cellValue
                        }, */
            validateRules: [
              {
                required: true,
                // è‡ªå®šä¹‰å‡½æ•°æ ¡éªŒ handler
                handler({ cellValue, row, column }, callback, target) {
                  if (cellValue < 0) {
                    callback(false, '${title}不小于0')
                    // false = æœªé€šè¿‡ï¼Œå¯ä»¥è·Ÿè‡ªå®šä¹‰æç¤º
                  } else {
                    callback(true) // true = é€šè¿‡éªŒè¯
                  }
                },
                message: '${title}默认提示'
              }
            ]
          },
          /*  {
             title: '辅数量',
             key: 'auxiliaryQuantity',
             type: JVXETypes.normal,
             width: '200px',
             align:'center',
             placeholder: '请输入${title}',
             defaultValue: 0
           }, */
          {
            title: '备件id',
            key: 'sparePartId',
            type: JVXETypes.hidden,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '换算比例',
            key: 'conversionRatio',
            type: JVXETypes.hidden,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '需求日期',
            key: 'requirementTime',
            type: JVXETypes.date,
            align: 'center',
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: '',
            validateRules: [
              {
                required: true,
                message: '请输入${title}'
              }
            ]
          }
        ]
      },
      url: {
        add: '/spare/sparePartRequirement/add',
        edit: '/spare/sparePartRequirement/edit',
        queryById: '/spare/sparePartRequirement/queryById',
        loadOptions: '/sys/sysDepart/loadDepartTreeOptions',
        getSysDeparts: '/eam/equipment/getSysDeparts',
        getNum: '/eam/sysIdentity/getNumNew',
        sparesScrapRequirementDetail: {
          list: '/spare/sparePartRequirement/querySparesScrapRequirementDetailByMainId'
        }
      }
    }
  },
  props: {
    //表单禁用
    disabled: {
      type: Boolean,
      default: false,
      required: false
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    }
  },
  mounted() {
    this.$bus.$on('selectionRows', (data) => {
      // å¢žåŠ é€‰ä¸­çš„è®¾å¤‡åˆ°åˆ—è¡¨ä¸­
      this.addSelectedEquipments(data)
    })
    this.$bus.$on('dataSource', (data) => {
      // å¢žåŠ é€‰ä¸­çš„è®¾å¤‡åˆ°åˆ—è¡¨ä¸­
      this.addSelectedEquipments(data)
    })
  },
  created() {
    this.initOptions()
    this.initNum()
  },
  methods: {
    /*     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 });
                }
              })
            });
          }
        }, */
    initNum() {
      getAction(this.url.getNum, { type: 'SparePart', length: '4' }).then((res) => {
        if (res.success) {
          this.model.num = res.message
          /* this.model.setFieldsValue({ num: res.message }); */
        }
      })
    },
    initOptions() {
      getAction(this.url.loadOptions).then(res => {
        if (res.success) {
          this.treeData = res.result
        } else {
          this.$message.warning(res.message)
        }
      })
    },
    getSysDeparts() {
      getAction(this.url.getSysDeparts).then((res) => {
        if (res.success) {
          this.departs = res.result
        }
      })
    },
    selectEquipmentList() {
      let ids = []
      let tableData = this.$refs.sparesScrapRequirementDetail.getTableData()
      let deleteData = this.$refs.sparesScrapRequirementDetail.getDeleteData()
      console.log(tableData)
      for (let i = 0; i < tableData.length; i++) {
        ids.push(tableData[i].sparePartId)
      }
      this.$refs.SparesSelectModal.showModals(ids)
      this.$refs.SparesSelectModal.title = '选择备件'
      this.$refs.SparesSelectModal.disableSubmit = false
    },
    /*    selectNewEquipmentList() {
          this.$refs.SpareRequirementSelecModal.add()
          this.$refs.SpareRequirementSelecModal.title = '新增备件'
          this.$refs.SpareRequirementSelecModal.disableSubmit = false
        },*/
    addSelectedEquipments(data) {
      let tableData = this.$refs.sparesScrapRequirementDetail.getTableData()
      var tableStr = JSON.stringify(tableData)
      const addRows = []
      for (let i = 0; i < data.length; i++) {
        var sparesScrapRequirementDetail = {}
        if (tableStr.indexOf(data[i].id) == -1) {
          sparesScrapRequirementDetail = {
            sparePartId: data[i].id,
            spareNum: data[i].num,
            spareName: data[i].name,
            model: data[i].model,
            specification: data[i].specification,
            mainUnitId: data[i].mainUnitId,
            auxiliaryUnitId: data[i].auxiliaryUnitId,
            mainUnitIdName: data[i].mainUnitId_dictText,
            auxiliaryUnitIdName: data[i].auxiliaryUnitId_dictText,
            requirementTime: data[i].requirementTime,
            conversionRatio: data[i].conversionRatio
          }
        }
        addRows.push(sparesScrapRequirementDetail)
      }
      this.$refs.sparesScrapRequirementDetail.pushRows(addRows)
    },
    addBefore() {
      this.sparesScrapRequirementDetailTable.dataSource = []
    },
    getAllTable() {
      let values = this.tableKeys.map(key => getRefPromise(this, key))
      return Promise.all(values)
    },
    /** è°ƒç”¨å®Œedit()方法之后会自动调用此方法 */
    editAfter() {
      this.$nextTick(() => {
      })
      // åŠ è½½å­è¡¨æ•°æ®
      if (this.model.id) {
        let params = { id: this.model.id }
        this.requestSubTableData(this.url.sparesScrapRequirementDetail.list, params, this.sparesScrapRequirementDetailTable)
      }
    },
    //校验所有一对一子表表单
    validateSubForm(allValues) {
      let tableData = this.$refs.sparesScrapRequirementDetail.getTableData()
      if (tableData.length == 0) {
        this.$message.warning('请添加加报废明细!')
        return
      }
      return new Promise((resolve, reject) => {
        Promise.all([]).then(() => {
          resolve(allValues)
        }).catch(e => {
          if (e.error === VALIDATE_FAILED) {
            // å¦‚果有未通过表单验证的子表,就自动跳转到它所在的tab
            this.activeKey = e.index == null ? this.activeKey : this.refKeys[e.index]
          } else {
            console.error(e)
          }
        })
      })
    },
    /** æ•´ç†æˆformData */
    classifyIntoFormData(allValues) {
      let main = Object.assign(this.model, allValues.formValue)
      return {
        ...main, // å±•å¼€
        sparePartRequirementDeatilList: allValues.tablesValue[0].tableData
      }
    },
    validateError(msg) {
      this.$message.error(msg)
    },
    close() {
      this.visible = false
      this.$emit('close')
      this.$refs.form.clearValidate()
    }
    /*     changeAuxiliaryQuantity(target){
          console.log(target.columnIndex)
          let num=target.columnIndex
          if (target.columnIndex ===num){
            target.row.auxiliaryQuantity=Math.abs(target.row.conversionRatio*target.row.mainQuantity)
          }
        } */
  }
}
</script>
<style scoped>
</style>