| | |
| | | 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: { |
| | |
| | | }, |
| | | 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; |
| | |
| | | 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; |