ShipmentDetailCombineModal.vue 10.9 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>