ShipmentDetailCombineModal.vue 10.4 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"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="false">
         <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: 10,
        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_dictText',
        },
        {
          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: {
    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>