| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746 |
- <template>
- <el-dialog
- top="5vh"
- :visible.sync="visible"
- :title="isView ? '查看收发明细表明细' : '选择收发明细表明细'"
- width="90vw"
- >
- <el-card shadow="never" style="height: 70vh">
- <!-- 数据表格 -->
- <div>
- <el-form
- ref="formRef"
- label-position="left"
- class="ele-form-search"
- :model="formData"
- :rules="rules"
- @keyup.enter.native="search"
- @submit.native.prevent
- >
- <el-row :gutter="15">
- <el-col :span="5">
- <el-form-item label-width="60px" label="编码:" prop="code">
- <el-input
- disabled
- v-model="formData.code"
- placeholder="请输入"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item label-width="60px" label="名称:" prop="name">
- <el-input
- :disabled="isView"
- v-model="formData.name"
- placeholder="请输入"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="7">
- <el-form-item label-width="90px" label="起止时间:" prop="time">
- <el-date-picker
- :disabled="isView"
- style="width: 100%"
- class="w100"
- size="small"
- v-model="formData.time"
- type="daterange"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- value-format="yyyy-MM-dd"
- :picker-options="pickerOptions"
- ></el-date-picker>
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label-width="60px" label="关键词:" prop="keyWord">
- <el-input
- :disabled="isView"
- v-model="formData.keyWord"
- placeholder="请输入关键词"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item label-width="60px" label="出入库:" prop="type">
- <el-select
- filterable
- placeholder="请选择"
- v-model="formData.type"
- clearable
- :disabled="isView"
- @change="handleOutInChange"
- >
- <el-option
- v-for="item in outInOption"
- :key="item.code"
- :value="item.code + ''"
- :label="item.label"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item :label="formData.type == 2 ? '出库类型:' : '入库类型:'" prop="bizType">
- <el-select
- filterable
- placeholder="请选择"
- v-model="formData.bizType"
- :disabled="isView"
- clearable
- >
- <el-option
- v-for="item in outInStateOption"
- :key="item.code"
- :value="item.code + ''"
- :label="item.label"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item label="物品类型" prop="categoryLevelId">
- <el-select
- filterable
- placeholder="请选择"
- v-model="formData.categoryLevelId"
- :disabled="isView"
- clearable
- >
- <el-option
- v-for="item in codeOption"
- :key="item.dictCode"
- :value="item.dictCode"
- :label="item.dictValue"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col v-if="!isView" :span="3">
- <div class="ele-form-actions">
- <el-button
- type="primary"
- icon="el-icon-search"
- class="ele-btn-icon"
- @click="search"
- size="small"
- >
- 查询
- </el-button>
- <el-button
- @click="reset"
- icon="el-icon-refresh-left"
- size="small"
- type="primary"
- >重置</el-button
- >
- </div>
- </el-col>
- </el-row>
- </el-form>
- </div>
- <ele-pro-table
- ref="table"
- class="table"
- :needPage="!isView"
- :columns="columns"
- :datasource="datasource"
- height="calc(100% - 305px)"
- full-height="calc(100vh - 56px)"
- tool-class="ele-toolbar-form"
- style="margin-top: 18px"
- >
- <!-- 状态 -->
- <!-- <template v-slot:verifyStatus="{ row }">
- <span :class="status[row.verifyStatus].class">
- {{ status[row.verifyStatus].label }}
- </span>
- </template> -->
- <template v-slot:bizType="{ row }">
- {{ handleBizType(row.bizType, row.type) }}
- </template>
- <template v-slot:assetType="{ row }">
- {{ handleAssetType(row?.extInfo?.assetType) }}
- </template>
- </ele-pro-table>
- </el-card>
- <div slot="footer" class="dialog-footer" style="margin-right: 2%">
- <el-button
- v-if="!isView"
- size="small"
- @click="downLoad('statistics')"
- :loading="loading"
- type="primary"
- >统计导出</el-button
- >
- <el-button
- v-if="!isView"
- size="small"
- @click="downLoad('detail')"
- :loading="loading"
- type="primary"
- >明细导出</el-button
- >
- <el-button v-else size="small" @click="visible = false" type="primary"
- >确定</el-button
- >
- <el-button size="small" @click="visible = false">关闭</el-button>
- </div>
- </el-dialog>
- </template>
- <script>
- import { getCode } from '@/api/codeManagement/index.js';
- import ItemSearch from './components/item-search.vue';
- import {
- sendReceiveExcel,
- sendReceiveDetailListExcel,
- outintwoPage
- } from '@/api/warehouseManagement/statisticalReports';
- import storageApi from '@/api/warehouseManagement';
- import { allCategoryLevel } from '@/api/classifyManage';
- import { getTreeByGroup } from '@/api/classifyManage';
- import {
- warehousingType,
- sceneState,
- outputSceneState,
- auditStatus,
- useDict
- } from '@/utils/dict/index';
- export default {
- components: { ItemSearch },
- data() {
- return {
- auditStatus,
- outputSceneState,
- warehousingType,
- sceneState,
- status: [
- { label: '未审核', class: 'ele-text-info' },
- { label: '审核中', class: 'ele-text-primary' },
- { label: '审核通过', class: 'ele-text-success' },
- { label: '驳回', class: 'ele-text-danger' }
- ],
- outInOption: [
- { code: '2', label: '出库' },
- { code: '1', label: '入库' }
- ],
- codeOption: [],
- loading: false,
- isView: false,
- formData: {
- code: '',
- name: '',
- time: [],
- status: 2,
- keyWord: '',
- bizType: '',
- categoryLevelId: '',
- type: ''
- },
- // 表单验证规则
- rules: {
- name: [
- { required: true, message: '请输入库存余额名称', trigger: 'blur' }
- ],
- time: [
- { required: true, message: '请选择起止时间', trigger: 'change' }
- ]
- },
- pickerOptions: {
- shortcuts: [
- {
- text: '最近一周',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit('pick', [start, end]);
- }
- },
- {
- text: '最近一个月',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
- picker.$emit('pick', [start, end]);
- }
- },
- {
- text: '最近三个月',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
- picker.$emit('pick', [start, end]);
- }
- },
- {
- text: '最近一年',
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
- picker.$emit('pick', [start, end]);
- }
- }
- ]
- },
- visible: false
- };
- },
- computed: {
- // 表格列配置
- columns() {
- console.log(this.isView);
- let arr = [
- {
- type: 'index',
- label: '序号',
- width: 50,
- align: 'center'
- },
- {
- prop: 'bizNo',
- label: '单号',
- align: 'center',
- slot: 'bizNo',
- showOverflowTooltip: true,
- width: 150
- },
- {
- prop: 'bizType',
- slot: 'bizType',
- label: '出入库类型',
- align: 'center',
- showOverflowTooltip: true,
- width: 150
- },
- {
- prop: 'assetType',
- slot: 'assetType',
- label: '物品类型',
- align: 'center',
- showOverflowTooltip: true,
- width: 150
- },
- {
- prop: 'categoryNames',
- label: '物品名称',
- align: 'center',
- showOverflowTooltip: true,
- width: 150
- },
- {
- prop: 'categoryCodes',
- label: '物品编码',
- align: 'center',
- showOverflowTooltip: true,
- width: 150
- },
- {
- prop: 'sourceBizNo',
- label: '来源单据',
- align: 'center',
- showOverflowTooltip: true
- },
- {
- prop: 'createUserName',
- label: '操作人',
- align: 'center',
- showOverflowTooltip: true
- },
- {
- width: 160,
- prop: 'storageTime',
- label: '出入库时间',
- align: 'center',
- showOverflowTooltip: true
- },
- {
- prop: 'verifyName',
- label: '审核人',
- align: 'center',
- showOverflowTooltip: true
- }
- // {
- // prop: 'verifyStatus',
- // label: '状态',
- // align: 'center',
- // slot: 'verifyStatus',
- // showOverflowTooltip: true,
- // width: 100
- // }
- ];
- // if (!this.isView) {
- return arr.filter((item) => item != '');
- // }
- // if (this.isView) {
- // return [
- // {
- // type: 'index',
- // label: '序号',
- // width: 50,
- // align: 'center'
- // },
- // {
- // prop: 'categoryCode',
- // label: '物品编码',
- // align: 'center',
- // showOverflowTooltip: true,
- // width: 150
- // },
- // {
- // prop: 'categoryName',
- // label: '物品名称',
- // align: 'center',
- // showOverflowTooltip: true,
- // width: 150
- // },
- // {
- // prop: 'categoryLevelPath',
- // label: '物品类型',
- // align: 'center',
- // showOverflowTooltip: true,
- // width: 150
- // },
- // {
- // prop: 'specification',
- // label: '规格',
- // align: 'center',
- // showOverflowTooltip: true,
- // width: 150
- // },
- // {
- // width: 160,
- // prop: 'inStorageTime',
- // label: '出入库时间',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'bizNo',
- // label: '单号',
- // align: 'center',
- // slot: 'bizNo',
- // showOverflowTooltip: true,
- // width: 150
- // },
- // {
- // prop: 'inBizType',
- // slot: 'inBizType',
- // label: '出入库类型',
- // align: 'center',
- // showOverflowTooltip: true,
- // width: 150,
- // formatter: (row) => {
- // return (
- // sceneState.find((item) => item.code == row.inBizType).label ??
- // ''
- // );
- // }
- // },
- // {
- // prop: 'supplierName',
- // label: '往来单位',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'warehouseName',
- // label: '仓库名称',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'remark',
- // label: '备注',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'inQuantity',
- // label: '入库数量',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'inUnitPrice',
- // label: '入库单价',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'inPrice',
- // label: '入库成本小计',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'outQuantity',
- // label: '出库数量',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'outUnitPrice',
- // label: '出库单价',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'outPrice',
- // label: '出库成本小计',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'totalQuantity',
- // label: '结存数量',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'totalUnitPrice',
- // label: '结存单位成本',
- // align: 'center',
- // showOverflowTooltip: true
- // },
- // {
- // prop: 'totalPrice',
- // label: '结存成本',
- // align: 'center',
- // showOverflowTooltip: true
- // }
- // ];
- // }
- },
- clientEnvironmentId() {
- return this.$store.state.user.info.clientEnvironmentId;
- },
- outInStateOption() {
- return this.formData.type == 2 ? this.outputSceneState : this.formData.type == 1 ? this.sceneState : []
- }
- },
- created() {
- this.getTypeList();
- this.getAssetTypeList()
- },
- methods: {
- // 获取物品类型下拉选择树
- async getAssetTypeList() {
- const { data } = await getTreeByGroup({ type: 2 });
- this.codeOption = data.map((item) => {
- return { dictCode: item.id, dictValue: item.name };
- });
- },
- handleOutInChange() {
- // this.formData.bizType = '';
- },
- async getTypeList() {
- const { data } = await allCategoryLevel();
- this.codeList = data.map((item) => {
- return { dictCode: item.id, dictValue: item.name };
- });
- },
- handleAssetType(r) {
- const code = this.codeList.find((item) => item.dictCode == r);
- return code?.dictValue;
- },
- handleBizType(code, type) {
- // console.log(this.sceneState);
- // console.log(code, type);
- if (type == 1) {
- // 入库
- for (const key in this.sceneState) {
- if (this.sceneState[key].code == code) {
- return this.sceneState[key].label;
- }
- }
- } else {
- // 出库
- for (const key in this.outputSceneState) {
- if (this.outputSceneState[key].code == code) {
- return this.outputSceneState[key].label;
- }
- }
- }
- },
- // 获取时间函数
- getDate(date) {
- console.log(date);
- let obj = {
- year: date.getFullYear(), //获取完整的年份(4位)
- month: date.getMonth() + 1, //获取当前月份(0-11,0代表1月)
- strDate: date.getDate() // 获取当前日(1-31)
- };
- Object.keys(obj).forEach((key) => {
- if (obj[key] < 10) obj[key] = `0${obj[key]}`;
- });
- return `${obj.year}-${obj.month}-${obj.strDate}`;
- },
- downLoad(type) {
- if (!this.formData.name) {
- return this.$message.error('请输入名称');
- }
- if (this.formData.time.length <= 0) {
- return this.$message.error('请选择时间');
- }
- this.loading = true;
- const params = Object.assign({}, this.formData);
- if (params.time?.length) {
- params.startTime = params.time[0];
- params.endTime = params.time[1];
- }
- delete params.time;
- const requestApi = type == 'statistics' ? sendReceiveExcel : sendReceiveDetailListExcel;
- requestApi(params).then((data) => {
- try {
- let objectUrl1 = window.URL.createObjectURL(new Blob([data]));
- let elink = document.createElement('a');
- elink.setAttribute(
- 'download',
- decodeURI(decodeURI('收发明细表.xlsx'))
- );
- elink.style.display = 'none';
- elink.href = objectUrl1;
- document.body.appendChild(elink);
- elink.click();
- document.body.removeChild(elink);
- window.URL.revokeObjectURL(elink.href);
- this.loading = false;
- this.visible = false;
- this.$emit('reload');
- } catch (err) {
- this.$message.error('导出失败,请联系管理员!');
- }
- });
- },
- async getList(row) {
- const res = await outintwoPage({
- type: 1,
- code: row.code,
- name: row.name,
- startTime: row.startTime,
- endTime: row.endTime,
- pageNum: 1,
- size: -1
- });
- this.tableList = res.data;
- console.log(this.tableList);
- },
- async open(isView, row) {
- console.log('open', row, this.$refs.formRef);
- if(this.$refs.formRef) {
- this.$refs.formRef.resetFields()
- }
-
- if (isView) {
- // await this.getList(row);
- // this.tableList = row.info.map((item) => {
- // return {
- // ...item,
- // startTime: this.getDate(new Date(Number(item.startTime)))
- // };
- // });
- // console.log(this.tableList);
- this.formData.code = row.code;
- this.formData.name = row.name;
- this.formData.status = 2;
- this.formData.time =
- row.startTime && row.endTime ? [row.startTime, row.endTime] : [];
- this.formData.keyWord = row.keyWord;
- this.formData.type = (row.isType == 0 || !row.isType) ? '' : row.isType;
- this.formData.bizType = (row.bizType == 0 || !row.bizType) ? '' : row.bizType;
- this.formData.categoryLevelId = (row.categoryLevelId == 0 || !row.categoryLevelId) ? '' : row.categoryLevelId;
- } else {
- this.tableList = [];
- this.formData = {
- code: await getCode('statistics_log_code'),
- name: '',
- status: 2,
- time: [],
- keyWord: '',
- type: '',
- bizType: '',
- categoryLevelId: ''
- };
- }
- this.isView = isView;
- this.visible = true;
- this.$nextTick(() => {
- this.$refs.table.reload();
- });
- },
- /* 表格数据源 */
- async datasource({ page, limit, where, order }) {
- // if (this.isView) {
- // return this.tableList;
- // } else {
- const params = Object.assign({}, this.formData);
- if (params.time?.length) {
- params.startTime = params.time[0];
- params.endTime = params.time[1];
- }
- delete params.time;
- const data = await storageApi.getInboundGoodsList({
- ...params,
- ...where,
- ...order,
- pageNum: page,
- size: limit
- });
- console.log(data);
- this.tableList = data;
- return data;
- // }
- },
- search() {
- this.$refs.table.reload();
- },
- reset() {
- this.formData.time = [];
- this.formData.keyWord = '';
- this.formData.type = '';
- this.formData.bizType = '';
- this.formData.categoryLevelId = '';
- this.$refs.formRef.resetFields()
- this.search();
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- #inventoryBalance {
- height: 100%;
- width: 100%;
- padding: 10px;
- box-sizing: border-box;
- .ele-form-actions {
- display: flex;
- justify-content: flex-end;
- }
- }
- :deep(.table) {
- height: calc(100% - 100px);
- }
- </style>
|