<template> 
 | 
  <div class="main_app"> 
 | 
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> 
 | 
    <div class="mt20"> 
 | 
      <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywoutinboundrecord:create']">新建出库单</el-button> 
 | 
      <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">导出</el-button> 
 | 
    </div> 
 | 
    <el-table v-loading="loading" :data="list" stripe> 
 | 
      <el-table-column prop="code" label="出库单号" min-width="120" show-overflow-tooltip /> 
 | 
      <el-table-column prop="warehouseName" label="出库仓库" min-width="100" show-overflow-tooltip /> 
 | 
      <el-table-column prop="typeName" label="出库类型" min-width="100" show-overflow-tooltip /> 
 | 
      <el-table-column prop="doneDate" label="出库日期" min-width="110" show-overflow-tooltip /> 
 | 
      <el-table-column label="出库数量" min-width="140"> 
 | 
        <template v-slot="{ row }"> 
 | 
          <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ item.materialUnitName }}</div> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
      <el-table-column prop="outUserName" label="领用人" min-width="90" show-overflow-tooltip /> 
 | 
      <el-table-column prop="createUserName" label="操作人" min-width="90" show-overflow-tooltip /> 
 | 
      <el-table-column prop="createDate" label="操作时间" min-width="140" show-overflow-tooltip /> 
 | 
      <el-table-column prop="remark" label="备注" min-width="100" show-overflow-tooltip /> 
 | 
      <el-table-column prop="workTime" label="操作" min-width="80" show-overflow-tooltip> 
 | 
        <template v-slot="{ row }"> 
 | 
          <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">查看详情</span> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
    </el-table> 
 | 
    <div class="mt20"> 
 | 
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> 
 | 
    </div> 
 | 
    <!--  --> 
 | 
    <OutEdit v-if="isShowEdit" @close="isShowEdit = false" @success="getList" ref="OutEditRef" /> 
 | 
    <OutDetail v-if="isShowDetail" ref="InDetailRef" /> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import Pagination from '@/components/common/Pagination' 
 | 
import QueryForm from '@/components/common/QueryForm' 
 | 
import OutEdit from './components/OutEdit.vue' 
 | 
import OutDetail from './components/OutDetail.vue' 
 | 
import dayjs from 'dayjs' 
 | 
import duration from 'dayjs/plugin/duration' 
 | 
dayjs.extend(duration) 
 | 
import { ywOutinboundPage, ywOutinboundEx } from '@/api' 
 | 
import { fetchList as getStoreList } from '@/api/ywWarehouse' 
 | 
import { StoreTypeOps, rules } from './components/config' 
 | 
export default { 
 | 
  components: { 
 | 
    Pagination, 
 | 
    QueryForm, 
 | 
    OutEdit, 
 | 
    OutDetail 
 | 
  }, 
 | 
  data() { 
 | 
    return { 
 | 
      loading: false, 
 | 
      isShowEdit: false, 
 | 
      isShowDetail: false, 
 | 
      pagination: { 
 | 
        pageSize: 10, 
 | 
        page: 1, 
 | 
        total: 0 
 | 
      }, 
 | 
      filters: { 
 | 
        inOut: 1 
 | 
      }, 
 | 
      StoreTypeOps, 
 | 
      list: [], 
 | 
      total: 0, 
 | 
      queryFormConfig: { 
 | 
        formItems: [ 
 | 
          { 
 | 
            filed: 'code', 
 | 
            type: 'input', 
 | 
            label: '出库单号', 
 | 
          }, 
 | 
          { 
 | 
            filed: 'warehouseId', 
 | 
            type: 'select', 
 | 
            label: '所在仓库', 
 | 
            labelCode: 'name', 
 | 
            valueCode: 'id', 
 | 
            options: [] 
 | 
          }, 
 | 
          { 
 | 
            filed: 'type', 
 | 
            type: 'select', 
 | 
            label: '出库类型', 
 | 
            labelCode: 'name', 
 | 
            valueCode: 'id', 
 | 
            options: StoreTypeOps.filter(i => i.type == 1) 
 | 
          }, 
 | 
        ], 
 | 
        online: true 
 | 
      } 
 | 
    } 
 | 
  }, 
 | 
  created() { 
 | 
    this.getList() 
 | 
    this.initData() 
 | 
  }, 
 | 
  methods: { 
 | 
    handleSub() { 
 | 
      this.$refs.ruleForm.validate((valid) => { 
 | 
        if (valid) { 
 | 
          alert('submit!') 
 | 
        } 
 | 
      }) 
 | 
    }, 
 | 
    handleEdit() { 
 | 
      this.isShowEdit = true 
 | 
      this.$nextTick(() => { 
 | 
        this.$refs.OutEditRef.isShowModal = true 
 | 
      }) 
 | 
    }, 
 | 
    handleDetail(row) { 
 | 
      this.isShowDetail = true 
 | 
      this.$nextTick(() => { 
 | 
        this.$refs.InDetailRef.visible = true 
 | 
        this.$refs.InDetailRef.getDetail(row.id) 
 | 
      }) 
 | 
    }, 
 | 
    handleEx() { 
 | 
      this.$dialog.exportConfirm('确认导出吗?') 
 | 
        .then(() => { 
 | 
          this.loading = true 
 | 
          ywOutinboundEx({ 
 | 
            page: this.pagination.page, 
 | 
            capacity: 1000000, 
 | 
            model: this.filters 
 | 
          }) 
 | 
            .then(response => { 
 | 
              this.download(response) 
 | 
            }) 
 | 
            .catch(e => { 
 | 
              this.$tip.apiFailed(e) 
 | 
            }) 
 | 
            .finally(() => { 
 | 
              this.loading = false 
 | 
            }) 
 | 
        }) 
 | 
        .catch(() => { }) 
 | 
    }, 
 | 
    initData() { 
 | 
      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { 
 | 
        this.queryFormConfig.formItems[1].options = res.records || [] 
 | 
      }) 
 | 
    }, 
 | 
    getList(page) { 
 | 
      const { pagination, filters } = this 
 | 
      this.loading = true 
 | 
      if(page){pagination.page = page} 
 | 
      ywOutinboundPage({ 
 | 
        model: { 
 | 
          ...filters 
 | 
        }, 
 | 
        // sorts: [{ direction: 'DESC', property: 'param1' }], 
 | 
        capacity: pagination.pageSize, 
 | 
        page: page, 
 | 
      }).then(res => { 
 | 
        this.loading = false 
 | 
        this.list = res.records || [] 
 | 
        this.list.forEach(item => { 
 | 
          item.typeName = this.StoreTypeOps[item.type].name 
 | 
        }) 
 | 
        this.pagination.total = res.total || 0 
 | 
      }, () => { 
 | 
        this.loading = false 
 | 
      }) 
 | 
    }, 
 | 
    clear() { 
 | 
      this.filters = { 
 | 
        inOut: 1 
 | 
      } 
 | 
      this.pagination.pageSize = 10 
 | 
      this.pagination.page = 1 
 | 
      this.getList() 
 | 
    }, 
 | 
    handleSizeChange(capacity) { 
 | 
      this.pagination.pageSize = capacity 
 | 
      this.getList() 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style></style> 
 |