if (!PHP.base && location.href.indexOf("/index.htmp/") > 0) { PHP.base = '/index.htmp'; } axios.defaults.baseURL = PHP.base || "/"; axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; axios.defaults.headers['PADA-CSRF-TOKEN'] = PHP.pd_csrf_token; axios.interceptors.request.use(function (config) { //处理POST数据 if (config.method.toLowerCase() === 'post' && config.data) { if (!config.headers['Content-Type']) { config.transformRequest = [function (data) { var formatData = new URLSearchParams(); UTILS.dealPostDataWithAxios(data, formatData); return formatData; }]; } else if (config.headers['Content-Type'] === 'multipart/form-data') { config.transformRequest = [function (data) { var formData = new FormData(); for (var key in data) { formData.append(key, data[key]); } return formData; }]; } } return config; }, function (error) { return Promise.reject(error); }); var isCsrfError = false; axios.interceptors.response.use(function (response) { if (response && response.data && response.data.status) { if (response.data.status === STATE_CODE_NOT_LOGIN || response.data.status === 10371 || response.data.status === 10372 || response.data.status === 10373 || response.data.status === 1028) { //不强制性跳转,让用户自己决定 Vue.prototype.$error({ title: '消息提醒', content: '登录状态已失效,请重新登录', }); }else if(response.data.status === 1600){ //需要展示特定的内容,跳转到内容页面 location.href = PHP.base +PHP.path+'/info?key='+(response.data.result && response.data.result.code); } } return (response && response.data) || {}; }, function (error) { //csrf验证失败,应该是缓存问题,提示刷新界面 if(error.response && (error.response.status === 403 && error.response.statusText === "csrf Forbidden")){ if(!isCsrfError){ isCsrfError = true; if(UTILS.getStorage('last_error_csrf') === PHP.pd_csrf_token){ Vue.prototype.$confirm({ title: '页面有缓存', content: '该页面有强缓存,导致CSRF更新不及时,请截图后发送给学校管理员', onOk: function () { var url = UTILS.parseUrl(); if(url.cs_hack){ window.location.href = window.location.href.replace(url.cs_hack, new Date().getTime()+''); }else{ window.location.href = window.location.href + (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'cs_hack='+new Date().getTime(); } }, onCancel: function () { isCsrfError = false; } }); }else{ UTILS.setStorage('last_error_csrf', PHP.pd_csrf_token); Vue.prototype.$confirm({ title: '页面需刷新', content: '页面停留时间过长,不更新页面将无法使用,是否现在刷新?', onOk: function () { var url = UTILS.parseUrl(); if(url.cs_hack){ window.location.href = window.location.href.replace(url.cs_hack, new Date().getTime()+''); }else{ window.location.href = window.location.href + (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'cs_hack='+new Date().getTime(); } }, onCancel: function () { isCsrfError = false; } }); } } } return Promise.reject(error); }); window.NewbieTable = { fetched: function (res) { if(res.status == STATE_CODE_SUCCESS){ return { items: res.result.items || [], totalSize: res.result.total_size }; }else{ if(res.status !== 1600){ res.result && Vue.prototype.$message.error(res.result); } return { items: [], totalSize: 0 }; } } }; if(typeof moment !== 'undefined'){ moment.locale('zh-cn'); } Vue.mixin({ data: function () { return { //这里的col数值不要乱改,与css有兼容 commonLabelCol: {xs: 22, xl: 8, xxl: 6}, commonWrapperCol: {xs: 22, xl: 12, xxl: 14}, commonWrapperOffset: {xs: 22, xl: {offset: 8,span: 12}, xxl: {offset: 6,span: 14}}, commonLabelFullCol: {xs: 22, xl: 8, xxl: 6}, commonWrapperFullCol: {xs: 22, xl: 16, xxl: 18}, commonWrapperFullOffset: {xs: 22, xl: {offset: 8,span: 16}, xxl: {offset: 6,span: 18}}, commonLabelPartCol: {xs: 22, xl: 4, xxl: 3}, commonWrapperPartCol: {xs: 22, xl: 20, xxl: 21}, commonWrapperPartOffset: {xs: 22, xl: {offset: 4,span: 20}, xxl: {offset: 3,span: 21}}, } }, methods: { getAjaxURL: function(url){ if(url.indexOf('/') !== 0){ url = '/' + url; } return PHP.base + url; }, dateFormat: function (time, format, sour) { return UTILS.dateFormat(time, format, sour) }, getQuery: function(name){ return UTILS.parseUrl()[name] || ""; }, go: function (url, noPath, isOpen) { if(url.indexOf('http') !== 0 && url.indexOf('//') !== 0){ if(url.indexOf('/') !== 0){ url = '/' + url; } if(noPath){ url = PHP.base + url; }else{ url = PHP.base + PHP.path + url; } } if(isOpen){ window.open(url); }else{ location.href = url; } }, closeDetailPage: function (name, needRefresh) { UTILS.closeDetail(name, needRefresh); }, closeCurrentPage: function (name, needRefresh) { UTILS.closeDetail(name, needRefresh); }, getLabelByKey: function (key, data) { return UTILS.getLabelByKey(key, data); }, openImage: function (url) { return UTILS.openImage(url); }, isDefined: function (item) { //判断diff return item !== undefined; }, commonFilterCascader: function (inputValue, path) { return path.some(function(option){ return option.label && option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1; }); }, } }); //富文本编辑框 Vue.component('rich-editor', { render: function (createElement) { return createElement('script', { attrs: { id: this.id, name: this.id, type: 'text/plain', }, class: 'newbie-rich-editor' }); }, mounted: function () { this.$nextTick(function () { this.init(); }); }, props: ['value', 'config', 'disabled'], data: function () { return { editor: '', content: '' } }, computed: { id: function () { return 'richEditor_' + Math.round(Math.random() * 10000000); } }, deactivated: function () { this.destroy(); }, destroyed: function () { this.destroy(); }, activated: function () { this.$nextTick(function () { this.init(); }); }, watch: { disabled: function (newV) { this.editable(newV) } }, methods: { editable: function(val){ if (!UE || !this.editor) return; var _self = this; this.editor.ready(function () { if(val){ _self.editor.setDisabled(); }else{ _self.editor.setEnabled(); } }) }, destroy: function () { this.editor && this.editor.destroy(); this.editor = ""; }, init: function () { if (!UE || this.editor) return; var _self = this; this.editor = UE.getEditor(this.id, Object.assign({ toolbars: UE.getToolbars(3) , pasteplain: false , autoFloatEnabled: false , scaleEnabled: true , initialFrameHeight: 450 }, this.config || {}) ); this.editor.addListener( 'contentChange', function() { var content = _self.getContent(); _self.content = content; _self.$emit('input', content); }); this.editable(this.disabled); this._setContent(); }, setContent: function (content) { this.content = content; if (this.editor) { var _self = this; this.$nextTick(function () { _self._setContent(); }) } else { this.init(); } }, getContent: function () { return this.editor.getContent(); }, _setContent: function () { var _self = this; this.editor.ready(function () { _self.editor.setContent(_self.content); }) } } });