123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <!-- 货位 -->
- <script>
- import { list, refer } from "./api/index";
- import { initParams } from "@/utils/init-something";
- export default {
- name: "AllocationInputDialog",
- props: ["title", "value"],
- components: {},
- data() {
- // tree
- const columns = [
- // {
- // key: "deptId",
- // title: "仓库编码",
- // type: "Input",
- // search: true,
- // },
- // {
- // key: "deptName",
- // title: "仓库名称",
- // type: "Input",
- // search: true,
- // },
- ];
- const initTableColumns = () => columns.filter((column) => column.key);
- const initSearchColumns = () => columns.filter((column) => column.search);
- return {
- // global
- size: "mini",
- width: "50%",
- page: { pageNum: 1, pageSize: 25, total: 0 },
- pageSizes: [25, 50],
- layout: "prev, pager, next, jumper",
- api: "puOrg",
- showKey: "deptName",
- // dialog
- visible: false,
- loading: false,
- // search
- searchColumns: initSearchColumns(),
- params: initParams(initSearchColumns()),
- // table
- tableColumns: initTableColumns(),
- data: [],
- currentData: null,
- };
- },
- computed: {},
- watch: {},
- methods: {
- // set dialog visible
- setVisible(prop) {
- this.visible = prop;
- },
- // do something before dialog open
- beforeOpen() {
- const { value } = this.$props;
- this.params[this.showKey] = value;
- this.fetchList(this.params, this.page);
- },
- // fetch table data
- async fetchList(prop, page) {
- try {
- this.loading = true;
- const { pageNum, pageSize } = page;
- const { code, msg, rows, total } = await refer({
- pageNum,
- pageSize,
- isPage: true,
- type: "ALLOCATION_PARAM",
- });
- // const { code, msg, rows, total } = await list(this.api, {
- // ...prop,
- // pageNum,
- // pageSize,
- // });
- if (code === 200) {
- this.data = rows;
- this.page.total = total;
- this.$notify.success({ title: msg });
- } else {
- this.$notify.warning({ title: msg });
- }
- } catch (err) {
- this.$notify.error({ title: "error", message: err });
- } finally {
- this.loading = false;
- this.setCurrentData(
- this.data.find(
- (column) => column[this.showKey] === this.currentData[this.showKey]
- )
- );
- }
- },
- // setting up to fetch table data
- queryList() {
- this.fetchList(this.params, this.page);
- },
- // reset to fetch table data
- resetList() {
- this.page.pageNum = 1;
- this.params = initParams(this.searchColumns);
- this.fetchList(this.params, this.page);
- },
- // size change to fetch table data
- pageSizeChange(prop) {
- this.page.pageSize = prop;
- this.fetchList(this.params, this.page);
- },
- // number change to fetch table data
- pageNumberChange(prop) {
- this.page.pageNum = prop;
- this.fetchList(this.params, this.page);
- },
- // select row data
- selectCurrentData(row) {
- this.currentData = row;
- },
- // set row data highlight
- setCurrentData(row) {
- this.$refs.singleTable.setCurrentRow(row);
- },
- //
- confirm() {
- if (this.currentData) {
- this.$emit("confirm", this.currentData);
- }
- this.setVisible(false);
- },
- },
- created() { },
- mounted() { },
- destroyed() { },
- };
- </script>
- <template>
- <el-dialog :title="title" :visible.sync="visible" :width="width" append-to-body @open="beforeOpen">
- <el-form :size="size" :inline="true" :model="params">
- <el-form-item v-for="(column, index) in searchColumns" :key="index" :label="column.title">
- <el-input v-model="params[column.key]" @change="queryList"> </el-input>
- </el-form-item>
- <el-form-item>
- <el-button icon="el-icon-refresh" @click="resetList"></el-button>
- </el-form-item>
- </el-form>
- <el-table v-loading="loading" :data="data" :size="size" ref="singleTable" height="45vh" highlight-current-row
- style="width: 100%; margin-bottom: 20px" @row-click="selectCurrentData">
- <el-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.key" :label="column.title"
- :width="column.width" show-overflow-tooltip>
- </el-table-column>
- </el-table>
- <div style="display: flex; justify-content: space-between; align-items: center">
- <p>
- <span style="font-size: 12px">已选择 :</span>
- <el-tag v-if="currentData" :size="size">{{
- currentData[showKey]
- }}</el-tag>
- <span v-else>无</span>
- </p>
- <el-pagination :layout="layout" :total="page.total" :page-sizes="pageSizes" :page-size="page.pageSize"
- :current-page="page.pageNum" :small="size === 'mini'" background @size-change="pageSizeChange"
- @current-change="pageNumberChange">
- </el-pagination>
- </div>
- <div style="margin-top: 20px; text-align: right">
- <el-button :size="size" @click="visible = false">取 消</el-button>
- <el-button :size="size" type="primary" @click="confirm">确 定</el-button>
- </div>
- </el-dialog>
- </template>
- <style scoped></style>
|