Merge remote-tracking branch 'origin/test'
# Conflicts: # src/scripts/ProjectConfig.js # src/utils/baseUrl.js # src/views/login/index.vue # src/views/newMap/displayBaSiDi/index.vue # src/views/newMap/displayCity/demonMenu.vue # src/views/newMap/displayCity/index.vue # src/views/system/deviceManage/index.vue # src/views/trainingPlatform/demonList.vue
This commit is contained in:
commit
6897cb6c0b
@ -6,7 +6,7 @@
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"start": "vue-cli-service serve --open",
|
||||
"dev": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve",
|
||||
"dev": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve --open",
|
||||
"build": "vue-cli-service build --mode production",
|
||||
"test": "vue-cli-service build --mode staging",
|
||||
"local": "vue-cli-service build --mode",
|
||||
|
67
src/App.vue
67
src/App.vue
@ -1,8 +1,12 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<router-view />
|
||||
<deomon-topic ref="deomonTopic" />
|
||||
<img v-show="loading" :src="loadingImg" class="AppAll">
|
||||
<deomon-list ref="deomonList" @enterQcode="qcodeEntry" />
|
||||
<qcode ref="qcode" />
|
||||
<div v-show="loading" class="AppAll">
|
||||
<img v-if="project === 'login' || project === 'design'" :src="jlFavicon" class="CompanyIcon">
|
||||
<img :src="loadingImg" style="width: 100%; height: 100%;">
|
||||
</div>
|
||||
<div
|
||||
v-if="!$store.state.user.baseUrl"
|
||||
v-loading="!$store.state.user.baseUrl"
|
||||
@ -20,16 +24,19 @@
|
||||
import { getToken, getUserIdKey } from '@/utils/auth';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
import { loginInfo, ProjectIcon } from '@/scripts/ProjectConfig';
|
||||
import DeomonTopic from '@/views/demonstration/deomonTopic';
|
||||
import WindowResizeHandler from '@/mixin/WindowResizeHandler';
|
||||
import LoadingImg from '@/assets/loading.gif';
|
||||
import AppLoading from '@/assets/appLoading.png';
|
||||
import { openIndexedDB } from '@/utils/indexedDb';
|
||||
import Favicon from '@/assets/icon/favicon.png';
|
||||
import DeomonList from '@/views/demonstration/deomonList/index';
|
||||
import Qcode from '@/layout/components/Qcode.vue';
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
DeomonTopic
|
||||
DeomonList,
|
||||
Qcode
|
||||
},
|
||||
mixins: [
|
||||
WindowResizeHandler
|
||||
@ -38,20 +45,12 @@ export default {
|
||||
return {
|
||||
loadingImg: LoadingImg,
|
||||
appLoading: AppLoading,
|
||||
loading: false
|
||||
loading: false,
|
||||
project: '',
|
||||
jlFavicon: Favicon
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
'$store.state.socket.simulationInvite': function (val) {
|
||||
if (val.creator) {
|
||||
this.subscribeMessage(val);
|
||||
}
|
||||
},
|
||||
'$store.state.socket.roomInvite': function (val) {
|
||||
if (val.creator) {
|
||||
this.subscribeMessage(val);
|
||||
}
|
||||
},
|
||||
'$store.state.socket.beLogoutCount': async function(val) {
|
||||
if (this.$store.state.socket.loggedOutMsg.token === getToken()) {
|
||||
this.$store.dispatch('disconnect').then(()=>{
|
||||
@ -72,12 +71,17 @@ export default {
|
||||
},
|
||||
'$store.state.app.animationsCloseCount': function(val) {
|
||||
this.loading = false;
|
||||
},
|
||||
'$route': function(val) {
|
||||
if (val.path == '/display/demon' && val.query.client == 'diagramEdit') { // 运行图编制
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const project = getSessionStorage('project');
|
||||
if (project) {
|
||||
document.querySelector("link[rel*='icon']").href = loginInfo[project].linkIcon || ProjectIcon[project];
|
||||
this.project = getSessionStorage('project');
|
||||
if (this.project) {
|
||||
document.querySelector("link[rel*='icon']").href = loginInfo[this.project].linkIcon || ProjectIcon[this.project];
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -92,7 +96,7 @@ export default {
|
||||
if (this.$route.path.includes('trainingDesign') || this.$route.path.includes('trainingPreview')) {
|
||||
if (e.key == getUserIdKey('nextNew')) {
|
||||
const operate = JSON.parse(e.newValue);
|
||||
this.$store.dispatch('training/nextNew', operate);
|
||||
this.$store.dispatch('trainingNew/next', operate);
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +109,12 @@ export default {
|
||||
this.$store.dispatch('subscribe_un', {});
|
||||
},
|
||||
methods: {
|
||||
quickEntry() {
|
||||
this.$refs.deomonList.doShow();
|
||||
},
|
||||
qcodeEntry() {
|
||||
this.$refs.qcode.doShow();
|
||||
},
|
||||
resizeHandler() {
|
||||
this.$store.dispatch('app/resize', { width: this._clientWidth, height: this._clientHeight });
|
||||
},
|
||||
@ -112,22 +122,13 @@ export default {
|
||||
window.document.oncontextmenu = function () {
|
||||
return false;
|
||||
};
|
||||
},
|
||||
subscribeMessage(res) {
|
||||
if (this.$refs.deomonTopic && !window.location.href.includes('trainroom')) {
|
||||
if (!(getSessionStorage('project').includes('design'))) {
|
||||
this.$refs.deomonTopic.doShow(res);
|
||||
}
|
||||
this.$store.dispatch('socket/setSimulationInvite');
|
||||
this.$store.dispatch('socket/setRoomInvite');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.AppAll{position: absolute;top: 0;left: 0;width: 100%;height: 100%;z-index: 2003}
|
||||
.AppAll{position: absolute;top: 0;left: 0;width: 100%;height: 100%;z-index: 3003}
|
||||
.centerImg {
|
||||
position: absolute;
|
||||
left:50%;
|
||||
@ -137,4 +138,12 @@ export default {
|
||||
margin-left: -240px;
|
||||
margin-top: -228px;
|
||||
}
|
||||
.CompanyIcon{
|
||||
position: absolute;
|
||||
z-index: 3000;
|
||||
left: 50%;
|
||||
margin-left: -60px;
|
||||
width: 120px;
|
||||
top: 30px;
|
||||
}
|
||||
</style>
|
||||
|
53
src/api/authorityTransfer.js
Normal file
53
src/api/authorityTransfer.js
Normal file
@ -0,0 +1,53 @@
|
||||
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 创建权限分发*/
|
||||
export function createDistribute(data) {
|
||||
return request({
|
||||
url: `/api/v3/permission/distribute/create`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页获取权限分发列表*/
|
||||
export function getDistributeList(data) {
|
||||
return request({
|
||||
url: `/api/v3/permission/distribute/paging`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// /** 设置权限分发立即失效*/
|
||||
// export function setDistributeInvalidate(pdId) {
|
||||
// return request({
|
||||
// url: `/api/v2/permission/distribute/${pdId}/invalidate`,
|
||||
// method: 'put'
|
||||
// });
|
||||
// }
|
||||
|
||||
/** 获取权限分发明细*/
|
||||
export function getDistributeDetail(disId) {
|
||||
return request({
|
||||
url: `/api/v3/permission/distribute/list/distribute/${disId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 从权限分发,直接分发给指定主体*/
|
||||
export function setDistributeToSubject(pdId, subjectType, subjectId) {
|
||||
return request({
|
||||
url: `/api/v3/permission/distribute/${pdId}/to/${subjectType}/${subjectId}`,
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
|
||||
/** 生成分发二维码*/
|
||||
export function getDistributeQrCode(pdId) {
|
||||
return request({
|
||||
url: `/api/v3/permission/distribute/${pdId}/qrCode`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
@ -24,10 +24,17 @@ export function deleteDisStation(mapId, code) {
|
||||
});
|
||||
}
|
||||
// 获取调度台逻辑数据
|
||||
export function getDisStationList(mapId, data) {
|
||||
export function getDisStationListPaged(mapId, data) {
|
||||
return request({
|
||||
url: `/api/draftMap/${mapId}/disStation/page`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 查询调度台列表 */
|
||||
export function getDisStationList(mapId) {
|
||||
return request({
|
||||
url: `api/draftMap/${mapId}/disStation/list`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
26
src/api/functionManage.js
Normal file
26
src/api/functionManage.js
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
// 分页查询权限功能的基本信息
|
||||
export function getAbilityPage(data) {
|
||||
return request({
|
||||
url: `/api/v2/permission/system/ability/page`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 自动生成
|
||||
export function autoCreate() {
|
||||
return request({
|
||||
url: `/api/v2/permission/system/ability/autoCreate`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 获取所有功能
|
||||
export function getAllAbility() {
|
||||
return request({
|
||||
url: `/api/v2/permission/system/ability/list`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
@ -4,7 +4,9 @@ const publicPath = process.env.VUE_APP_PRO == 'local' ? '' : '/cbtc';
|
||||
|
||||
export const JL3D_LOCAL_STATIC = publicPath+"/static";
|
||||
const BASE_UPLOAD_API = store.state.user.uploadUrl;
|
||||
export const BASE_ASSET_API = store.state.user.resourcesUrl;
|
||||
// export const BASE_ASSET_API = store.state.user.resourcesUrl;
|
||||
export const BASE_ASSET_API = store.state.user.ossUrl;
|
||||
|
||||
// console.log(JL3D_LOCAL_STATIC);
|
||||
// console.log(BASE_UPLOAD_API);
|
||||
// console.log(BASE_ASSET_API);
|
||||
|
@ -128,6 +128,6 @@ export function getStationManagerData(id) {
|
||||
export function deleteStationManagerData(id) {
|
||||
return request({
|
||||
url: `/api/pfp/${id}`,
|
||||
method: 'delete',
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
@ -285,3 +285,25 @@ export function allSimulationCheck() {
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 根据地图查询仿真成员 */
|
||||
export function querySimulationMemberByMapId(id) {
|
||||
return request({
|
||||
url: `/api/map/${id}/memberMap`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据地图查询车站(含车辆段停车场) */
|
||||
export function querySimulationStationsByMapId(id) {
|
||||
return request({
|
||||
url: `/api/map/${id}/stations`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 根据用户查询地图列表 */
|
||||
export function queryMapListByUser() {
|
||||
return request({
|
||||
url: `/api/map/list/online/ofUser`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
@ -190,18 +190,28 @@ export function publishTrainingDelete(data) {
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 根据mapId查所有的已发布单操实训的基础信息 */
|
||||
export function getPublishSingleList(mapId) {
|
||||
/** 查全部组织已发布实训的基础信息 */
|
||||
export function getAllPublishTrainingList(params) {
|
||||
return request({
|
||||
url: `/api/v2/training/published/${mapId}/singles`,
|
||||
method: 'get'
|
||||
url: `/api/v2/training/published/list`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
/** 根据mapId查所有的已发布场景实训的基础信息 */
|
||||
export function getPublishScenesList(mapId) {
|
||||
/** 查询组织已发布实训的基础信息 */
|
||||
export function getPublishTrainingListInOrg(data) {
|
||||
return request({
|
||||
url: `/api/v2/training/published/${mapId}/scenes`,
|
||||
method: 'get'
|
||||
url: `/api/v2/training/published/infos`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 查询组织已发布的实训列表 */
|
||||
export function getManageTrainingListInOrg(data) {
|
||||
return request({
|
||||
url: `/api/v2/training/published/manage/infos`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 根据实训id查该已发布实训的所有信息 */
|
||||
@ -234,10 +244,11 @@ export function startTraining(group, params) {
|
||||
});
|
||||
}
|
||||
/** 结束实训 */
|
||||
export function endTraining(group) {
|
||||
export function endTraining(group, data) {
|
||||
return request({
|
||||
url: `/api/training2Simulation/${group}/finish`,
|
||||
method: 'put'
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 实训完成步骤 */
|
||||
|
@ -93,3 +93,23 @@ export function getLoginInfo(token) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户所属组织列表
|
||||
*/
|
||||
export function getOrgList() {
|
||||
return request({
|
||||
url: '/api/orgProject/list',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 登入组织
|
||||
*/
|
||||
export function selectOrgnization(orgId) {
|
||||
return request({
|
||||
url: `/api/orgProject/signIn/${orgId}`,
|
||||
method: 'put'
|
||||
})
|
||||
}
|
||||
|
@ -112,3 +112,235 @@ export function regenerateRule (mapId) {
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* ============================================================================
|
||||
* ============================================================================
|
||||
* ============================= 以下为新版试卷的接口 ============================
|
||||
* ============================================================================
|
||||
* ============================================================================
|
||||
*/
|
||||
|
||||
/**
|
||||
* LIST -
|
||||
* 根据试卷蓝图名称简介分页查找某个组织的试卷蓝图
|
||||
* @param {Object} data
|
||||
* @param {Number} data.orgId 组织ID
|
||||
* @param {String} data.name 试卷蓝图名称
|
||||
* @param {String} data.profile 试卷蓝图简介
|
||||
* @param {Number} data.findState 状态: (All(1)-所有,Editing(2)-正在编辑的,CanUse(3)-可以用于生成试卷的,Locked(4)-封存,Used(5)-已经被使用过)
|
||||
* @param {Number} data.orderBy 排序依据: (1--创建时间 2--更新时间 3--名称;默认值为1)
|
||||
*/
|
||||
export function getPapaerListOfOrg({ orgId, ...data }) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/find/page/for/${orgId}`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function getAllPapaerListOfOrg({ ...data }) {
|
||||
// 全部组织
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/manage/paging`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建试卷蓝图
|
||||
* @param {Object} data
|
||||
* @param {Number} data.orgId 组织ID
|
||||
* @param {String} data.name 试卷蓝图名称
|
||||
* @param {String} data.profile 简介
|
||||
* @param {String} data.startTime 启用起始时间
|
||||
* @param {String} data.endTime 启用截止时间
|
||||
* @param {Number} data.validDuration 考试时长
|
||||
* @param {String} data.passScore 及格分
|
||||
* @param {String} data.fullScore 满分
|
||||
* @param {Object} data.ruleList 规则列表
|
||||
* @param {Object} data.ruleList.id 规则id
|
||||
* @param {Object} data.ruleList.pcId 试卷蓝图ID
|
||||
* @param {Object} data.ruleList.type 试题类型
|
||||
* @param {Object} data.ruleList.subtype 规则类型
|
||||
* @param {Object} data.ruleList.tags 标签
|
||||
* @param {Object} data.ruleList.amount 数量
|
||||
* @param {Object} data.ruleList.score 每题分值
|
||||
*/
|
||||
export function createPaper(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/${data.orgId}`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 修改试卷蓝图基本信息
|
||||
* @param {Object} data
|
||||
* @param {Number} data.id 试卷蓝图ID
|
||||
* @param {Number} data.orgId 组织ID
|
||||
* @param {String} data.name 试卷蓝图名称
|
||||
* @param {String} data.profile 简介
|
||||
* @param {String} data.startTime 启用起始时间
|
||||
* @param {String} data.endTime 启用截止时间
|
||||
* @param {Number} data.validDuration 考试时长
|
||||
* @param {String} data.passScore 及格分
|
||||
* @param {String} data.fullScore 满分
|
||||
* @param {Object} data.ruleList 规则列表
|
||||
* @param {Object} data.ruleList.id 规则id
|
||||
* @param {Object} data.ruleList.pcId 试卷蓝图ID
|
||||
* @param {Object} data.ruleList.type 试题类型
|
||||
* @param {Object} data.ruleList.subtype 规则类型
|
||||
* @param {Object} data.ruleList.tags 标签
|
||||
* @param {Object} data.ruleList.amount 数量
|
||||
* @param {Object} data.ruleList.score 每题分值
|
||||
*/
|
||||
export function editPaper(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition`,
|
||||
method: 'PUT',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取试卷完整的蓝图,包括规则
|
||||
* @param {Number} pcId 试卷蓝图ID
|
||||
*/
|
||||
export function getPaperDetail(pcId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/${pcId}`,
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
|
||||
/** 查询组织下各类型题的数量
|
||||
* @param {Object} data
|
||||
* @param {Number} data.orgId
|
||||
* @param {Number} data.subtype
|
||||
* @param {Array<String>} data.tags
|
||||
*/
|
||||
export function getQuestionAmount(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/${data.orgId}/question/count`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 试卷蓝图封存
|
||||
* @param {Number} pcId 试卷蓝图Id
|
||||
*/
|
||||
export function lockPaper(pcId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/${pcId}/lock`,
|
||||
method: 'PUT'
|
||||
});
|
||||
}
|
||||
|
||||
/** 试卷蓝图
|
||||
* @param {Number} pcId 试卷蓝图Id
|
||||
*/
|
||||
export function invalidPaper(pcId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/${pcId}/invalid`,
|
||||
method: 'PUT'
|
||||
});
|
||||
}
|
||||
|
||||
/** 试卷蓝图删除
|
||||
* @param {Number} pcId 试卷蓝图Id
|
||||
*/
|
||||
export function deletePaper(pcId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/${pcId}`,
|
||||
method: 'DELETE'
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据试卷蓝图生成用户的试卷
|
||||
* @param {Number} pcId 试卷蓝图Id
|
||||
*/
|
||||
export function generateExam(pcId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/${pcId}`,
|
||||
method: 'POST'
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除用户试卷 */
|
||||
export function deleteUserExam(param) {
|
||||
return request({
|
||||
url: `/api/v2/paper/user/${puId}`,
|
||||
method: 'method'
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取用户试卷完整信息
|
||||
* @param {Number} puId 用户试卷Id
|
||||
*/
|
||||
export function getUserExamInfo(puId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/user/${puId}`,
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
|
||||
/** 加载用户试卷试题 */
|
||||
export function loadQuestion({ type, questionId, puId }) {
|
||||
return request({
|
||||
url: `/api/v2/paper/user/question/${type}/${questionId}/${puId}`,
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
|
||||
/** 提交答案
|
||||
* @param {Object} data
|
||||
* @param {Number} data.puId 用户试卷id
|
||||
* @param {Number} data.pqId 用户试卷试题id
|
||||
* @param {Number} data.type 试题类型
|
||||
* @param {Number} data.subType 试题子类型
|
||||
* @param {Number} data.answer 答案(理论题)
|
||||
* @param {Boolean} data.trainingSuccess 是否完成(实训题)
|
||||
*/
|
||||
export function submitAnswer(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/user/question/answer`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 交卷
|
||||
* @param {Number} puId 用户试卷id
|
||||
*/
|
||||
export function submitPaper(puId) {
|
||||
return request({
|
||||
url: `/api/v2/paper/user/${puId}/submit`,
|
||||
method: 'POST'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据mapId查询蓝图的基本信息
|
||||
*/
|
||||
export function queryPaperList(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/composition/find/list`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 获取标签分类
|
||||
* @param {Number} ordId 组织id
|
||||
* @param {Number} groupType 1-理论题 2-实训题
|
||||
* @param {Number} subType 1-选择题 2-多选题 3-判断题 4-单操 5-场景
|
||||
*/
|
||||
export function queryTagList(data) {
|
||||
return request({
|
||||
url: `/api/v2/paper/question/label`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
45
src/api/management/fileManage.js
Normal file
45
src/api/management/fileManage.js
Normal file
@ -0,0 +1,45 @@
|
||||
import request from '@/utils/request.js'
|
||||
|
||||
/** 获取文件列表 */
|
||||
export function getFileList(params) {
|
||||
return request({
|
||||
url: `/api/minio/file/list`,
|
||||
method: 'get',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/** 检查资源是否已存在 */
|
||||
export function checkIsExist(params) {
|
||||
return request({
|
||||
url: `/api/minio/checkIsExist`,
|
||||
method: 'get',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/** 保存文件 */
|
||||
export function saveFileInfo(data) {
|
||||
return request({
|
||||
url: `/api/minio/file/save`,
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
/** 更新文件标题 */
|
||||
export function updateFileTitle(data) {
|
||||
return request({
|
||||
url: `/api/minio/file/update`,
|
||||
method: 'put',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
/** 删除文件 */
|
||||
export function deleteFile(id) {
|
||||
return request({
|
||||
url: `api/minio/file/del/${id}`,
|
||||
method: 'delete',
|
||||
})
|
||||
}
|
@ -17,6 +17,32 @@ export function getUserList(params) {
|
||||
});
|
||||
}
|
||||
|
||||
/** 查询所有用户列表*/
|
||||
export function getManageUserList(params) {
|
||||
return request({
|
||||
url: `/api/manage/user/list`,
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据用户查询用户角色列表*/
|
||||
export function getUserRolesList(uid) {
|
||||
return request({
|
||||
url: `/api/manage/${uid}/roles`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 绑定用户角色*/
|
||||
export function getBindUserRoles(data) {
|
||||
return request({
|
||||
url: `/api/manage/bind/org`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 模糊查询用户 昵称、名称、手机号*/
|
||||
export function getDimUserList(params) {
|
||||
return request({
|
||||
@ -269,3 +295,31 @@ export function sendEmailVfcode(params) {
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 新注册接口 */
|
||||
export function registerUserNew(data) {
|
||||
return request({
|
||||
url: `/api/userinfo/register2`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 手机号是否已经注册
|
||||
export function isExistMobile(params) {
|
||||
return request({
|
||||
url: `/api/userinfo/isExist/mobile`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 手机号是否已经注册
|
||||
export function isExistEmail(params) {
|
||||
return request({
|
||||
url: `/api/userinfo/isExist/email`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
import request from '@/utils/request';
|
||||
import request from '@/utils/request'
|
||||
|
||||
/** 获取用户试题列表*/
|
||||
export function generateExamList(examId) {
|
||||
return request({
|
||||
url: `/api/userExam/${examId}/generate`,
|
||||
method: 'get'
|
||||
});
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/** 刷新考题列表*/
|
||||
export function refreshExamList(userExamId) {
|
||||
return request({
|
||||
url: `/api/userExam/${userExamId}`,
|
||||
method: 'get'
|
||||
});
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/** 提交一个考题*/
|
||||
@ -21,17 +21,16 @@ export function finishOneExamQuestion(data) {
|
||||
return request({
|
||||
url: '/api/userExam/finish',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
/** 考试完成提交*/
|
||||
export function submitExam(examId) {
|
||||
return request({
|
||||
url: `/api/userExam/${examId}/submit`,
|
||||
method: 'put'
|
||||
});
|
||||
|
||||
method: 'put',
|
||||
})
|
||||
}
|
||||
|
||||
/** 获取用户考试列表*/
|
||||
@ -39,40 +38,41 @@ export function getPublishExam(data) {
|
||||
return request({
|
||||
url: `/api/userExam/list`,
|
||||
method: 'get',
|
||||
params: data
|
||||
});
|
||||
params: data,
|
||||
})
|
||||
}
|
||||
|
||||
/** 删除用户考试*/
|
||||
export function delPublishExam(id) {
|
||||
return request({
|
||||
url: `/api/userExam/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
method: 'delete',
|
||||
})
|
||||
}
|
||||
|
||||
export function updateExam(data) {
|
||||
return request({
|
||||
url: `/api/userExam/${data.id}`,
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
/** 获取班级考试成绩列表 */
|
||||
export function getClassGradeList(examId, params) {
|
||||
export function getClassGradeList(params) {
|
||||
return request({
|
||||
url: `/api/userExam/paged/orgUser/${params.orgId}/${examId}`,
|
||||
url: `/api/v2/paper/user/page`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/** 查询组织学生单次考试成绩曲线 */
|
||||
export function getClassGradeStatistic(orgId, examId) {
|
||||
return request({
|
||||
url: `/api/userExam/curve/${orgId}/${examId}`,
|
||||
method: 'get'
|
||||
});
|
||||
url: `/api/v2/paper/user/curve`,
|
||||
params: { pcId: examId, orgId },
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
/** 查询组织学生单次考试成绩曲线 */
|
||||
@ -80,29 +80,29 @@ export function getStuGradeStatistic(userId) {
|
||||
return request({
|
||||
url: `/api/userExam/curve/${userId}`,
|
||||
method: 'get',
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
/** 个人仿真数据统计 */
|
||||
export function getSimulationTimeChart(mapId) {
|
||||
return request({
|
||||
url: `/api/stats/simulation/${mapId}/stats`,
|
||||
method: 'get'
|
||||
});
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
// 课程内实训数据统计
|
||||
export function getLessonTimeChart(id) {
|
||||
return request({
|
||||
url: `/api/stats/lesson/${id}/stats`,
|
||||
method: 'get'
|
||||
});
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
// 课程列表
|
||||
export function getLessonList() {
|
||||
return request({
|
||||
url: '/api/stats/lesson/list',
|
||||
method: 'get'
|
||||
});
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
28
src/api/permissionManage.js
Normal file
28
src/api/permissionManage.js
Normal file
@ -0,0 +1,28 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
// 创建权限
|
||||
export function createPermission(data) {
|
||||
return request({
|
||||
url: `/api/v2/permission/create`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 权限修改
|
||||
export function updatePermission(data) {
|
||||
return request({
|
||||
url: `/api/v2/permission/update`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 分页获取权限
|
||||
export function getPermissionPage(data) {
|
||||
return request({
|
||||
url: `/api/v2/permission/find/page`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
@ -61,10 +61,10 @@ export function setLwConfig(id, data) {
|
||||
data: data
|
||||
});
|
||||
}
|
||||
/** 查询所有的某类型设备 */
|
||||
export function getDevicesByType(type) {
|
||||
/** 查询某个项目下的所有的某类型设备 */
|
||||
export function getDevicesByType(project, type) {
|
||||
return request({
|
||||
url: `/api/device/${type}/all`,
|
||||
url: `/api/device/${project}/${type}/all`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
187
src/api/projectConfig.js
Normal file
187
src/api/projectConfig.js
Normal file
@ -0,0 +1,187 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 后端项目配置分页 */
|
||||
export function getBackProjectConfigByPage(params) {
|
||||
return request({
|
||||
url: `/api/project/page`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 全量后端项目配置 */
|
||||
export function getAllBackProjectConfig() {
|
||||
return request({
|
||||
url: `/api/project/all`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 主键获取后端项目配置 */
|
||||
export function getBackProjectConfigById(id) {
|
||||
return request({
|
||||
url: `/api/project/${id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 通过code获取后端项目配置 */
|
||||
export function getBackProjectConfigByCode(code) {
|
||||
return request({
|
||||
url: `/api/project/code/${code}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除后端项目配置 */
|
||||
export function deleteBackProjectConfig(id) {
|
||||
return request({
|
||||
url: `/api/project/del/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新后端项目配置 */
|
||||
export function updateBackProjectConfig(data) {
|
||||
return request({
|
||||
url: `/api/project/update`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 保存后端项目配置 */
|
||||
export function saveBackProjectConfig(data) {
|
||||
return request({
|
||||
url: `/api/project/save`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取后端项目列表,关联时使用 */
|
||||
export function getBackProjectConfigList(id) {
|
||||
return request({
|
||||
url: `/api/project/simple`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 前端项目配置分页 */
|
||||
export function getFrontProjectConfigByPage(params) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/page`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 全量前端项目配置 */
|
||||
export function getAllFrontProjectConfig() {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/all`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取前端项目配置 */
|
||||
export function getFrontProjectConfigById(id) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/${id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除前端项目配置 */
|
||||
export function deleteFrontProjectConfig(id) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/del/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新前端项目配置 */
|
||||
export function updateFrontProjectConfig(data) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/update`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 保存前端项目配置 */
|
||||
export function saveFrontProjectConfig(data) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/save`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 登录时根据前端标识获取配置 */
|
||||
export function getFrontProjectConfigByLogin(markKey) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/project/${markKey}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 登录时获取全量前端配置 */
|
||||
export function getAllFrontProjectConfigByLogin(markKey) {
|
||||
return request({
|
||||
url: `/api/project/viewSetting/simple/all`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 检查项目code */
|
||||
export function checkBackProjectExist(params) {
|
||||
return request({
|
||||
url: `/api/project/check/code`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 检查项目markKey */
|
||||
export function checkFrontProjectExist(params) {
|
||||
return request({
|
||||
url: `/api/project/check/markKey`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
//
|
||||
export function getUploadUrl(params) {
|
||||
return request({
|
||||
url: `/api/minio/preSignedUrl`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 设置默认组织 */
|
||||
export function setDefaultOrg(data) {
|
||||
return request({
|
||||
url: `/api/project/setDefaultOrg`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 创建默认组织 */
|
||||
export function createDefaultOrg(id, data) {
|
||||
return request({
|
||||
url: `/api/project/${id}/createDefaultOrg`,
|
||||
method: 'POST',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 登录项目组织列表 */
|
||||
export function getOrgList(id) {
|
||||
return request({
|
||||
url: `/api/project/${id}/orgList`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
@ -1,18 +1,45 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
// 查询理论试题(全部组织)
|
||||
export function listAllQuestionPage(params) {
|
||||
return request({
|
||||
url: `/api/question/paging`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 分页查询理论试题
|
||||
export function listQuestionPage(params) {
|
||||
return request({
|
||||
url: `/api/questionBank/questions/paging`,
|
||||
// url: `/api/questionBank/questions/paging`,
|
||||
url: `/api/question/org/paging`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 查询所有理论试题
|
||||
export function listQuestionAll() {
|
||||
return request({
|
||||
url: `/api/question/org`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 标签列表
|
||||
export function getLabelList() {
|
||||
return request({
|
||||
url: `/api/question/org/label`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 创建题目
|
||||
export function createQuestion(data) {
|
||||
return request({
|
||||
url: `/api/questionBank/questions`,
|
||||
// url: `/api/questionBank/questions`,
|
||||
url: `/api/question/org`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
@ -21,25 +48,55 @@ export function createQuestion(data) {
|
||||
// 删除题目
|
||||
export function deleteQuestion(questionId) {
|
||||
return request({
|
||||
url: `/api/questionBank/questions/${questionId}`,
|
||||
method: 'delete'
|
||||
// url: `/api/questionBank/questions/${questionId}`,
|
||||
url: `/api/question/org`,
|
||||
method: 'delete',
|
||||
data: [questionId]
|
||||
});
|
||||
}
|
||||
|
||||
// 更新题目
|
||||
export function updateOption(data) {
|
||||
return request({
|
||||
url: `/api/questionBank/questions/${data.id}`,
|
||||
// url: `/api/questionBank/questions/${data.id}`,
|
||||
url: `/api/question/org/${data.id}`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 获取题目信息
|
||||
export function getQuestionInfo(questionId) {
|
||||
export function getQuestionInfo(questionId, params) {
|
||||
return request({
|
||||
url: `/api/questionBank/questions/${questionId}`,
|
||||
method: 'get'
|
||||
// url: `/api/questionBank/questions/${questionId}`,
|
||||
url: `/api/question/org/${questionId}`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 题库批量导入
|
||||
export function importQuestion(data) {
|
||||
return request({
|
||||
url: `/api/question/org/import`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 预览答题
|
||||
export function testAnswer(questionId, data) {
|
||||
return request({
|
||||
url: `/api/question/org/test/answer/${questionId}`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 清空题库
|
||||
export function clearBank() {
|
||||
return request({
|
||||
url: `/api/question/org/clear`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
@ -6,29 +6,15 @@ export function createSimulation(data) {
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
/** 根据仿真group获取仿真基础信息 */
|
||||
/** 根据仿真group获取仿真基础信息 废弃 */
|
||||
export function getSimulationInfoByGroup(groupId) {
|
||||
return request({
|
||||
url: `/common/simulation/${groupId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 根据仿真group获取仿真地图数据 */
|
||||
export function getMapDataByGroup(groupId) {
|
||||
return request({
|
||||
url: `/rtSimulation/${groupId}/mapData`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 仿真发送指令 */
|
||||
export function sendSimulationCommand(group, memberId, type, data) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/member/${memberId}/operate/${type}`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 获取仿真成员列表 */
|
||||
|
||||
/** 获取仿真成员列表 废弃 */
|
||||
export function getMemberListCommon(group, role) {
|
||||
|
||||
if (!role) {
|
||||
@ -39,14 +25,14 @@ export function getMemberListCommon(group, role) {
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 获取仿真用户列表 */
|
||||
/** 获取仿真用户列表 废弃 */
|
||||
export function getUserListCommon(group) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/users`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 销毁仿真 */
|
||||
/** 销毁仿真 废弃 */
|
||||
export function destroySimulation(group) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/destroy`,
|
||||
@ -56,11 +42,11 @@ export function destroySimulation(group) {
|
||||
/** 初始化仿真 */
|
||||
export function initSimulation(group) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/init`,
|
||||
url: `/simulation/new/${group}/reset`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
/** 设置故障 */
|
||||
/** 设置故障 废弃 */
|
||||
export function setSimulationFault(group, data) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/fault`,
|
||||
@ -68,7 +54,7 @@ export function setSimulationFault(group, data) {
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 取消故障 */
|
||||
/** 取消故障 废弃 */
|
||||
export function cancelSimulationFault(group, deviceId, faultType) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/device/${deviceId}/fault/${faultType}`,
|
||||
@ -78,28 +64,28 @@ export function cancelSimulationFault(group, deviceId, faultType) {
|
||||
/** 仿真运行倍速 */
|
||||
export function timesSpeedPlayback(group, speed) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/updateSpeed/${speed}`,
|
||||
url: `/simulation/${group}/updateSpeed/${speed}`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
/** 仿真暂停 */
|
||||
export function simulationPause(group) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/pause`,
|
||||
url: `/simulation/${group}/pause`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
/** 仿真开始 */
|
||||
export function simulationStart(group) {
|
||||
return request({
|
||||
url: `/common/simulation/${group}/start`,
|
||||
url: `/simulation/${group}/start`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
/** 获取存在的仿真列表 */
|
||||
export function getExistSimulationList(params) {
|
||||
return request({
|
||||
url: `/common/simulation/list`,
|
||||
url: `/simulation/list`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
@ -107,7 +93,15 @@ export function getExistSimulationList(params) {
|
||||
/** 获取仿真用户信息 */
|
||||
export function getSimulationUserInfo(id) {
|
||||
return request({
|
||||
url: `/common/simulation/${id}/users`,
|
||||
url: `/simulation/${id}/users`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 监管仿真 */
|
||||
export function getSuperviseSimulation(params) {
|
||||
return request({
|
||||
url: `/simulation/supervise`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ export function modifySystemTime(data, group) {
|
||||
/** 新版地图按计划行车 */
|
||||
export function ranAsPlan(data, group) {
|
||||
return request({
|
||||
url: `/simulation/${group}/ranAsPlan`,
|
||||
url: `/simulation/new/${group}/runAsPlan`,
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
@ -537,3 +537,40 @@ export function queryPaTimedList(group, params) {
|
||||
params
|
||||
});
|
||||
}
|
||||
/** 创建仿真 */
|
||||
export function createSimulation(id) {
|
||||
return request({
|
||||
url: `/simulation/new/mapFunction/${id}`,
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据地图ID和功能ID获取仿真GroupId */
|
||||
export function getGroupByMapAndFunction(mapId, functionId) {
|
||||
return request({
|
||||
url: `/simulation/new/map/${mapId}/function/${functionId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 由系统管理员和教员销毁仿真 */
|
||||
export function destroySimulationByAdmin(group) {
|
||||
return request({
|
||||
url: `/simulation/${group}/destroy`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
/** 非仿真创建者退出仿真 */
|
||||
export function exitSimulation(group) {
|
||||
return request({
|
||||
url: `/simulation/${group}/exit`,
|
||||
method: 'put'
|
||||
});
|
||||
}
|
||||
/** 仿真监管那里进入仿真 */
|
||||
export function enterSimulationByTeacher(group) {
|
||||
return request({
|
||||
url: `/simulation/${group}/monitor`,
|
||||
method: 'post'
|
||||
});
|
||||
}
|
||||
|
27
src/api/thirdAccountConfig.js
Normal file
27
src/api/thirdAccountConfig.js
Normal file
@ -0,0 +1,27 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 删除第三方配置 */
|
||||
export function deleteThirdAccountConfig(id) {
|
||||
return request({
|
||||
url: `/api/thirdAccountConfig/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
/** 分页查询所有配置 */
|
||||
export function queryThirdAccountConfig(params) {
|
||||
return request({
|
||||
url: `/api/thirdAccountConfig/paged`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
/** 新增或更新第三方配置 */
|
||||
export function updateThirdAccountConfig(data) {
|
||||
return request({
|
||||
url: `/api/thirdAccountConfig`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
@ -41,7 +41,6 @@ export function getTrainingStepList(trainingId) {
|
||||
}
|
||||
/** 修改实训所有步骤 */
|
||||
export function updateTrainingStep(group, trainingId, data) {
|
||||
console.log(group, trainingId, '*******');
|
||||
return request({
|
||||
url: `/api/v2/draft/training/${group}/${trainingId}/step/update`,
|
||||
method: 'put',
|
||||
@ -152,10 +151,10 @@ export function getTrainingGradeRules(trainingId) {
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 清空步骤 */
|
||||
export function clearTrainingStep(trainingId) {
|
||||
/** 清空重置实训 */
|
||||
export function clearDesignTraining(trainingId, group) {
|
||||
return request({
|
||||
url: `/api/v2/draft/training/${trainingId}/step/clear`,
|
||||
url: `/api/v2/draft/training/${group}/reset/${trainingId}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
@ -75,4 +75,74 @@ export function getSubSystemByProjectCode() {
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
/** 创建地图系统 */
|
||||
export function createMapFunction(data) {
|
||||
return request({
|
||||
url: `/api/mapFunction`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 列表查询地图系统 */
|
||||
export function queryMapFunctionList(params) {
|
||||
return request({
|
||||
url: `/api/mapFunction/list`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
/** 更新地图系统 */
|
||||
export function updateMapFunction(data) {
|
||||
return request({
|
||||
url: `/api/mapFunction/${data.id}`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
/** 删除地图系统 */
|
||||
export function deleteMapFunction(id) {
|
||||
return request({
|
||||
url: `/api/mapFunction/${id}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
/** 分页查询地图系统 */
|
||||
export function queryMapFunctionPaged(params) {
|
||||
return request({
|
||||
url: `/api/mapFunction/paged`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
/** 生成地图子系统 */
|
||||
export function generateMapFunctionNew(mapId, data) {
|
||||
return request({
|
||||
url: `/api/mapFunction/${mapId}/generate`,
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
/** 根据id查询地图系统 */
|
||||
export function getMapFunctioById(id) {
|
||||
return request({
|
||||
url: `/api/mapFunction/${id}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 一键删除地图下所有线路功能 */
|
||||
export function deleteAllMapFunction(mapId) {
|
||||
return request({
|
||||
url: `/api/mapFunction/batch/${mapId}`,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
/** 新增分组 */
|
||||
export function updateMapFunctionSubset(data) {
|
||||
return request({
|
||||
url: `/api/mapFunction/group`,
|
||||
method: 'put',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
35
src/api/userRulesManage.js
Normal file
35
src/api/userRulesManage.js
Normal file
@ -0,0 +1,35 @@
|
||||
|
||||
import request from '@/utils/request';
|
||||
|
||||
/** 设置权限失效或有效*/
|
||||
export function setPermissonInValid(subjectId) {
|
||||
return request({
|
||||
url: `/api/v2/permission/subject/inValid/${subjectId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 用户权限列表*/
|
||||
export function listPermision(params) {
|
||||
return request({
|
||||
url: `/api/v2/permission/subject/page`,
|
||||
method: 'get',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
|
||||
/** 查看用户分发的下级所有用户权限*/
|
||||
export function getPermissonInDistribute(subjectId) {
|
||||
return request({
|
||||
url: `/api/v2/permission/subject/distribute/${subjectId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/** 查看当前mapId 下用户的所有权限及功能*/
|
||||
export function getMapIdPermisson(mapId) {
|
||||
return request({
|
||||
url: `/api/v2/permission/subject/permission/${mapId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
BIN
src/assets/icon/favicon_yjddzh.png
Normal file
BIN
src/assets/icon/favicon_yjddzh.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.5 MiB |
BIN
src/assets/reset.png
Normal file
BIN
src/assets/reset.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<li v-if="option.children && option.children.length" class="menu-item" :class="popClass" @mouseenter="enter($vnode.key)" @mouseleave="leave">
|
||||
<li v-if="option.children && option.children.length && checkVisible(option)" class="menu-item" :class="popClass" @mouseenter="enter($vnode.key)" @mouseleave="leave">
|
||||
<div ref="flexBox" class="flex-box">
|
||||
<el-button type="text" class="item" :disabled="checkDisabled(option)">
|
||||
<el-link v-if="option.tipsType" :type="option.tipsType" :underline="false">{{ option.label }}</el-link>
|
||||
@ -11,7 +11,7 @@
|
||||
<ul v-if="isPopup" ref="popup" class="menu" :style="{display: isShow? 'block': 'table', marginLeft: marginLeft+'px'}">
|
||||
<div class="menu-pop pop-menu">
|
||||
<div v-show="isShow" class="arrow el-icon-arrow-down" />
|
||||
<pop-menu-item v-for="(el, i) in option.children" :key="i" :option="el" :pop-class="popClass" :allowedColor="allowedColor" :disabledColor="disabledColor" @close="close" />
|
||||
<pop-menu-item v-for="(el, i) in option.children" :key="i" :option="el" :pop-class="popClass" :allowed-color="allowedColor" :disabled-color="disabledColor" @close="close" />
|
||||
<div v-show="isShow" class="arrow el-icon-arrow-up" />
|
||||
</div>
|
||||
</ul>
|
||||
@ -54,7 +54,7 @@ export default {
|
||||
},
|
||||
disabledColor: {
|
||||
type: String,
|
||||
default: '#000',
|
||||
default: '#000'
|
||||
},
|
||||
allowedColor: {
|
||||
type: String,
|
||||
|
@ -303,7 +303,9 @@ export default {
|
||||
methods: {
|
||||
// 获取默认查询参数
|
||||
initQueryModel() {
|
||||
if (!this.queryForm.notRecord) {
|
||||
this.formModel = localStore.get(this.$route.path) || this.formModel;
|
||||
}
|
||||
this.buildForm();
|
||||
if (typeof this.queryForm.initLoadCallback === 'function') {
|
||||
this.queryForm.initLoadCallback(this.formModel);
|
||||
@ -350,7 +352,6 @@ export default {
|
||||
// 构建查询表单对象、显示的查询对象
|
||||
const queryObject = {};
|
||||
const model = {};
|
||||
// debugger;
|
||||
for (const item in this.queryForm.queryObject) {
|
||||
if (this.queryForm.queryObject.show === false) {
|
||||
continue;
|
||||
|
@ -93,7 +93,7 @@
|
||||
:sort-by="column.sortBy"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row[column.prop]" />
|
||||
<div style="white-space: pre-wrap;" v-html="scope.row[column.prop]" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
@ -77,7 +77,7 @@ export default {
|
||||
size: 3,
|
||||
action: `${this.$store.state.user.uploadUrl}/api/upload/PICTURE?appId=00001&appSecret=joylink00001`,
|
||||
response: (res) => {
|
||||
return `${this.$store.state.user.resourcesUrl}${res.data}`;
|
||||
return `${this.$store.state.user.ossUrl}${res.data}`;
|
||||
},
|
||||
error: () => { that.$message.error('图片上传失败,请检查网络状态'); },
|
||||
sizeError: () => { that.$message.error('图片上传失败,图片大小限制3MB'); } // 图片超过大小的回调
|
||||
|
835
src/components/VCode/index.vue
Normal file
835
src/components/VCode/index.vue
Normal file
@ -0,0 +1,835 @@
|
||||
<template>
|
||||
<!-- 本体部分 -->
|
||||
<div
|
||||
:class="['vue-puzzle-vcode', { show_: show }]"
|
||||
@mousedown="onCloseMouseDown"
|
||||
@mouseup="onCloseMouseUp"
|
||||
@touchstart="onCloseMouseDown"
|
||||
@touchend="onCloseMouseUp"
|
||||
>
|
||||
<div
|
||||
class="vue-auth-box_"
|
||||
@mousedown.stop
|
||||
@touchstart.stop
|
||||
>
|
||||
<div
|
||||
class="auth-body_"
|
||||
:style="`height: ${canvasHeight}px`"
|
||||
>
|
||||
<!-- 主图,有缺口 -->
|
||||
<canvas
|
||||
ref="canvas1"
|
||||
:width="canvasWidth"
|
||||
:height="canvasHeight"
|
||||
:style="`width:${canvasWidth}px;height:${canvasHeight}px`"
|
||||
/>
|
||||
<!-- 成功后显示的完整图 -->
|
||||
<canvas
|
||||
ref="canvas3"
|
||||
:class="['auth-canvas3_', { show: isSuccess }]"
|
||||
:width="canvasWidth"
|
||||
:height="canvasHeight"
|
||||
:style="`width:${canvasWidth}px;height:${canvasHeight}px`"
|
||||
/>
|
||||
<!-- 小图 -->
|
||||
<canvas
|
||||
ref="canvas2"
|
||||
:width="puzzleBaseSize"
|
||||
class="auth-canvas2_"
|
||||
:height="canvasHeight"
|
||||
:style="
|
||||
`width:${puzzleBaseSize}px;height:${canvasHeight}px;transform:translateX(${styleWidth -
|
||||
sliderBaseSize -
|
||||
(puzzleBaseSize - sliderBaseSize) *
|
||||
((styleWidth - sliderBaseSize) /
|
||||
(canvasWidth - sliderBaseSize))}px)`
|
||||
"
|
||||
/>
|
||||
<div :class="['loading-box_', { hide_: !loading }]">
|
||||
<div class="loading-gif_">
|
||||
<span />
|
||||
<span />
|
||||
<span />
|
||||
<span />
|
||||
<span />
|
||||
</div>
|
||||
</div>
|
||||
<div :class="['info-box_', { show: infoBoxShow }, { fail: infoBoxFail }]">
|
||||
{{ infoText }}
|
||||
</div>
|
||||
<div
|
||||
:class="['flash_', { show: isSuccess }]"
|
||||
:style="
|
||||
`transform: translateX(${
|
||||
isSuccess
|
||||
? `${canvasWidth + canvasHeight * 0.578}px`
|
||||
: `-${canvasHeight * 0.578}px`
|
||||
}) skew(-30deg, 0);`
|
||||
"
|
||||
/>
|
||||
<img
|
||||
class="reset_"
|
||||
:src="resetSvg"
|
||||
@click="reset"
|
||||
>
|
||||
</div>
|
||||
<div class="auth-control_">
|
||||
<div
|
||||
class="range-box"
|
||||
:style="`height:${sliderBaseSize}px`"
|
||||
>
|
||||
<div class="range-text">{{ sliderText }}</div>
|
||||
<div
|
||||
ref="range-slider"
|
||||
class="range-slider"
|
||||
:style="`width:${styleWidth}px`"
|
||||
>
|
||||
<div
|
||||
:class="['range-btn', { isDown: mouseDown }]"
|
||||
:style="`width:${sliderBaseSize}px`"
|
||||
@mousedown="onRangeMouseDown($event)"
|
||||
@touchstart="onRangeMouseDown($event)"
|
||||
>
|
||||
<div />
|
||||
<div />
|
||||
<div />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import resetSvg from '@/assets/reset.png';
|
||||
export default {
|
||||
props: {
|
||||
canvasWidth: { type: Number, default: 310 }, // 主canvas的宽
|
||||
canvasHeight: { type: Number, default: 160 }, // 主canvas的高
|
||||
// 是否出现,由父级控制
|
||||
show: { type: Boolean, default: false },
|
||||
puzzleScale: { type: Number, default: 1 }, // 拼图块的大小缩放比例
|
||||
sliderSize: { type: Number, default: 50 }, // 滑块的大小
|
||||
range: { type: Number, default: 10 }, // 允许的偏差值
|
||||
// 所有的背景图片
|
||||
imgs: {
|
||||
type: Array,
|
||||
default() {
|
||||
return [];
|
||||
}
|
||||
},
|
||||
successText: {
|
||||
type: String,
|
||||
default: '验证通过!'
|
||||
},
|
||||
failText: {
|
||||
type: String,
|
||||
default: '验证失败,请重试'
|
||||
},
|
||||
sliderText: {
|
||||
type: String,
|
||||
default: '拖动滑块完成拼图'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
mouseDown: false, // 鼠标是否在按钮上按下
|
||||
startWidth: 50, // 鼠标点下去时父级的width
|
||||
startX: 0, // 鼠标按下时的X
|
||||
newX: 0, // 鼠标当前的偏移X
|
||||
pinX: 0, // 拼图的起始X
|
||||
pinY: 0, // 拼图的起始Y
|
||||
loading: false, // 是否正在加在中,主要是等图片onload
|
||||
isCanSlide: false, // 是否可以拉动滑动条
|
||||
error: false, // 图片加在失败会出现这个,提示用户手动刷新
|
||||
infoBoxShow: false, // 提示信息是否出现
|
||||
infoText: '', // 提示等信息
|
||||
infoBoxFail: false, // 是否验证失败
|
||||
timer1: null, // setTimout1
|
||||
closeDown: false, // 为了解决Mac上的click BUG
|
||||
isSuccess: false, // 验证成功
|
||||
imgIndex: -1, // 用于自定义图片时不会随机到重复的图片
|
||||
isSubmting: false, // 是否正在判定,主要用于判定中不能点击重置按钮
|
||||
resetSvg
|
||||
};
|
||||
},
|
||||
/** 计算属性 **/
|
||||
computed: {
|
||||
// styleWidth是底部用户操作的滑块的父级,就是轨道在鼠标的作用下应该具有的宽度
|
||||
styleWidth() {
|
||||
const w = this.startWidth + this.newX - this.startX;
|
||||
return w < this.sliderBaseSize
|
||||
? this.sliderBaseSize
|
||||
: w > this.canvasWidth
|
||||
? this.canvasWidth
|
||||
: w;
|
||||
},
|
||||
// 图中拼图块的60 * 用户设定的缩放比例计算之后的值 0.2~2
|
||||
puzzleBaseSize() {
|
||||
return Math.round(
|
||||
Math.max(Math.min(this.puzzleScale, 2), 0.2) * 52.5 + 6
|
||||
);
|
||||
},
|
||||
// 处理一下sliderSize,弄成整数,以免计算有偏差
|
||||
sliderBaseSize() {
|
||||
return Math.max(
|
||||
Math.min(
|
||||
Math.round(this.sliderSize),
|
||||
Math.round(this.canvasWidth * 0.5)
|
||||
),
|
||||
10
|
||||
);
|
||||
}
|
||||
},
|
||||
/** 监听 **/
|
||||
watch: {
|
||||
show(newV) {
|
||||
// 每次出现都应该重新初始化
|
||||
if (newV) {
|
||||
// document.body.classList.add('vue-puzzle-overflow');
|
||||
this.reset();
|
||||
} else {
|
||||
this.isSubmting = false;
|
||||
this.isSuccess = false;
|
||||
this.infoBoxShow = false;
|
||||
// document.body.classList.remove('vue-puzzle-overflow');
|
||||
}
|
||||
}
|
||||
},
|
||||
/** 生命周期 **/
|
||||
mounted() {
|
||||
// document.body.appendChild(this.$el);
|
||||
document.addEventListener('mousemove', this.onRangeMouseMove, false);
|
||||
document.addEventListener('mouseup', this.onRangeMouseUp, false);
|
||||
document.addEventListener('touchmove', this.onRangeMouseMove, {
|
||||
passive: false
|
||||
});
|
||||
document.addEventListener('touchend', this.onRangeMouseUp, false);
|
||||
if (this.show) {
|
||||
document.body.classList.add('vue-puzzle-overflow');
|
||||
this.reset();
|
||||
}
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearTimeout(this.timer1);
|
||||
// document.body.removeChild(this.$el);
|
||||
document.removeEventListener('mousemove', this.onRangeMouseMove, false);
|
||||
document.removeEventListener('mouseup', this.onRangeMouseUp, false);
|
||||
document.removeEventListener('touchmove', this.onRangeMouseMove, {
|
||||
passive: false
|
||||
});
|
||||
document.removeEventListener('touchend', this.onRangeMouseUp, false);
|
||||
},
|
||||
/** 方法 **/
|
||||
methods: {
|
||||
// 关闭
|
||||
onClose() {
|
||||
if (!this.mouseDown && !this.isSubmting) {
|
||||
clearTimeout(this.timer1);
|
||||
this.$emit('close');
|
||||
}
|
||||
},
|
||||
onCloseMouseDown() {
|
||||
this.closeDown = true;
|
||||
},
|
||||
onCloseMouseUp() {
|
||||
if (this.closeDown) {
|
||||
this.onClose();
|
||||
}
|
||||
this.closeDown = false;
|
||||
},
|
||||
// 鼠标按下准备拖动
|
||||
onRangeMouseDown(e) {
|
||||
if (this.isCanSlide) {
|
||||
this.mouseDown = true;
|
||||
this.startWidth = this.$refs['range-slider'].clientWidth;
|
||||
this.newX = e.clientX || e.changedTouches[0].clientX;
|
||||
this.startX = e.clientX || e.changedTouches[0].clientX;
|
||||
}
|
||||
},
|
||||
// 鼠标移动
|
||||
onRangeMouseMove(e) {
|
||||
if (this.mouseDown) {
|
||||
e.preventDefault();
|
||||
this.newX = e.clientX || e.changedTouches[0].clientX;
|
||||
}
|
||||
},
|
||||
// 鼠标抬起
|
||||
onRangeMouseUp() {
|
||||
if (this.mouseDown) {
|
||||
this.mouseDown = false;
|
||||
this.submit();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 开始进行
|
||||
* @param withCanvas 是否强制使用canvas随机作图
|
||||
*/
|
||||
init(withCanvas) {
|
||||
// 防止重复加载导致的渲染错误
|
||||
if (this.loading && !withCanvas) {
|
||||
return;
|
||||
}
|
||||
this.loading = true;
|
||||
this.isCanSlide = false;
|
||||
const c = this.$refs.canvas1;
|
||||
const c2 = this.$refs.canvas2;
|
||||
const c3 = this.$refs.canvas3;
|
||||
const ctx = c.getContext('2d');
|
||||
const ctx2 = c2.getContext('2d');
|
||||
const ctx3 = c3.getContext('2d');
|
||||
const isFirefox = navigator.userAgent.indexOf('Firefox') >= 0 && navigator.userAgent.indexOf('Windows') >= 0; // 是windows版火狐
|
||||
const img = document.createElement('img');
|
||||
ctx.fillStyle = 'rgba(255,255,255,1)';
|
||||
ctx3.fillStyle = 'rgba(255,255,255,1)';
|
||||
ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
|
||||
ctx2.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
|
||||
// 取一个随机坐标,作为拼图块的位置
|
||||
this.pinX = this.getRandom(this.puzzleBaseSize, this.canvasWidth - this.puzzleBaseSize - 20); // 留20的边距
|
||||
this.pinY = this.getRandom(20, this.canvasHeight - this.puzzleBaseSize - 20); // 主图高度 - 拼图块自身高度 - 20边距
|
||||
img.crossOrigin = 'anonymous'; // 匿名,想要获取跨域的图片
|
||||
img.onload = () => {
|
||||
const [x, y, w, h] = this.makeImgSize(img);
|
||||
ctx.save();
|
||||
// 先画小图
|
||||
this.paintBrick(ctx);
|
||||
ctx.closePath();
|
||||
if (!isFirefox) {
|
||||
ctx.shadowOffsetX = 0;
|
||||
ctx.shadowOffsetY = 0;
|
||||
ctx.shadowColor = '#000';
|
||||
ctx.shadowBlur = 3;
|
||||
ctx.fill();
|
||||
ctx.clip();
|
||||
} else {
|
||||
ctx.clip();
|
||||
ctx.save();
|
||||
ctx.shadowOffsetX = 0;
|
||||
ctx.shadowOffsetY = 0;
|
||||
ctx.shadowColor = '#000';
|
||||
ctx.shadowBlur = 3;
|
||||
ctx.fill();
|
||||
ctx.restore();
|
||||
}
|
||||
ctx.drawImage(img, x, y, w, h);
|
||||
ctx3.fillRect(0, 0, this.canvasWidth, this.canvasHeight);
|
||||
ctx3.drawImage(img, x, y, w, h);
|
||||
// 设置小图的内阴影
|
||||
ctx.globalCompositeOperation = 'source-atop';
|
||||
this.paintBrick(ctx);
|
||||
ctx.arc(
|
||||
this.pinX + Math.ceil(this.puzzleBaseSize / 2),
|
||||
this.pinY + Math.ceil(this.puzzleBaseSize / 2),
|
||||
this.puzzleBaseSize * 1.2,
|
||||
0,
|
||||
Math.PI * 2,
|
||||
true
|
||||
);
|
||||
ctx.closePath();
|
||||
ctx.shadowColor = 'rgba(255, 255, 255, .8)';
|
||||
ctx.shadowOffsetX = -1;
|
||||
ctx.shadowOffsetY = -1;
|
||||
ctx.shadowBlur = Math.min(Math.ceil(8 * this.puzzleScale), 12);
|
||||
ctx.fillStyle = '#ffffaa';
|
||||
ctx.fill();
|
||||
// 将小图赋值给ctx2
|
||||
const imgData = ctx.getImageData(
|
||||
this.pinX - 3, // 为了阴影 是从-3px开始截取,判定的时候要+3px
|
||||
this.pinY - 20,
|
||||
this.pinX + this.puzzleBaseSize + 5,
|
||||
this.pinY + this.puzzleBaseSize + 5
|
||||
);
|
||||
ctx2.putImageData(imgData, 0, this.pinY - 20);
|
||||
|
||||
// ctx2.drawImage(c, this.pinX - 3,this.pinY - 20,this.pinX + this.puzzleBaseSize + 5,this.pinY + this.puzzleBaseSize + 5,
|
||||
// 0, this.pinY - 20, this.pinX + this.puzzleBaseSize + 5, this.pinY + this.puzzleBaseSize + 5);
|
||||
// 清理
|
||||
ctx.restore();
|
||||
ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
|
||||
// 画缺口
|
||||
ctx.save();
|
||||
this.paintBrick(ctx);
|
||||
ctx.globalAlpha = 0.8;
|
||||
ctx.fillStyle = '#ffffff';
|
||||
ctx.fill();
|
||||
ctx.restore();
|
||||
// 画缺口的内阴影
|
||||
ctx.save();
|
||||
ctx.globalCompositeOperation = 'source-atop';
|
||||
this.paintBrick(ctx);
|
||||
ctx.arc(
|
||||
this.pinX + Math.ceil(this.puzzleBaseSize / 2),
|
||||
this.pinY + Math.ceil(this.puzzleBaseSize / 2),
|
||||
this.puzzleBaseSize * 1.2,
|
||||
0,
|
||||
Math.PI * 2,
|
||||
true
|
||||
);
|
||||
ctx.shadowColor = '#000';
|
||||
ctx.shadowOffsetX = 2;
|
||||
ctx.shadowOffsetY = 2;
|
||||
ctx.shadowBlur = 16;
|
||||
ctx.fill();
|
||||
ctx.restore();
|
||||
// 画整体背景图
|
||||
ctx.save();
|
||||
ctx.globalCompositeOperation = 'destination-over';
|
||||
ctx.drawImage(img, x, y, w, h);
|
||||
ctx.restore();
|
||||
this.loading = false;
|
||||
this.isCanSlide = true;
|
||||
};
|
||||
img.onerror = () => {
|
||||
this.init(true); // 如果图片加载错误就重新来,并强制用canvas随机作图
|
||||
};
|
||||
if (!withCanvas && this.imgs && this.imgs.length) {
|
||||
let randomNum = this.getRandom(0, this.imgs.length - 1);
|
||||
if (randomNum === this.imgIndex) {
|
||||
if (randomNum === this.imgs.length - 1) {
|
||||
randomNum = 0;
|
||||
} else {
|
||||
randomNum++;
|
||||
}
|
||||
}
|
||||
this.imgIndex = randomNum;
|
||||
img.src = this.imgs[randomNum];
|
||||
} else {
|
||||
img.src = this.makeImgWithCanvas();
|
||||
}
|
||||
},
|
||||
// 工具 - 范围随机数
|
||||
getRandom(min, max) {
|
||||
return Math.ceil(Math.random() * (max - min) + min);
|
||||
},
|
||||
// 工具 - 设置图片尺寸cover方式贴合canvas尺寸 w/h
|
||||
makeImgSize(img) {
|
||||
const imgScale = img.width / img.height;
|
||||
const canvasScale = this.canvasWidth / this.canvasHeight;
|
||||
let x = 0;
|
||||
let y = 0;
|
||||
let w = 0;
|
||||
let h = 0;
|
||||
if (imgScale > canvasScale) {
|
||||
h = this.canvasHeight;
|
||||
w = imgScale * h;
|
||||
y = 0;
|
||||
x = (this.canvasWidth - w) / 2;
|
||||
} else {
|
||||
w = this.canvasWidth;
|
||||
h = w / imgScale;
|
||||
x = 0;
|
||||
y = (this.canvasHeight - h) / 2;
|
||||
}
|
||||
return [x, y, w, h];
|
||||
},
|
||||
// 绘制拼图块的路径
|
||||
paintBrick(ctx) {
|
||||
const moveL = Math.ceil(15 * this.puzzleScale); // 直线移动的基础距离
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(this.pinX, this.pinY);
|
||||
ctx.lineTo(this.pinX + moveL, this.pinY);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL,
|
||||
this.pinY - moveL / 2,
|
||||
this.pinX + moveL + moveL / 2,
|
||||
this.pinY - moveL / 2,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL + moveL,
|
||||
this.pinY - moveL / 2,
|
||||
this.pinX + moveL + moveL,
|
||||
this.pinY,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.lineTo(this.pinX + moveL + moveL + moveL, this.pinY);
|
||||
ctx.lineTo(this.pinX + moveL + moveL + moveL, this.pinY + moveL);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL + moveL + moveL + moveL / 2,
|
||||
this.pinY + moveL,
|
||||
this.pinX + moveL + moveL + moveL + moveL / 2,
|
||||
this.pinY + moveL + moveL / 2,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL + moveL + moveL + moveL / 2,
|
||||
this.pinY + moveL + moveL,
|
||||
this.pinX + moveL + moveL + moveL,
|
||||
this.pinY + moveL + moveL,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.lineTo(
|
||||
this.pinX + moveL + moveL + moveL,
|
||||
this.pinY + moveL + moveL + moveL
|
||||
);
|
||||
ctx.lineTo(this.pinX, this.pinY + moveL + moveL + moveL);
|
||||
ctx.lineTo(this.pinX, this.pinY + moveL + moveL);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL / 2,
|
||||
this.pinY + moveL + moveL,
|
||||
this.pinX + moveL / 2,
|
||||
this.pinY + moveL + moveL / 2,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.arcTo(
|
||||
this.pinX + moveL / 2,
|
||||
this.pinY + moveL,
|
||||
this.pinX,
|
||||
this.pinY + moveL,
|
||||
moveL / 2
|
||||
);
|
||||
ctx.lineTo(this.pinX, this.pinY);
|
||||
},
|
||||
// 用canvas随机生成图片
|
||||
makeImgWithCanvas() {
|
||||
const canvas = document.createElement('canvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
canvas.width = this.canvasWidth;
|
||||
canvas.height = this.canvasHeight;
|
||||
ctx.fillStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(
|
||||
100,
|
||||
255
|
||||
)},${this.getRandom(100, 255)})`;
|
||||
ctx.fillRect(0, 0, this.canvasWidth, this.canvasHeight);
|
||||
// 随机画10个图形
|
||||
for (let i = 0; i < 12; i++) {
|
||||
ctx.fillStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(
|
||||
100,
|
||||
255
|
||||
)},${this.getRandom(100, 255)})`;
|
||||
ctx.strokeStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(
|
||||
100,
|
||||
255
|
||||
)},${this.getRandom(100, 255)})`;
|
||||
if (this.getRandom(0, 2) > 1) {
|
||||
// 矩形
|
||||
ctx.save();
|
||||
ctx.rotate((this.getRandom(-90, 90) * Math.PI) / 180);
|
||||
ctx.fillRect(
|
||||
this.getRandom(-20, canvas.width - 20),
|
||||
this.getRandom(-20, canvas.height - 20),
|
||||
this.getRandom(10, canvas.width / 2 + 10),
|
||||
this.getRandom(10, canvas.height / 2 + 10)
|
||||
);
|
||||
ctx.restore();
|
||||
} else {
|
||||
// 圆
|
||||
ctx.beginPath();
|
||||
const ran = this.getRandom(-Math.PI, Math.PI);
|
||||
ctx.arc(
|
||||
this.getRandom(0, canvas.width),
|
||||
this.getRandom(0, canvas.height),
|
||||
this.getRandom(10, canvas.height / 2 + 10),
|
||||
ran,
|
||||
ran + Math.PI * 1.5
|
||||
);
|
||||
ctx.closePath();
|
||||
ctx.fill();
|
||||
}
|
||||
}
|
||||
return canvas.toDataURL('image/png');
|
||||
},
|
||||
// 开始判定
|
||||
submit() {
|
||||
this.isSubmting = true;
|
||||
// 偏差 x = puzzle的起始X - (用户真滑动的距离) + (puzzle的宽度 - 滑块的宽度) * (用户真滑动的距离/canvas总宽度)
|
||||
// 最后+ 的是补上slider和滑块宽度不一致造成的缝隙
|
||||
const x = Math.abs(
|
||||
this.pinX -
|
||||
(this.styleWidth - this.sliderBaseSize) +
|
||||
(this.puzzleBaseSize - this.sliderBaseSize) *
|
||||
((this.styleWidth - this.sliderBaseSize) /
|
||||
(this.canvasWidth - this.sliderBaseSize)) -
|
||||
3
|
||||
);
|
||||
if (x < this.range) {
|
||||
// 成功
|
||||
this.infoText = this.successText;
|
||||
this.infoBoxFail = false;
|
||||
this.infoBoxShow = true;
|
||||
this.isCanSlide = false;
|
||||
this.isSuccess = true;
|
||||
// 成功后准备关闭
|
||||
clearTimeout(this.timer1);
|
||||
this.timer1 = setTimeout(() => {
|
||||
// 成功的回调
|
||||
this.isSubmting = false;
|
||||
this.$emit('success', x);
|
||||
}, 800);
|
||||
} else {
|
||||
// 失败
|
||||
this.infoText = this.failText;
|
||||
this.infoBoxFail = true;
|
||||
this.infoBoxShow = true;
|
||||
this.isCanSlide = false;
|
||||
// 失败的回调
|
||||
this.$emit('fail', x);
|
||||
// 800ms后重置
|
||||
clearTimeout(this.timer1);
|
||||
this.timer1 = setTimeout(() => {
|
||||
this.isSubmting = false;
|
||||
this.reset();
|
||||
}, 800);
|
||||
}
|
||||
},
|
||||
// 重置 - 重新设置初始状态
|
||||
resetState() {
|
||||
this.infoBoxFail = false;
|
||||
this.infoBoxShow = false;
|
||||
this.isCanSlide = false;
|
||||
this.isSuccess = false;
|
||||
this.startWidth = this.sliderBaseSize; // 鼠标点下去时父级的width
|
||||
this.startX = 0; // 鼠标按下时的X
|
||||
this.newX = 0; // 鼠标当前的偏移X
|
||||
},
|
||||
// 重置
|
||||
reset() {
|
||||
if (this.isSubmting) {
|
||||
return;
|
||||
}
|
||||
this.resetState();
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.vue-puzzle-vcode {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
z-index: 999;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transition: opacity 200ms;
|
||||
&.show_ {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
||||
.vue-auth-box_ {
|
||||
position: absolute;
|
||||
top: 47%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
user-select: none;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
.auth-body_ {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: 3px;
|
||||
.loading-box_ {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
z-index: 20;
|
||||
opacity: 1;
|
||||
transition: opacity 200ms;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
&.hide_ {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
.loading-gif_ {
|
||||
span {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
}
|
||||
}
|
||||
.loading-gif_ {
|
||||
flex: none;
|
||||
height: 5px;
|
||||
line-height: 0;
|
||||
@keyframes load {
|
||||
0% {
|
||||
opacity: 1;
|
||||
transform: scale(1.3);
|
||||
}
|
||||
100% {
|
||||
opacity: 0.2;
|
||||
transform: scale(0.3);
|
||||
}
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
margin-left: 2px;
|
||||
border-radius: 50%;
|
||||
background-color: #888;
|
||||
animation: load 1.04s ease infinite;
|
||||
&:nth-child(1) {
|
||||
margin-left: 0;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
animation-delay: 0.13s;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
animation-delay: 0.26s;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
animation-delay: 0.39s;
|
||||
}
|
||||
&:nth-child(5) {
|
||||
animation-delay: 0.52s;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.info-box_ {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
font-size: 13px;
|
||||
background-color: #83ce3f;
|
||||
opacity: 0;
|
||||
transform: translateY(24px);
|
||||
transition: all 200ms;
|
||||
color: #fff;
|
||||
z-index: 10;
|
||||
&.show {
|
||||
opacity: 0.95;
|
||||
transform: translateY(0);
|
||||
}
|
||||
&.fail {
|
||||
background-color: #ce594b;
|
||||
}
|
||||
}
|
||||
.auth-canvas2_ {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 60px;
|
||||
height: 100%;
|
||||
z-index: 2;
|
||||
}
|
||||
.auth-canvas3_ {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
transition: opacity 600ms;
|
||||
z-index: 3;
|
||||
&.show {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.flash_ {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 30px;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
z-index: 3;
|
||||
&.show {
|
||||
transition: transform 600ms;
|
||||
}
|
||||
}
|
||||
.reset_ {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 2px;
|
||||
width: 35px;
|
||||
height: auto;
|
||||
z-index: 12;
|
||||
cursor: pointer;
|
||||
transition: transform 200ms;
|
||||
transform: rotate(0deg);
|
||||
&:hover {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
.auth-control_ {
|
||||
.range-box {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
background-color: #eef1f8;
|
||||
margin-top: 20px;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 0 8px rgba(240, 240, 240, 0.6) inset;
|
||||
.range-text {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 14px;
|
||||
color: #b7bcd1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
.range-slider {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 50px;
|
||||
background-color: rgba(106, 160, 255, 0.8);
|
||||
border-radius: 3px;
|
||||
.range-btn {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
right: 0;
|
||||
width: 50px;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 0 4px #ccc;
|
||||
cursor: pointer;
|
||||
& > div {
|
||||
width: 0;
|
||||
height: 40%;
|
||||
transition: all 200ms;
|
||||
&:nth-child(2) {
|
||||
margin: 0 4px;
|
||||
}
|
||||
border: solid 1px #6aa0ff;
|
||||
}
|
||||
&:hover,
|
||||
&.isDown {
|
||||
& > div:first-child {
|
||||
border: solid 4px transparent;
|
||||
height: 0;
|
||||
border-right-color: #6aa0ff;
|
||||
}
|
||||
& > div:nth-child(2) {
|
||||
border-width: 3px;
|
||||
height: 0;
|
||||
border-radius: 3px;
|
||||
margin: 0 6px;
|
||||
border-right-color: #6aa0ff;
|
||||
}
|
||||
& > div:nth-child(3) {
|
||||
border: solid 4px transparent;
|
||||
height: 0;
|
||||
border-left-color: #6aa0ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.vue-puzzle-overflow {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
</style>
|
@ -29,6 +29,7 @@ import systemGenerate from './systemGenerate';
|
||||
import login from './login';
|
||||
import designPlatform from './designPlatform';
|
||||
import trainingManage from './trainingManage';
|
||||
import newRouter from './newRouter';
|
||||
|
||||
export default {
|
||||
enLocale,
|
||||
@ -61,5 +62,6 @@ export default {
|
||||
systemGenerate,
|
||||
login,
|
||||
designPlatform,
|
||||
trainingManage
|
||||
trainingManage,
|
||||
newRouter
|
||||
};
|
||||
|
48
src/i18n/langs/en/newRouter.js
Normal file
48
src/i18n/langs/en/newRouter.js
Normal file
@ -0,0 +1,48 @@
|
||||
export default {
|
||||
simulation: 'simulation',
|
||||
multiplayerSimulation: 'Many simulation',
|
||||
regulationSimulation: 'Regulation of the simulation',
|
||||
teachingManagement: 'teaching management',
|
||||
classroom: 'classroom management',
|
||||
student: 'student management',
|
||||
theory: 'The theory of management',
|
||||
training: 'Practical teaching management',
|
||||
exam: 'examination management',
|
||||
lineDesign: 'track design',
|
||||
case: 'case',
|
||||
SystemManagement: 'System management',
|
||||
SystemDataManagement: 'System data management',
|
||||
dataDictionary: 'Data dictionary',
|
||||
SystemAccountManagement: 'System Account Management',
|
||||
ThirdPartyAccounts: 'Configuring Third-Party Accounts',
|
||||
OnlineInformationManagement: 'Online information management',
|
||||
loginUser: 'Online users',
|
||||
cacheDataManage: 'Cache data management',
|
||||
simulationManage: 'simulation management',
|
||||
companyUserManage: 'Organization User Management',
|
||||
companyManage: 'Company manage',
|
||||
lineDataManage: 'Line data management',
|
||||
lineTypeManage: 'Line type management',
|
||||
linePacketManage: 'Line packet management',
|
||||
teachingDataManage: 'Teaching data management',
|
||||
theoryData: 'Theoretical topic data management',
|
||||
trainingDataManage: 'Training data management',
|
||||
examData: 'Examination data management',
|
||||
userTrainingDataManage: 'User training data management',
|
||||
userExamData: 'User test data management',
|
||||
projectDataManage: 'Project data management',
|
||||
projectManage: 'Project Manage',
|
||||
projectConfig: 'Project client configuration',
|
||||
projectDeviceManage: 'Project equipment management',
|
||||
permissionDataManage: 'Permission Data Management',
|
||||
permissionManage: 'Permission',
|
||||
authorityTransferManage: 'Privilege distribution management',
|
||||
userRulesManage: 'User Rights Statistics',
|
||||
fileManage: 'File Manage',
|
||||
frontResourceManage: 'Front-End Resource Management',
|
||||
iscsPrerecordManage: 'ISCS Advance record management',
|
||||
XRVTI: 'Xi\'an Railway Vocational & Technical Institute',
|
||||
GEMVC: 'Guizhou Equipment Manufacturing Vocational College',
|
||||
JVCOEAI: 'Jiangsu Vocational College Of Electronics And Information',
|
||||
functionManage: 'function management'
|
||||
};
|
@ -117,5 +117,8 @@ export default {
|
||||
distributionAttribution: 'Distribution attribution',
|
||||
goodsAmount:'Goods Amount',
|
||||
operate:'operate',
|
||||
orderNotPay:'order not pay'
|
||||
orderNotPay:'order not pay',
|
||||
updateTime: 'update time',
|
||||
oneClickSync: 'one click sync',
|
||||
ability: 'ability'
|
||||
};
|
||||
|
@ -104,5 +104,7 @@ export default {
|
||||
projectServer: 'Project Server',
|
||||
audioResourcesManage: 'Audio Resources Manage',
|
||||
iscsDeviceManage: 'ISCS Device Manage',
|
||||
iscsResourcesManage: 'ISCS Resources Manage'
|
||||
};
|
||||
iscsResourcesManage: 'ISCS Resources Manage',
|
||||
projectManage: 'Project Manage',
|
||||
frontProjectConfigManage: 'Front Project Config Manage',
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ import systemGenerate from './systemGenerate';
|
||||
import login from './login';
|
||||
import designPlatform from './designPlatform';
|
||||
import trainingManage from './trainingManage';
|
||||
import newRouter from './newRouter';
|
||||
|
||||
export default {
|
||||
cnLocale,
|
||||
@ -61,5 +62,6 @@ export default {
|
||||
systemGenerate,
|
||||
login,
|
||||
designPlatform,
|
||||
trainingManage
|
||||
trainingManage,
|
||||
newRouter
|
||||
};
|
||||
|
@ -129,7 +129,7 @@ export default {
|
||||
confirmRunToFrontStation: '确认运行至前方站'
|
||||
},
|
||||
passiveDialog: {
|
||||
alarmDetailInformation: '级告警详细信息',
|
||||
alarmDetailInformation: '级报警详细信息',
|
||||
lineName: '线路名称',
|
||||
unitName: '单位名称',
|
||||
moduleName: '模块名称',
|
||||
|
48
src/i18n/langs/zh/newRouter.js
Normal file
48
src/i18n/langs/zh/newRouter.js
Normal file
@ -0,0 +1,48 @@
|
||||
export default {
|
||||
simulation: '仿真',
|
||||
multiplayerSimulation: '多人仿真',
|
||||
regulationSimulation: '监管仿真',
|
||||
teachingManagement: '教学管理',
|
||||
classroom: '班级管理',
|
||||
student: '学生管理',
|
||||
theory: '理论题目管理',
|
||||
training: '实训教学管理',
|
||||
exam: '考试管理',
|
||||
lineDesign: '线路设计',
|
||||
case: '案例管理',
|
||||
SystemManagement: '系统管理',
|
||||
SystemDataManagement: '系统数据管理',
|
||||
dataDictionary: '数据字典',
|
||||
SystemAccountManagement: '系统账户管理',
|
||||
ThirdPartyAccounts: '第三方账户配置',
|
||||
OnlineInformationManagement: '在线信息管理',
|
||||
loginUser: '在线用户',
|
||||
cacheDataManage: '缓存数据管理',
|
||||
simulationManage: '仿真管理',
|
||||
companyUserManage: '组织用户管理',
|
||||
companyManage: '组织管理',
|
||||
lineDataManage: '线路数据管理',
|
||||
lineTypeManage: '线路类型管理',
|
||||
linePacketManage: '线路分组管理',
|
||||
teachingDataManage: '教学数据管理',
|
||||
theoryData: '理论题数据管理',
|
||||
trainingDataManage: '实训数据管理',
|
||||
examData: '考试数据管理',
|
||||
userTrainingDataManage: '用户实训数据管理',
|
||||
userExamData: '用户考试数据管理',
|
||||
projectDataManage: '项目数据管理',
|
||||
projectManage: '项目管理',
|
||||
projectConfig: '项目客户端配置',
|
||||
projectDeviceManage: '项目设备管理',
|
||||
permissionDataManage: '权限数据管理',
|
||||
permissionManage: '权限管理',
|
||||
authorityTransferManage: '权限分发管理',
|
||||
userRulesManage: '用户权限管理',
|
||||
fileManage: '文件管理',
|
||||
frontResourceManage: '前端资源管理',
|
||||
iscsPrerecordManage: 'ISCS预录管理',
|
||||
XRVTI: '西安铁路职业技术学院',
|
||||
GEMVC: '贵州装备制造职业学院',
|
||||
JVCOEAI: '江苏电子信息职业学院',
|
||||
functionManage: '功能管理'
|
||||
};
|
@ -116,5 +116,8 @@ export default {
|
||||
distributionAttribution: '分发归属',
|
||||
goodsAmount:'商品个数',
|
||||
operate:'操作',
|
||||
orderNotPay:'该订单未支付'
|
||||
orderNotPay:'该订单未支付',
|
||||
updateTime: '更新时间',
|
||||
oneClickSync: '一键同步',
|
||||
ability: '功能'
|
||||
};
|
||||
|
@ -105,7 +105,7 @@ export default {
|
||||
selectScope: '请选择范围',
|
||||
questionNumbers: '题数',
|
||||
allNumberTipOne: '此类型有',
|
||||
allNumberTipTwo: '道题',
|
||||
allNumberTipTwo: '题',
|
||||
scorePerQuestion: '每题分值',
|
||||
inputQuestionNumber: '请输入题数',
|
||||
inputQuestionNumberError: '输入的题数大于0',
|
||||
|
@ -108,5 +108,7 @@ export default {
|
||||
projectServer: '项目域名',
|
||||
audioResourcesManage: '音频资源管理',
|
||||
iscsDeviceManage: 'ISCS设备管理',
|
||||
iscsResourcesManage: 'ISCS资源管理'
|
||||
};
|
||||
iscsResourcesManage: 'ISCS资源管理',
|
||||
projectManage: '项目管理',
|
||||
frontProjectConfigManage: '前端项目配置管理',
|
||||
}
|
||||
|
@ -8,8 +8,8 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
this.teststomp = new StompClient();
|
||||
|
||||
// let topic = '/user/queue/simulation/jl3d/'+routegroup;
|
||||
let topic = '/user/queue/simulation/'+ routegroup +'/jl3d';
|
||||
let header = {'X-Token': getToken() };
|
||||
const topic = '/user/queue/simulation/' + routegroup + '/jl3d';
|
||||
const header = {'X-Token': getToken() };
|
||||
|
||||
socketon(topic);
|
||||
|
||||
@ -20,7 +20,7 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
console.error('websocket订阅失败');
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
this.socketoff = function(topic) {
|
||||
scope.teststomp.unsubscribe(topic);
|
||||
@ -30,8 +30,8 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
function callback(Response) {
|
||||
const data = JSON.parse(Response.body);
|
||||
|
||||
if(data.type == "DeviceCtrl_3D"){
|
||||
if(data.body.type == "PSD"){
|
||||
if (data.type == 'DeviceCtrl_3D') {
|
||||
if (data.body.type == 'PSD') {
|
||||
if (data.body.code == passerStation.nowStation.toppsd) {
|
||||
if (data.body.command == 'G') {
|
||||
|
||||
@ -40,7 +40,7 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
deviceaction.top.action.timeScale = -1;
|
||||
deviceaction.top.action.play();
|
||||
} else {
|
||||
passerAi.passerout("top")
|
||||
passerAi.passerout('top');
|
||||
deviceaction.top.action.reset();
|
||||
deviceaction.top.action.time = 0;
|
||||
deviceaction.top.action.timeScale = 1;
|
||||
@ -54,7 +54,7 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
deviceaction.down.action.timeScale = -1;
|
||||
deviceaction.down.action.play();
|
||||
} else {
|
||||
passerAi.passerout("down");
|
||||
passerAi.passerout('down');
|
||||
deviceaction.down.action.reset();
|
||||
deviceaction.down.action.time = 0;
|
||||
deviceaction.down.action.timeScale = 1;
|
||||
@ -63,14 +63,14 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
|
||||
}
|
||||
}
|
||||
if(data.body.type == "TRAIN_DOOR"){
|
||||
if (data.body.type == 'TRAIN_DOOR') {
|
||||
if (toptrain.nowcode == data.body.trainCode) {
|
||||
|
||||
if (data.body.command == 'G') {
|
||||
closetraindoor(toptrain,data.body.code,"top");
|
||||
closetraindoor(toptrain, data.body.code, 'top');
|
||||
|
||||
} else {
|
||||
opentraindoor(toptrain,data.body.code,"top");
|
||||
opentraindoor(toptrain, data.body.code, 'top');
|
||||
|
||||
}
|
||||
|
||||
@ -78,10 +78,10 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
if (downtrain.nowcode == data.body.trainCode) {
|
||||
// console.log(data.body);
|
||||
if (data.body.command == 'G') {
|
||||
closetraindoor(downtrain,data.body.code,"down");
|
||||
closetraindoor(downtrain, data.body.code, 'down');
|
||||
|
||||
} else {
|
||||
opentraindoor(downtrain,data.body.code,"down");
|
||||
opentraindoor(downtrain, data.body.code, 'down');
|
||||
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
}
|
||||
}
|
||||
|
||||
if(data.type == "TrainRun_3D"){
|
||||
if (data.type == 'TrainRun_3D') {
|
||||
|
||||
for (let i = 0, leni = data.body.length; i < leni; i++) {
|
||||
if (data.body[i].section == passerStation.nowStation.topsection) {
|
||||
@ -120,29 +120,29 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
}
|
||||
}
|
||||
}
|
||||
if(data.type == 'Simulation_Over') {
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
// if(data.type == 'Simulation_Over') {
|
||||
// store.dispatch('LogOut').then(() => {
|
||||
// location.reload();
|
||||
// });
|
||||
// }
|
||||
}
|
||||
let actions;
|
||||
|
||||
function opentraindoor(train, doorcode, direct) {
|
||||
if(direct == "top"){
|
||||
if(doorcode == "1"){
|
||||
if (direct == 'top') {
|
||||
if (doorcode == '1') {
|
||||
actions = train.action.down;
|
||||
}
|
||||
|
||||
if(doorcode == "2"){
|
||||
if (doorcode == '2') {
|
||||
actions = train.action.top;
|
||||
}
|
||||
} else {
|
||||
if(doorcode == "1"){
|
||||
if (doorcode == '1') {
|
||||
actions = train.action.top;
|
||||
}
|
||||
|
||||
if(doorcode == "2"){
|
||||
if (doorcode == '2') {
|
||||
actions = train.action.down;
|
||||
}
|
||||
}
|
||||
@ -156,19 +156,19 @@ export function PassflowConnect(deviceaction,toptrain,downtrain,routegroup,passe
|
||||
}
|
||||
function closetraindoor(train, doorcode, direct) {
|
||||
|
||||
if(direct == "top"){
|
||||
if(doorcode == "1"){
|
||||
if (direct == 'top') {
|
||||
if (doorcode == '1') {
|
||||
actions = train.action.down;
|
||||
}
|
||||
if(doorcode == "2"){
|
||||
if (doorcode == '2') {
|
||||
actions = train.action.top;
|
||||
}
|
||||
toptrain.nowcode = null;
|
||||
} else {
|
||||
if(doorcode == "1"){
|
||||
if (doorcode == '1') {
|
||||
actions = train.action.top;
|
||||
}
|
||||
if(doorcode == "2"){
|
||||
if (doorcode == '2') {
|
||||
actions = train.action.down;
|
||||
}
|
||||
downtrain.nowcode = null;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import Vue from 'vue';
|
||||
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
|
||||
import { JL3D_LOCAL_STATIC,BASE_ASSET_API } from '@/api/jlmap3d/assets3d.js';
|
||||
// 模型loader
|
||||
import { AssetLoader } from '@/jlmap3d/jl3drailwaydrive/loader/AssetLoader.js';
|
||||
import {DDSLoader} from '@/jlmap3d/main/loaders/DDSLoader.js';
|
||||
@ -67,8 +67,9 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
|
||||
//let camera = SetCamera(dom);
|
||||
// 定义场景(渲染容器)
|
||||
let scene = SetScene(project);
|
||||
// https://joylink.club/oss/joylink
|
||||
scene.background = new THREE.CubeTextureLoader()
|
||||
.setPath( 'https://joylink.club/oss/joylink/PICTURE/2021-06-15/' )
|
||||
.setPath( BASE_ASSET_API + '/PICTURE/2021-06-15/' )
|
||||
.load( [ '18-75117.jpg', '17-78286.jpg', '19-62689.jpg', '15-95146.jpg', '16-99183.jpg', '14-94914.jpg' ] );
|
||||
|
||||
let meshCloud;
|
||||
|
@ -570,7 +570,6 @@ export function Jlmap3dSubscribeNew(jlmap3d,routegroup,jsonwebwork) {
|
||||
trainlisttest.list[code].position.y = 0;
|
||||
// trainlisttest.list[code].progress = 0;
|
||||
trainlisttest.list[code].dispose = "0";
|
||||
debugger
|
||||
trainlisttest.list[code].nowcode = data.body.deviceList[i].section;
|
||||
trainlisttest.list[code].nextcode = null;
|
||||
trainlisttest.list[code].curve = null;
|
||||
|
@ -51,6 +51,7 @@ class Jlmap {
|
||||
this.isUpdateShowTrainList = false;
|
||||
this.isUpdateRunLineTrain = false;
|
||||
this._disposeFlag = false;
|
||||
if (this.methods.initJlmap instanceof Function) { this.methods.initJlmap(); }
|
||||
}
|
||||
|
||||
// 初始化属性有鼠标事件 缩放等
|
||||
@ -119,7 +120,7 @@ class Jlmap {
|
||||
this.$options.scaleIndex = parseInt((scaling / 0.05).toFixed());
|
||||
this.$painter.updateTransform({ scaleRate: scaling, offsetX: origin ? origin.x : 0, offsetY: origin ? origin.y : 0 });
|
||||
}
|
||||
setMap(map, mapDevice, logicData) {
|
||||
setMap(map, mapDevice, logicData, repaint = true) {
|
||||
// 保存皮肤类型
|
||||
if (map.skinVO) {
|
||||
this.lineCode = map.skinVO.code;
|
||||
@ -143,7 +144,11 @@ class Jlmap {
|
||||
if (this.methods.dataLoaded instanceof Function) { this.methods.dataLoaded(this.mapDevice); }
|
||||
|
||||
// 初次渲染视图
|
||||
if (repaint) {
|
||||
this.$painter.repaint(this.mapDevice);
|
||||
} else {
|
||||
this.render(Object.values(this.mapDevice));
|
||||
}
|
||||
|
||||
// 视图加载完成 回调
|
||||
if (this.methods.viewLoaded instanceof Function) { this.methods.viewLoaded(this.mapDevice); }
|
||||
@ -427,7 +432,7 @@ class Jlmap {
|
||||
const type = elem._type;
|
||||
const oDevice = this.mapDevice[code] || deviceFactory(type, elem, this.showConfig);
|
||||
oDevice.showMode = showMode;
|
||||
oDevice.instance && oDevice.model && oDevice.instance.setState(oDevice.model);
|
||||
oDevice.instance && oDevice.instance.model && oDevice.instance.setState(oDevice.instance.model);
|
||||
});
|
||||
this.$painter.$transformHandle.revisibleAll();
|
||||
}
|
||||
|
@ -198,7 +198,6 @@ class MouseController extends Eventful {
|
||||
var newDevice = this.$jmap.getDeviceByCode(newEm.deviceCode) || {};
|
||||
var oldInstance = (this.$jmap.getDeviceByCode(oldEm.deviceCode) || {}).instance || {};
|
||||
var newInstance = (this.$jmap.getDeviceByCode(newEm.deviceCode) || {}).instance || {};
|
||||
|
||||
// 如果之前和当前选中的实例不一致
|
||||
if (oldInstance != newInstance) {
|
||||
// 如果实例有取消选择函数并且被点击,则执行取消选中函数
|
||||
@ -207,12 +206,20 @@ class MouseController extends Eventful {
|
||||
oldDevice.instance['__down'] = false;
|
||||
oldInstance.mouseEvent['mouseout'](e);
|
||||
}
|
||||
if (oldInstance._type === 'Train' && oldInstance.trainB && oldInstance.trainB.mouseEvent) {
|
||||
oldDevice.instance['__click'] = false;
|
||||
oldInstance.trainB.mouseEvent['cancelMouseClick'](e);
|
||||
}
|
||||
|
||||
// 如果实例有选中函数并且被点击,则执行选中函数
|
||||
if (e.which == 3 && newInstance.mouseEvent && newInstance.mouseEvent.mouseover) {
|
||||
newDevice.instance['__down'] = true;
|
||||
newInstance.mouseEvent['mouseover'](e);
|
||||
}
|
||||
if (e.which == 1 && newInstance.mouseEvent && newInstance.mouseEvent.mouseClick) {
|
||||
newDevice.instance['__click'] = true;
|
||||
newInstance.mouseEvent['mouseClick'](e);
|
||||
}
|
||||
}
|
||||
|
||||
// 保存当前实例到全局
|
||||
|
@ -17,10 +17,19 @@ export function parser(data, skinCode, showConfig) {
|
||||
var mapDevice = {};
|
||||
var propConvert = skinCode ? Vue.prototype.$theme.loadPropConvert(skinCode) : null;
|
||||
if (data) {
|
||||
const centralStationList = [];
|
||||
zrUtil.each(data.stationList || [], elem => {
|
||||
if (elem.centralized) {
|
||||
centralStationList.push(elem);
|
||||
}
|
||||
mapDevice[elem.code] = createDevice(deviceType.Station, elem, propConvert, showConfig);
|
||||
}, this);
|
||||
|
||||
zrUtil.each(centralStationList, elem => {
|
||||
mapDevice[elem.code].stationCode = elem.code;
|
||||
zrUtil.each(elem.chargeStationCodeList || [], item => {
|
||||
mapDevice[item].stationCode = elem.code;
|
||||
});
|
||||
});
|
||||
zrUtil.each(data.sectionList || [], elem => {
|
||||
mapDevice[elem.code] = createDevice(deviceType.Section, elem, propConvert, showConfig);
|
||||
elem = propConvert.initPrivateProps(elem);
|
||||
|
@ -105,7 +105,7 @@ export default class Line2 extends Group {
|
||||
this.segment && this.segment.hide();
|
||||
this.viceSegment && this.viceSegment.hide();
|
||||
} else {
|
||||
this.setLineType(model.type);
|
||||
model && this.setLineType(model.type);
|
||||
}
|
||||
}
|
||||
recover() {
|
||||
|
@ -84,7 +84,7 @@ class EHorizontal2Door extends Group {
|
||||
this.stand2.setStyle('fill', style.Psd.horizontal2Door.defaultColor);
|
||||
}
|
||||
}
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.stand1.setStyle('fill', '#7F7F7F');
|
||||
this.stand2.setStyle('fill', '#7F7F7F');
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ class ERect2Door extends Group {
|
||||
this.psd.setStyle('fill', style.Psd.rectDoor.defaultColor);
|
||||
}
|
||||
}
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.psd.setStyle('fill', '#7F7F7F');
|
||||
}
|
||||
}
|
||||
|
@ -578,7 +578,7 @@ export default class Section extends Group {
|
||||
// 区段延时解锁
|
||||
model.remain > 0 && this.delayUnlock();
|
||||
// 设置灰显
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.setAshShow();
|
||||
}
|
||||
// 设置脱轨器
|
||||
@ -618,6 +618,13 @@ export default class Section extends Group {
|
||||
|
||||
/** 计算提示位置*/
|
||||
getShapeTipPoint() {
|
||||
if (this.model.curve) {
|
||||
const rect = this.name.getBoundingRect();
|
||||
return {
|
||||
x: rect.x + rect.width / 2,
|
||||
y: rect.y + rect.height / 2.7
|
||||
};
|
||||
} else {
|
||||
const rect = this.getBoundingRect();
|
||||
const distance = this.style.Section.line.width / 2;
|
||||
return {
|
||||
@ -625,6 +632,7 @@ export default class Section extends Group {
|
||||
y: rect.y + rect.height / 2.7 - distance
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
getBoundingRect() {
|
||||
if (this.line && this.line.getBoundingRect()) {
|
||||
|
@ -1210,7 +1210,7 @@ class Signal extends Group {
|
||||
}
|
||||
this.model.virtual && this.sigBack && this.sigBack.show();
|
||||
// 设置灰显
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.setAshShow();
|
||||
}
|
||||
|
||||
@ -1218,7 +1218,7 @@ class Signal extends Group {
|
||||
if (this.style.Signal.text.conflictColor && model.checkConflict) {
|
||||
this.sigName.setColor(this.style.Signal.text.conflictColor);
|
||||
}
|
||||
if (store.state.training.prdType === '01') {
|
||||
if (store.state.map.picture === 'localWork') {
|
||||
this.lowButton && this.lowButton.show();
|
||||
}
|
||||
}
|
||||
|
@ -42,8 +42,8 @@ class EStationText extends Group {
|
||||
z: this.model.z,
|
||||
silent: !model.visible || false,
|
||||
style: {
|
||||
x: model.subheadPosition.x,
|
||||
y: model.subheadPosition.y,
|
||||
x: model.computedSubheadTextPosition.x,
|
||||
y: model.computedSubheadTextPosition.y,
|
||||
fontWeight: model.fontWeight,
|
||||
fontSize: model.subheadFont || 18,
|
||||
fontFamily: style.fontFamily,
|
||||
|
@ -34,10 +34,12 @@ export default class Station extends Group {
|
||||
this.computedPosition = pictureDevice.position;
|
||||
this.computedTurnBackPoint = { x: model.turnBackPoint ? model.turnBackPoint.x + offsetX : 0, y: model.turnBackPoint ? model.turnBackPoint.y + offsetY : 0 };
|
||||
this.computedControlModePoint = { x: model.controlModePoint.x + offsetX, y: model.controlModePoint.y + offsetY };
|
||||
this.computedSubheadTextPosition = { x: model.subheadPosition ? model.subheadPosition.x + offsetX : 0, y: model.subheadPosition ? model.subheadPosition.y + offsetY : 0 };
|
||||
} else {
|
||||
this.computedPosition = model.position;
|
||||
this.computedTurnBackPoint = model.turnBackPoint;
|
||||
this.computedControlModePoint = model.controlModePoint;
|
||||
this.computedSubheadTextPosition = model.subheadPosition;
|
||||
}
|
||||
this.z = 40;
|
||||
this.model = model;
|
||||
@ -59,6 +61,7 @@ export default class Station extends Group {
|
||||
'stationText': EStationText // 车站名称 (普通站台样式)
|
||||
};
|
||||
model.computedPosition = this.computedPosition;
|
||||
model.computedSubheadTextPosition = this.computedSubheadTextPosition;
|
||||
// 遍历当前线路下的绘图元素 组合模式
|
||||
traverseLineElements(style.Station, elementTypeList, model, style, this);
|
||||
|
||||
|
@ -55,7 +55,7 @@ class ETrainSetButton extends Group {
|
||||
}
|
||||
|
||||
setState(model) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.setColor('#7F7F7F');
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ class StationStand extends Group {
|
||||
this.downDetainLamp && this.downDetainLamp.hide();
|
||||
}
|
||||
setScreenDoorOpenStatus(model) {
|
||||
if (!this.model.noStatus && !(this.model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (!this.model.noStatus && !(this.model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.gapStand && this.gapStand.setState(model);
|
||||
}
|
||||
}
|
||||
@ -183,7 +183,7 @@ class StationStand extends Group {
|
||||
currentTypeList.forEach(element => {
|
||||
this[element].setState(model);
|
||||
});
|
||||
if (store.state.training.prdType === '01') {
|
||||
if (store.state.map.picture === 'localWork') {
|
||||
this.stopJumpLamp && this.stopJumpLamp.show();
|
||||
this.cancelStopJumpLamp && this.cancelStopJumpLamp.show();
|
||||
this.upDetainLamp && this.upDetainLamp.show();
|
||||
|
@ -110,7 +110,7 @@ class EGapStand extends Group {
|
||||
this.setClose();
|
||||
}
|
||||
}
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === '02')) {
|
||||
this.setColor('#7F7F7F');
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import store from '@/store/index';
|
||||
import Group from 'zrender/src/container/Group';
|
||||
import Rect from 'zrender/src/graphic/shape/Rect';
|
||||
import Text from 'zrender/src/graphic/Text';
|
||||
@ -52,16 +53,19 @@ class ESolidStand extends Group {
|
||||
this.holdTrain.hide();
|
||||
}
|
||||
|
||||
const path = window.location.href;
|
||||
if (path.includes('/practiceDisplay')) {
|
||||
// const path = window.location.href;
|
||||
// const search = window.location.search;
|
||||
// if (path.includes('/display/demon') && search.includes('project=bjd')) {
|
||||
if (store.state.map.picture == 'largePassengerView') {
|
||||
// 文字描述
|
||||
const modelNum = model.num ? model.num : 0;
|
||||
this.arrowText = new Text({
|
||||
zlevel: this.model.zlevel,
|
||||
z: this.model.z + 10,
|
||||
style: {
|
||||
x: computedPosition.x + 35,
|
||||
y: computedPosition.y - 20,
|
||||
text: `${'站台人数: ' + model.num ? model.num : 0}`,
|
||||
text: '站台人数: ' + modelNum,
|
||||
textFill: '#000',
|
||||
textAlign: 'left',
|
||||
textFont: 12 + 'px consolas',
|
||||
@ -69,6 +73,7 @@ class ESolidStand extends Group {
|
||||
textBackgroundColor: style.tipBackgroundColor
|
||||
}
|
||||
});
|
||||
console.log('站台人数: ', modelNum);
|
||||
this.add(this.arrowText);
|
||||
this.arrowText.hide();
|
||||
this.on('mouseover', () => {
|
||||
@ -123,8 +128,10 @@ class ESolidStand extends Group {
|
||||
|
||||
setState(model) {
|
||||
const style = this.model.style;
|
||||
const path = window.location.href;
|
||||
if (!path.includes('/practiceDisplay')) {
|
||||
// const path = window.location.href;
|
||||
// const search = window.location.search;
|
||||
// if (!(path.includes('/display/demon') && search.includes('project=bjd'))) {
|
||||
if (store.state.map.picture != 'largePassengerView') {
|
||||
// 列车跳停
|
||||
model.assignSkip && this.setColor(style.StationStand.solidStand.designatedJumpStopColor);
|
||||
// 全部跳停
|
||||
|
@ -69,7 +69,7 @@ class ESwLnversion extends Group {
|
||||
|
||||
animateStyle(cb) {
|
||||
this.eachChild((child) => {
|
||||
cb(child);
|
||||
child && cb(child);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -877,7 +877,7 @@ export default class Switch extends Group {
|
||||
const sectionC = this.mapDevice[switchModel.sectionCCode];
|
||||
sectionC && sectionC.instance && sectionC.instance.handleSwitchSection(sectionC);
|
||||
}
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.training.prdType == '02')) {
|
||||
if (model.noStatus || (model.atsNoStatus && store.state.map.picture === 'dispatchWork')) {
|
||||
this.setAshShow();
|
||||
}
|
||||
!model.auto && this.artificialArc && this.artificialArc.show();
|
||||
|
@ -3,6 +3,7 @@ import Text from 'zrender/src/graphic/Text';
|
||||
import LangStorage from '@/utils/lang';
|
||||
import Rect from 'zrender/src/graphic/shape/Rect';
|
||||
import store from '@/store/index';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
|
||||
class EMouse extends Group {
|
||||
constructor(device) {
|
||||
@ -103,9 +104,10 @@ class EMouse extends Group {
|
||||
RM: 'IL'
|
||||
};
|
||||
// \nNumber of people: ${this.device.model.num ? this.device.model.num : 0}
|
||||
const path = window.location.href;
|
||||
const stationNames = new Map(store.state.map.map.stationList.map(s=>[s.code, s.name]));
|
||||
if (!path.includes('/practiceDisplay')) {
|
||||
if (getSessionStorage('project') === 'yjddzh') {
|
||||
text = `列车号:${this.device.model.groupNumber}\n位置:${this.device.model.locationKM}\n速度:${this.device.model.speed || 0} km/h\n方向:${this.device.model.right == 1 ? '下行' : '上行'}`;
|
||||
} else if (store.state.map.picture != 'largePassengerView') {
|
||||
if (LangStorage.getLang() == 'en') {
|
||||
text = ` The planned train: ${trainType} \n Table No.: ${this.device.model.serviceNumber} \n Train Trip No.: ${this.device.model.tripNumber}\n Destination: ${this.device.model.destinationCode ? this.device.model.destinationCode : ''}\n Train No.: ${this.device.model.groupNumber}\n Early or late: ${destinationText}\n Direction: ${direction ? 'up' : 'down'}\n Crew No.: \n Start Station: \n Terminal Station: \n Occupied Track: ${this.device.model.sectionModel ? (this.device.model.sectionModel.parentName ? this.device.model.sectionModel.parentName : this.device.model.sectionModel.name) : ''}\n Current Station: \n Train-ground communication: normal \n Operation Speed level: 4 \n Detained: ${this.device.model.hold ? 'Detained' : 'Normal'}\n \n 跳停状态: ${this.device.model.jump ? 'Skip to continue moving' : 'Normal'}Stationary: ${!this.device.model.stop ? 'No' : 'Yes'}\n Blocked: No \n Speed: ${this.device.model.speed || 0} km/h \n Authorized Distance: ${this.device.model.maLen || 0} m`;
|
||||
} else {
|
||||
@ -116,11 +118,11 @@ class EMouse extends Group {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
text = `${'车内人数: ' + this.device.model.num}`;
|
||||
text = `${'车内人数: ' + this.device.model.num || 0}`;
|
||||
}
|
||||
|
||||
const trainTip = this.device.style.Train.common.trainTip;
|
||||
if (trainTip) {
|
||||
if (trainTip || getSessionStorage('project') === 'yjddzh') {
|
||||
// 文字描述
|
||||
this.arrowText = new Text({
|
||||
zlevel: this.device.model.zlevel,
|
||||
@ -137,7 +139,8 @@ class EMouse extends Group {
|
||||
}
|
||||
});
|
||||
|
||||
if (path.includes('/practiceDisplay')) {
|
||||
// if (path.includes('/display/demon') && search.includes('project=bjd')) {
|
||||
if (store.state.map.picture == 'largePassengerView') {
|
||||
this.arrowText.setStyle('textFont', 12 + 'px consolas');
|
||||
this.arrowText.setStyle('y', this.device.model.point.y + 15);
|
||||
this.arrowText.setStyle('x', this.device.model.point.x + 55);
|
||||
@ -210,7 +213,43 @@ class EMouse extends Group {
|
||||
this.trainBorder.show();
|
||||
}
|
||||
}
|
||||
|
||||
mouseClick() {
|
||||
if (getSessionStorage('project') === 'yjddzh') {
|
||||
const scaleRate = parseFloat(this.device.model.model.zrOptions.scaleRate);
|
||||
const zrRect = {
|
||||
x: this.device.model.model.zrOptions.offsetX / scaleRate,
|
||||
y: this.device.model.model.zrOptions.offsetY / scaleRate,
|
||||
width: store.state.config.width / scaleRate,
|
||||
height: store.state.config.height / scaleRate
|
||||
};
|
||||
this.device.deviceModel.__click = true;
|
||||
const arrowTextRect = this.arrowText.getBoundingRect();
|
||||
const zrRectX = zrRect.x + zrRect.width;
|
||||
const zrRectY = zrRect.y + zrRect.height;
|
||||
const arrowTextRectX = arrowTextRect.x + arrowTextRect.width;
|
||||
const arrowTextRectY = arrowTextRect.y + arrowTextRect.height;
|
||||
if (arrowTextRectX > zrRectX || arrowTextRectY > zrRectY) {
|
||||
const offsetX = arrowTextRectX > zrRectX ? arrowTextRectX - zrRectX : 0;
|
||||
const offsetY = arrowTextRectY > zrRectY ? arrowTextRectY - zrRectY : 0;
|
||||
this.arrowText.setStyle({ x: this.device.model.point.x + 50 - offsetX, y: this.device.model.point.y + 25 - offsetY });
|
||||
}
|
||||
this.arrowText.show();
|
||||
if (this.device.style.Train.mouseOverStyle) {
|
||||
this.device.deviceModel.__click = true;
|
||||
this.trainBorder.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
cancelMouseClick() {
|
||||
if (this.device.deviceModel.__click) {
|
||||
this.arrowText.hide();
|
||||
this.device.deviceModel.__click = false;
|
||||
}
|
||||
if (this.device.style.Train.mouseOverStyle && this.device.deviceModel.__click) {
|
||||
this.trainBorder.hide();
|
||||
this.device.deviceModel.__click = false;
|
||||
}
|
||||
}
|
||||
mouseout() {
|
||||
if (this.device.model.style.Train.common.trainTip && this.device.deviceModel.__down) {
|
||||
this.arrowText.hide();
|
||||
@ -221,6 +260,11 @@ class EMouse extends Group {
|
||||
this.device.deviceModel.__down = false;
|
||||
}
|
||||
}
|
||||
updateTextPosition(point) {
|
||||
if (getSessionStorage('project') === 'yjddzh') {
|
||||
this.arrowText.setStyle({ x: point.x, y: point.y + 20 });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
export default EMouse;
|
||||
|
@ -27,6 +27,9 @@ export default class TrainBody extends Group {
|
||||
store.dispatch('map/setTrainDetails', this.deviceModel);
|
||||
this.mouseEvent.mouseover();
|
||||
}
|
||||
if (this.deviceModel.__click) {
|
||||
this.mouseEvent.mouseClick();
|
||||
}
|
||||
this.on('mouseover', () => {
|
||||
store.dispatch('map/setTrainDetails', this.deviceModel);
|
||||
this.mouseEvent.mouseover();
|
||||
@ -35,6 +38,9 @@ export default class TrainBody extends Group {
|
||||
store.dispatch('map/setTrainDetails', null);
|
||||
this.mouseEvent.mouseout();
|
||||
});
|
||||
this.on('click', () => {
|
||||
this.mouseEvent.mouseClick();
|
||||
});
|
||||
}
|
||||
|
||||
create() {
|
||||
@ -527,7 +533,7 @@ export default class TrainBody extends Group {
|
||||
this.textTrainTrip.dirty();
|
||||
}
|
||||
if (this.textTrainGroup) {
|
||||
if (store.state.training.prdType === '10') {
|
||||
if (store.state.map.picture === 'emergency') {
|
||||
widthText = 0;
|
||||
}
|
||||
this.textTrainGroup.attr({
|
||||
@ -548,4 +554,7 @@ export default class TrainBody extends Group {
|
||||
untrainBodyFault() {
|
||||
this.trainBodyBox && this.trainBodyBox.untrainBodyFault();
|
||||
}
|
||||
updateTextPosition(point) {
|
||||
this.mouseEvent.updateTextPosition(point);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ export default class Train extends Group {
|
||||
this.fontSize = model.nameFontSize || style.Train.common.trainTextFontSize;
|
||||
this.newScale = this.fontSize / style.Train.common.trainTextFontSize;
|
||||
this.nameFormat = model.nameFormat || style.Train.trainBody.trainNameFormat;
|
||||
if (store.state.training.prdType === '10') {
|
||||
if (store.state.map.picture === 'emergency') {
|
||||
this.nameFormat = 'groupNumber';
|
||||
} else if (style.Train.trainBody.specialTrainType.length > 0) {
|
||||
style.Train.trainBody.specialTrainType.some((item) => {
|
||||
@ -40,7 +40,7 @@ export default class Train extends Group {
|
||||
_computed() {
|
||||
const model = this.model;
|
||||
const style = this.style;
|
||||
if (model.trainWindowModel) {
|
||||
if (model.trainWindowModel && model.trainWindowModel.instance) {
|
||||
const amendData = store.getters['map/amendPoints'](model.trainWindowModel.code);
|
||||
if (amendData) {
|
||||
model.trainWindowModel.instance.computedPoint = amendData.position;
|
||||
@ -101,6 +101,7 @@ export default class Train extends Group {
|
||||
stationCode: model.stationCode,
|
||||
runLevel: model.runLevel,
|
||||
preselectionMode: model.preselectionMode,
|
||||
locationKM: model.locationKM,
|
||||
model: model
|
||||
});
|
||||
const rect = this.trainB.getBoundingRectOfFont().clone();
|
||||
@ -212,6 +213,7 @@ export default class Train extends Group {
|
||||
});
|
||||
const point = { x: this.startX, y: this.startY };
|
||||
this.triangle.point = point;
|
||||
this.trainB.updateTextPosition(point);
|
||||
this.triangle.updateTriangle(point, train.right, this.trainB);
|
||||
this.triangle.dirty();
|
||||
}
|
||||
@ -389,8 +391,10 @@ export default class Train extends Group {
|
||||
// this.setDriveMode(model.driveMode);
|
||||
// }
|
||||
this.setRunStatus(model.stop, flag);
|
||||
const path = window.location.href;
|
||||
if (!path.includes('/practiceDisplay')) {
|
||||
// const path = window.location.href;
|
||||
// const search = window.location.search;
|
||||
// if (!(path.includes('/display/demon') && search.includes('project=bjd'))) {
|
||||
if (store.state.map.picture != 'largePassengerView') {
|
||||
if (this.style.Train.common.trainHeadColorChangeMode) {
|
||||
this.setDriveMode(model.driveMode + model.runLevel);
|
||||
} else {
|
||||
@ -413,7 +417,8 @@ export default class Train extends Group {
|
||||
if (style.Section.trainPosition.display) {
|
||||
this.updateSection(object);
|
||||
}
|
||||
if (path.includes('/practiceDisplay')) {
|
||||
// if (path.includes('/display/demon') && search.includes('project=bjd')) {
|
||||
if (store.state.map.picture == 'largePassengerView') {
|
||||
this.handlePassagerColor(model.num);
|
||||
}
|
||||
if (style.Train.trainBody.trainBodyFaultFlashColor) {
|
||||
|
@ -4,34 +4,25 @@ export default class EMouse {
|
||||
}
|
||||
|
||||
mouseover(e) {
|
||||
if (this.device.prdType) {
|
||||
this.device.setVisible(true);
|
||||
const instance = this.device.getInstanceByCode(this.device.model.sectionCode);
|
||||
if (instance && instance.mouseEvent && instance.mouseEvent.mouseover) {
|
||||
instance.mouseEvent.mouseEnter(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mouseout(e) {
|
||||
if (this.device.prdType) {
|
||||
this.device.setVisible(false);
|
||||
const instance = this.device.getInstanceByCode(this.device.model.sectionCode);
|
||||
if (instance && instance.mouseEvent && instance.mouseEvent.mouseout) {
|
||||
instance.mouseEvent.mouseLeave(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mouseEnter() {
|
||||
// if (this.device.prdType) {
|
||||
// this.device.setVisible(true);
|
||||
// }
|
||||
}
|
||||
|
||||
mouseLeave() {
|
||||
if (this.device.prdType ) {
|
||||
this.device.setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,13 +23,12 @@ class TrainWindow extends Group {
|
||||
this.model = model;
|
||||
this.style = style;
|
||||
this.z = 9;
|
||||
this.prdType = store.state.training.prdType;
|
||||
this.create();
|
||||
this.createMouseEvent();
|
||||
this.setState(model);
|
||||
}
|
||||
create() {
|
||||
if (this.prdType !== '01') {
|
||||
if (store.state.map.picture !== 'localWork') {
|
||||
this.createTrainWindow();
|
||||
}
|
||||
}
|
||||
@ -79,11 +78,9 @@ class TrainWindow extends Group {
|
||||
}
|
||||
|
||||
setState(model) {
|
||||
// if (!this.isShowShape) return;
|
||||
if (this.model.showMode == '01' || !this.style.TrainWindow.show) {
|
||||
const path = window.location.href;
|
||||
if (!path.includes('lineDesign') && (this.model.showMode == '01' || !this.style.TrainWindow.show)) {
|
||||
this.eachChild(item => { item.hide(); });
|
||||
// } else if (!store.getters['map/checkDeviceShow'](this._code)) {
|
||||
// this.trainRect && this.trainRect.hide();
|
||||
} else if (model._tro) {
|
||||
this.trainRect && this.trainRect.hide();
|
||||
} else {
|
||||
|
@ -318,7 +318,7 @@ export default {
|
||||
operate.operation = OperationEvent.Switch.alxeEffective.confirm1.operation;
|
||||
}
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.type = 'password';
|
||||
@ -346,7 +346,7 @@ export default {
|
||||
operate.operation = OperationEvent.Switch.alxeEffective.choose1.operation;
|
||||
}
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
});
|
||||
},
|
||||
@ -369,7 +369,7 @@ export default {
|
||||
operate.operation = OperationEvent.Switch.alxeEffective.choose2.operation;
|
||||
}
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
});
|
||||
},
|
||||
@ -393,7 +393,7 @@ export default {
|
||||
this.stepNum = 3;
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.type = 'text';
|
||||
@ -422,7 +422,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -126,7 +126,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ export default {
|
||||
type: this.operate.type,
|
||||
operation: OperationEvent.Command.close.password.operation
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
|
@ -75,7 +75,7 @@ export default {
|
||||
operation: OperationEvent.Command.close.alarm.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.doClose();
|
||||
|
@ -210,7 +210,7 @@ export default {
|
||||
val: row.code
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -237,7 +237,7 @@ export default {
|
||||
const operate = {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -153,7 +153,7 @@ export default {
|
||||
};
|
||||
this.strategy = row.value;
|
||||
this.isConfirm = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -204,7 +204,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -255,7 +255,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -256,7 +256,7 @@ export default {
|
||||
|
||||
this.setMessage('请点击“确认1”按钮,确认命令!');
|
||||
this.writeRecord({ order: ++this.order, date: now(), context: '点击下达命令', result: '' });
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.setButtonEnable({ step: 1 });
|
||||
@ -283,7 +283,7 @@ export default {
|
||||
|
||||
this.setMessage('请点击“确认2”按钮,确认命令!');
|
||||
this.writeRecord({ order: ++this.order, date: now(), context: '点击确认1', result: '' });
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.timeCountCommand = -1;
|
||||
@ -313,7 +313,7 @@ export default {
|
||||
|
||||
this.setMessage('');
|
||||
this.writeRecord({ order: ++this.order, date: now(), context: '点击确认2', result: '' });
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.timeCountCommand = -1;
|
||||
this.timeCountConfirm = -1;
|
||||
this.setButtonEnable({ step: -1 });
|
||||
@ -344,7 +344,7 @@ export default {
|
||||
}
|
||||
|
||||
this.writeRecord({ order: ++this.order, date: now(), context: '点击终止', result: '' });
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.setButtonEnable({ step: 0 });
|
||||
@ -362,7 +362,7 @@ export default {
|
||||
operation: OperationEvent.Command.close.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -105,7 +105,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -124,7 +124,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ export default {
|
||||
val: this.addModel.tripNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ export default {
|
||||
val: this.addModel.groupNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -134,7 +134,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -155,7 +155,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -145,7 +145,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ export default {
|
||||
val: this.addModel.groupNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -132,7 +132,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ export default {
|
||||
val: this.addModel.groupNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ export default {
|
||||
val: this.addModel.groupNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -153,7 +153,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ export default {
|
||||
val: this.addModel.tripNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -118,7 +118,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -135,7 +135,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ export default {
|
||||
val: this.addModel.tripNumber
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -120,7 +120,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -137,7 +137,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
370
src/jmapNew/theme/beijing_01/menus/dispatchWorkMenu.vue
Normal file
370
src/jmapNew/theme/beijing_01/menus/dispatchWorkMenu.vue
Normal file
@ -0,0 +1,370 @@
|
||||
<template>
|
||||
<div class="menus" :style="{width: width + 'px'}">
|
||||
<menu-bar ref="menuBar" :selected="selected" />
|
||||
<menu-station-stand ref="menuStationStand" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-switch ref="menuSwitch" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-signal ref="menuSignal" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-section ref="menuSection" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-train ref="menuTrain" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-station ref="menuStation" :selected="selected" :work="'dispatchWork'" />
|
||||
<menu-limit ref="menuLimit" :selected="selected" :work="'dispatchWork'" />
|
||||
<passive-alarm ref="passiveAlarm" />
|
||||
<passive-contorl ref="passiveControl" pop-class="beijing-01__systerm" />
|
||||
<passive-timeout ref="passiveTimeout" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import MenuSignal from './menuSignal';
|
||||
import MenuStationStand from './menuStationStand';
|
||||
import MenuSwitch from './menuSwitch';
|
||||
import MenuSection from './menuSection';
|
||||
import MenuTrain from './menuTrain';
|
||||
import MenuStation from './menuStation';
|
||||
import MenuBar from './dispatchWorkMenuBar';
|
||||
import MenuLimit from './menuLimit';
|
||||
import PassiveAlarm from './passiveDialog/alarm';
|
||||
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
|
||||
import PassiveTimeout from './passiveDialog/timeout';
|
||||
|
||||
export default {
|
||||
name: 'DispatchWorkMenus',
|
||||
components: {
|
||||
MenuBar,
|
||||
MenuSignal,
|
||||
MenuSwitch,
|
||||
MenuSection,
|
||||
MenuStationStand,
|
||||
MenuStation,
|
||||
MenuTrain,
|
||||
MenuLimit,
|
||||
PassiveAlarm,
|
||||
PassiveContorl,
|
||||
PassiveTimeout
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
type: Object,
|
||||
default() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters('config', [
|
||||
'width'
|
||||
])
|
||||
},
|
||||
watch: {},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.$store.dispatch('config/updateMenuBar');
|
||||
this.$refs['menuSignal'].setRouteSignal();
|
||||
});
|
||||
this.$root.$on('dialogOpen', e => {
|
||||
if (this.selected == e &&
|
||||
this.selected &&
|
||||
this.selected.instance &&
|
||||
this.selected.instance.mouseEvent) {
|
||||
this.selected.instance.mouseEvent.mouseover();
|
||||
}
|
||||
});
|
||||
|
||||
this.$root.$on('dialogClose', e => {
|
||||
if (this.selected == e &&
|
||||
this.selected &&
|
||||
this.selected.instance &&
|
||||
this.selected.instance.mouseEvent) {
|
||||
this.selected.instance.__down = false;
|
||||
this.selected.instance.mouseEvent.mouseout();
|
||||
this.$jlmap.clearEvent();
|
||||
}
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.$root.$off('dialogOpen');
|
||||
this.$root.$off('dialogClose');
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.menus .pop-menu {
|
||||
background: #F0F0F0;
|
||||
}
|
||||
|
||||
.menus .pop-menu span {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.menus .pop-menu .is-disabled span {
|
||||
color: #B4B3B8;
|
||||
}
|
||||
|
||||
.beijing-01__systerm {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog {
|
||||
background: rgba(100, 100, 100, 0.3);
|
||||
border: 2px solid rgb(144, 144, 144, 0.8);
|
||||
border-radius: 6px;
|
||||
color: #000;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__header {
|
||||
padding: 10px;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__footer {
|
||||
background: #F0F0F0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__body {
|
||||
padding: 10px;
|
||||
margin: 5px;
|
||||
border: 2px solid rgba(120, 121, 123, 0.5);
|
||||
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
|
||||
background: #F0F0F0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__title {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
color: #000;
|
||||
border-radius: 4px;
|
||||
padding: 0px 2px;
|
||||
height: 20px;
|
||||
line-height: 20px
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__title::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
filter: blur(7px);
|
||||
height: 20px;
|
||||
width: -webkit-fill-available;
|
||||
background: rgba(190, 190, 190, 0.8);
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn {
|
||||
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
|
||||
border: 1px solid #fff;
|
||||
border-radius: 4px;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding: 0px;
|
||||
width: 80px;
|
||||
border: 2px outset #E2E2E2;
|
||||
border-radius: 0px !important;
|
||||
color: #000;
|
||||
background: #F0F0F0;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .expand {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:focus span {
|
||||
border: 1px dashed gray;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:active {
|
||||
border: 2px inset #E2E2E2;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:disabled {
|
||||
border: 2px inset #E2E2E2;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:disabled span {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input {
|
||||
border: 2px inset #E9E9E9;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input .el-input__inner {
|
||||
color: #000;
|
||||
background: #fff !important;
|
||||
border: 0px;
|
||||
border-radius: 0px !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input.is-disabled .el-input__inner {
|
||||
background: #F0F0F0 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea {
|
||||
border: 2px inset #E9E9E9;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea .el-textarea__inner {
|
||||
color: #000;
|
||||
background: #fff !important;
|
||||
border: 0px;
|
||||
border-radius: 0px !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
|
||||
background: #F0F0F0 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table--border th.gutter {
|
||||
background: #EBEADB !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table {
|
||||
border: 2px inset #E9E9E9;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table .cell {
|
||||
line-height: unset !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table th.is-leaf {
|
||||
background: #F0F0F0 !important;
|
||||
border-right: 1px solid #BDBDBD !important;
|
||||
border-bottom: 1px solid #BDBDBD !important;
|
||||
color: #000 !important;
|
||||
height: 20px !important;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table tr td {
|
||||
height: 20px !important;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table .el-table__empty-text {
|
||||
top: 15px !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .current-row>td {
|
||||
background: #3399FF !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__inner {
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__label {
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
|
||||
background: #E6E6E6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
|
||||
color: #C5C9CC !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
|
||||
background: #fff !important;
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
|
||||
position: absolute;
|
||||
-webkit-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
content: "";
|
||||
border: 1px solid #000;
|
||||
border-left: 0;
|
||||
border-top: 0;
|
||||
height: 7px;
|
||||
left: 4px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__inner {
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__label {
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
|
||||
background: #fff !important;
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
border-radius: 100%;
|
||||
background-color: #000 !important;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
|
||||
background: #E6E6E6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
|
||||
color: #C5C9CC !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .base-label {
|
||||
background: rgba(0, 0, 0, x);
|
||||
position: relative;
|
||||
left: -15px;
|
||||
top: -18px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-form-item label {
|
||||
font-weight: normal !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .context {
|
||||
height: 100px;
|
||||
border: 2px inset #E2E2E2;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .table {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .notice {
|
||||
margin-left: 62px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .button-group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
849
src/jmapNew/theme/beijing_01/menus/dispatchWorkMenuBar.vue
Normal file
849
src/jmapNew/theme/beijing_01/menus/dispatchWorkMenuBar.vue
Normal file
@ -0,0 +1,849 @@
|
||||
<template>
|
||||
<div id="menuBar">
|
||||
<div class="nav">
|
||||
<template v-for="(item,i) in menu">
|
||||
<template v-if="noShowingChildren(item.children)">
|
||||
<li :id="getDomId(item)" :key="i" class="nav-li" @click="hookClick(item)">
|
||||
<span class="nav-li-text">{{ item.title }}</span>
|
||||
</li>
|
||||
</template>
|
||||
<template v-else>
|
||||
<li
|
||||
v-if="handleShow(item)"
|
||||
:id="getDomId(item)"
|
||||
:key="i"
|
||||
class="nav-li"
|
||||
@click.stop="selectedClassA(item, i)"
|
||||
>
|
||||
<span class="nav-li-text">{{ item.title }}</span>
|
||||
<ul class="nav-ul" :class="{'active' :i==classA}">
|
||||
<template v-for="(child,j) in item.children">
|
||||
<template v-if="child.children && child.children.length > 0">
|
||||
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else
|
||||
:id="getDomId(child)"
|
||||
:key="j"
|
||||
class="menu-li"
|
||||
@click.stop="selectedClassB(child, j)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ child.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
<ul class="menu-ul" :class="{'active' :j==classB}">
|
||||
<template v-for="(grandchild,k) in child.children">
|
||||
<li v-if="grandchild.type === 'separator'" :key="k" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else-if="grandchild.show"
|
||||
:id="getDomId(grandchild)"
|
||||
:key="k"
|
||||
class="menu-li"
|
||||
@click.stop="hookClick(grandchild)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ grandchild.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
</ul>
|
||||
</li>
|
||||
</template>
|
||||
<template v-else>
|
||||
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else-if="child.show"
|
||||
:id="getDomId(child)"
|
||||
:key="j"
|
||||
class="menu-li"
|
||||
@click.stop="hookClick(child)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ child.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
</template>
|
||||
</ul>
|
||||
</li>
|
||||
</template>
|
||||
</template>
|
||||
</div>
|
||||
<station-control ref="stationControl" />
|
||||
<detain-train-contorl ref="detainTrainContorl" />
|
||||
<detain-train-contorl-up-down ref="detainTrainContorlUpDown" />
|
||||
<notice-info ref="noticeInfo" pop-class="beijing-01__systerm" />
|
||||
<train-add ref="trainAdd" />
|
||||
<train-transtalet ref="trainTranstalet" />
|
||||
<train-delete ref="trainDelete" />
|
||||
<manage-user ref="manageUser" />
|
||||
<help-about ref="helpAbout" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import { TrainingMode } from '@/scripts/ConstDic';
|
||||
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
|
||||
import StationControl from './menuDialog/stationControl';
|
||||
import DetainTrainContorl from './menuDialog/detainTrainContorl';
|
||||
import DetainTrainContorlUpDown from './menuDialog/detainTrainContorlUpDown';
|
||||
import TrainAdd from './menuDialog/trainAdd';
|
||||
import TrainTranstalet from './menuDialog/trainTranstalet';
|
||||
import TrainDelete from './menuDialog/trainDelete';
|
||||
import ManageUser from './menuDialog/manageUser';
|
||||
import HelpAbout from './menuDialog/helpAbout';
|
||||
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
|
||||
import { EventBus } from '@/scripts/event-bus';
|
||||
|
||||
export default {
|
||||
name: 'MenuBar',
|
||||
components: {
|
||||
NoticeInfo,
|
||||
StationControl,
|
||||
DetainTrainContorl,
|
||||
DetainTrainContorlUpDown,
|
||||
TrainAdd,
|
||||
TrainTranstalet,
|
||||
TrainDelete,
|
||||
ManageUser,
|
||||
HelpAbout
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
type: Object,
|
||||
default() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
classA: -1,
|
||||
classB: -1,
|
||||
tempClassA: -1,
|
||||
tempClassB: -1,
|
||||
valid: true,
|
||||
menu: [
|
||||
{
|
||||
title: '系统',
|
||||
operate: OperationEvent.Command.mBar.system,
|
||||
children: [
|
||||
{
|
||||
title: '登录',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '注销',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '站遥控',
|
||||
operate: OperationEvent.MixinCommand.remoteControl.mbar,
|
||||
click: this.stationRemoteControl,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '区域选择',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '连接主用中心',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '连接备用中心',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '退出',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '查看',
|
||||
operate: OperationEvent.Command.mBar.check,
|
||||
children: [
|
||||
{
|
||||
title: '运行图',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '报告分析',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '视图',
|
||||
click: this.undeveloped,
|
||||
operate: '',
|
||||
children: [{
|
||||
title: '报警',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '列车运行信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '设备状态',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '列车详细信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '站台详细信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
title: '终端站发车列表',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '详细设备状态',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '查找列车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '显示目的地号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示轨道名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示道岔名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示信号机名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示车次窗位置',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '显示车次号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示车组号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '全屏',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '放大',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '缩小',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '恢复',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '车站定位',
|
||||
operate: '',
|
||||
children: [
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'ATS终端操作',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '当天运行车计划',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '出入库预告',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '计划车操作',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '添加计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '平移计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '删除计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '批处理命令',
|
||||
operate: OperationEvent.Command.mBar.detainControl,
|
||||
children: [
|
||||
{
|
||||
title: '全线扣车',
|
||||
operate: OperationEvent.StationStand.setDetainTrainAll.mbar,
|
||||
click: this.setDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelDetainTrainAll.mbar,
|
||||
click: this.cancelDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消上行全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelUpDetainTrainAll.mbar,
|
||||
click: this.cancelUpDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消下行全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelDownDetainTrainAll.mbar,
|
||||
click: this.cancelDownDetainTrainAll,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '信息管理',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '调度日志',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '调度留言提醒',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '报警设置',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '帮助',
|
||||
children: [
|
||||
{
|
||||
title: '关于ITS GPC 工作站',
|
||||
click: this.about,
|
||||
operate: OperationEvent.Command.help.about,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters('training', [
|
||||
'mode',
|
||||
'started',
|
||||
'steps',
|
||||
'order',
|
||||
'mode'
|
||||
]),
|
||||
...mapGetters('map', [
|
||||
'stationList'
|
||||
])
|
||||
},
|
||||
watch: {
|
||||
tempClassA() {
|
||||
this.classA = this.$store.state.menuOperation.break ? -1 : this.tempClassA;
|
||||
},
|
||||
tempClassB() {
|
||||
this.classB = this.$store.state.menuOperation.break ? -1 : this.tempClassB;
|
||||
},
|
||||
'$store.state.menuOperation.break': function (val) {
|
||||
if (val) {
|
||||
this.classA = this.classB = -1;
|
||||
} else {
|
||||
this.classA = this.tempClassA;
|
||||
this.classB = this.tempClassB;
|
||||
}
|
||||
},
|
||||
'$store.state.trainingNew.trainingSwitch': function (val) {
|
||||
this.closeMenu(true);
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initMenu();
|
||||
},
|
||||
methods: {
|
||||
handleShow(item) {
|
||||
if (item.hide) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
initStationList() {
|
||||
const list = [];
|
||||
this.stationList.forEach(station => {
|
||||
if (station.visible) {
|
||||
const node = {
|
||||
title: station.name,
|
||||
operate: station.code,
|
||||
show: true,
|
||||
click: this.mapLocation,
|
||||
code: station.code
|
||||
};
|
||||
|
||||
list.push(node);
|
||||
}
|
||||
});
|
||||
return list;
|
||||
},
|
||||
initMenu() {
|
||||
if (this.menu[3]) {
|
||||
this.menu[3].children = this.initStationList();
|
||||
}
|
||||
this.clickEvent();
|
||||
this.closeMenu(true);
|
||||
},
|
||||
clickEvent() {
|
||||
const self = this;
|
||||
window.onclick = function (e) {
|
||||
if (document.getElementById('menuBar')) {
|
||||
self.closeMenu(false);
|
||||
}
|
||||
};
|
||||
},
|
||||
getDomId(item) {
|
||||
if (item && item.operate) {
|
||||
return item.operate.domId;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
noShowingChildren(children) {
|
||||
if (!children || children.length <= 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
hasShowingChildren(children) {
|
||||
if (children && children.length > 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
closeMenu(flag) {
|
||||
if (flag || (this.mode !== TrainingMode.EDIT && this.mode !== TrainingMode.TEACH)) {
|
||||
this.classA = this.tempClassA = -1;
|
||||
this.classB = this.tempClassB = -1;
|
||||
}
|
||||
},
|
||||
hookClick(item, event) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
if (item && typeof item.click == 'function') {
|
||||
item.click(item.operate);
|
||||
}
|
||||
},
|
||||
selectedClassA(item, index) {
|
||||
const order = this.order || 0;
|
||||
if (this.mode !== TrainingMode.TEACH) { // 编辑模式下可显示
|
||||
this.popupMenuA(item, index);
|
||||
} else if (this.steps[order] && this.steps[order].type == 'bar') { // 操作步骤没有顶部操作顶部菜单都不可显示
|
||||
this.popupMenuA(item, index);
|
||||
}
|
||||
},
|
||||
selectedClassB(item, index) {
|
||||
|
||||
},
|
||||
// 弹出顶部菜单操作
|
||||
popupMenuA(item, index) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
this.clickEvent();
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: item.operate.operation
|
||||
};
|
||||
this.tempClassA = index;
|
||||
this.tempClassB = -1;
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
popupMenuB(item, index) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: item.operate.operation
|
||||
};
|
||||
this.tempClassB = index;
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
});
|
||||
},
|
||||
// 设置地图定位
|
||||
mapLocation(code) {
|
||||
if (code) {
|
||||
this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code });
|
||||
this.closeMenu(true);
|
||||
}
|
||||
},
|
||||
// 站遥控
|
||||
stationRemoteControl(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.stationControl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 设置全线扣车
|
||||
setDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消全线扣车
|
||||
cancelDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消上行扣车
|
||||
cancelUpDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorlUpDown.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消下行扣车
|
||||
cancelDownDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorlUpDown.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 关于
|
||||
about(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.helpAbout.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 刷新
|
||||
refresh() {
|
||||
this.closeMenu(true);
|
||||
EventBus.$emit('refresh');
|
||||
},
|
||||
undeveloped() {
|
||||
this.doClose();
|
||||
this.$alert('实现中......', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
callback: action => {
|
||||
}
|
||||
});
|
||||
},
|
||||
doClose() {
|
||||
this.$nextTick(() => {
|
||||
EventBus.$emit('closeMenu');
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped rel="stylesheet/scss" lang="scss">
|
||||
@import "src/styles/mixin.scss";
|
||||
$width: 30px;
|
||||
$height: 30px;
|
||||
$menuPadding: 10px;
|
||||
$menuItemHeight: 30px;
|
||||
$menuItemWidth: 180px;
|
||||
$menuItemPadding: 5px;
|
||||
|
||||
#menuBar {
|
||||
z-index: 36;
|
||||
position: absolute;
|
||||
width: inherit;
|
||||
height: $height;
|
||||
line-height: $height;
|
||||
}
|
||||
|
||||
.nav {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
color: #0000;
|
||||
background: -webkit-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: -o-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: -moz-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: linear-gradient(#FDFDFE, #DEE3F3);
|
||||
border: 1px solid #B6BCCC !important;
|
||||
border-bottom: 2px solid #B6BCCC !important;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.nav-li {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding-left: $menuPadding;
|
||||
padding-right: $menuPadding;
|
||||
}
|
||||
|
||||
.nav-li:active {
|
||||
background: #C9D0E1;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.nav-li-text {
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.nav-ul {
|
||||
display: none;
|
||||
position: absolute;
|
||||
list-style: none;
|
||||
border: 1px solid gray !important;
|
||||
line-height: $menuItemHeight;
|
||||
width: $menuItemWidth;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
max-height: 550px;
|
||||
overflow-y: scroll;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
background: #c3c3c3;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
border-radius: 0;
|
||||
background: #f0f0f0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.menu-ul {
|
||||
display: none;
|
||||
list-style: none;
|
||||
background: #F0F0F0;
|
||||
line-height: $menuItemHeight;
|
||||
width: $menuItemWidth;
|
||||
bottom: $menuItemHeight;
|
||||
}
|
||||
|
||||
.active {
|
||||
position: absolute;
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.menu-ul-text {
|
||||
font-size: 14px;
|
||||
color: #000;
|
||||
letter-spacing: 0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li {
|
||||
text-align: left;
|
||||
background: #F0F0F0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li-block {
|
||||
display: flex;
|
||||
letter-spacing: 0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li-text {
|
||||
font-size: 14px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.menu-li-text .status {
|
||||
display: inline-block;
|
||||
border-right: 1px inset #CACACA;
|
||||
width: $width;
|
||||
}
|
||||
|
||||
.menu-li-text .label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menu-separator {
|
||||
text-align: left;
|
||||
background: #F0F0F0;
|
||||
height: 2px;
|
||||
line-height: 2px;
|
||||
}
|
||||
|
||||
.menu-separator .status {
|
||||
display: inline-block;
|
||||
border-right: 1px inset #CACACA;
|
||||
width: $width;
|
||||
height: 100%;
|
||||
background: #EFECDE;
|
||||
}
|
||||
|
||||
.menu-separator .separator {
|
||||
display: inline-block;
|
||||
background: #CACACA;
|
||||
margin-left: 5px;
|
||||
height: 2px;
|
||||
width: $menuItemWidth - $width - 30px;
|
||||
}
|
||||
|
||||
.menu-li-block:hover {
|
||||
background: #C9DEF7;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
}
|
||||
</style>
|
371
src/jmapNew/theme/beijing_01/menus/localWorkMenu.vue
Normal file
371
src/jmapNew/theme/beijing_01/menus/localWorkMenu.vue
Normal file
@ -0,0 +1,371 @@
|
||||
<template>
|
||||
<div class="menus" :style="{width: width + 'px'}">
|
||||
<menu-bar ref="menuBar" :selected="selected" />
|
||||
<menu-button ref="menuButton" />
|
||||
<passive-alarm ref="passiveAlarm" />
|
||||
<menu-station-stand ref="menuStationStand" :selected="selected" :work="'localWork'" />
|
||||
<menu-switch ref="menuSwitch" :selected="selected" :work="'localWork'" />
|
||||
<menu-signal ref="menuSignal" :selected="selected" :work="'localWork'" />
|
||||
<menu-section ref="menuSection" :selected="selected" :work="'localWork'" />
|
||||
<menu-train ref="menuTrain" :selected="selected" :work="'localWork'" />
|
||||
<menu-station ref="menuStation" :selected="selected" :work="'localWork'" />
|
||||
<menu-limit ref="menuLimit" :selected="selected" :work="'localWork'" />
|
||||
<passive-contorl ref="passiveControl" pop-class="beijing-01__systerm" />
|
||||
<passive-timeout ref="passiveTimeout" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import MenuButton from './menuButton';
|
||||
import MenuBar from './localWorkMenuBar';
|
||||
import PassiveAlarm from './passiveDialog/alarm';
|
||||
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
|
||||
import PassiveTimeout from './passiveDialog/timeout';
|
||||
import MenuStation from './menuStation';
|
||||
import MenuStationStand from './menuStationStand';
|
||||
import MenuSwitch from './menuSwitch';
|
||||
import MenuSection from './menuSection';
|
||||
import MenuTrain from './menuTrain';
|
||||
import MenuSignal from './menuSignal';
|
||||
import MenuLimit from './menuLimit';
|
||||
|
||||
export default {
|
||||
name: 'LocalWorkMenus',
|
||||
components: {
|
||||
MenuBar,
|
||||
MenuButton,
|
||||
PassiveAlarm,
|
||||
PassiveContorl,
|
||||
PassiveTimeout,
|
||||
MenuStation,
|
||||
MenuStationStand,
|
||||
MenuSwitch,
|
||||
MenuSection,
|
||||
MenuTrain,
|
||||
MenuSignal,
|
||||
MenuLimit
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
type: Object,
|
||||
default() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters('config', [
|
||||
'width'
|
||||
])
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.$store.dispatch('config/updateMenuBar');
|
||||
});
|
||||
this.$root.$on('dialogOpen', e => {
|
||||
if (this.selected == e &&
|
||||
this.selected &&
|
||||
this.selected.instance &&
|
||||
this.selected.instance.mouseEvent) {
|
||||
this.selected.instance.mouseEvent.mouseover();
|
||||
}
|
||||
});
|
||||
|
||||
this.$root.$on('dialogClose', e => {
|
||||
if (this.selected == e &&
|
||||
this.selected &&
|
||||
this.selected.instance &&
|
||||
this.selected.instance.mouseEvent) {
|
||||
this.selected.instance.__down = false;
|
||||
this.selected.instance.mouseEvent.mouseout();
|
||||
this.$jlmap.clearEvent();
|
||||
}
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.$root.$off('dialogOpen');
|
||||
this.$root.$off('dialogClose');
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.menus .pop-menu {
|
||||
background: #F0F0F0;
|
||||
}
|
||||
|
||||
.menus .pop-menu span {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.menus .pop-menu .is-disabled span {
|
||||
color: #B4B3B8;
|
||||
}
|
||||
|
||||
.beijing-01__systerm {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog {
|
||||
background: rgba(100, 100, 100, 0.3);
|
||||
border: 2px solid rgb(144, 144, 144, 0.8);
|
||||
border-radius: 6px;
|
||||
color: #000;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__header {
|
||||
padding: 10px;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__footer {
|
||||
background: #F0F0F0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__body {
|
||||
padding: 10px;
|
||||
margin: 5px;
|
||||
border: 2px solid rgba(120, 121, 123, 0.5);
|
||||
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
|
||||
background: #F0F0F0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__title {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
color: #000;
|
||||
border-radius: 4px;
|
||||
padding: 0px 2px;
|
||||
height: 20px;
|
||||
line-height: 20px
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__title::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
filter: blur(7px);
|
||||
height: 20px;
|
||||
width: -webkit-fill-available;
|
||||
background: rgba(190, 190, 190, 0.8);
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn {
|
||||
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
|
||||
border: 1px solid #fff;
|
||||
border-radius: 4px;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding: 0px;
|
||||
width: 80px;
|
||||
border: 2px outset #E2E2E2;
|
||||
border-radius: 0px !important;
|
||||
color: #000;
|
||||
background: #F0F0F0;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .expand {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:focus span {
|
||||
border: 1px dashed gray;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:active {
|
||||
border: 2px inset #E2E2E2;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:disabled {
|
||||
border: 2px inset #E2E2E2;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-button:disabled span {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input {
|
||||
border: 2px inset #E9E9E9;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input .el-input__inner {
|
||||
color: #000;
|
||||
background: #fff !important;
|
||||
border: 0px;
|
||||
border-radius: 0px !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-input.is-disabled .el-input__inner {
|
||||
background: #F0F0F0 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea {
|
||||
border: 2px inset #E9E9E9;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea .el-textarea__inner {
|
||||
color: #000;
|
||||
background: #fff !important;
|
||||
border: 0px;
|
||||
border-radius: 0px !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
|
||||
background: #F0F0F0 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table--border th.gutter {
|
||||
background: #EBEADB !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table {
|
||||
border: 2px inset #E9E9E9;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table .cell {
|
||||
line-height: unset !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table th.is-leaf {
|
||||
background: #F0F0F0 !important;
|
||||
border-right: 1px solid #BDBDBD !important;
|
||||
border-bottom: 1px solid #BDBDBD !important;
|
||||
color: #000 !important;
|
||||
height: 20px !important;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table tr td {
|
||||
height: 20px !important;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-table .el-table__empty-text {
|
||||
top: 15px !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .current-row>td {
|
||||
background: #3399FF !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__inner {
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__label {
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
|
||||
background: #E6E6E6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
|
||||
color: #C5C9CC !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
|
||||
background: #fff !important;
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
|
||||
position: absolute;
|
||||
-webkit-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
content: "";
|
||||
border: 1px solid #000;
|
||||
border-left: 0;
|
||||
border-top: 0;
|
||||
height: 7px;
|
||||
left: 4px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__inner {
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__label {
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
|
||||
background: #fff !important;
|
||||
border: 1px inset #dcdfe6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
border-radius: 100%;
|
||||
background-color: #000 !important;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
|
||||
background: #E6E6E6 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
|
||||
color: #C5C9CC !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .base-label {
|
||||
background: rgba(0, 0, 0, x);
|
||||
position: relative;
|
||||
left: -15px;
|
||||
top: -18px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .el-form-item label {
|
||||
font-weight: normal !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .context {
|
||||
height: 100px;
|
||||
border: 2px inset #E2E2E2;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .table {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .notice {
|
||||
margin-left: 62px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.beijing-01__systerm .el-dialog .button-group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
846
src/jmapNew/theme/beijing_01/menus/localWorkMenuBar.vue
Normal file
846
src/jmapNew/theme/beijing_01/menus/localWorkMenuBar.vue
Normal file
@ -0,0 +1,846 @@
|
||||
<template>
|
||||
<div id="menuBar">
|
||||
<div class="nav">
|
||||
<template v-for="(item,i) in menu">
|
||||
<template v-if="noShowingChildren(item.children)">
|
||||
<li :id="getDomId(item)" :key="i" class="nav-li" @click="hookClick(item)">
|
||||
<span class="nav-li-text">{{ item.title }}</span>
|
||||
</li>
|
||||
</template>
|
||||
<template v-else>
|
||||
<li
|
||||
v-if="handleShow(item)"
|
||||
:id="getDomId(item)"
|
||||
:key="i"
|
||||
class="nav-li"
|
||||
@click.stop="selectedClassA(item, i)"
|
||||
>
|
||||
<span class="nav-li-text">{{ item.title }}</span>
|
||||
<ul class="nav-ul" :class="{'active' :i==classA}">
|
||||
<template v-for="(child,j) in item.children">
|
||||
<template v-if="child.children && child.children.length > 0">
|
||||
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else
|
||||
:id="getDomId(child)"
|
||||
:key="j"
|
||||
class="menu-li"
|
||||
@click.stop="selectedClassB(child, j)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ child.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
<ul class="menu-ul" :class="{'active' :j==classB}">
|
||||
<template v-for="(grandchild,k) in child.children">
|
||||
<li v-if="grandchild.type === 'separator'" :key="k" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else-if="grandchild.show"
|
||||
:id="getDomId(grandchild)"
|
||||
:key="k"
|
||||
class="menu-li"
|
||||
@click.stop="hookClick(grandchild)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ grandchild.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
</ul>
|
||||
</li>
|
||||
</template>
|
||||
<template v-else>
|
||||
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
||||
<span class="status"> </span>
|
||||
<span class="separator"> </span>
|
||||
</li>
|
||||
<li
|
||||
v-else-if="child.show"
|
||||
:id="getDomId(child)"
|
||||
:key="j"
|
||||
class="menu-li"
|
||||
@click.stop="hookClick(child)"
|
||||
>
|
||||
<div class="menu-li-block">
|
||||
<span class="menu-li-text">
|
||||
<span class="status"> </span>
|
||||
<span class="label">{{ child.title }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</template>
|
||||
</template>
|
||||
</ul>
|
||||
</li>
|
||||
</template>
|
||||
</template>
|
||||
</div>
|
||||
<station-control ref="stationControl" />
|
||||
<detain-train-contorl ref="detainTrainContorl" />
|
||||
<detain-train-contorl-up-down ref="detainTrainContorlUpDown" />
|
||||
<notice-info ref="noticeInfo" pop-class="beijing-01__systerm" />
|
||||
<train-add ref="trainAdd" />
|
||||
<train-transtalet ref="trainTranstalet" />
|
||||
<train-delete ref="trainDelete" />
|
||||
<manage-user ref="manageUser" />
|
||||
<help-about ref="helpAbout" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import { TrainingMode } from '@/scripts/ConstDic';
|
||||
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
|
||||
import StationControl from './menuDialog/stationControl';
|
||||
import DetainTrainContorl from './menuDialog/detainTrainContorl';
|
||||
import DetainTrainContorlUpDown from './menuDialog/detainTrainContorlUpDown';
|
||||
import TrainAdd from './menuDialog/trainAdd';
|
||||
import TrainTranstalet from './menuDialog/trainTranstalet';
|
||||
import TrainDelete from './menuDialog/trainDelete';
|
||||
import ManageUser from './menuDialog/manageUser';
|
||||
import HelpAbout from './menuDialog/helpAbout';
|
||||
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
|
||||
import { EventBus } from '@/scripts/event-bus';
|
||||
|
||||
export default {
|
||||
name: 'MenuBar',
|
||||
components: {
|
||||
NoticeInfo,
|
||||
StationControl,
|
||||
DetainTrainContorl,
|
||||
DetainTrainContorlUpDown,
|
||||
TrainAdd,
|
||||
TrainTranstalet,
|
||||
TrainDelete,
|
||||
ManageUser,
|
||||
HelpAbout
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
type: Object,
|
||||
default() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
classA: -1,
|
||||
classB: -1,
|
||||
tempClassA: -1,
|
||||
tempClassB: -1,
|
||||
valid: true,
|
||||
menu: [
|
||||
{
|
||||
title: '系统',
|
||||
operate: OperationEvent.Command.mBar.system,
|
||||
children: [
|
||||
{
|
||||
title: '登录',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '注销',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '站遥控',
|
||||
operate: OperationEvent.MixinCommand.remoteControl.mbar,
|
||||
click: this.stationRemoteControl,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '区域选择',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '连接主用中心',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '连接备用中心',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '退出',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '查看',
|
||||
operate: OperationEvent.Command.mBar.check,
|
||||
children: [
|
||||
{
|
||||
title: '运行图',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '报告分析',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '视图',
|
||||
click: this.undeveloped,
|
||||
operate: '',
|
||||
children: [{
|
||||
title: '报警',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '列车运行信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '设备状态',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '列车详细信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '站台详细信息',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
title: '终端站发车列表',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '详细设备状态',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '查找列车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '显示目的地号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示轨道名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示道岔名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示信号机名',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示车次窗位置',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '显示车次号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '显示车组号',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
title: '全屏',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '放大',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '缩小',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '恢复',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '车站定位',
|
||||
operate: '',
|
||||
children: [
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'ATS终端操作',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '当天运行车计划',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '出入库预告',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '计划车操作',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '添加计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '平移计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '删除计划车',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '批处理命令',
|
||||
operate: OperationEvent.Command.mBar.detainControl,
|
||||
children: [
|
||||
{
|
||||
title: '全线扣车',
|
||||
operate: OperationEvent.StationStand.setDetainTrainAll.mbar,
|
||||
click: this.setDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelDetainTrainAll.mbar,
|
||||
click: this.cancelDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消上行全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelUpDetainTrainAll.mbar,
|
||||
click: this.cancelUpDetainTrainAll,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '取消下行全线扣车',
|
||||
operate: OperationEvent.StationStand.cancelDownDetainTrainAll.mbar,
|
||||
click: this.cancelDownDetainTrainAll,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '信息管理',
|
||||
operate: '',
|
||||
children: [
|
||||
{
|
||||
title: '调度日志',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '调度留言提醒',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
title: '报警设置',
|
||||
click: this.undeveloped,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '帮助',
|
||||
children: [
|
||||
{
|
||||
title: '关于ITS GPC 工作站',
|
||||
click: this.about,
|
||||
operate: OperationEvent.Command.help.about,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters('training', [
|
||||
'mode',
|
||||
'started',
|
||||
'steps',
|
||||
'order',
|
||||
'mode'
|
||||
]),
|
||||
...mapGetters('map', [
|
||||
'stationList'
|
||||
])
|
||||
},
|
||||
watch: {
|
||||
tempClassA() {
|
||||
this.classA = this.$store.state.menuOperation.break ? -1 : this.tempClassA;
|
||||
},
|
||||
tempClassB() {
|
||||
this.classB = this.$store.state.menuOperation.break ? -1 : this.tempClassB;
|
||||
},
|
||||
'$store.state.menuOperation.break': function (val) {
|
||||
if (val) {
|
||||
this.classA = this.classB = -1;
|
||||
} else {
|
||||
this.classA = this.tempClassA;
|
||||
this.classB = this.tempClassB;
|
||||
}
|
||||
},
|
||||
'$store.state.trainingNew.trainingSwitch': function (val) {
|
||||
this.closeMenu(true);
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initMenu();
|
||||
},
|
||||
methods: {
|
||||
handleShow(item) {
|
||||
if (item.hide) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
initStationList() {
|
||||
const list = [];
|
||||
this.stationList.forEach(station => {
|
||||
if (station.visible) {
|
||||
const node = {
|
||||
title: station.name,
|
||||
operate: station.code,
|
||||
show: true,
|
||||
click: this.mapLocation,
|
||||
code: station.code
|
||||
};
|
||||
|
||||
list.push(node);
|
||||
}
|
||||
});
|
||||
return list;
|
||||
},
|
||||
initMenu() {
|
||||
if (this.menu[3]) {
|
||||
this.menu[3].children = this.initStationList();
|
||||
}
|
||||
this.clickEvent();
|
||||
this.closeMenu(true);
|
||||
},
|
||||
clickEvent() {
|
||||
const self = this;
|
||||
window.onclick = function (e) {
|
||||
if (document.getElementById('menuBar')) {
|
||||
self.closeMenu(false);
|
||||
}
|
||||
};
|
||||
},
|
||||
getDomId(item) {
|
||||
if (item && item.operate) {
|
||||
return item.operate.domId;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
noShowingChildren(children) {
|
||||
if (!children || children.length <= 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
hasShowingChildren(children) {
|
||||
if (children && children.length > 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
closeMenu(flag) {
|
||||
if (flag || (this.mode !== TrainingMode.EDIT && this.mode !== TrainingMode.TEACH)) {
|
||||
this.classA = this.tempClassA = -1;
|
||||
this.classB = this.tempClassB = -1;
|
||||
}
|
||||
},
|
||||
hookClick(item, event) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
if (item && typeof item.click == 'function') {
|
||||
item.click(item.operate);
|
||||
}
|
||||
},
|
||||
selectedClassA(item, index) {
|
||||
const order = this.order || 0;
|
||||
if (this.mode !== TrainingMode.TEACH) { // 编辑模式下可显示
|
||||
this.popupMenuA(item, index);
|
||||
} else if (this.steps[order] && this.steps[order].type == 'bar') { // 操作步骤没有顶部操作顶部菜单都不可显示
|
||||
this.popupMenuA(item, index);
|
||||
}
|
||||
},
|
||||
// 弹出顶部菜单操作
|
||||
popupMenuA(item, index) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
this.clickEvent();
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: item.operate.operation
|
||||
};
|
||||
this.tempClassA = index;
|
||||
this.tempClassB = -1;
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
popupMenuB(item, index) {
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: null, menu: null });
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: item.operate.operation
|
||||
};
|
||||
this.tempClassB = index;
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
});
|
||||
},
|
||||
// 设置地图定位
|
||||
mapLocation(code) {
|
||||
if (code) {
|
||||
this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code });
|
||||
this.closeMenu(true);
|
||||
}
|
||||
},
|
||||
// 站遥控
|
||||
stationRemoteControl(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.stationControl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 设置全线扣车
|
||||
setDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消全线扣车
|
||||
cancelDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorl.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消上行扣车
|
||||
cancelUpDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorlUpDown.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 取消下行扣车
|
||||
cancelDownDetainTrainAll(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.detainTrainContorlUpDown.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 关于
|
||||
about(order) {
|
||||
const operate = {
|
||||
type: 'bar',
|
||||
operation: order.operation
|
||||
};
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.closeMenu(true);
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.$refs.helpAbout.doShow(operate);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 刷新
|
||||
refresh() {
|
||||
this.closeMenu(true);
|
||||
EventBus.$emit('refresh');
|
||||
},
|
||||
undeveloped() {
|
||||
this.doClose();
|
||||
this.$alert('实现中......', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
callback: action => {
|
||||
}
|
||||
});
|
||||
},
|
||||
doClose() {
|
||||
this.$nextTick(() => {
|
||||
EventBus.$emit('closeMenu');
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped rel="stylesheet/scss" lang="scss">
|
||||
@import "src/styles/mixin.scss";
|
||||
$width: 30px;
|
||||
$height: 30px;
|
||||
$menuPadding: 10px;
|
||||
$menuItemHeight: 30px;
|
||||
$menuItemWidth: 180px;
|
||||
$menuItemPadding: 5px;
|
||||
|
||||
#menuBar {
|
||||
z-index: 36;
|
||||
position: absolute;
|
||||
width: inherit;
|
||||
height: $height;
|
||||
line-height: $height;
|
||||
}
|
||||
|
||||
.nav {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
color: #0000;
|
||||
background: -webkit-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: -o-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: -moz-linear-gradient(#FDFDFE, #DEE3F3);
|
||||
background: linear-gradient(#FDFDFE, #DEE3F3);
|
||||
border: 1px solid #B6BCCC !important;
|
||||
border-bottom: 2px solid #B6BCCC !important;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.nav-li {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding-left: $menuPadding;
|
||||
padding-right: $menuPadding;
|
||||
}
|
||||
|
||||
.nav-li:active {
|
||||
background: #C9D0E1;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.nav-li-text {
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.nav-ul {
|
||||
display: none;
|
||||
position: absolute;
|
||||
list-style: none;
|
||||
border: 1px solid gray !important;
|
||||
line-height: $menuItemHeight;
|
||||
width: $menuItemWidth;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
max-height: 550px;
|
||||
overflow-y: scroll;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
background: #c3c3c3;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
border-radius: 0;
|
||||
background: #f0f0f0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.menu-ul {
|
||||
display: none;
|
||||
list-style: none;
|
||||
background: #F0F0F0;
|
||||
line-height: $menuItemHeight;
|
||||
width: $menuItemWidth;
|
||||
bottom: $menuItemHeight;
|
||||
}
|
||||
|
||||
.active {
|
||||
position: absolute;
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.menu-ul-text {
|
||||
font-size: 14px;
|
||||
color: #000;
|
||||
letter-spacing: 0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li {
|
||||
text-align: left;
|
||||
background: #F0F0F0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li-block {
|
||||
display: flex;
|
||||
letter-spacing: 0;
|
||||
height: $menuItemHeight;
|
||||
line-height: $menuItemHeight;
|
||||
}
|
||||
|
||||
.menu-li-text {
|
||||
font-size: 14px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.menu-li-text .status {
|
||||
display: inline-block;
|
||||
border-right: 1px inset #CACACA;
|
||||
width: $width;
|
||||
}
|
||||
|
||||
.menu-li-text .label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menu-separator {
|
||||
text-align: left;
|
||||
background: #F0F0F0;
|
||||
height: 2px;
|
||||
line-height: 2px;
|
||||
}
|
||||
|
||||
.menu-separator .status {
|
||||
display: inline-block;
|
||||
border-right: 1px inset #CACACA;
|
||||
width: $width;
|
||||
height: 100%;
|
||||
background: #EFECDE;
|
||||
}
|
||||
|
||||
.menu-separator .separator {
|
||||
display: inline-block;
|
||||
background: #CACACA;
|
||||
margin-left: 5px;
|
||||
height: 2px;
|
||||
width: $menuItemWidth - $width - 30px;
|
||||
}
|
||||
|
||||
.menu-li-block:hover {
|
||||
background: #C9DEF7;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
}
|
||||
</style>
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div v-if="isShowBtn" id="menuButtons_box" class="menu menuButton" style="height:45px;" :style="{left: point.x+'px', bottom: point.y+'px' }">
|
||||
<div id="menuButtons_box" class="menu menuButton" style="height:45px;" :style="{left: point.x+'px', bottom: point.y+'px' }">
|
||||
<button
|
||||
:id="Signal.arrangementRoute.button.domId"
|
||||
:style="{display: 'block', float: 'left', width: width+'px', backgroundColor:buttonUpColor}"
|
||||
@ -244,9 +244,7 @@
|
||||
<script>
|
||||
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
|
||||
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
|
||||
import Handler from '@/scripts/cmdPlugin/Handler';
|
||||
import CMD from '@/scripts/cmdPlugin/CommandEnum';
|
||||
// import { deepAssign } from '@/utils/index';
|
||||
import PasswordBox from './dialog/childDialog/passwordInputBox.vue';
|
||||
|
||||
export default {
|
||||
@ -287,9 +285,6 @@ export default {
|
||||
},
|
||||
Command() {
|
||||
return OperationEvent.Command;
|
||||
},
|
||||
isShowBtn() {
|
||||
return this.$store.state.training.prdType == '01';
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -298,6 +293,11 @@ export default {
|
||||
},
|
||||
'$store.state.menuOperation.selectedCount': function (val) {
|
||||
this.selectedChange();
|
||||
},
|
||||
'$store.state.trainingNew.trainingSwitch': function (val) {
|
||||
if (val) {
|
||||
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@ -326,7 +326,7 @@ export default {
|
||||
type: 'mbm',
|
||||
operation: operation
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/setButtonOperation', operation); // 按钮菜单是否被按下
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
@ -340,7 +340,7 @@ export default {
|
||||
over:true,
|
||||
cmdType:data.cmdType
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -350,19 +350,19 @@ export default {
|
||||
},
|
||||
selectedChange() {
|
||||
const model = this.$store.state.menuOperation.selected;
|
||||
console.log(model, model._type, this.$store.state.menuOperation.buttonOperation, 'caise');
|
||||
if (model && model._type) {
|
||||
switch (this.$store.state.menuOperation.buttonOperation) {
|
||||
case OperationEvent.Station.guideLock.button.operation : {
|
||||
if (model && model._type == 'GuideLock') {
|
||||
const operate = {
|
||||
start: true,
|
||||
over: true,
|
||||
operation: OperationEvent.Station.guideLock.button.operation,
|
||||
param:{
|
||||
stationCode:model.stationCode
|
||||
}
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
if (model.totalGuideLock) {
|
||||
@ -372,7 +372,8 @@ export default {
|
||||
}
|
||||
this.$refs.password.doShow(operate);
|
||||
}
|
||||
}).catch(() => {
|
||||
}).catch((e) => {
|
||||
console.log(e);
|
||||
this.$refs.noticeInfo.doShow();
|
||||
});
|
||||
|
||||
@ -391,7 +392,7 @@ export default {
|
||||
},
|
||||
cmdType : CMD.Signal.CMD_SIGNAL_SET_AUTO_TURN_BACK
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -413,7 +414,7 @@ export default {
|
||||
},
|
||||
cmdType : CMD.Signal.CMD_SIGNAL_CANCEL_AUTO_TURN_BACK
|
||||
};
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
}
|
||||
@ -425,7 +426,7 @@ export default {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Handler.clear();
|
||||
// Handler.clear();
|
||||
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ export default {
|
||||
operation: OperationEvent.Command.close.confirm.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
this.doClose();
|
||||
@ -113,7 +113,7 @@ export default {
|
||||
} else if (this.operation == OperationEvent.StationControl.emergencyStationControl.menu.operation) {
|
||||
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_EMERGENCY_STATION_CONTROL;
|
||||
}
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
|
@ -124,7 +124,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
if (this.model.password === this.model.confirm) {
|
||||
@ -146,7 +146,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -116,7 +116,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
if (this.selected.password !== this.model.oldPassword) {
|
||||
@ -163,7 +163,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
@ -137,7 +137,7 @@ export default {
|
||||
messages: ['确认设置全线扣车!']
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
} else {
|
||||
@ -161,7 +161,7 @@ export default {
|
||||
messages: ['确认取消全线扣车!']
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
} else {
|
||||
|
@ -109,7 +109,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
@ -137,7 +137,7 @@ export default {
|
||||
messages: ['确认取消全线上行扣车!']
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
} else {
|
||||
@ -161,7 +161,7 @@ export default {
|
||||
messages: ['确认取消全线下行扣车!']
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
||||
} else {
|
||||
|
@ -99,7 +99,7 @@ export default {
|
||||
};
|
||||
|
||||
this.loading = true;
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
this.loading = false;
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
@ -115,7 +115,7 @@ export default {
|
||||
operation: OperationEvent.Command.cancel.menu.operation
|
||||
};
|
||||
|
||||
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
|
||||
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
|
||||
if (valid) {
|
||||
this.doClose();
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user