Squashed commit of the following:
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 10m24s

commit 1b0ddc2740
Author: joylink_zhaoerwei <Bob_Engineer@163.com>
Date:   Mon May 27 17:39:39 2024 +0800

    Squashed commit of the following:

    commit cef55a4c6b
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 17:09:01 2024 +0800

        三维url调整

    commit 869c86b94d
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 16:57:01 2024 +0800

        更改三维地址

    commit dc2165733e
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 16:33:48 2024 +0800

        场景添加三维场景,实训中可根据url打开三维场景(待测试)

commit 7d774db362
Merge: b66515eba 0c5bba7c0
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 21 16:48:35 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 0c5bba7c0f
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 21 16:47:37 2024 +0800

    传输信号机调整

commit ef9165faa4
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Thu May 16 15:43:56 2024 +0800

    third

commit ae74123f18
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed May 8 09:17:37 2024 +0800

    成都工学院第三方登录调整

commit b1baeaabcd
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 7 15:46:29 2024 +0800

    成都工业学院第三方登录调整

commit b66515ebad
Merge: 5cf57c4d2 91a8410dc
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed Apr 24 11:01:32 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 91a8410dc2
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed Apr 24 10:58:02 2024 +0800

    道岔名称背景颜色更换透明色

commit 5cf57c4d2f
Merge: 5ca4f2be8 c97def5fc
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 17:16:40 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 5ca4f2be8d
Merge: 66a376298 31376bc22
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 16:10:23 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 66a3762987
Merge: 9dab09e4d 5be2cea1c
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 15:53:54 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 9dab09e4d0
Merge: b8f90509e dda44c870
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 09:33:42 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit b8f90509eb
Merge: 26d9cc892 5548806ea
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Sun Apr 21 17:51:33 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 26d9cc892f
Merge: ce8d3f453 3fc31777a
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Fri Apr 19 22:27:07 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit ce8d3f4531
Author: fan <fanyuhong@joylink.club>
Date:   Fri Apr 19 22:25:43 2024 +0800

    iscs退出仿真调整&iscs绘制地图调整

commit 98662ec177
Author: fan <fanyuhong@joylink.club>
Date:   Fri Apr 19 18:25:09 2024 +0800

    实时广播问题调整&注释iscs信号系统&stationNav换成车站名称&iscs点击修改mode
This commit is contained in:
joylink_zhaoerwei 2024-05-27 18:06:53 +08:00
parent c97def5fca
commit 27418dc041
11 changed files with 270 additions and 11 deletions

View File

@ -323,3 +323,11 @@ export function isExistEmail(params) {
}); });
} }
// 成工院第三方登录
export function cgyThirdLogin(data) {
return request({
url: '/api/login/cgy/third',
method: 'post',
data
});
}

View File

@ -189,6 +189,13 @@ class SkinCode extends defaultStyle {
}, },
lowButton:{ lowButton:{
display: false // 现地 信号机按钮 display: false // 现地 信号机按钮
},
transmission: { // 传输信号机
fillColor: '#f00',
fillColorVirtual: '#f00',
sideLength: 20,
textColor: '#fff',
strokeColor: '#00FFFF'
} }
}; };

View File

@ -233,6 +233,13 @@ class SkinCode extends defaultStyle {
fontSize: 12, fontSize: 12,
distance: 20, distance: 20,
defaultText: 'E' defaultText: 'E'
},
transmission: { // 传输信号机
fillColor: '#f00',
fillColorVirtual: '#f00',
sideLength: 20,
textColor: '#fff',
strokeColor: '#00FFFF'
} }
}; };

View File

@ -931,8 +931,8 @@ class Signal extends Group {
// 隐藏自动信号和自动进路 // 隐藏自动信号和自动进路
setAutoClose() { setAutoClose() {
if (this.style.Signal.auto.autoRouteType != 'text') { if (this.style.Signal.auto.autoRouteType != 'text') {
this.sigAuto.hide(); this.sigAuto && this.sigAuto.hide();
this.sigAuto.setColor(this.style.backgroundColor); this.sigAuto && this.sigAuto.setColor(this.style.backgroundColor);
} else { } else {
this.sigName.setColor(this.style.Signal.text.defaultColor); this.sigName.setColor(this.style.Signal.text.defaultColor);
} }

View File

@ -326,9 +326,9 @@ export default class Switch extends Group {
} }
this.name.getTextRect().animateStyle(true) this.name.getTextRect().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor }) .when(0, { textFill: this.style.transparentColor })
.when(1000, { textFill: this.style.Switch.text.borderColor }) .when(1000, { textFill: this.style.Switch.text.borderColor })
.when(2000, { textFill: this.style.backgroundColor }) .when(2000, { textFill: this.style.transparentColor })
.start(); .start();
} }
@ -354,7 +354,7 @@ export default class Switch extends Group {
this.lockCircle && this.lockCircle.hide(); // 圆形包围框 this.lockCircle && this.lockCircle.hide(); // 圆形包围框
this.lockArc && this.lockArc.hide(); // 圆形单锁框 this.lockArc && this.lockArc.hide(); // 圆形单锁框
this.name.getNameText().stopAnimation(false); this.name.getNameText().stopAnimation(false);
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor }); this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.shapeModelC && this.shapeModelC.hide(); // 形状 C this.shapeModelC && this.shapeModelC.hide(); // 形状 C
this.shapeModelA && this.shapeModelA.hide(); // 形状 A this.shapeModelA && this.shapeModelA.hide(); // 形状 A
this.shapeModelB && this.shapeModelB.hide(); // 形状 B this.shapeModelB && this.shapeModelB.hide(); // 形状 B
@ -626,7 +626,7 @@ export default class Switch extends Group {
} }
if (this.style.Switch.core.specialCircle) { if (this.style.Switch.core.specialCircle) {
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor }); this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.setTextColor(this.style.Switch.text.guideMasterLockColor); this.setTextColor(this.style.Switch.text.guideMasterLockColor);
} else { } else {
this.setTextColor(this.style.Switch.text.monolockLocationColor); this.setTextColor(this.style.Switch.text.monolockLocationColor);
@ -911,7 +911,7 @@ export default class Switch extends Group {
this.setHasTextBorder(1, this.style.Switch.text.fpLockBorderColor); this.setHasTextBorder(1, this.style.Switch.text.fpLockBorderColor);
} }
if (this.style.Switch.core.specialCircle) { if (this.style.Switch.core.specialCircle) {
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor }); this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.setTextColor(this.style.Switch.text.fpLockColor); this.setTextColor(this.style.Switch.text.fpLockColor);
} }
} }

View File

@ -8,7 +8,7 @@ import { getFrontProjectConfigByLogin} from '@/api/projectConfig';
import localStore from 'storejs'; import localStore from 'storejs';
import { handlerUrl } from '@/utils/baseUrl'; import { handlerUrl } from '@/utils/baseUrl';
const whiteList = ['/login', '/design/login', '/loginNew', '/gzzbxy/relay', '/authorization', '/AUSline', '/AUStool', '/demo', '/thirdLogin']; // 不重定向白名单 const whiteList = ['/login', '/design/login', '/loginNew', '/gzzbxy/relay', '/authorization', '/AUSline', '/AUStool', '/demo', '/thirdLogin', '/cgyLogin']; // 不重定向白名单
// 登录路径判断获取 // 登录路径判断获取
function getRouteInfo(to) { function getRouteInfo(to) {

View File

@ -220,6 +220,7 @@ const UserRulesManage = () => import('@/views/userRulesManage/index');
const AuthorityTransfer = () => import('@/views/authorityTransfer/index'); const AuthorityTransfer = () => import('@/views/authorityTransfer/index');
const CreateDistribute = () => import('@/views/authorityTransfer/create/index'); const CreateDistribute = () => import('@/views/authorityTransfer/create/index');
const ThirdJumpSim = () => import('@/views/newMap/display/thirdJump'); const ThirdJumpSim = () => import('@/views/newMap/display/thirdJump');
const CgyLogin = () => import('@/views/thirdLogin/cgyLogin');
const TmsPage = () => import('@/views/jlmap3d/drive/sceneview/tmsPage'); const TmsPage = () => import('@/views/jlmap3d/drive/sceneview/tmsPage');
const ContestSubjectManage = () => import('@/views/contestDataManage/contestSubjectManage/ContestSubjectManage'); const ContestSubjectManage = () => import('@/views/contestDataManage/contestSubjectManage/ContestSubjectManage');
@ -430,6 +431,11 @@ export const constantRoutes = [
component: ThirdJumpSim, component: ThirdJumpSim,
hidden: true hidden: true
}, },
{
path: '/cgyLogin',
component: CgyLogin,
hidden: true
},
{ {
path: '/404', path: '/404',
component: Errpr404, component: Errpr404,

View File

@ -44,7 +44,8 @@
</div> </div>
<div style="text-align: center;margin-top: 15px;"> <div style="text-align: center;margin-top: 15px;">
<el-button v-show="nowData.ruleId" v-loading="loading" type="primary" @click="showScoreRule">评分表</el-button> <el-button v-show="nowData.ruleId" v-loading="loading" type="primary" @click="showScoreRule">评分表</el-button>
<el-button v-show="nowData.sceneId&&nowData.scenetype!=='Video'" v-loading="loading" type="primary" @click="startTask">开始任务</el-button> <el-button v-show="nowData.sceneId&&nowData.scenetype=='Local'" v-loading="loading" type="primary" @click="startTask">开始任务</el-button>
<el-button v-show="nowData.sceneId&&nowData.scenetype=='Link'" v-loading="loading" type="primary" @click="startThreeTask">开始任务</el-button>
<el-button v-show="nowData.sceneId&&nowData.scenetype=='Video'" type="primary" @click="playSceneVideo">播放视频</el-button> <el-button v-show="nowData.sceneId&&nowData.scenetype=='Video'" type="primary" @click="playSceneVideo">播放视频</el-button>
<el-button v-loading="loading" type="primary" :disabled="nowKey === taskList.length-1" @click="nextTask">下一任务</el-button> <el-button v-loading="loading" type="primary" :disabled="nowKey === taskList.length-1" @click="nextTask">下一任务</el-button>
</div> </div>
@ -58,6 +59,7 @@
<script> <script>
import { getTaskTree, getContextSenceDetail} from '@/api/contest'; import { getTaskTree, getContextSenceDetail} from '@/api/contest';
import { createSimulationNoFunction } from '@/api/simulation'; import { createSimulationNoFunction } from '@/api/simulation';
import { getToken } from '@/utils/auth';
import { getPublishMapInfo } from '@/api/jmap/map'; import { getPublishMapInfo } from '@/api/jmap/map';
import ScoreRule from './scoreRule'; import ScoreRule from './scoreRule';
import PlayVideo from './PlayVideo'; import PlayVideo from './PlayVideo';
@ -180,6 +182,17 @@ export default {
this.loading = false; this.loading = false;
} }
}, },
startThreeTask() {
this.loading = true;
getContextSenceDetail(this.nowData.sceneId).then((res) => {
const url = res.data.scene.url;
const token = getToken();
window.open(`${url}${token}`, '_blank');
this.loading = false;
}).catch(error => {
this.$message.error(error.message);
});
},
showScoreRule() { showScoreRule() {
this.$refs.scoreRule.doShow(this.nowData.ruleId); this.$refs.scoreRule.doShow(this.nowData.ruleId);
}, },

View File

@ -2,16 +2,18 @@
<div> <div>
<query-list-page ref="user" :card-padding="10" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" /> <query-list-page ref="user" :card-padding="10" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
<upload-Video ref="uploadVideo" @reloadTable="reloadTable" /> <upload-Video ref="uploadVideo" @reloadTable="reloadTable" />
<add-three ref="upThree" @reloadTable="reloadTable" />
</div> </div>
</template> </template>
<script> <script>
import { queryContestSencePaged, deleteContestSence } from '@/api/contest'; import { queryContestSencePaged, deleteContestSence } from '@/api/contest';
import UploadVideo from './UploadVideo'; import UploadVideo from './UploadVideo';
import addThree from './addThree';
export default { export default {
name: 'ContestSeasonManage', name: 'ContestSeasonManage',
components: { components: {
UploadVideo UploadVideo, addThree
}, },
data() { data() {
return { return {
@ -92,6 +94,13 @@ export default {
return row.type == 'Video'; return row.type == 'Video';
} }
}, },
{
name: '编辑',
handleClick: this.doEditLink,
showControl: row => {
return row.type == 'Link';
}
},
{ {
name: '删 除', name: '删 除',
handleClick: this.doDelete, handleClick: this.doDelete,
@ -101,7 +110,8 @@ export default {
} }
], ],
actions: [ actions: [
{ text: '上 传', handler: this.doUpload } { text: '上 传', handler: this.doUpload },
{ text: '添 加', handler: this.doUpThree }
] ]
} }
}; };
@ -116,6 +126,12 @@ export default {
doEdit(index, row) { doEdit(index, row) {
this.$refs.uploadVideo.doShow(row.id); this.$refs.uploadVideo.doShow(row.id);
}, },
doUpThree() {
this.$refs.upThree.doShow();
},
doEditLink(index, row) {
this.$refs.upThree.doShow(row.id);
},
doDelete(index, row) { doDelete(index, row) {
this.$confirm('该操作将删除竞赛场景,是否继续?', '提 示', { this.$confirm('该操作将删除竞赛场景,是否继续?', '提 示', {
confirmButtonText: '确 定', confirmButtonText: '确 定',

View File

@ -0,0 +1,108 @@
<template>
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="500px" :before-close="handleClose" center :close-on-click-modal="false">
<el-form ref="ruleForm" :model="formModel" :rules="rules" label-width="100px">
<el-form-item label="场景名称:" prop="name">
<el-input v-model="formModel.name" style="width: 350px;" />
</el-form-item>
<el-form-item label="场景url:" prop="url">
<el-input v-model="formModel.url" type="textarea" style="width:350px;" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button v-loading="loading" type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
<el-button @click="handleClose">{{ $t('global.cancel') }}</el-button>
</span>
</el-dialog>
</template>
<script>
import { saveSceneVideo, editSceneVideo, getContextSenceDetail } from '@/api/contest';
export default {
name: 'AddContestTask',
data() {
return {
dialogVisible: false,
formModel: {
id: '',
name: '',
url: ''
},
loading: false
};
},
computed: {
rules() {
const crules = {
name: [
{ required: true, message: '请输入场景名称', trigger: 'blur' }
],
url: [
{ required: true, message: '请输入场景url', trigger: 'blur' }
]
};
return crules;
},
title() {
return this.formModel.id ? '修改三维场景' : '新建三维场景';
}
},
methods:{
doShow(sceneId) {
this.dialogVisible = true;
if (sceneId) {
this.formModel.id = sceneId;
getContextSenceDetail(sceneId).then((res) => {
this.formModel.name = res.data.name;
this.formModel.url = res.data.scene.url;
}).catch(error => {
this.$message.error(error.message);
});
} else {
this.formModel = {
id: '',
name: '',
url: ''
};
}
},
handleClose() {
this.formModel = {
id: '',
name: '',
url: ''
};
this.dialogVisible = false;
this.loading = false;
},
doSave() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.loading = true;
const data = { name:this.formModel.name, type:'Link',
scene:{url:this.formModel.url}};
if (this.formModel.id) {
editSceneVideo(this.formModel.id, data).then(() => {
this.$message.success('修改三维场景成功!');
this.handleClose();
this.$emit('reloadTable');
}).catch(error => {
this.$message.error(error.message);
this.loading = false;
});
} else {
saveSceneVideo(data).then(() => {
this.$message.success('创建三维场景成功!');
this.handleClose();
this.$emit('reloadTable');
}).catch(error => {
this.$message.error(error.message);
this.loading = false;
});
}
}
});
}
}
};
</script>

View File

@ -0,0 +1,94 @@
<template>
<div class="thirdLoginContainer">
<div class="thirdLoginMessage">
{{ message }}
</div>
</div>
</template>
<script>
import { cgyThirdLogin } from '@/api/management/user';
import { setToken } from '@/utils/auth';
import { createSimulation } from '@/api/simulation';
import { launchFullscreen } from '@/utils/screen';
import { getMapFunctioById } from '@/api/trainingPlatform';
import { getPublishMapInfo } from '@/api/jmap/map';
export default {
name:'CgyLogin',
data() {
return {
message:''
};
},
computed: {
project() {
const project = this.$route.query.project;
return project || 'login';
}
},
mounted() {
const appId = this.$route.query.appId;
const sessionId = this.$route.query.sessionId;
const timeStamp = this.$route.query.timeStamp;
const account = this.$route.query.account;
const name = this.$route.query.name;
const parentAccount = this.$route.query.parentAccount;
const functionId = this.$route.query.functionId;
if (appId && account && name) {
const data = {
appId,
sessionId,
timeStamp,
account,
name,
parentAccount,
functionId
};
this.message = '正在登陆中......';
cgyThirdLogin(data).then(resp=> {
const token = resp.data;
const header = { group: '', 'X-Token': token };
setToken(token);
this.$store.dispatch('setToken', token);
this.$store.dispatch('subscribe', {header, type:'class'});
this.enterSimulation();
}).catch(() => {
this.message = '参数有误,请检查';
});
} else {
this.message = '参数有误,请检查';
}
},
methods:{
async enterSimulation() {
const query = {
third: true,
query: 'cgy'
};
const resp = await getMapFunctioById(this.$route.query.systemId);
query.mapId = resp.data.mapId;
query.simType = resp.data.simType;
const resp1 = await getPublishMapInfo(resp.data.mapId);
query.lineCode = resp1.data.lineCode;
createSimulation(this.$route.query.systemId).then(resp => {
query.group = resp.data;
this.$router.replace({ path: `/display/demon`, query: query });
launchFullscreen();
}).catch(error=>{
if (error.code == 10003) {
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
} else {
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
}
this.disabled = false;
});
}
}
};
</script>
<style lang="scss" scoped>
.thirdLoginMessage{
padding: 20px;
font-size: 20px;
}
</style>