田源
2024-05-16 94696e8332d543a97015d897e2505e8a78d734de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<template>
    <el-dialog 
        :close-on-click-modal="false"
        title="为【参照引用的业务类型】选取值"
        append-to-body
        :visible.sync="referBtmDialogParams.isShowDialog"
        @close="recoverPage"
        width="65%"
        top="0"
        class= "avue-dialog avue-dialog--top"
        style="height: 150vh; margin-top: -13vh;">
        <avue-crud
            :page.sync="referBtmDialogParams.referBtmDataPage"
            :ref="referBtmDialogParams.ref"
            :option="referBtmDialogParams.referBtmOption" 
            :table-loading="referBtmDialogParams.referBtmDialogLoading"
            :data="referBtmDialogParams.referBtmData"
            @refresh-change="referBtmDataChange"
            @search-change="referBtmSearchChange"
            @search-reset="referBtmSearchReset"
            @selection-change="referBtmSelectionChange"
            @current-change="referBtmCurrentChange"
            @size-change="referBtmSizeChange"
            @on-load="referBtmOnLoad"
            @row-click="referBtmRowClick">
        </avue-crud>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="saveSelectedReferBtm">保 存</el-button>
            <el-button @click="referBtmDialogParams.isShowDialog = false">取 消</el-button>
        </div>
    </el-dialog>
</template>
 
<script>
import referBtmOption from "@/const/code/referBtmDialog";
import {referDataGrid} from "@/api/code/referBtmType";
export default {
    name: "referBtmTypeCrudDialog",
    props: {
        // 对话框显示隐藏控制
        visible: {
            type: "Boolean",
            default: false,
        },
    },
    watch: {
        // 监听父组件传的窗口显示隐藏的值
        visible (){
            this.referBtmDialogParams.isShowDialog = this.visible;
        }
    },
    data() {
        return{
            /** 参照引用的业务类型对话框相关数据 */
            referBtmDialogParams: {
                ref: 'crudReferBtm',
                isShowDialog: this.visible,   //对话框显示控制
                referBtmDialogLoading: true,   //表格数据加载提示
                referBtmDataPage: {
                    pageSize: 10,
                    currentPage: 1,
                    total: 0
                },
                referBtmOption: referBtmOption, //表格配置
                referBtmData: [], //表格数据
                referBtmQuery: {}, //查询条件
                referBtmSelectionList: [], //当前选中行
            },
        }
    },
    methods: {
 
        // 恢复页面
        recoverPage(){
            this.referBtmSelectionClear();
            this.$emit('update:visible', false);
        },
        /** 为参照引用的业务类型选取值,第二层嵌套对话框,及其相关方法  */
        // 表格数据刷新按钮
        referBtmDataChange() {
            this.referBtmOnLoad(this.referBtmDialogParams.referBtmDataPage, this.referBtmDialogParams.referBtmQuery);
        },
        saveSelectedReferBtm() {
            if(this.referBtmDialogParams.referBtmSelectionList.length != 1){
                this.$message.warning("请选择一条数据!");
                return false;
            }
            // 调用父组件的方法并传递当前选中的参数值,实现回显
            this.$emit('echoReferBtmType', this.referBtmDialogParams.referBtmSelectionList[0]) 
            //清空当前选中的行
            this.referBtmSelectionClear();
            this.referBtmDialogParams.isShowDialog = false;
        },
        referBtmSearchReset() {
            this.referBtmDialogParams.referBtmQuery = {};
            this.referBtmOnLoad();
        },
        referBtmSearchChange(params, done) {
            this.referBtmDialogParams.referBtmQuery = params;
            this.referBtmDialogParams.referBtmDataPage.currentPage = 1;
            this.referBtmOnLoad();
            done();
        },
         // 单击选中表格行时触发
        referBtmRowClick(row){
            this.$refs[this.referBtmDialogParams.ref].toggleSelection();
            this.referBtmDialogParams.referBtmSelectionList = row;
            this.$refs[this.referBtmDialogParams.ref].setCurrentRow(row);
            this.$refs[this.referBtmDialogParams.ref].toggleRowSelection(row); //选中当前行
        },
        referBtmSelectionChange(list) {
            this.referBtmDialogParams.referBtmSelectionList = list;
            this.$refs[this.referBtmDialogParams.ref].setCurrentRow(this.referBtmDialogParams.referBtmSelectionList[list.length-1]);
        },
        referBtmSelectionClear() {
            this.referBtmDialogParams.referBtmSelectionList = [];
            this.$nextTick(() => {
                this.$refs[this.referBtmDialogParams.ref].toggleSelection();
            });
        },
        referBtmCurrentChange(currentPage){
            this.referBtmDialogParams.referBtmDataPage.currentPage = currentPage;
        },
        referBtmSizeChange(pageSize){
            this.referBtmDialogParams.referBtmDataPage.pageSize = pageSize;
        },
        refreshReferBtmDataChange() {
             this.referBtmOnLoad(this.referBtmDialogParams.referBtmDataPage, this.referBtmDialogParams.referBtmQuery);
        },
        //加载中参照引用的业务类型的数据
        referBtmOnLoad() {
            let referBtmParams = this.referBtmDialogParams;
            this.referBtmDialogParams.referBtmDialogLoading = true;
            let param = {};
            // 多个conditionMap这样传参
            if(referBtmParams.referBtmQuery){
                Object.keys(referBtmParams.referBtmQuery).forEach(key=>{
                    param['conditionMap['+key+']'] = referBtmParams.referBtmQuery[key];
                });
            }
            referDataGrid(
                referBtmParams.referBtmDataPage.currentPage, 
                referBtmParams.referBtmDataPage.pageSize,
                param
            ).then(res => {
                //console.log(res.data);
                const data = res.data.data;
                this.referBtmDialogParams.referBtmDataPage.total = data.total;
                this.referBtmDialogParams.referBtmData = data.records;
                this.referBtmDialogParams.referBtmDialogLoading = false;
                //this.referBtmSelectionClear();
                //表格行错位问题
                this.$nextTick(() => {
                    this.$refs[this.referBtmDialogParams.ref].doLayout();
                })
            });
        },
 
    },
}
</script>
 
<style>
 
</style>