|
@@ -65,7 +65,7 @@
|
|
<a class="footer-info-item">蜀ICP备18027363号</a>
|
|
<a class="footer-info-item">蜀ICP备18027363号</a>
|
|
<span class="footer-info-item">© 2021 HABOOK Group 醍摩豆</span>
|
|
<span class="footer-info-item">© 2021 HABOOK Group 醍摩豆</span>
|
|
</div>
|
|
</div>
|
|
- <el-drawer title="服务端信息" :visible.sync="isDeviceDrawer">
|
|
|
|
|
|
+ <el-drawer title="服务端信息" :visible.sync="isDeviceDrawer" size="35%">
|
|
<el-form ref="form" label-width="120px" v-if="deviceInfo" style="margin-right: 10px;">
|
|
<el-form ref="form" label-width="120px" v-if="deviceInfo" style="margin-right: 10px;">
|
|
<el-form-item label="登录用户:">
|
|
<el-form-item label="登录用户:">
|
|
<span>{{ deviceInfo.server.userName }}</span>
|
|
<span>{{ deviceInfo.server.userName }}</span>
|
|
@@ -98,9 +98,14 @@
|
|
<span>{{ deviceInfo.centerUrl }}</span>
|
|
<span>{{ deviceInfo.centerUrl }}</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="服务端地址:">
|
|
<el-form-item label="服务端地址:">
|
|
|
|
+ <!-- 展示哪一个是主服务器,有下载学生端配置功能,切换主服务器后需重新下载 -->
|
|
<span v-for="(item, index) in deviceInfo.server.host" :key="index" style="display: block;">
|
|
<span v-for="(item, index) in deviceInfo.server.host" :key="index" style="display: block;">
|
|
- {{ item }}
|
|
|
|
- <i class="el-icon-copy-document" @click="copyUrl(item)" style="cursor: pointer; margin-left: 5px;"></i>
|
|
|
|
|
|
+ {{ item.url }}
|
|
|
|
+ <i class="el-icon-copy-document" @click="copyUrl(item.url)" style="cursor: pointer; margin-left: 5px;"></i>
|
|
|
|
+ <span style="margin-left: 15px;">
|
|
|
|
+ <el-button size="mini" v-show="item.primary" @click="uploadStu()">下载学生端配置</el-button>
|
|
|
|
+ <i class="el-icon-qiehuan" @click="checkHost(item)" :title="`切换主站${item.physical ? ',建议设置为主站' : ''}`" v-show="!item.primary" :style="[{'cursor': 'pointer'}, {'font-size': '18px'}, {'color': item.physical ? '#f5912f' : ''}]"></i>
|
|
|
|
+ </span>
|
|
</span>
|
|
</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
@@ -162,7 +167,8 @@ export default {
|
|
signalR: null,
|
|
signalR: null,
|
|
qrCodeToken: undefined,
|
|
qrCodeToken: undefined,
|
|
ttlTimeOut: undefined,
|
|
ttlTimeOut: undefined,
|
|
- ttlChange: 0
|
|
|
|
|
|
+ ttlChange: 0,
|
|
|
|
+ stuUrl: '',
|
|
}
|
|
}
|
|
},
|
|
},
|
|
mounted() {
|
|
mounted() {
|
|
@@ -181,7 +187,13 @@ export default {
|
|
res.data.server.networks.forEach(network => {
|
|
res.data.server.networks.forEach(network => {
|
|
// https://192.168.8.140:5001/login/student
|
|
// https://192.168.8.140:5001/login/student
|
|
let url = `${item.protocol}://${network.ip}:${item.port}/login/student`
|
|
let url = `${item.protocol}://${network.ip}:${item.port}/login/student`
|
|
- res.data.server.host.push(url)
|
|
|
|
|
|
+ if(network.primary) this.stuUrl = network?.batscriptZip
|
|
|
|
+ res.data.server.host.push({
|
|
|
|
+ url,
|
|
|
|
+ primary: network.primary,
|
|
|
|
+ physical: item.physical,
|
|
|
|
+ ip: network.ip
|
|
|
|
+ })
|
|
})
|
|
})
|
|
})
|
|
})
|
|
res.data.server.showRam = (res.data.server.ram / 1024 / 1024 / 1024).toFixed(1)
|
|
res.data.server.showRam = (res.data.server.ram / 1024 / 1024 / 1024).toFixed(1)
|
|
@@ -305,7 +317,12 @@ export default {
|
|
res.data.server.networks.forEach(network => {
|
|
res.data.server.networks.forEach(network => {
|
|
// https://192.168.8.140:5001/login/student
|
|
// https://192.168.8.140:5001/login/student
|
|
let url = `${item.protocol}://${network.ip}:${item.port}/login/student`
|
|
let url = `${item.protocol}://${network.ip}:${item.port}/login/student`
|
|
- res.data.server.host.push(url)
|
|
|
|
|
|
+ res.data.server.host.push({
|
|
|
|
+ url,
|
|
|
|
+ primary: network.primary,
|
|
|
|
+ physical: item.physical,
|
|
|
|
+ ip: network.ip
|
|
|
|
+ })
|
|
})
|
|
})
|
|
})
|
|
})
|
|
res.data.server.showRam = (res.data.server.ram / 1024 / 1024 / 1024).toFixed(1)
|
|
res.data.server.showRam = (res.data.server.ram / 1024 / 1024 / 1024).toFixed(1)
|
|
@@ -350,6 +367,71 @@ export default {
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
},
|
|
|
|
+ checkHost(data) {
|
|
|
|
+ this.$api.modifyHost({ip: data.ip}).then(res => {
|
|
|
|
+ if(res.code === 200) {
|
|
|
|
+ this.viewNetworkInfo()
|
|
|
|
+ this.$message({
|
|
|
|
+ message: '设置成功,请重新下载学生端配置信息',
|
|
|
|
+ type: 'success'
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ this.$message({
|
|
|
|
+ message: res.msg,
|
|
|
|
+ type: 'warning'
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ async uploadStu() {
|
|
|
|
+ let url = `/${this.stuUrl}`
|
|
|
|
+ try {
|
|
|
|
+ let data = await this.getFile(url)
|
|
|
|
+ let objectUrl = window.URL.createObjectURL(new Blob([data], {type: 'application/zip'}));
|
|
|
|
+ let a = document.createElement('a');
|
|
|
|
+ a.href = objectUrl;
|
|
|
|
+ a.download = '学生端配置信息.zip'
|
|
|
|
+ a.click()
|
|
|
|
+ a.remove();
|
|
|
|
+ } catch(e) {
|
|
|
|
+ this.$message({
|
|
|
|
+ message: '下载失败',
|
|
|
|
+ type: 'warning'
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ getFile(url) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ var xhr = new XMLHttpRequest();
|
|
|
|
+ var formData = new FormData();
|
|
|
|
+ xhr.open('get', url); //url填写后台的接口地址,如果是post,在formData append参数(参考原文地址)
|
|
|
|
+ xhr.responseType = 'blob';
|
|
|
|
+ xhr.headers = {
|
|
|
|
+ 'Content-Type': 'application/json; application/octet-stream'
|
|
|
|
+ }
|
|
|
|
+ xhr.onload = function (e) {
|
|
|
|
+ switch (e.currentTarget.status) {
|
|
|
|
+ case 200:
|
|
|
|
+ resolve(e.currentTarget.response)
|
|
|
|
+ break;
|
|
|
|
+ case 404:
|
|
|
|
+ // Message.error('有资源丢失')
|
|
|
|
+ reject(404)
|
|
|
|
+ break;
|
|
|
|
+ case 403:
|
|
|
|
+ /* app.$message({
|
|
|
|
+ type: 'error',
|
|
|
|
+ message: '授权过期或授权异常,请稍后重试!'
|
|
|
|
+ }) */
|
|
|
|
+ reject(403)
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ xhr.send(formData);
|
|
|
|
+ })
|
|
|
|
+ },
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
bindSchoolType() {
|
|
bindSchoolType() {
|