|  | @@ -0,0 +1,288 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +    <div>
 | 
	
		
			
				|  |  | +        <basic-container v-show="!detailsOpen" class="page-crad">
 | 
	
		
			
				|  |  | +            <el-row>
 | 
	
		
			
				|  |  | +                <el-col :span="4">
 | 
	
		
			
				|  |  | +                    <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" style="height:73vh;">
 | 
	
		
			
				|  |  | +                    </avue-tree>
 | 
	
		
			
				|  |  | +                </el-col>
 | 
	
		
			
				|  |  | +                <el-col :span="20">
 | 
	
		
			
				|  |  | +                    <avue-crud :option="option"
 | 
	
		
			
				|  |  | +                               :table-loading="loading"
 | 
	
		
			
				|  |  | +                               :data="data"
 | 
	
		
			
				|  |  | +                               :page.sync="page"
 | 
	
		
			
				|  |  | +                               :permission="permissionList"
 | 
	
		
			
				|  |  | +                               :before-open="beforeOpen"
 | 
	
		
			
				|  |  | +                               v-model="form"
 | 
	
		
			
				|  |  | +                               ref="crud"
 | 
	
		
			
				|  |  | +                               @row-update="rowUpdate"
 | 
	
		
			
				|  |  | +                               @row-save="rowSave"
 | 
	
		
			
				|  |  | +                               @row-del="rowDel"
 | 
	
		
			
				|  |  | +                               @search-change="searchChange"
 | 
	
		
			
				|  |  | +                               @search-reset="searchReset"
 | 
	
		
			
				|  |  | +                               @selection-change="selectionChange"
 | 
	
		
			
				|  |  | +                               @current-change="currentChange"
 | 
	
		
			
				|  |  | +                               @size-change="sizeChange"
 | 
	
		
			
				|  |  | +                               @refresh-change="refreshChange"
 | 
	
		
			
				|  |  | +                               @on-load="onLoad">
 | 
	
		
			
				|  |  | +                        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
 | 
	
		
			
				|  |  | +                            <el-button type="text"
 | 
	
		
			
				|  |  | +                                       size="small"
 | 
	
		
			
				|  |  | +                                       icon="el-icon-delete"
 | 
	
		
			
				|  |  | +                                       @click="rowDel(row)">删 除
 | 
	
		
			
				|  |  | +                            </el-button>
 | 
	
		
			
				|  |  | +                        </template>
 | 
	
		
			
				|  |  | +                        <template slot="status" slot-scope="{row,size}">
 | 
	
		
			
				|  |  | +                            <span v-if="row.status === 1">启用</span>
 | 
	
		
			
				|  |  | +                            <span v-if="row.status === 0">保存</span>
 | 
	
		
			
				|  |  | +                        </template>
 | 
	
		
			
				|  |  | +                        <template slot-scope="{type,size,row,$index}" slot="menuLeft">
 | 
	
		
			
				|  |  | +                            <el-button icon="el-icon-plus" type="primary" :size="size" @click="addStorageRegion">新增</el-button>
 | 
	
		
			
				|  |  | +                            <el-button type="warning" icon="el-icon-download" size="small" @click="">导出</el-button>
 | 
	
		
			
				|  |  | +                        </template>
 | 
	
		
			
				|  |  | +                    </avue-crud>
 | 
	
		
			
				|  |  | +                </el-col>
 | 
	
		
			
				|  |  | +            </el-row>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        </basic-container>
 | 
	
		
			
				|  |  | +        <detail v-if="detailsOpen" ref="detailRef" :onLoad="this.nowClick" @backToList="backToList"></detail>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import {getList, getDetail, add, update, remove, storageTree} from "@/api/storehouse/storage-region.js";
 | 
	
		
			
				|  |  | +import {mapGetters} from "vuex";
 | 
	
		
			
				|  |  | +import detail from './detailsPage.vue'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +    components: {detail},
 | 
	
		
			
				|  |  | +    data() {
 | 
	
		
			
				|  |  | +        return {
 | 
	
		
			
				|  |  | +            treeOption: {
 | 
	
		
			
				|  |  | +                addBtn: false,
 | 
	
		
			
				|  |  | +                menu: false,
 | 
	
		
			
				|  |  | +                size: "small",
 | 
	
		
			
				|  |  | +                props: {
 | 
	
		
			
				|  |  | +                    labelText: "标题",
 | 
	
		
			
				|  |  | +                    label: "title",
 | 
	
		
			
				|  |  | +                    value: "value",
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            treeData: [],
 | 
	
		
			
				|  |  | +            form: {},
 | 
	
		
			
				|  |  | +            query: {},
 | 
	
		
			
				|  |  | +            detailsOpen: false,
 | 
	
		
			
				|  |  | +            loading: true,
 | 
	
		
			
				|  |  | +            page: {
 | 
	
		
			
				|  |  | +                pageSize: 10,
 | 
	
		
			
				|  |  | +                currentPage: 1,
 | 
	
		
			
				|  |  | +                total: 0
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            selectionList: [],
 | 
	
		
			
				|  |  | +            option: {
 | 
	
		
			
				|  |  | +                height: 'auto',
 | 
	
		
			
				|  |  | +                calcHeight: 30,
 | 
	
		
			
				|  |  | +                tip: false,
 | 
	
		
			
				|  |  | +                searchShow: true,
 | 
	
		
			
				|  |  | +                searchMenuSpan: 6,
 | 
	
		
			
				|  |  | +                border: true,
 | 
	
		
			
				|  |  | +                index: true,
 | 
	
		
			
				|  |  | +                viewBtn: true,
 | 
	
		
			
				|  |  | +                selection: true,
 | 
	
		
			
				|  |  | +                dialogClickModal: false,
 | 
	
		
			
				|  |  | +                column: [
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        label: "库区编码",
 | 
	
		
			
				|  |  | +                        prop: "regionCode",
 | 
	
		
			
				|  |  | +                        search: true,
 | 
	
		
			
				|  |  | +                        searchSpan: 6,
 | 
	
		
			
				|  |  | +                        align: 'center'
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        label: "库区名称",
 | 
	
		
			
				|  |  | +                        prop: "regionName",
 | 
	
		
			
				|  |  | +                        search: true,
 | 
	
		
			
				|  |  | +                        searchSpan: 6,
 | 
	
		
			
				|  |  | +                        align: 'center'
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        label: "状态",
 | 
	
		
			
				|  |  | +                        prop: "status",
 | 
	
		
			
				|  |  | +                        search: true,
 | 
	
		
			
				|  |  | +                        searchSpan: 6,
 | 
	
		
			
				|  |  | +                        align: 'center'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                ]
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            data: [],
 | 
	
		
			
				|  |  | +            nowClick: {}
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    created() {
 | 
	
		
			
				|  |  | +        this.getStorageTree()
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    computed: {
 | 
	
		
			
				|  |  | +        ...mapGetters(["permission"]),
 | 
	
		
			
				|  |  | +        permissionList() {
 | 
	
		
			
				|  |  | +            return {
 | 
	
		
			
				|  |  | +                addBtn: this.vaildData(this.permission.centerstorageregion_add, false),
 | 
	
		
			
				|  |  | +                viewBtn: this.vaildData(this.permission.centerstorageregion_view, false),
 | 
	
		
			
				|  |  | +                delBtn: this.vaildData(this.permission.centerstorageregion_delete, false),
 | 
	
		
			
				|  |  | +                editBtn: this.vaildData(this.permission.centerstorageregion_edit, false)
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        ids() {
 | 
	
		
			
				|  |  | +            let ids = [];
 | 
	
		
			
				|  |  | +            this.selectionList.forEach(ele => {
 | 
	
		
			
				|  |  | +                ids.push(ele.id);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            return ids.join(",");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    methods: {
 | 
	
		
			
				|  |  | +        getStorageTree(){
 | 
	
		
			
				|  |  | +            storageTree().then(res => {
 | 
	
		
			
				|  |  | +                this.treeData = res.data.data
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        backToList(){
 | 
	
		
			
				|  |  | +            this.detailsOpen = false;
 | 
	
		
			
				|  |  | +            this.onLoad(this.page)
 | 
	
		
			
				|  |  | +            this.getStorageTree()
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        addStorageRegion() {
 | 
	
		
			
				|  |  | +            if (!this.query.parentId) {
 | 
	
		
			
				|  |  | +                this.$message({
 | 
	
		
			
				|  |  | +                    type: "error",
 | 
	
		
			
				|  |  | +                    message: "请先选择左侧父级节点!"
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            this.detailsOpen = true;
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        rowSave(row, done, loading) {
 | 
	
		
			
				|  |  | +            add(row).then(() => {
 | 
	
		
			
				|  |  | +                this.onLoad(this.page);
 | 
	
		
			
				|  |  | +                this.$message({
 | 
	
		
			
				|  |  | +                    type: "success",
 | 
	
		
			
				|  |  | +                    message: "操作成功!"
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +                done();
 | 
	
		
			
				|  |  | +            }, error => {
 | 
	
		
			
				|  |  | +                loading();
 | 
	
		
			
				|  |  | +                window.console.log(error);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        rowUpdate(row, index, done, loading) {
 | 
	
		
			
				|  |  | +            update(row).then(() => {
 | 
	
		
			
				|  |  | +                this.onLoad(this.page);
 | 
	
		
			
				|  |  | +                this.$message({
 | 
	
		
			
				|  |  | +                    type: "success",
 | 
	
		
			
				|  |  | +                    message: "操作成功!"
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +                done();
 | 
	
		
			
				|  |  | +            }, error => {
 | 
	
		
			
				|  |  | +                loading();
 | 
	
		
			
				|  |  | +                console.log(error);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        nodeClick(data) {
 | 
	
		
			
				|  |  | +            console.info('data---', data)
 | 
	
		
			
				|  |  | +            this.nowClick = data
 | 
	
		
			
				|  |  | +            this.query.parentId = data.value
 | 
	
		
			
				|  |  | +            this.page.currentPage = 1;
 | 
	
		
			
				|  |  | +            this.onLoad(this.page);
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        rowDel(row) {
 | 
	
		
			
				|  |  | +            this.$confirm("确定将选择数据删除?", {
 | 
	
		
			
				|  |  | +                confirmButtonText: "确定",
 | 
	
		
			
				|  |  | +                cancelButtonText: "取消",
 | 
	
		
			
				|  |  | +                type: "warning"
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +                .then(() => {
 | 
	
		
			
				|  |  | +                    return remove(row.id);
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +                .then(() => {
 | 
	
		
			
				|  |  | +                    this.onLoad(this.page);
 | 
	
		
			
				|  |  | +                    this.$message({
 | 
	
		
			
				|  |  | +                        type: "success",
 | 
	
		
			
				|  |  | +                        message: "操作成功!"
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        handleDelete() {
 | 
	
		
			
				|  |  | +            if (this.selectionList.length === 0) {
 | 
	
		
			
				|  |  | +                this.$message.warning("请选择至少一条数据");
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            this.$confirm("确定将选择数据删除?", {
 | 
	
		
			
				|  |  | +                confirmButtonText: "确定",
 | 
	
		
			
				|  |  | +                cancelButtonText: "取消",
 | 
	
		
			
				|  |  | +                type: "warning"
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +                .then(() => {
 | 
	
		
			
				|  |  | +                    return remove(this.ids);
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +                .then(() => {
 | 
	
		
			
				|  |  | +                    this.onLoad(this.page);
 | 
	
		
			
				|  |  | +                    this.$message({
 | 
	
		
			
				|  |  | +                        type: "success",
 | 
	
		
			
				|  |  | +                        message: "操作成功!"
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                    this.$refs.crud.toggleSelection();
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        beforeOpen(done, type) {
 | 
	
		
			
				|  |  | +            if (["edit", "view"].includes(type)) {
 | 
	
		
			
				|  |  | +                getDetail(this.form.id).then(res => {
 | 
	
		
			
				|  |  | +                    this.form = res.data.data;
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            done();
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        searchReset() {
 | 
	
		
			
				|  |  | +            this.query = {};
 | 
	
		
			
				|  |  | +            this.onLoad(this.page);
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        searchChange(params, done) {
 | 
	
		
			
				|  |  | +            this.query = params;
 | 
	
		
			
				|  |  | +            this.page.currentPage = 1;
 | 
	
		
			
				|  |  | +            this.onLoad(this.page, params);
 | 
	
		
			
				|  |  | +            done();
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        selectionChange(list) {
 | 
	
		
			
				|  |  | +            this.selectionList = list;
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        selectionClear() {
 | 
	
		
			
				|  |  | +            this.selectionList = [];
 | 
	
		
			
				|  |  | +            this.$refs.crud.toggleSelection();
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        currentChange(currentPage) {
 | 
	
		
			
				|  |  | +            this.page.currentPage = currentPage;
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        sizeChange(pageSize) {
 | 
	
		
			
				|  |  | +            this.page.pageSize = pageSize;
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        refreshChange() {
 | 
	
		
			
				|  |  | +            this.onLoad(this.page, this.query);
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        onLoad(page, params = {}) {
 | 
	
		
			
				|  |  | +            this.loading = true;
 | 
	
		
			
				|  |  | +            getList(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>
 | 
	
		
			
				|  |  | +</style>
 |