diff --git a/Jenkinsfile-prd b/Jenkinsfile-prd index 1bd53bb27..09cd9e7b6 100644 --- a/Jenkinsfile-prd +++ b/Jenkinsfile-prd @@ -11,7 +11,6 @@ pipeline { nodejs 'nodejs-10' } steps { - sh 'npm update' sh 'npm install' sh 'npm run build' } diff --git a/Jenkinsfile-test b/Jenkinsfile-test index fff7d237c..7961d5f98 100644 --- a/Jenkinsfile-test +++ b/Jenkinsfile-test @@ -11,7 +11,6 @@ pipeline { nodejs 'nodejs-10' } steps { - sh 'npm update' sh 'npm install' sh 'npm run test' } diff --git a/package.json b/package.json index d551ce4d2..2ec416153 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "path-to-regexp": "2.4.0", "qrcode.vue": "^1.6.2", "qs": "^6.9.3", + "quill-image-extend-module": "^1.1.2", "recordrtc": "^5.5.9", "script-loader": "^0.7.2", "sessionstorage": "^0.1.0", diff --git a/src/api/learn.js b/src/api/learn.js new file mode 100644 index 000000000..738eb18cf --- /dev/null +++ b/src/api/learn.js @@ -0,0 +1,84 @@ +import request from '@/utils/request'; + +// 根据postId帖子ID分页查询留言列表 +export function queryMessagePagingByPostId(postId, params) { + return request({ + url: `/api/learn/${postId}/message/pagedQuery/postId`, + method: 'get', + params: params + }); +} +// 根据项目分页查询留言列表 +export function queryMessagePagingByProjectCode(projectCode, params) { + return request({ + url: `/api/learn/${projectCode}/message/pagedQuery/project`, + method: 'get', + params: params + }); +} +// 回复帖子 +export function answerPost(data) { + return request({ + url: `/api/learn/message/create`, + method: 'post', + data: data + }); +} +// 评论留言 +export function commentLevelMessage(messageId, data) { + return request({ + url: `/api/learn/${messageId}/comment`, + method: 'post', + data: data + }); +} +// 评论 留言的评论 +export function commentComents(messageId, commentId, data) { + return request({ + url: `/api/learn/${messageId}/${commentId}/comment`, + method: 'post', + data: data + }); +} +// 管理员删除留言 +export function deleteMessageByAdmin(messageId) { + return request({ + url: `/api/learn/${messageId}/deleteMessage/admin`, + method: 'delete' + }); +} +// 用户自己删除留言 +export function deleteMessageBySelf(messageId) { + return request({ + url: `/api/learn/${messageId}/deleteMessage/user`, + method: 'delete' + }); +} +// 查询留言的评论列表 +export function queryMessageCommentList(messageId) { + return request({ + url: `/api/learn/${messageId}/list`, + method: 'get' + }); +} +// 删除评论回复管理员 +export function deleteCommentByAdmin(commentId) { + return request({ + url: `/api/learn/${commentId}/deleteComment/admin`, + method: 'delete' + }); +} +// 删除评论回复用户 +export function deleteCommentBySelf(commentId) { + return request({ + url: `/api/learn/${commentId}/deleteComment/user`, + method: 'delete' + }); +} +// 根据项目获取项目关联的帖子 +export function getPostByProjectCode(projectCode) { + return request({ + url: `/api/learn/${projectCode}/post`, + method: 'get' + }); +} diff --git a/src/assets/bg_board.jpg b/src/assets/bg_board.jpg new file mode 100644 index 000000000..57b78a062 Binary files /dev/null and b/src/assets/bg_board.jpg differ diff --git a/src/assets/delete.png b/src/assets/delete.png new file mode 100644 index 000000000..a5d3f42fa Binary files /dev/null and b/src/assets/delete.png differ diff --git a/src/assets/like.png b/src/assets/like.png new file mode 100644 index 000000000..d36ee6510 Binary files /dev/null and b/src/assets/like.png differ diff --git a/src/assets/reply.png b/src/assets/reply.png new file mode 100644 index 000000000..04215c4a0 Binary files /dev/null and b/src/assets/reply.png differ diff --git a/src/assets/unlike.png b/src/assets/unlike.png new file mode 100644 index 000000000..dddf99c85 Binary files /dev/null and b/src/assets/unlike.png differ diff --git a/src/components/QuillEditor/index.vue b/src/components/QuillEditor/index.vue index 2e4bf60d7..a5913a843 100644 --- a/src/components/QuillEditor/index.vue +++ b/src/components/QuillEditor/index.vue @@ -4,7 +4,8 @@ ref="editor" v-model="content" :options="options" - :style="{height: height+'px', 'margin-bottom': '80px'}" + style="background-color: #fff" + :style="{height: height+'px', 'margin-bottom': marginBottom+'px'}" @change="onChange" @blur="onBlur" @focus="onFocus" @@ -13,9 +14,10 @@ + + diff --git a/src/views/newMap/displayNew/demonMenu.vue b/src/views/newMap/displayNew/demonMenu.vue index 3dc08cd7b..d35237ef8 100644 --- a/src/views/newMap/displayNew/demonMenu.vue +++ b/src/views/newMap/displayNew/demonMenu.vue @@ -4,6 +4,10 @@
菜单
+ {{ jl3dmodel }} @@ -12,6 +16,8 @@ {{ jl3dpassflow }} {{ jl3dtrafficplan }} + {{ $t('display.demon.traffictraintext') }} + 故障设备 @@ -23,11 +29,9 @@ 理论考试 - + 权限分发 + 留言板 + 联系方式 + + + diff --git a/src/views/newMap/displayNew/dispatherContest/index.vue b/src/views/newMap/displayNew/dispatherContest/index.vue index e5b2defe7..43184651e 100644 --- a/src/views/newMap/displayNew/dispatherContest/index.vue +++ b/src/views/newMap/displayNew/dispatherContest/index.vue @@ -23,7 +23,6 @@ {{ $t('display.lesson.practiceMode') }} {{ $t('display.lesson.testMode') }} - @@ -65,8 +64,6 @@ - @@ -86,10 +83,8 @@ import SceneList from './sceneList'; import MenuSchema from '@/views/newMap/displayNew/menuSchema'; import TheoryExamSelect from './theoryExamSelect'; import TheoryExam from './theoryExam'; -// import TheoryQuiz from './quiz'; -// import ThroryResult from './result'; // import { getGoodsTryUse } from '@/api/management/goods'; -import { ranAsPlan, exitRunPlan, clearSimulation, getSimulationInfoNew } from '@/api/simulation'; +import {clearSimulation, getSimulationInfoNew } from '@/api/simulation'; // import { PermissionType } from '@/scripts/ConstDic'; // import { getCountTime } from '@/utils/index'; import { prefixIntrger } from '@/utils/date'; @@ -116,8 +111,6 @@ export default { TheoryExam, OperationalStatistic, TestResult, - // TheoryQuiz, - // ThroryResult, SelectRole }, props: { @@ -156,7 +149,6 @@ export default { mapLocation: {}, playerList: [], currentPlayList: [], - // formatScore: 0, isGoback: false, runing: false, prdTypeMap: { @@ -265,56 +257,14 @@ export default { this.$refs.setTime.doShow(); }, start(model) { // 开始仿真 - const data = { - time: model.initTime - }; - if (this.$route.query.prdType === '04') { - data.loadNumber = model.loadNum; - } - ranAsPlan(data, this.group).then(res => { - this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${model.initTime}`)); - }).catch(error => { - if (error.code == '5001') { - this.$messageBox(this.$t('error.mapDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5002') { - this.$messageBox(this.$t('error.runningChartDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5003') { - this.$messageBox(this.$t('error.runningChartIsNotLoaded') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5004') { - this.$messageBox(this.$t('error.runningDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5000') { - this.$messageBox(this.$t('error.systemError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4000') { - this.$messageBox(this.$t('error.simulationDoesNotExist') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4001') { - this.$messageBox(this.$t('error.simulationOperationIsNotDefined') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4002') { - this.$messageBox(this.$t('error.simulationOperationProcessingMethodNotFound') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4003') { - this.$messageBox(this.$t('error.simulationOperationFailed') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4004') { - this.$messageBox(this.$t('error.operationConflict') + ',' + this.$t('error.startSimulationFailed')); - } else { - this.$messageBox('按计划行车异常,请退出重试!'); - } - }); + this.$emit('start', model); }, setRuning(run) { this.runing = run; this.$refs.demonMenu.hideScheduling(run); }, end() { - exitRunPlan(this.group).then(() => { - this.$store.dispatch('training/over').then(() => { - this.$store.dispatch('training/setMapDefaultState').then(() => { - this.$store.dispatch('map/resetActiveTrainList', false); - this.$store.dispatch('map/clearJlmapTrainView'); - this.$store.dispatch('map/setTrainWindowShow', false); - }); - }); - }).catch(() => { - this.$messageBox(this.$t('display.demon.endSimulationFail')); - }); + this.$emit('end'); }, handleQuitQuest() { competitionPracticalSceneExit(this.group).then(resp => { @@ -411,10 +361,8 @@ export default { competitionPracticalSceneFinish(this.group, {operationStatisticVO:{}}).then(res=>{ this.isScriptRun = false; // if (this.scriptMode == ScriptMode.TEST) { - // this.formatScore = res.data; this.showResultData(res.data); // this.$store.dispatch('scriptRecord/updateAudioPlay', false); - // this.$messageBox('得分:' + this.formatScore); // } // this.userRole = 'AUDIENCE'; // this.$store.dispatch('training/setRoles', 'AUDIENCE'); @@ -545,9 +493,6 @@ export default { this.$refs.operationalStatistic.doShow(res.data); }); } - // commitResult(result) { - // this.$refs.theoryResult.doShow(result); - // } } }; diff --git a/src/views/newMap/displayNew/dispatherContest/requestQuestion.vue b/src/views/newMap/displayNew/dispatherContest/requestQuestion.vue deleted file mode 100644 index 207115cd3..000000000 --- a/src/views/newMap/displayNew/dispatherContest/requestQuestion.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - diff --git a/src/views/newMap/displayNew/dispatherContest/sceneList.vue b/src/views/newMap/displayNew/dispatherContest/sceneList.vue index 46579230c..1512bcae4 100644 --- a/src/views/newMap/displayNew/dispatherContest/sceneList.vue +++ b/src/views/newMap/displayNew/dispatherContest/sceneList.vue @@ -1,10 +1,10 @@ @@ -19,7 +19,6 @@ import { getSessionStorage } from '@/utils/auth'; import { mapGetters } from 'vuex'; import { OperateMode } from '@/scripts/ConstDic'; import { timeFormat } from '@/utils/date'; - import MapSystemDraft from '@/views/newMap/mapsystemNew/index'; import MenuLesson from './lesson/index'; import MenuDemon from './menuDemon'; @@ -30,7 +29,7 @@ import MenuDispatherContest from './dispatherContest/index'; import MenuTrainList from '@/views/newMap/displayNew/menuTrainList'; import MenuSystemTime from '@/views/newMap/displayNew/menuSystemTime'; -import { clearSimulation, getSimulationInfoNew } from '@/api/simulation'; +import { clearSimulation, getSimulationInfoNew, ranAsPlan, exitRunPlan } from '@/api/simulation'; import { loadNewMapDataByGroup } from '@/utils/loaddata'; import { EventBus } from '@/scripts/event-bus'; @@ -238,6 +237,69 @@ export default { this.$messageBox(`获取地图数据失败: ${error.message}`); this.endViewLoading(); } + }, + start(model) { // 开始仿真 + const data = { + time: model.initTime + }; + if (this.$route.query.prdType === '04') { + data.loadNumber = model.loadNum; + } + ranAsPlan(data, this.group).then(res => { + this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${model.initTime}`)); + }).catch(error => { + let message = ''; + switch (error.code) { + case '5001': + message = this.$t('error.mapDataError'); + break; + case '5002': + message = this.$t('error.runningChartDataError'); + break; + case '5003': + message = this.$t('error.runningChartIsNotLoaded'); + break; + case '5004': + message = this.$t('error.runningDataError'); + break; + case '5000': + message = this.$t('error.systemError'); + break; + case '4000': + message = this.$t('error.simulationDoesNotExist'); + break; + case '4001': + message = this.$t('error.simulationOperationIsNotDefined'); + break; + case '4002': + message = this.$t('error.simulationOperationProcessingMethodNotFound'); + break; + case '4003': + message = this.$t('error.simulationOperationFailed'); + break; + case '4004': + message = this.$t('error.operationConflict'); + break; + default: + message = '按计划行车异常,请退出重试!'; + // this.$messageBox('按计划行车异常,请退出重试!'); + break; + } + this.$messageBox(message + ',' + this.$t('error.startSimulationFailed')); + }); + }, + end() { + exitRunPlan(this.group).then(() => { + this.$store.dispatch('training/over').then(() => { + this.$store.dispatch('training/setMapDefaultState').then(() => { + this.$store.dispatch('map/clearJlmapTrainView'); + this.$store.dispatch('map/resetActiveTrainList', false); + this.$store.dispatch('map/setTrainWindowShow', false); + }); + }); + }).catch(() => { + this.$messageBox(this.$t('display.demon.endSimulationFail')); + }); } } }; diff --git a/src/views/newMap/displayNew/menuDemon.vue b/src/views/newMap/displayNew/menuDemon.vue index 9c661d401..228cc85fd 100644 --- a/src/views/newMap/displayNew/menuDemon.vue +++ b/src/views/newMap/displayNew/menuDemon.vue @@ -59,7 +59,7 @@ import DemonChat from './demonChat'; import { Notification } from 'element-ui'; import MenuSchema from '@/views/newMap/displayNew/menuSchema'; import { getGoodsTryUse } from '@/api/management/goods'; -import { ranAsPlan, exitRunPlan, getSimulationInfoNew } from '@/api/simulation'; +import {getSimulationInfoNew } from '@/api/simulation'; import { PermissionType } from '@/scripts/ConstDic'; import { getCountTime } from '@/utils/index'; import { TrainingMode } from '@/scripts/ConstDic'; @@ -247,56 +247,14 @@ export default { this.$refs.setTime.doShow(); }, start(model) { // 开始仿真 - const data = { - time: model.initTime - }; - if (this.$route.query.prdType === '04') { - data.loadNumber = model.loadNum; - } - ranAsPlan(data, this.group).then(res => { - this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${model.initTime}`)); - }).catch(error => { - if (error.code == '5001') { - this.$messageBox(this.$t('error.mapDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5002') { - this.$messageBox(this.$t('error.runningChartDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5003') { - this.$messageBox(this.$t('error.runningChartIsNotLoaded') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5004') { - this.$messageBox(this.$t('error.runningDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5000') { - this.$messageBox(this.$t('error.systemError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4000') { - this.$messageBox(this.$t('error.simulationDoesNotExist') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4001') { - this.$messageBox(this.$t('error.simulationOperationIsNotDefined') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4002') { - this.$messageBox(this.$t('error.simulationOperationProcessingMethodNotFound') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4003') { - this.$messageBox(this.$t('error.simulationOperationFailed') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4004') { - this.$messageBox(this.$t('error.operationConflict') + ',' + this.$t('error.startSimulationFailed')); - } else { - this.$messageBox('按计划行车异常,请退出重试!'); - } - }); + this.$emit('start', model); }, setRuning(run) { this.runing = run; this.$refs.demonMenu.hideScheduling(run); }, end() { - exitRunPlan(this.group).then(() => { - this.$store.dispatch('training/over').then(() => { - this.$store.dispatch('training/setMapDefaultState').then(() => { - this.$store.dispatch('map/resetActiveTrainList', false); - this.$store.dispatch('map/clearJlmapTrainView'); - this.$store.dispatch('map/setTrainWindowShow', false); - }); - }); - }).catch(() => { - this.$messageBox(this.$t('display.demon.endSimulationFail')); - }); + this.$emit('end'); }, handleQuitQuest() { quitScriptNew(this.group).then(resp => { diff --git a/src/views/newMap/displayNew/scriptDisplay/scriptRecord/index.vue b/src/views/newMap/displayNew/scriptDisplay/scriptRecord/index.vue index 517625e7b..69c68cd3c 100644 --- a/src/views/newMap/displayNew/scriptDisplay/scriptRecord/index.vue +++ b/src/views/newMap/displayNew/scriptDisplay/scriptRecord/index.vue @@ -55,7 +55,6 @@ import DemonMenu from '@/views/newMap/displayNew/demonMenu'; import TipScriptRecordNew from '@/views/scriptManage/tipScriptRecord'; import SetTime from '@/views/newMap/displayNew/demon/setTime'; import { Notification } from 'element-ui'; -import { ranAsPlan, exitRunPlan } from '@/api/simulation'; import { getSimulationMemberList} from '@/api/simulation'; import ChatBox from '@/views/newMap/chatView/chatBox.vue'; @@ -179,47 +178,10 @@ export default { this.$refs.setTime.doShow(); }, start(model) { - const data = { - time: model.initTime - }; - ranAsPlan(data, this.group).then(res => { - this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${model.initTime}`)); - }).catch((error) => { - if (error.code == '5001') { - this.$messageBox(this.$t('error.mapDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5002') { - this.$messageBox(this.$t('error.runningChartDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5003') { - this.$messageBox(this.$t('error.runningChartIsNotLoaded') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5004') { - this.$messageBox(this.$t('error.runningDataError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '5000') { - this.$messageBox(this.$t('error.systemError') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4000') { - this.$messageBox(this.$t('error.simulationDoesNotExist') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4001') { - this.$messageBox(this.$t('error.simulationOperationIsNotDefined') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4002') { - this.$messageBox(this.$t('error.simulationOperationProcessingMethodNotFound') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4003') { - this.$messageBox(this.$t('error.simulationOperationFailed') + ',' + this.$t('error.startSimulationFailed')); - } else if (error.code == '4004') { - this.$messageBox(this.$t('error.operationConflict') + ',' + this.$t('error.startSimulationFailed')); - } - }); + this.$emit('start', model); }, end() { - exitRunPlan(this.group).then(() => { - this.$store.dispatch('training/over').then(() => { - this.$store.dispatch('training/setMapDefaultState').then(() => { - this.$store.dispatch('map/clearJlmapTrainView'); - this.$store.dispatch('map/resetActiveTrainList', false); - this.$store.dispatch('map/setTrainWindowShow', false); - }); - }); - }).catch(() => { - this.$messageBox(this.$t('display.demon.endSimulationFail')); - }); + this.$emit('end'); }, back() { history.go(-1); diff --git a/src/views/newMap/jointTrainingNew/menuDemon.vue b/src/views/newMap/jointTrainingNew/menuDemon.vue index 6cc0eea50..726febd69 100644 --- a/src/views/newMap/jointTrainingNew/menuDemon.vue +++ b/src/views/newMap/jointTrainingNew/menuDemon.vue @@ -14,6 +14,7 @@ {{ $t('display.demon.passengerflow') }} {{ $t('display.demon.trafficplantext') }} + {{ $t('display.demon.traffictraintext') }} {{ $t('display.demon.maintainer') }} @@ -374,17 +375,30 @@ export default { this.$emit('passflow'); }, jumpjl3dtrafficplan() { - const routeData = this.$router.resolve({ - path:'/jlmap3d/trafficplan', - query:{ - mapid:this.mapId, - group:this.group, - project: this.project, - noPreLogout: true, - lineCode:this.lineCode - } - }); - window.open(routeData.href, '_blank', 'noopener noreferrer'); + const routeData = this.$router.resolve({ + path:'/jlmap3d/trafficplan', + query:{ + mapid:this.mapId, + group:this.group, + project: this.project, + noPreLogout: true, + lineCode:this.lineCode + } + }); + window.open(routeData.href, '_blank', 'noopener noreferrer'); + }, + jumpjl3dtraffictrain() { + const routeData = this.$router.resolve({ + path:'/jlmap3d/traffictrain', + query:{ + mapid:this.mapId, + group:this.group, + project: this.project, + noPreLogout: true, + lineCode:this.lineCode + } + }); + window.open(routeData.href, '_blank', 'noopener noreferrer'); }, jumpjl3dfaultdevice() { this.$emit('faultdevice'); diff --git a/src/views/system/dictionary/edit.vue b/src/views/system/dictionary/edit.vue index 626209530..dfa3e85e8 100644 --- a/src/views/system/dictionary/edit.vue +++ b/src/views/system/dictionary/edit.vue @@ -3,22 +3,16 @@ {{ $t('global.confirm') }} - {{ $t('global.cancel') }} + {{ $t('global.cancel') }}