MaterialTaskModal.vue 6.24 KB
<template>
  <a-modal
    :title="title"
    :width="800"
    :visible="visible"
    :maskClosable="false"
    :confirmLoading="confirmLoading"
    @ok="handleOk"
    @cancel="handleCancel">

    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model">
        <!-- 主表单区域 -->
        <a-row class="form-row" :gutter="0">
          <a-col :lg="8">
            <a-form-model-item label="托盘号"   :rules="[{ required: true, message: '请输入托盘号!' }]">
              <a-input placeholder="请输入托盘号" v-model="model.containerCode"/>
            </a-form-model-item>
          </a-col>

          <a-col :lg="8">
            <a-form-model-item label="入库口">
              <a-input placeholder="请输入入库口" v-model="model.toPort"/>
            </a-form-model-item>
          </a-col>
        </a-row>

      </a-form-model>

      <!-- 子表单区域 -->
      <a-tabs v-model="activeKey">
        <a-tab-pane tab="物料信息" key="1" :forceRender="true">
          <j-editable-table
            ref="editableTable1"
            :loading="table1.loading"
            :columns="table1.columns"
            :dataSource="table1.dataSource"
            :maxHeight="300"
            :rowNumber="true"
            :rowSelection="true"
            :actionButton="true"/>
        </a-tab-pane>
      </a-tabs>

    </a-spin>


  </a-modal>
</template>

<script>

import JEditableTable from '@/components/jeecg/JEditableTable'
import {FormTypes, VALIDATE_NO_PASSED, getRefPromise, validateFormModelAndTables} from '@/utils/JEditableTableUtil'
import {httpAction, getAction} from '@/api/manage'
import {execute, quickReceipt} from '@/api/api'
import JDate from '@/components/jeecg/JDate'

export default {
  name: 'MaterialTaskModal',
  components: {
    JDate, JEditableTable
  },
  data() {
    return {
      title: '操作',
      visible: false,
      confirmLoading: false,
      model: {},
      labelCol: {
        xs: {span: 24},
        sm: {span: 6}
      },
      wrapperCol: {
        xs: {span: 24},
        sm: {span: 24 - 6}
      },
      activeKey: '1',
      // 客户信息
      table1: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '物料编码',
            key: 'materialCode',
            width: '24%',
            type: FormTypes.input,
            defaultValue: '',
            placeholder: '请输入${title}',
            validateRules: [{required: true, message: '${title}不能为空'}]
          },
          {
            title: '数量',
            key: 'qty',
            type: FormTypes.inputNumber,
            width: '80px',
          }
        ]
      },
      url: {
        add: '/test/jeecgOrderMain/add',
        edit: '/test/jeecgOrderMain/edit',
        orderCustomerList: '/test/jeecgOrderMain/queryOrderCustomerListByMainId',
        orderTicketList: '/test/jeecgOrderMain/queryOrderTicketListByMainId'
      }
    }
  },
  created() {
  },
  methods: {
    // 获取所有的editableTable实例
    getAllTable() {
      return Promise.all([
        getRefPromise(this, 'editableTable1')
      ])
    },

    add() {
      // 默认新增一条数据
      this.getAllTable().then(editableTables => {
        editableTables[0].add()
      })
      this.edit({})
    },
    edit(record) {
      this.visible = true
      this.activeKey = '1'
      this.model = Object.assign({}, record)
      // 加载子表数据
      if (this.model.id) {
        let params = {id: this.model.id}
        this.requestTableData(this.url.orderCustomerList, params, this.table1)
      }

    },
    close() {
      this.visible = false
      this.getAllTable().then(editableTables => {
        editableTables[0].initialize()
      })
      this.$emit('close')
      this.$refs.form.resetFields();
    },
    /** 查询某个tab的数据 */
    requestTableData(url, params, tab) {
      tab.loading = true
      getAction(url, params).then(res => {
        tab.dataSource = res.result || []
      }).finally(() => {
        tab.loading = false
      })
    },
    handleOk() {
      this.validateFields()
    },
    handleCancel() {
      this.close()
    },


    /** 触发表单验证 */
    validateFields() {
      this.getAllTable().then(tables => {
        /** 一次性验证主表和所有的次表 */
        return validateFormModelAndTables(this.$refs.form, this.model, tables)
      }).then(allValues => {
        let formData = this.classifyIntoFormData(allValues)
        console.log("输出数据:")
        console.log(formData)
        this.receipt(formData);
        // 发起请求
        // return this.requestAddOrEdit(formData)
      }).catch(e => {
        if (e.error === VALIDATE_NO_PASSED) {
          // 如果有未通过表单验证的子表,就自动跳转到它所在的tab
          this.activeKey = e.index == null ? this.activeKey : (e.index + 1).toString()
        } else {
          console.error(e)
        }
      })
    },
    /** 整理成formData */
    classifyIntoFormData(allValues) {
      let orderMain = Object.assign(this.model, allValues.formValue)
      return {
        ...orderMain, // 展开
        receiptEntityList: allValues.tablesValue[0].values,
      }
    },
    /** 发起新增或修改的请求 */
    requestAddOrEdit(formData) {
      alert(JSON.stringify(formData))
      let url = this.url.add, method = 'post'
      if (this.model.id) {
        url = this.url.edit
        method = 'put'
      }
      this.confirmLoading = true
      httpAction(url, formData, method).then((res) => {
        if (res.success) {
          this.$message.success(res.message)
          this.$emit('ok')
          this.close()
        } else {
          this.$message.warning(res.message)
        }
      }).finally(() => {
        this.confirmLoading = false
      })
    },
    receipt(record) {
      this.confirmLoading = true
      this.model = Object.assign({}, record);
      quickReceipt(this.model).then((res) => {
        this.loading = false;
        if (res.success) {
          this.$message.success(res.message);
          this.$emit('ok');
          this.close();
        } else {
          this.$message.error(res.message);
        }
        this.confirmLoading = false
      });
    },
  }
}
</script>

<style scoped>
</style>