Junjie
10 小时以前 8bfe1168a42d4e3750a15b0c0fb0a7629d6cf91c
src/main/webapp/static/js/config/config.js
@@ -1437,9 +1437,31 @@
                    tableHeight: 420,
                    layoutTimer: null,
                    tableResizeHandler: null,
                    grantTimer: null,
                    dialogForm: createFormDefaults(),
                    dialogDisplay: createDisplayDefaults(),
                    dialogRules: createFormRules()
                    dialogRules: createFormRules(),
                    grantStatus: {
                        granted: false,
                        remainingSeconds: 0,
                        expireAt: null
                    },
                    grantDialog: {
                        visible: false,
                        submitting: false,
                        form: {
                            account: '',
                            password: ''
                        },
                        rules: {
                            account: [
                                { required: true, message: '请输入管理员账号', trigger: 'blur' }
                            ],
                            password: [
                                { required: true, message: '请输入密码', trigger: 'blur' }
                            ]
                        }
                    }
                };
            },
            computed: {
@@ -1496,11 +1518,18 @@
                },
                isDialogReadonly: function () {
                    return this.dialog.mode === 'detail';
                },
                grantStatusText: function () {
                    if (!this.grantStatus.granted) {
                        return '当前无最高权限授权';
                    }
                    return '剩余 ' + this.formatRemainingSeconds(this.grantStatus.remainingSeconds);
                }
            },
            created: function () {
                this.fetchSelectTypeOptions();
                this.loadTable();
                this.loadGrantStatus();
            },
            mounted: function () {
                var self = this;
@@ -1519,8 +1548,135 @@
                    window.removeEventListener('resize', this.tableResizeHandler);
                    this.tableResizeHandler = null;
                }
                this.stopGrantCountdown();
            },
            methods: $.extend({}, sharedMethods, {
                formatRemainingSeconds: function (seconds) {
                    var total = Number(seconds || 0);
                    var minutes;
                    var remainSeconds;
                    if (total <= 0) {
                        return '0秒';
                    }
                    minutes = Math.floor(total / 60);
                    remainSeconds = total % 60;
                    if (minutes <= 0) {
                        return remainSeconds + '秒';
                    }
                    if (remainSeconds === 0) {
                        return minutes + '分钟';
                    }
                    return minutes + '分' + remainSeconds + '秒';
                },
                stopGrantCountdown: function () {
                    if (this.grantTimer) {
                        clearInterval(this.grantTimer);
                        this.grantTimer = null;
                    }
                },
                startGrantCountdown: function () {
                    var self = this;
                    self.stopGrantCountdown();
                    if (!self.grantStatus.granted || Number(self.grantStatus.remainingSeconds) <= 0) {
                        return;
                    }
                    self.grantTimer = setInterval(function () {
                        if (!self.grantStatus.granted) {
                            self.stopGrantCountdown();
                            return;
                        }
                        if (self.grantStatus.remainingSeconds <= 1) {
                            self.grantStatus = {
                                granted: false,
                                remainingSeconds: 0,
                                expireAt: null
                            };
                            self.stopGrantCountdown();
                            return;
                        }
                        self.grantStatus.remainingSeconds -= 1;
                    }, 1000);
                },
                applyGrantStatus: function (payload) {
                    var status = payload || {};
                    this.grantStatus = {
                        granted: !!status.granted,
                        remainingSeconds: Number(status.remainingSeconds || 0),
                        expireAt: status.expireAt || null
                    };
                    this.startGrantCountdown();
                },
                loadGrantStatus: function () {
                    var self = this;
                    $.ajax({
                        url: baseUrl + '/highPrivilege/status/auth',
                        method: 'GET',
                        headers: self.authHeaders(),
                        success: function (res) {
                            if (self.handleForbidden(res)) {
                                return;
                            }
                            if (!res || res.code !== 200) {
                                return;
                            }
                            self.applyGrantStatus(res.data || {});
                        }
                    });
                },
                resetGrantDialog: function () {
                    this.grantDialog.submitting = false;
                    this.grantDialog.form = {
                        account: '',
                        password: ''
                    };
                    if (this.$refs.grantForm) {
                        this.$refs.grantForm.clearValidate();
                    }
                },
                openGrantDialog: function () {
                    this.grantDialog.visible = true;
                    this.$nextTick(this.resetGrantDialog);
                },
                submitGrant: function () {
                    var self = this;
                    if (!self.$refs.grantForm) {
                        return;
                    }
                    self.$refs.grantForm.validate(function (valid) {
                        if (!valid) {
                            return false;
                        }
                        self.grantDialog.submitting = true;
                        $.ajax({
                            url: baseUrl + '/highPrivilege/grant/auth',
                            method: 'POST',
                            contentType: 'application/json;charset=UTF-8',
                            headers: self.authHeaders(),
                            data: JSON.stringify({
                                account: self.grantDialog.form.account,
                                password: hex_md5(self.grantDialog.form.password || '')
                            }),
                            success: function (res) {
                                self.grantDialog.submitting = false;
                                if (self.handleForbidden(res)) {
                                    return;
                                }
                                if (!res || res.code !== 200) {
                                    self.$message.error((res && res.msg) ? res.msg : '授权失败');
                                    return;
                                }
                                self.$message.success('授权成功');
                                self.grantDialog.visible = false;
                                self.applyGrantStatus(res.data || {});
                            },
                            error: function () {
                                self.grantDialog.submitting = false;
                                self.$message.error('授权失败');
                            }
                        });
                        return true;
                    });
                },
                calculateTableHeight: function () {
                    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 860;
                    var tableWrap = this.$refs.tableWrap;