ShipmentDetailCombineModal.vue 10.7 KB
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    :confirmLoading="confirmLoading"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭"
  >
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="物料编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialCode">
              <a-input v-model="model.materialCode" placeholder="请输入物料编码" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
              <a-input v-model="model.materialName" placeholder="请输入物料名称" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="可出数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
              <a-input-number v-model="model.qty" placeholder="请输入可出数量" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="出库数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskQty">
              <a-input-number v-model="model.taskQty" placeholder="请输入出库数量" 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">配盘</a-button>
        </span>
      </a-table>
    </div>
  </j-modal>
</template>

<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import { httpAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
import { searchMaterialByCode, getInventoryFromShipmentDetail } from '@/api/api'
import { listShipmentByShipmentDetailId, combination } from '@/api/api'
import { filterObj } from '@/utils/util'
import { deleteAction, getAction, downFile, getFileAccessHttpUrl } from '@/api/manage'

export default {
  name: 'ShipmentDetailCombineModal',
  components: {
    JeecgListMixin
  },
  props: {
    mainId: {
      type: String,
      required: false,
      default: ''
    }
  },
  data() {
    return {
      title: '操作',
      width: 1000,
      /* 分页参数 */
      ipagination: {
        current: 1,
        pageSize: 100,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条'
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0
      },
      /* 数据源 */
      dataSource: [],
      queryParam: {},
      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: '容器编码',
          align: 'center',
          dataIndex: 'containerCode'
        },
        {
          title: '库位编码',
          align: 'center',
          dataIndex: 'locationCode'
        },
        {
          title: '物料编码',
          align: 'center',
          dataIndex: 'materialCode'
        },
        {
          title: '物料名称',
          align: 'center',
          dataIndex: 'materialName'
        },
        {
          title: '库存数量',
          align: 'center',
          dataIndex: 'qty'
        },
        {
          title: '锁定数量',
          align: 'center',
          dataIndex: 'taskQty'
        },
        {
          title: '库存状态',
          align: 'center',
          dataIndex: 'inventoryStatus'
        },
        {
          title: '批次',
          align: 'center',
          dataIndex: 'batch'
        },
        {
          title: '创建人',
          align: 'center',
          dataIndex: 'createBy'
        },
        {
          title: '创建日期',
          align: 'center',
          dataIndex: 'createTime'
        },
        {
          title: '操作',
          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()
  },
  methods: {
    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(res.message)
          this.searchShipment()
        } else {
          this.$message.warning(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(res.message)
        }
      })
    },
    searchInventory(record) {
      const that = this
      that.querySource = record
      console.log('searchInventory')
      // getInventoryFromShipmentDetail(that.querySource).then((res) => {
      //   this.dataSource = res.result;
      // });
      this.searchQuery()
    },
    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(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(res.message);
      //         that.$emit('ok');
      //       }else{
      //         that.$message.warning(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>