diff --git a/src/api/http.js b/src/api/http.js index 8d3234d..feedc32 100644 --- a/src/api/http.js +++ b/src/api/http.js @@ -1,112 +1,120 @@ import axios from 'axios'; import { - Message + Message } from 'element-ui' import router from '../router/index' import Cookie from 'js-cookie' import config from '@/config' const service = axios.create({ - baseURL: config.host, - timeout: 10000000 + baseURL: config.host, + timeout: 10000000 }) // post请求头 service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'; // 请求拦截器 service.interceptors.request.use(config => { - const token = Cookie.get('admin-token') - if (token) { - config.headers.token = token + const token = Cookie.get('admin-token') + if (token) { + config.headers.token = token + } + return config; +}, err => { + Message.error({ + message: '退出登陆', + onClose: function () { + router.push({ name: 'login' }); } - return config; - }, err => { - Message.error({ - message: '退出登陆', - onClose: function () { - router.push({name: 'login'}); - } - }) - return Promise.reject(err); + }) + return Promise.reject(err); }) let logouted = 0; // 响应拦截器 service.interceptors.response.use( - response => { - const res = response.data; - if (res.status == 200 || res.status == 10000 || res.status == 30001) { - return Promise.resolve(res).catch(e => {}); - } else if (!res.status) { - return Promise.resolve(res).catch(e => {}); - } else { - Message.error(res.message) - return Promise.reject(res) - } - }, - // 服务器状态码不是200的情况 - error => { - if (error.response.status) { - switch (error.response.status) { - // 401: 未登录 - case 401: - if (!logouted) { - Message.error('登录过期,请重新登录') - setTimeout(() => { - history.back() - }, 1500) - logouted = 1 - } - break; - default: - // Message.error(error.response.data.message) - Promise.reject(error.response); - } - return Promise.reject(error.response); - } + response => { + const res = response.data; + if (res.status == 200 || res.status == 10000 || res.status == 30001) { + return Promise.resolve(res).catch(e => { }); + } else if (res.code === 401) { + // 账号互踢 + if (!logouted) { + Message.error(res.msg.includes('顶') ? '您的账号已在其他设备登录,您已被迫下线!' : '登录过期,请重新登录!') + setTimeout(() => { + history.back() + }, 1500) + logouted = 1 + } + } else if (!res.status) { + return Promise.resolve(res).catch(e => { }); + } else { + Message.error(res.message) + return Promise.reject(res) + } + }, + // 服务器状态码不是200的情况 + error => { + if (error.response.status) { + switch (error.response.status) { + // 401: 未登录 + case 401: + if (!logouted) { + Message.error('登录过期,请重新登录') + setTimeout(() => { + history.back() + }, 1500) + logouted = 1 + } + break; + default: + Promise.reject(error.response); + } + return Promise.reject(error.response); } + } ); -function get(url, params) { - return new Promise((resolve, reject) => { - service.get(url, { params: params }).then(res => { - resolve(res); - }).catch(err => { - reject(err); - }); +function get (url, params) { + return new Promise((resolve, reject) => { + service.get(url, { params: params }).then(res => { + resolve(res); + }).catch(err => { + reject(err); }); + }); } -function post(url, params) { - return new Promise((resolve, reject) => { - service.post(url, params).then(res => { - resolve(res); - }).catch(err => { - reject(err.data); - }); +function post (url, params) { + return new Promise((resolve, reject) => { + service.post(url, params).then(res => { + resolve(res); + }).catch(err => { + reject(err.data); }); + }); } -function del(url, params) { - return new Promise((resolve, reject) => { - service.delete(url, { - params - }).then(res => { - resolve(res); - }).catch(err => { - reject(err.data); - }); +function del (url, params) { + return new Promise((resolve, reject) => { + service.delete(url, { + params + }).then(res => { + resolve(res); + }).catch(err => { + reject(err.data); }); + }); } -function put(url, params) { - return new Promise((resolve, reject) => { - service.put(url, params).then(res => { - resolve(res); - }).catch(err => { - reject(err.data); - }); +function put (url, params) { + return new Promise((resolve, reject) => { + service.put(url, params).then(res => { + resolve(res); + }).catch(err => { + reject(err.data); }); + }); } export { get, post, del, put } \ No newline at end of file diff --git a/src/components/TestPanel.vue b/src/components/TestPanel.vue index ee6c3e9..02962ad 100644 --- a/src/components/TestPanel.vue +++ b/src/components/TestPanel.vue @@ -214,8 +214,10 @@ import "codemirror/theme/base16-light.css"; import { mavonEditor } from 'mavon-editor' import 'mavon-editor/dist/css/index.css' import Stomp from 'stompjs' -export const MQTT_USERNAME = 'huoran' // 连接用户名, todo: read from database -export const MQTT_PASSWORD = 'huoran2024' // 连接密码, todo: read from database +// export const MQTT_USERNAME = 'huoran' // 连接用户名, todo: read from database +// export const MQTT_PASSWORD = 'huoran2024' // 连接密码, todo: read from database +export const MQTT_USERNAME = 'huorantest' // 连接用户名, todo: read from database +export const MQTT_PASSWORD = 'huorantest2024' // 连接密码, todo: read from database export default { data () { @@ -1090,8 +1092,8 @@ export default { // 消息队列获取 connect () { - // let ws = new WebSocket(`ws://124.71.74.9:15674/ws`); - let ws = new WebSocket(`wss://python.occupationlab.com/ws`); + let ws = new WebSocket(`ws://139.159.153.48:15674/ws`); + // let ws = new WebSocket(`wss://python.occupationlab.com/ws`); this.client = Stomp.over(ws); this.client.heartbeat.outgoing = 0 this.client.heartbeat.incoming = 0 diff --git a/src/config/index.js b/src/config/index.js index b584acd..2416b53 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -13,8 +13,8 @@ let host = location.origin + '/' let bankPath = `${location.origin}/banksystem` // 银行系统 // 121.37.12.51 | 192.168.31.151 if (isDev) { - // host = 'http://192.168.31.217:9000/' - host = 'http://121.37.12.51:9000/' + host = 'http://192.168.31.51:9000/' + // host = 'http://121.37.12.51:9000/' // host = 'https://occupationlab.com/' bankPath = `http://${location.hostname}:8093` } else if (isPro) { diff --git a/src/views/Home.vue b/src/views/Home.vue index bb3cb0c..09995ed 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -5,43 +5,47 @@

{{ curriculumName }}

退出实验 -
-
-

{{ $config.title }}

-

编程语言

- - - - - 打开Vscode新窗口 +
@@ -82,7 +86,8 @@ export default { ], curTab: '', // 选中后绑定的对象 workbench: [], // 判分点切换列表 - codeKey: 1 // 编辑器索引 + codeKey: 1, // 编辑器索引 + notAllowed: 0, }; }, components: { @@ -90,22 +95,32 @@ export default { testPanel }, mounted () { - const opened = localStorage.getItem('opened') - if (opened || opened === '0') { - localStorage.setItem('opened', +opened + 1) + // 保证同一个浏览器只有一个当前系统能打开 + const opened = +localStorage.getItem('opened') + if (opened) { + localStorage.setItem('opened', opened + 1) + this.notAllowed = 1 + this.$alert('我们注意到您当前已尝试打开多个实验页面。为保证实验的公平性和诚信,系统仅允许单个实验页面处于活跃状态。', '提示', { + confirmButtonText: '退出当前页面', + showClose: false, + callback: action => { + this.back() + } + }) } else { localStorage.setItem('opened', 1) } + + // 页面离开后当前活跃的标识处理 window.addEventListener('unload', function () { - const opened = localStorage.getItem('opened') + const opened = +localStorage.getItem('opened') if (opened) { - localStorage.setItem('opened', +opened - 1) + localStorage.setItem('opened', opened - 1) } else { localStorage.removeItem('opened') } - }); + }) - console.log(11, localStorage.getItem('opened')) document.onkeydown = function (event) { var e = event || window.event || arguments.callee.caller.arguments[0]; @@ -142,7 +157,6 @@ export default { }, // 跳转我的数据 toData () { - return console.log(11, localStorage.getItem('opened')) this.$router.push('/data') }, // 长时间未点击页面,就自动退出页面