<template> <basic-container> <div class="avue-crud"> <el-row> <div class="avue-crud__header"> <!-- 头部左侧按钮模块 --> <div class="avue-crud__left"> <el-button type="danger" icon="el-icon-bottom" @click="handleExportInfo" plain >导出</el-button > <!-- <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新 增</el-button>--> <!-- <el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain>删 除</el-button>--> </div> <!-- 头部右侧按钮模块 --> <div class="avue-crud__right"> <el-button icon="el-icon-refresh" @click="searchChange" circle></el-button> <el-button icon="Operation" @click="showdrawer(true)" circle></el-button> </div> </div> </el-row> <el-row> <!-- 列表模块 --> <tablecmt :columnList="columnList" :tableData="data" :loading="loading" @inputTxt="inputsc" @timeCheck="timesc" @btnCheck="btnsc" @selectCheck="selectsc" @selection="selectionChange" > <template #default="slotProps"> <el-text size="small" @click="editsolt(slotProps.scope)">查 看</el-text> </template> </tablecmt> </el-row> <el-row class="el-fy"> <div class="avue-crud__pagination" style="width: 100%"> <!-- 分页模块 --> <el-pagination align="right" background @size-change="sizeChange" @current-change="currentChange" :current-page="page.currentPage" :page-sizes="[30, 50, 80, 120]" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="page.total" > </el-pagination> </div> </el-row> <!-- 表单模块 --> <el-dialog :title="title" v-model="box" width="50%" :before-close="beforeClose" append-to-body > <el-form :disabled="view" ref="form" :model="form" label-width="80px"> <!-- 表单字段 --> <el-form-item label="仓库" prop="warehouse"> <el-input v-model="form.warehouse" placeholder="请输入仓库" /> </el-form-item> <el-form-item label="状态" prop="conditions"> <el-select v-model="form.conditions" clearable placeholder="请选择状态"> <el-option v-for="item in conditionsData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" > </el-option> </el-select> </el-form-item> <el-form-item label="包条码" prop="packetBarCode"> <el-input v-model="form.packetBarCode" placeholder="请输入包条码" /> </el-form-item> <el-form-item label="货位信息" prop="goodsAllocation"> <el-input v-model="form.goodsAllocation" placeholder="请输入货位信息" /> </el-form-item> <el-form-item label="所在托盘" prop="pallet"> <el-input v-model="form.pallet" placeholder="请输入所在托盘" /> </el-form-item> <el-form-item label="一级品" prop="firsts"> <el-input v-model="form.firsts" placeholder="请输入一级品" /> </el-form-item> <el-form-item label="二级品" prop="second"> <el-input v-model="form.second" placeholder="请输入二级品" /> </el-form-item> <el-form-item label="三级品" prop="thirdProduct"> <el-input v-model="form.thirdProduct" placeholder="请输入三级品" /> </el-form-item> <el-form-item label="物料" prop="material"> <el-input v-model="form.material" placeholder="请输入物料" /> </el-form-item> <el-form-item label="数量" prop="quantity"> <el-input v-model="form.quantity" placeholder="请输入数量" /> </el-form-item> <el-form-item label="车次号" prop="trainNumber"> <el-input v-model="form.trainNumber" placeholder="请输入车次号" /> </el-form-item> <el-form-item label="在库订单ID" prop="stockArticleId"> <el-input v-model="form.stockArticleId" placeholder="请输入在库订单ID" /> </el-form-item> </el-form> <!-- 表单按钮 --> <template #footer> <span v-if="!view" class="dialog-footer"> <el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit" >提 交</el-button > <el-button icon="el-icon-circle-close" @click="box = false">取 消</el-button> </span> </template> </el-dialog> </div> </basic-container> <edittablehead @setcolum="setnewcolum" @closce="showdrawer" :drawerShow="drawerShow" :columnList="columnList" ></edittablehead> </template> <script> import { getpage, getDetail, add, update, remove, $_distributionParcelList, } from '@/api/distribution/distributionParcelList'; import option from '@/option/distribution/distributionParcelList'; import { mapGetters } from 'vuex'; import { downloadXls } from '@/utils/util'; export default { data() { return { columnList: [ { prop: '', label: '复选框', type: 0, values: '', width: '55', checkarr: [], fixed: true, sortable: false, head: false, }, { prop: 'warehouse', label: '仓库', type: 2, values: '', width: '130', checkarr: [], fixed: false, sortable: true, head: false, }, { prop: 'orderPackageCode', label: '包条码', type: 2, values: '', width: '130', checkarr: [], fixed: false, sortable: true, head: false, }, { prop: 'goodsAllocation', label: '货位信息', type: 2, values: '', width: '130', checkarr: [], fixed: false, sortable: true, head: false, }, { prop: 'pallet', label: '所在托盘', type: 2, values: '', width: '130', checkarr: [], fixed: false, sortable: true, head: false, }, { prop: 'firsts', label: '一级品', type: 1, values: '', width: '130', checkarr: [], fixed: false, sortable: true, }, { prop: 'second', label: '二级品', type: 1, values: '', width: '130', checkarr: [], fixed: false, sortable: true, }, { prop: 'thirdProduct', label: '三级品', type: 1, values: '', width: '130', checkarr: [], fixed: false, sortable: true, }, { prop: 'orderPackageGroundingStatusName', label: '上架状态', type: 1, values: '', width: '180', checkarr: [], fixed: false, sortable: true, }, // { // prop: 'allocationMsg', // label: '货位信息', // type: 1, // values: '', // width: '180', // checkarr: [], // fixed: false, // sortable: true, // }, { prop: 'quantity', label: '数量', type: 2, values: '', width: '180', checkarr: [], fixed: false, sortable: true, isshowSummary: true, }, { prop: 'trainNumber', label: '车次号', type: 2, values: '', width: '180', checkarr: [], fixed: false, sortable: true, }, { prop: 'orderCode', label: '订单自编号', type: 2, values: '', width: '180', checkarr: [], fixed: false, sortable: true, }, ], drawerShow: false, height: 0, // 弹框标题 title: '', // 是否展示弹框 box: false, // 是否显示查询 search: true, // 加载中 loading: true, // 是否为查看模式 view: false, // 查询信息 query: {}, // 分页信息 page: { currentPage: 1, pageSize: 30, total: 40, }, // 表单数据 form: {}, // 选择行 selectionList: [], // 表单配置 option: option, // 表单列表 data: [], }; }, mounted() { this.init(); this.onLoad(this.page); /** * 初始化获取本地缓存的编辑隐藏的列表 * 固定搭配,不能更改 */ let checkListnewarr = this.$functions.getStorage(window.location.pathname + 'checkList'); let flexListnewarr = this.$functions.getStorage(window.location.pathname + 'flexList'); let sortlistnewarr = this.$functions.getStorage(window.location.pathname + 'sortlist'); if (checkListnewarr) { this.columnList.map(item => { item.head = false; }); checkListnewarr.map(ite => { this.columnList.map(item => { if (ite == item.label) { item.head = true; } }); }); } else { let arr = []; this.columnList.map(item => { if (item.head) { arr.push(item.label); } }); this.$functions.setStorage(window.location.pathname + 'checkList', arr); } if (flexListnewarr) { this.columnList.map(item => { item.fixed = false; }); flexListnewarr.map(ite => { this.columnList.map(item => { if (ite == item.label) { if (item.type == 6) { item.fixed = 'right'; } else { item.fixed = true; } } }); }); } else { let arr = []; this.columnList.map(item => { if (item.fixed) { arr.push(item.label); } }); this.$functions.setStorage(window.location.pathname + 'flexList', arr); } if (sortlistnewarr) { this.columnList.map(item => { item.sortable = false; }); sortlistnewarr.map(ite => { this.columnList.map(item => { if (ite == item.label) { item.sortable = true; } }); }); } else { let arr = []; this.columnList.map(item => { if (item.sortable) { arr.push(item.label); } }); this.$functions.setStorage(window.location.pathname + 'sortlist', arr); } }, computed: { ...mapGetters(['permission']), ids() { let ids = []; this.selectionList.forEach(ele => { ids.push(ele.id); }); return ids.join(','); }, }, methods: { handleExportInfo() { let row = {}; // 查询信息 if (this.query) { for (let prop in this.query) { row[prop] = this.query[prop]; } } if (!!this.ids) { row.ids = this.ids; } else { row.ids = ''; } $_distributionParcelList(row).then(res => { console.log(res.data); downloadXls(res.data, '包件明细.xlsx'); }); }, inputsc(index, row) { this.query[row.prop] = index; console.log(this.query); this.onLoad(this.page); }, showdrawer(value) { this.drawerShow = value; }, /** * 弹窗的勾选回调,用于更改头部数组 * 固定搭配,只需要更换 columnList */ setnewcolum(newarr, headarr, type) { // console.log(newarr,'+++++++++++') if (type == 1) { this.columnList = newarr; this.$functions.setStorage(window.location.pathname + 'checkList', headarr); } else if (type == 2) { this.columnList = newarr; this.$functions.setStorage(window.location.pathname + 'flexList', headarr); } else if (type == 3) { this.columnList = newarr; this.$functions.setStorage(window.location.pathname + 'sortlist', headarr); } }, init() { this.height = this.setPx(document.body.clientHeight - 340); }, searchHide() { this.search = !this.search; }, searchChange() { this.onLoad(this.page); }, searchReset() { this.query = {}; this.page.currentPage = 1; this.onLoad(this.page); }, handleSubmit() { if (!this.form.id) { add(this.form).then(() => { this.box = false; this.onLoad(this.page); this.$message({ type: 'success', message: '操作成功!', }); }); } else { update(this.form).then(() => { this.box = false; this.onLoad(this.page); this.$message({ type: 'success', message: '操作成功!', }); }); } }, handleAdd() { this.title = '新增'; this.form = {}; this.box = true; }, handleEdit(row) { this.title = '编辑'; this.box = true; getDetail(row.id).then(res => { this.form = res.data.data; }); }, handleView(row) { this.title = '查看'; this.view = true; this.box = true; getDetail(row.id).then(res => { this.form = res.data.data; }); }, handleDelete() { if (this.selectionList.length === 0) { this.$message.warning('请选择至少一条数据'); return; } this.$confirm('确定将选择数据删除?', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }) .then(() => { return remove(this.ids); }) .then(() => { this.selectionClear(); this.onLoad(this.page); this.$message({ type: 'success', message: '操作成功!', }); }); }, rowDel(row) { this.$confirm('确定将选择数据删除?', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }) .then(() => { return remove(row.id); }) .then(() => { this.onLoad(this.page); this.$message({ type: 'success', message: '操作成功!', }); }); }, beforeClose(done) { done(); this.form = {}; this.view = false; }, selectionChange(list) { this.selectionList = list; }, selectionClear() { this.selectionList = []; }, currentChange(currentPage) { this.page.currentPage = currentPage; this.onLoad(this.page); }, sizeChange(pageSize) { this.page.pageSize = pageSize; this.onLoad(this.page); }, onLoad(page, params = {}) { this.loading = true; getpage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { const data = res.data.data; this.page.total = data.total; this.data = data.records; this.loading = false; this.selectionClear(); }); }, }, }; </script> <style lang="scss" scoped> :deep(.avue-crud) { display: flex; height: 100%; flex-direction: column; } :deep(.el-card__body) { height: 100%; } :deep(.el-card) { height: 100%; display: flex; flex-direction: column; } .el-fy { flex: 1; display: flex; align-items: center; } </style>