ShipmentDetailCombineModal.vue 11.9 KB
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    :confirmLoading="confirmLoading"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    :cancelText="$t('button.close')"
  >
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-row>
          <a-col :span="24">
            <a-form-model-item :label="this.$t('shipment.materialCode')" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialCode">
              <a-input v-model="model.materialCode" :placeholder="this.$t('shipment.selectMaterialCode')" style="width: 100%" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item :label="this.$t('shipment.materialName')" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
              <a-input v-model="model.materialName" placeholder="请输入物料名称" style="width: 100%" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item :label="this.$t('shipment.availableQty')" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
              <a-input-number v-model="model.qty" placeholder="请输入可出数量" style="width: 100%" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item :label="this.$t('shipment.outboundQty')" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskQty">
              <a-input-number v-model="model.taskQty" :placeholder="this.$t('shipment.inputShipmenQty')" style="width: 100%"/>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </a-spin>
    <!-- table区域-begin -->
    <div>
      <a-table
        ref="table"
        rowKey="id"
        size="middle"
        bordered
        class="j-table-force-nowrap"
        :scroll="{x:true}"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="false"
        :loading="loading">

        <span slot="action" slot-scope="text, record">
          <a-button @click="combine(record)" type="primary">{{ $t('shipment.group') }}</a-button>
        </span>

        <span slot="inventoryStatus" slot-scope="inventoryStatus">
          <a-tag :key="inventoryStatus" :color="getStatusColor(inventoryStatus)">
            {{ solutionInvStatus(inventoryStatus) }}
          </a-tag>
        </span>

      </a-table>
    </div>
  </j-modal>
</template>

<script>
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import {getAction} from '@/api/manage'
import {filterObj} from '@/utils/util'
import {ajaxGetDictItems, combination, listShipmentByShipmentDetailId, searchMaterialByCode, translateResultMessage} from '@/api/api'

export default {
  name: 'ShipmentDetailCombineModal',
  components: {
    JeecgListMixin
  },
  props: {
    mainId: {
      type: String,
      required: false,
      default: ''
    }
  },
  data() {
    return {
      title: this.$t('system.options'),
      width: 1000,
      /* 分页参数 */
      ipagination: {
        current: 1,
        pageSize: 100,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + " " + this.$t('list.showing') + " " + total + " " + this.$t('list.records')
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0
      },
      /* 数据源 */
      dataSource: [],
      queryParam: {},
      invStatus: [],
      combineParam: {},
      shipmentParam: {},
      visible: false,
      materialList: {},
      querySource: {},
      /* 筛选参数 */
      filters: {},
      /* table加载状态 */
      loading: false,
      /* table选中keys*/
      selectedRowKeys: [],
      /* table选中records*/
      selectionRows: [],
      /* 查询折叠 */
      toggleSearchStatus: false,
      /* 高级查询条件生效状态 */
      superQueryFlag: false,
      /* 高级查询条件 */
      superQueryParams: '',
      /** 高级查询拼接方式 */
      superQueryMatchType: 'and',
      model: {},
      labelCol: {
        xs: {span: 24},
        sm: {span: 5}
      },
      wrapperCol: {
        xs: {span: 24},
        sm: {span: 16}
      },
      // 表头
      columns: [
        {
          title: this.$t('shipment.containerCode'),
          align: 'center',
          dataIndex: 'containerCode'
        },
        {
          title: this.$t('shipment.locationCode'),
          align: 'center',
          dataIndex: 'locationCode'
        },
        {
          title: this.$t('shipment.materialCode'),
          align: 'center',
          dataIndex: 'materialCode'
        },
        {
          title: this.$t('shipment.materialName'),
          align: 'center',
          dataIndex: 'materialName'
        },
        {
          title: this.$t('inventory.inventoryQty'),
          align: 'center',
          dataIndex: 'qty'
        },
        {
          title: this.$t('shipment.lockQty'),
          align: 'center',
          dataIndex: 'taskQty'
        },
        {
          title: this.$t('shipment.batch'),
          align: 'center',
          dataIndex: 'batch'
        },
        // {
        //   title: this.$t('shipment.inventoryStatus'),
        //   dataIndex: 'inventoryStatus',
        //   align: 'center',
        //   width: 96,
        //   scopedSlots: {customRender: 'inventoryStatus'}
        // },
        {
          title: this.$t('system.createBy'),
          align: 'center',
          dataIndex: 'createBy'
        },
        {
          title: this.$t('system.createTime'),
          align: 'center',
          dataIndex: 'createTime'
        },
        {
          title: this.$t('system.options'),
          dataIndex: 'action',
          align: 'center',
          fixed: 'right',
          width: 147,
          scopedSlots: {customRender: 'action'}
        }
      ],
      confirmLoading: false,
      validatorRules: {},
      url: {
        add: '/shipment/shipmentHeader/addShipmentDetail',
        edit: '/shipment/shipmentHeader/editShipmentDetail',
        list: '/shipment/shipmentCombination/getInventoryFromShipmentDetail'
      }
    }
  },
  created() {
    //备份model原始值
    this.modelDefault = JSON.parse(JSON.stringify(this.model))
    this.searchMaterial()
    this.loadFrom();
  },
  methods: {
    loadFrom() {
      ajaxGetDictItems('inventory_status').then((res) => {
        if (res.success) {
          this.invStatus = res.result
        }
      })
    },
    getSuperFieldList() {
      let fieldList = []
      fieldList.push({type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: 'inventory_status'})
      this.superFieldList = fieldList
    },
    add() {
      this.edit(this.modelDefault)
      this.model.inventoryStatus = 'good'
    },
    edit(record) {
      // this.model = Object.assign({}, record);
      this.shipmentParam = record
      this.searchShipment()
    },
    close() {
      this.$emit('close')
      this.visible = false
      this.$refs.form.clearValidate()
    },
    combine(record) {
      const that = this
      that.querySource = record
      this.combineParam.shipmentDetailID = this.model.id
      this.combineParam.inventoryDetailID = record.id
      this.combineParam.shipQty = this.model.taskQty
      combination(this.combineParam).then(res => {
        if (res.success) {
          // this.model = res.result;
          this.$message.success(translateResultMessage(res, res.message))
          this.searchShipment()
        } else {
          this.$message.warning(translateResultMessage(res, res.message))
        }
      })
    },
    searchShipment() {
      const that = this
      that.querySource = this.shipmentParam
      listShipmentByShipmentDetailId(that.querySource).then(res => {
        if (res.success) {
          this.model = res.result
          this.visible = true
          this.searchInventory(that.querySource)
        } else {
          this.$message.warning(translateResultMessage(res, res.message))
        }
      })
    },
    searchInventory(record) {
      const that = this
      that.querySource = record
      console.log('searchInventory')
      // getInventoryFromShipmentDetail(that.querySource).then((res) => {
      //   this.dataSource = res.result;
      // });
      this.searchQuery()
    },
    solutionInvStatus(value) {
      var actions = []
      Object.keys(this.invStatus).some(key => {
        if (this.invStatus[key].value == '' + value) {
          actions.push(this.invStatus[key].text)
          return true
        }
      })
      return actions.join('')
    },
    searchQuery() {
      this.loadData(1)
      // 点击查询清空列表选中行
      // https://gitee.com/jeecg/jeecg-boot/issues/I4KTU1
      // this.selectedRowKeys = []
      // this.selectionRows = []
    },
    loadData(arg) {
      if (!this.url.list) {
        this.$message.error('请设置url.list属性!')
        return
      }
      //加载数据 若传入参数1则加载第一页的内容
      if (arg === 1) {
        this.ipagination.current = 1
      }
      var params = this.getQueryParams() //查询条件
      this.loading = true
      getAction(this.url.list, params)
        .then(res => {
          if (res.success) {
            //update-begin---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
            this.dataSource = res.result.records || res.result
            if (res.result.total) {
              this.ipagination.total = res.result.total
            } else {
              this.ipagination.total = 0
            }
            //update-end---author:zhangyafei    Date:20201118  for:适配不分页的数据列表------------
          } else {
            this.$message.warning(translateResultMessage(res, res.message))
          }
        })
        .finally(() => {
          this.loading = false
        })
    },
    getQueryField() {
      //TODO 字段权限控制
      var str = 'id,'
      this.columns.forEach(function (value) {
        str += ',' + value.dataIndex
      })
      return str
    },
    getQueryParams() {
      //获取查询条件
      let sqp = {}
      if (this.superQueryParams) {
        sqp['superQueryParams'] = encodeURI(this.superQueryParams)
        sqp['superQueryMatchType'] = this.superQueryMatchType
      }
      this.queryParam.id = this.model.id
      var param = Object.assign(sqp, this.queryParam, this.isorter, this.filters)
      param.field = this.getQueryField()
      param.pageNo = this.ipagination.current
      param.pageSize = this.ipagination.pageSize
      return filterObj(param)
    },
    handleOk() {
      const that = this
      that.close()
      // 触发表单验证
      // 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';
      //     }
      //     this.model['shipmentId'] = this.mainId
      //     httpAction(httpurl,this.model,method).then((res)=>{
      //       if(res.success){
      //         that.$message.success(translateResultMessage(res, res.message))
      //         that.$emit('ok');
      //       }else{
      //         that.$message.warning(translateResultMessage(res, res.message))
      //       }
      //     }).finally(() => {
      //       that.confirmLoading = false;
      //       that.close();
      //     })
      //   }else{
      //      return false
      //   }
      // })
    },
    handleCancel() {
      this.close()
    },
    searchMaterial() {
      const that = this
      that.querySource.materialCode = that.model.materialCode
      console.log('model.materialCode:' + that.model.materialCode)
      searchMaterialByCode(that.querySource).then(res => {
        that.materialList = res.result
      })
    }
  }
}
</script>