From 9f5130a4f2447d4e54ad0ff6ebd69698b38995e2 Mon Sep 17 00:00:00 2001
From: ival <610568032@qq.com>
Date: Fri, 26 Jul 2019 13:32:43 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=A7=BB=E6=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
index.html | 18 +
src/api/chat.js | 241 +
src/api/jlmap3d/load3ddata.js | 77 +
src/api/jmap/lesson.js | 74 +-
src/api/login.js | 97 +-
src/api/management/mapskin.js | 72 +-
src/api/quest.js | 40 +
src/api/runplan.js | 379 ++
src/api/simulation.js | 370 ++
src/api/simulationRecord.js | 67 +
src/api/table.js | 9 +
src/api/test.js | 9 -
src/api/user.js | 99 -
src/assets/downSection.png | Bin 0 -> 4925 bytes
src/assets/home/demon1.jpg | Bin 0 -> 68094 bytes
src/assets/home/demon2.jpg | Bin 0 -> 29477 bytes
src/assets/home/home1.jpg | Bin 0 -> 36582 bytes
src/assets/home/home1.png | Bin 0 -> 174590 bytes
src/assets/home/home2.jpg | Bin 0 -> 30785 bytes
src/assets/home/home2.png | Bin 0 -> 134813 bytes
src/assets/home/home3.jpg | Bin 0 -> 32088 bytes
src/assets/home/home3.png | Bin 0 -> 125083 bytes
src/assets/home/home4.png | Bin 0 -> 151776 bytes
src/assets/home/plan1.png | Bin 0 -> 103874 bytes
src/assets/home/plan2.png | Bin 0 -> 25353 bytes
src/assets/home/plan3.png | Bin 0 -> 30108 bytes
src/assets/home/tring1.png | Bin 0 -> 181631 bytes
src/assets/home/tring2.png | Bin 0 -> 117791 bytes
src/assets/home/tring3.jpg | Bin 0 -> 182378 bytes
src/assets/home/tring4.jpg | Bin 0 -> 77945 bytes
src/assets/home/tring5.jpg | Bin 0 -> 113322 bytes
src/assets/home/tring6.jpg | Bin 0 -> 155948 bytes
src/assets/jl3d/mmi.png | Bin 0 -> 15590 bytes
src/assets/logo.png | Bin 0 -> 10099 bytes
src/assets/logo.svg | 1 +
src/assets/logo1.png | Bin 0 -> 8608 bytes
src/assets/logo_.png | Bin 0 -> 11827 bytes
src/assets/pay_images/AliPayLogo.png | Bin 0 -> 31449 bytes
src/assets/pay_images/AliPayLogoInfo.png | Bin 0 -> 6569 bytes
src/assets/pay_images/PayFail.png | Bin 0 -> 69757 bytes
src/assets/pay_images/PaySuccess.png | Bin 0 -> 75866 bytes
src/assets/pay_images/WePayLogo.png | Bin 0 -> 10480 bytes
src/assets/pay_images/WePayLogoInfo.png | Bin 0 -> 7171 bytes
src/assets/upSection.png | Bin 0 -> 5057 bytes
src/directives.js | 283 ++
src/jlmap3d/component/Helper.js | 30 +
src/jlmap3d/component/Materialload.js | 36 +
src/jlmap3d/config/Camera.js | 7 +
src/jlmap3d/config/Render.js | 6 +
src/jlmap3d/config/Scene.js | 16 +
src/jlmap3d/connect/TrainingConnect.js | 685 +++
src/jlmap3d/connect/TrainingConnectTest.js | 452 ++
src/jlmap3d/control/FirstControls.js | 390 ++
src/jlmap3d/control/OrbitControls.js | 1100 +++++
src/jlmap3d/control/OribitControlstest.js | 1016 ++++
src/jlmap3d/edit/Jlmap3ddata.js | 164 +
src/jlmap3d/edit/action/pathaction.js | 389 ++
src/jlmap3d/edit/action/sectionaction.js | 120 +
src/jlmap3d/edit/action/signalaction.js | 108 +
src/jlmap3d/edit/action/stationaction.js | 69 +
src/jlmap3d/edit/action/switchaction.js | 68 +
src/jlmap3d/edit/action/trainaction.js | 68 +
src/jlmap3d/edit/actionmanage.js | 40 +
src/jlmap3d/edit/connect/getmodels.js | 134 +
src/jlmap3d/edit/connect/testconnect.js | 10 +
src/jlmap3d/edit/control/DragControls.js | 286 ++
src/jlmap3d/edit/control/OrbitControlsEdit.js | 1076 +++++
src/jlmap3d/edit/control/TransformControls.js | 1460 ++++++
src/jlmap3d/edit/testmodel/LinkList.js | 31 +
src/jlmap3d/edit/testmodel/RealSectionList.js | 184 +
.../edit/testmodel/RealSectionModel.js | 8 +
src/jlmap3d/edit/testmodel/SectionList.js | 185 +
src/jlmap3d/edit/testmodel/SectionModel.js | 26 +
src/jlmap3d/edit/testmodel/SignalList.js | 145 +
src/jlmap3d/edit/testmodel/SignalModel.js | 36 +
.../edit/testmodel/StationStandList.js | 183 +
.../edit/testmodel/StationStandModel.js | 35 +
src/jlmap3d/edit/testmodel/SwitchList.js | 29 +
src/jlmap3d/edit/testmodel/SwitchModel.js | 22 +
src/jlmap3d/edit/testmodel/TrainList.js | 107 +
src/jlmap3d/edit/testmodel/TrainListTest.js | 175 +
src/jlmap3d/edit/testmodel/TrainModel.js | 8 +
src/jlmap3d/edit/utils/SetObj.js | 209 +
src/jlmap3d/edit/utils/drawhelp.js | 70 +
src/jlmap3d/jl3ddata.js | 14 +
src/jlmap3d/jl3drender.js | 0
src/jlmap3d/jl3dsimulation/jl3dsimulation.js | 394 ++
.../moveupdate/DrivingConnect.js | 688 +++
.../jl3dsimulation/moveupdate/UpdateTrain.js | 275 ++
.../jl3dsimulation/simulationloader.js | 193 +
src/jlmap3d/jlmap3d.js | 340 ++
src/jlmap3d/jlmap3dedit.js | 262 ++
src/jlmap3d/main/export/OBJExporter.js | 262 ++
src/jlmap3d/main/inflate.min.js | 15 +
src/jlmap3d/main/lib/stats.min.js | 5 +
src/jlmap3d/main/loaders/AssetLoader.js | 418 ++
src/jlmap3d/main/loaders/DDSLoader.js | 272 ++
src/jlmap3d/main/loaders/FBXLoader.js | 4134 +++++++++++++++++
src/jlmap3d/main/loaders/FBXLoader2.js | 3861 +++++++++++++++
src/jlmap3d/main/loaders/MTLLoader.js | 583 +++
src/jlmap3d/main/loaders/OBJLoader.js | 797 ++++
.../main/loaders/model/Assetmaterial.js | 23 +
src/jlmap3d/main/loaders/model/Assetmodel.js | 27 +
src/jlmap3d/main/three.min.js | 971 ++++
src/jlmap3d/model/ModelLoad.js | 190 +
src/jlmap3d/model/RealSectionList.js | 117 +
src/jlmap3d/model/RealSectionModel.js | 8 +
src/jlmap3d/model/SectionList.js | 176 +
src/jlmap3d/model/SectionModel.js | 24 +
src/jlmap3d/model/SignalList.js | 112 +
src/jlmap3d/model/SignalModel.js | 11 +
src/jlmap3d/model/StationStandList.js | 360 ++
src/jlmap3d/model/StationStandModel.js | 34 +
src/jlmap3d/model/SwitchList.js | 13 +
src/jlmap3d/model/SwitchModel.js | 24 +
src/jlmap3d/model/TrainList.js | 208 +
src/jlmap3d/model/TrainModel.js | 8 +
src/jlmap3d/utils/ReStart.js | 55 +
src/jlmap3d/utils/UpdateTrain.js | 175 +
src/jlmap3d/utils/UpdateTrainTest.js | 144 +
src/main.js | 3 +-
src/permission.js | 2 +-
src/router/index.js | 887 +++-
src/scripts/ConstConfig.js | 91 +-
src/scripts/DeviceTypeDic.js | 15 +
src/scripts/DictionaryData.js | 2 +-
src/scripts/FaultDic.js | 28 +
src/scripts/OperationConfig.js | 1281 +++++
.../CancelLimitOperationConverter.js | 45 +
.../converter/MixinOperationConverter.js | 43 +
.../converter/SectionOperationConverter.js | 439 ++
.../SignalRouteOperationConverter.js | 644 +++
.../StationControlOperationConverter.js | 257 +
.../converter/StationOperationConverter.js | 201 +
.../StationStandOperationConverter.js | 438 ++
.../converter/SwitchOperationConverter.js | 494 ++
.../converter/TrainOperationConverter.js | 306 ++
src/scripts/plugin/converter/manager.js | 39 +
src/scripts/plugin/operateConvert2Command.js | 67 +
src/scripts/plugin/trainingOperateHandler.js | 142 +
src/store/index.js | 13 +-
src/store/modules/app.js | 23 +-
src/store/modules/exam.js | 100 +
src/store/modules/runplan.js | 140 +
src/store/modules/socket.js | 390 ++
src/store/modules/trainingList.js | 66 +
src/store/modules/user.js | 3 +-
src/utils/Blob.js | 179 +
src/utils/HZRecorder.js | 204 +
src/utils/animation.js | 13 +
src/utils/chatFomat.js | 33 +
src/utils/date.js | 40 +
src/utils/loaddata.js | 36 +
src/utils/screen.js | 52 +
src/views/components/filterCity/index.vue | 221 +
src/views/components/limits/distribute.vue | 203 +
src/views/components/limits/index.vue | 140 +
src/views/components/limits/transfer.vue | 209 +
src/views/components/pay/commit.vue | 192 +
src/views/components/pay/confirm.vue | 295 ++
src/views/components/pay/finish.vue | 78 +
src/views/components/pay/index.vue | 125 +
src/views/components/quickMenu/index.vue | 448 ++
src/views/components/systemTime/digit.vue | 112 +
src/views/components/systemTime/index.vue | 80 +
src/views/components/systemTime/point.vue | 43 +
src/views/components/systemTime/separator.vue | 51 +
src/views/demonstration/deomonList/index.vue | 121 +
src/views/demonstration/deomonTopic/index.vue | 77 +
src/views/demonstration/detail/index.vue | 358 ++
src/views/demonstration/home.vue | 104 +
src/views/demonstration/index.vue | 78 +
src/views/demonstration/list/demonList.vue | 138 +
src/views/display/demon/addQuest.vue | 137 +
src/views/display/demon/chartView.vue | 678 +++
src/views/display/demon/chatBox.vue | 532 +++
src/views/display/demon/faultChoose.vue | 162 +
src/views/display/demon/runPlanLoad.vue | 67 +
src/views/display/demon/runPlanView.vue | 351 ++
src/views/display/demon/setTime.vue | 113 +
src/views/display/index.vue | 540 +++
src/views/display/menuDemon.vue | 250 +
src/views/display/menuExam.vue | 295 ++
src/views/display/menuLesson.vue | 274 ++
src/views/display/menuPlan.vue | 145 +
src/views/display/menuReplay.vue | 176 +
src/views/display/menuSchema.vue | 155 +
src/views/display/menuScreen.vue | 156 +
src/views/display/menuScript.vue | 188 +
src/views/display/menuSystemTime.vue | 78 +
src/views/display/scriptRecord/addAction.vue | 108 +
.../display/scriptRecord/addBehavior.vue | 200 +
src/views/display/scriptRecord/getAction.vue | 110 +
.../display/scriptRecord/getBehavior.vue | 135 +
.../display/scriptRecord/roleSection.vue | 194 +
.../display/scriptRecord/targetCondition.vue | 243 +
src/views/display/tipExamList.vue | 391 ++
src/views/display/tipQuestDetail.vue | 204 +
src/views/display/tipScriptRecord.vue | 310 ++
src/views/display/tipTrainingDetail.vue | 268 ++
src/views/exam/detail/courseDetail.vue | 171 +
src/views/exam/detail/examDetail.vue | 294 ++
src/views/exam/detail/questionDetail.vue | 163 +
src/views/exam/home.vue | 106 +
src/views/exam/index.vue | 108 +
src/views/exam/list/examList.vue | 145 +
src/views/exam/list/questionList.vue | 124 +
src/views/exam/result.vue | 140 +
src/views/index.js | 974 ++++
src/views/jlmap3d/edit/action.vue | 168 +
src/views/jlmap3d/edit/assets.vue | 208 +
src/views/jlmap3d/edit/index.vue | 36 +
src/views/jlmap3d/edit/map3dlist.vue | 306 ++
src/views/jlmap3d/edit/menu.vue | 84 +
src/views/jlmap3d/edit/property.vue | 200 +
src/views/jlmap3d/index.vue | 256 +
src/views/jlmap3d/jlmap3dedit.vue | 216 +
src/views/jlmap3d/show/configmenu.vue | 83 +
src/views/jlmap3d/show/menu.vue | 165 +
src/views/jlmap3d/show/msg.vue | 180 +
src/views/jlmap3d/show/property.vue | 124 +
.../jlmap3d/simulation/jl3dsimulation.vue | 303 ++
.../jlmap3d/simulation/sceneview/mmi.css | 78 +
src/views/jlmap3d/simulation/sceneview/mmi.js | 127 +
.../jlmap3d/simulation/sceneview/mmiimage.js | 94 +
.../jlmap3d/simulation/sceneview/mmiview.vue | 374 ++
.../jlmap3d/simulation/sceneview/tmsview.vue | 54 +
src/views/jointTraining/chartView.vue | 493 ++
src/views/jointTraining/chatWindow.vue | 673 +++
src/views/jointTraining/index.vue | 336 ++
src/views/jointTraining/menuDemon.vue | 468 ++
.../jointTraining/menuDraft/chooseRole.vue | 88 +
.../jointTraining/menuDraft/operateMenu.vue | 135 +
src/views/jointTraining/menuSchema.vue | 157 +
.../lessoncategory/category/operateMenu.vue | 115 +
.../lesson/lessoncategory/category/tree.vue | 170 +
.../lessoncategory/edit/chapter/index.vue | 286 ++
.../lessoncategory/edit/chapter/list.vue | 239 +
.../lessoncategory/edit/create/index.vue | 91 +
.../lessoncategory/edit/lesson/index.vue | 266 ++
.../lessoncategory/edit/lesson/publish.vue | 136 +
.../lessoncategory/edit/sorttree/index.vue | 138 +
src/views/lesson/lessoncategory/index.vue | 129 +
src/views/lesson/scriptmanage/create.vue | 107 +
src/views/lesson/scriptmanage/list.vue | 188 +
src/views/lesson/taskmanage/createTask.vue | 100 +
src/views/lesson/taskmanage/list.vue | 181 +
src/views/lesson/trainingRule/addBatch.vue | 115 +
src/views/lesson/trainingRule/addEdit.vue | 300 ++
src/views/lesson/trainingRule/detail/edit.vue | 178 +
.../lesson/trainingRule/detail/index.vue | 184 +
src/views/lesson/trainingRule/list.vue | 271 ++
src/views/lesson/trainingcategory/edit.vue | 303 ++
src/views/lesson/trainingcategory/index.vue | 61 +
src/views/lesson/trainingcategory/tree.vue | 110 +
src/views/lesson/trainingmanage/draft.vue | 317 ++
src/views/lesson/trainingmanage/index.vue | 286 ++
.../lesson/trainingrecord/category/draft.vue | 302 ++
.../trainingrecord/category/operateMenu.vue | 126 +
.../lesson/trainingrecord/category/tree.vue | 132 +
src/views/lesson/trainingrecord/index.vue | 111 +
.../lesson/trainingrecord/manage/index.vue | 114 +
.../manage/stepmanage/index.vue | 85 +
.../manage/stepmanage/stationlist/index.vue | 76 +
.../manage/stepmanage/stepinfo/index.vue | 49 +
.../manage/stepmanage/stepinfo/list.vue | 40 +
.../manage/stepmanage/stepinfo/step.vue | 222 +
src/views/management/dictionary/edit.vue | 155 +
src/views/management/dictionary/index.vue | 138 +
.../management/dictionaryDetail/edit.vue | 159 +
.../management/dictionaryDetail/index.vue | 166 +
.../management/existingSimulation/index.vue | 206 +
.../management/userControl/correlationMap.vue | 85 +
src/views/management/userControl/edit.vue | 101 +
src/views/management/userControl/index.vue | 146 +
src/views/management/userExam/edit.vue | 107 +
src/views/management/userExam/index.vue | 150 +
src/views/management/userSimulation/add.vue | 201 +
src/views/management/userSimulation/edit.vue | 109 +
src/views/management/userSimulation/index.vue | 171 +
src/views/management/userTraining/add.vue | 186 +
.../management/userTraining/addTraining.vue | 92 +
src/views/management/userTraining/edit.vue | 108 +
src/views/management/userTraining/index.vue | 146 +
src/views/map/mapdraft/mapmanage/edit.vue | 2 +-
src/views/map/mapdraft/mapmanage/publish.vue | 2 +-
src/views/map/product/draft.vue | 304 ++
src/views/map/product/list.vue | 168 +
src/views/map/runplan/chart.vue | 364 ++
src/views/map/runplan/draft/setting.vue | 80 +
src/views/map/runplan/index.vue | 67 +
src/views/map/runplan/manage/check.vue | 59 +
src/views/map/runplan/manage/create.vue | 319 ++
src/views/map/runplan/manage/import.vue | 110 +
src/views/map/runplan/manage/list.vue | 141 +
src/views/map/runplan/manage/operateMenu.vue | 197 +
src/views/map/runplan/manage/publish.vue | 78 +
src/views/map/skinStyle/draft.vue | 266 ++
src/views/map/skinStyle/index.vue | 154 +
src/views/orderauthor/author/detail.vue | 97 +
src/views/orderauthor/author/draft.vue | 236 +
src/views/orderauthor/author/index.vue | 265 ++
src/views/orderauthor/commodity/draft.vue | 407 ++
src/views/orderauthor/commodity/index.vue | 242 +
src/views/orderauthor/order/addGoods.vue | 212 +
src/views/orderauthor/order/canDistribute.vue | 54 +
src/views/orderauthor/order/draft.vue | 569 +++
src/views/orderauthor/order/list.vue | 333 ++
src/views/orderauthor/permission/detail.vue | 200 +
.../permission/draft/choosePermission.vue | 219 +
.../orderauthor/permission/draft/ruleForm.vue | 245 +
src/views/orderauthor/permission/index.vue | 285 ++
src/views/package/draft/canDistribute.vue | 51 +
src/views/package/draft/editRule.vue | 328 ++
src/views/package/draft/ruleForm.vue | 310 ++
src/views/package/index.vue | 232 +
src/views/package/selectRole/list.vue | 122 +
src/views/planMonitor/detail.vue | 205 +
src/views/planMonitor/editTool/index.vue | 487 ++
src/views/planMonitor/editTool/menuBar.vue | 728 +++
src/views/planMonitor/editTool/menuTool.vue | 172 +
.../editTool/menus/addPlanningTrain.vue | 92 +
.../editTool/menus/addSmoothRunTime.vue | 140 +
.../planMonitor/editTool/menus/addTask.vue | 317 ++
.../editTool/menus/components/dataTable.vue | 203 +
.../editTool/menus/createEmptyPlan.vue | 90 +
.../planMonitor/editTool/menus/deleteTask.vue | 91 +
.../editTool/menus/duplicateTrain.vue | 90 +
.../editTool/menus/editPlanningTrain.vue | 232 +
.../editTool/menus/editSmoothRunTime.vue | 113 +
.../editTool/menus/editStationBetweenTime.vue | 45 +
.../planMonitor/editTool/menus/lookup.vue | 45 +
.../editTool/menus/modifyingBeginTime.vue | 64 +
.../editTool/menus/modifyingRouting.vue | 85 +
.../menus/modifyingStationIntervalTime.vue | 183 +
.../editTool/menus/modifyingTask.vue | 423 ++
.../planMonitor/editTool/menus/offLine.vue | 68 +
.../editTool/menus/openRunPlan.vue | 105 +
.../editTool/menus/parameter/baseLoop.vue | 65 +
.../menus/parameter/baseParameter.vue | 72 +
.../menus/parameter/baseParkingDepot.vue | 44 +
.../editTool/menus/parameter/baseRouting.vue | 53 +
.../editTool/menus/parameter/baseStation.vue | 44 +
.../editTool/menus/parameter/index.vue | 95 +
.../parameter/modifyingDepotProperty.vue | 73 +
.../parameter/modifyingStationProperty.vue | 113 +
.../modifyingStationStandProperty.vue | 73 +
.../editTool/menus/quickLoopsIncrease.vue | 45 +
.../editTool/menus/quickTaskIncrease.vue | 45 +
.../editTool/menus/routingSelection.vue | 45 +
.../editTool/menus/selectDeleteRoute.vue | 45 +
.../editTool/menus/selectPrintArea.vue | 45 +
.../planMonitor/editTool/menus/systermOut.vue | 62 +
.../menus/updateStationIntervalTime.vue | 116 +
src/views/planMonitor/editTool/schedule.vue | 519 +++
src/views/planMonitor/editTool/statusBar.vue | 100 +
src/views/planMonitor/editTool/titleBar.vue | 74 +
src/views/planMonitor/home.vue | 98 +
src/views/planMonitor/index.vue | 77 +
src/views/planMonitor/planmanage/planList.vue | 132 +
src/views/publish/examRule/draft/editRule.vue | 301 ++
src/views/publish/examRule/draft/examFrom.vue | 272 ++
src/views/publish/examRule/draft/index.vue | 165 +
src/views/publish/examRule/draft/rule.vue | 291 ++
src/views/publish/examRule/index.vue | 321 ++
src/views/publish/productStatus/index.vue | 180 +
src/views/publish/publishLesson/index.vue | 187 +
src/views/publish/publishMap/draft.vue | 160 +
src/views/publish/publishMap/index.vue | 258 +
.../runPlanCommon/chooseTemplatePlan.vue | 123 +
src/views/publish/runPlanCommon/draft.vue | 182 +
src/views/publish/runPlanCommon/index.vue | 121 +
src/views/publish/runPlanEveryDay/index.vue | 139 +
src/views/publish/runPlanTemplate/index.vue | 161 +
src/views/publish/simulationScript/index.vue | 141 +
src/views/replay/index.vue | 146 +
src/views/screenMonitor/detail/index.vue | 256 +
src/views/screenMonitor/home.vue | 101 +
src/views/screenMonitor/index.vue | 87 +
src/views/screenMonitor/list/demonList.vue | 131 +
src/views/teach/category/tree.vue | 207 +
src/views/teach/detail/index.vue | 163 +
src/views/teach/home.vue | 105 +
src/views/teach/index.vue | 83 +
src/views/teach/practical/index.vue | 129 +
src/views/trainRoom/addPerson.vue | 158 +
src/views/trainRoom/index.vue | 846 ++++
src/views/trainRoom/operateMenu.vue | 83 +
src/views/trainRoom/trainChat.vue | 351 ++
389 files changed, 76296 insertions(+), 329 deletions(-)
create mode 100644 index.html
create mode 100644 src/api/chat.js
create mode 100644 src/api/jlmap3d/load3ddata.js
create mode 100644 src/api/quest.js
create mode 100644 src/api/runplan.js
create mode 100644 src/api/simulation.js
create mode 100644 src/api/simulationRecord.js
create mode 100644 src/api/table.js
delete mode 100644 src/api/test.js
delete mode 100644 src/api/user.js
create mode 100644 src/assets/downSection.png
create mode 100644 src/assets/home/demon1.jpg
create mode 100644 src/assets/home/demon2.jpg
create mode 100644 src/assets/home/home1.jpg
create mode 100644 src/assets/home/home1.png
create mode 100644 src/assets/home/home2.jpg
create mode 100644 src/assets/home/home2.png
create mode 100644 src/assets/home/home3.jpg
create mode 100644 src/assets/home/home3.png
create mode 100644 src/assets/home/home4.png
create mode 100644 src/assets/home/plan1.png
create mode 100644 src/assets/home/plan2.png
create mode 100644 src/assets/home/plan3.png
create mode 100644 src/assets/home/tring1.png
create mode 100644 src/assets/home/tring2.png
create mode 100644 src/assets/home/tring3.jpg
create mode 100644 src/assets/home/tring4.jpg
create mode 100644 src/assets/home/tring5.jpg
create mode 100644 src/assets/home/tring6.jpg
create mode 100644 src/assets/jl3d/mmi.png
create mode 100644 src/assets/logo.png
create mode 100644 src/assets/logo.svg
create mode 100644 src/assets/logo1.png
create mode 100644 src/assets/logo_.png
create mode 100644 src/assets/pay_images/AliPayLogo.png
create mode 100644 src/assets/pay_images/AliPayLogoInfo.png
create mode 100644 src/assets/pay_images/PayFail.png
create mode 100644 src/assets/pay_images/PaySuccess.png
create mode 100644 src/assets/pay_images/WePayLogo.png
create mode 100644 src/assets/pay_images/WePayLogoInfo.png
create mode 100644 src/assets/upSection.png
create mode 100644 src/directives.js
create mode 100644 src/jlmap3d/component/Helper.js
create mode 100644 src/jlmap3d/component/Materialload.js
create mode 100644 src/jlmap3d/config/Camera.js
create mode 100644 src/jlmap3d/config/Render.js
create mode 100644 src/jlmap3d/config/Scene.js
create mode 100644 src/jlmap3d/connect/TrainingConnect.js
create mode 100644 src/jlmap3d/connect/TrainingConnectTest.js
create mode 100644 src/jlmap3d/control/FirstControls.js
create mode 100644 src/jlmap3d/control/OrbitControls.js
create mode 100644 src/jlmap3d/control/OribitControlstest.js
create mode 100644 src/jlmap3d/edit/Jlmap3ddata.js
create mode 100644 src/jlmap3d/edit/action/pathaction.js
create mode 100644 src/jlmap3d/edit/action/sectionaction.js
create mode 100644 src/jlmap3d/edit/action/signalaction.js
create mode 100644 src/jlmap3d/edit/action/stationaction.js
create mode 100644 src/jlmap3d/edit/action/switchaction.js
create mode 100644 src/jlmap3d/edit/action/trainaction.js
create mode 100644 src/jlmap3d/edit/actionmanage.js
create mode 100644 src/jlmap3d/edit/connect/getmodels.js
create mode 100644 src/jlmap3d/edit/connect/testconnect.js
create mode 100644 src/jlmap3d/edit/control/DragControls.js
create mode 100644 src/jlmap3d/edit/control/OrbitControlsEdit.js
create mode 100644 src/jlmap3d/edit/control/TransformControls.js
create mode 100644 src/jlmap3d/edit/testmodel/LinkList.js
create mode 100644 src/jlmap3d/edit/testmodel/RealSectionList.js
create mode 100644 src/jlmap3d/edit/testmodel/RealSectionModel.js
create mode 100644 src/jlmap3d/edit/testmodel/SectionList.js
create mode 100644 src/jlmap3d/edit/testmodel/SectionModel.js
create mode 100644 src/jlmap3d/edit/testmodel/SignalList.js
create mode 100644 src/jlmap3d/edit/testmodel/SignalModel.js
create mode 100644 src/jlmap3d/edit/testmodel/StationStandList.js
create mode 100644 src/jlmap3d/edit/testmodel/StationStandModel.js
create mode 100644 src/jlmap3d/edit/testmodel/SwitchList.js
create mode 100644 src/jlmap3d/edit/testmodel/SwitchModel.js
create mode 100644 src/jlmap3d/edit/testmodel/TrainList.js
create mode 100644 src/jlmap3d/edit/testmodel/TrainListTest.js
create mode 100644 src/jlmap3d/edit/testmodel/TrainModel.js
create mode 100644 src/jlmap3d/edit/utils/SetObj.js
create mode 100644 src/jlmap3d/edit/utils/drawhelp.js
create mode 100644 src/jlmap3d/jl3ddata.js
create mode 100644 src/jlmap3d/jl3drender.js
create mode 100644 src/jlmap3d/jl3dsimulation/jl3dsimulation.js
create mode 100644 src/jlmap3d/jl3dsimulation/moveupdate/DrivingConnect.js
create mode 100644 src/jlmap3d/jl3dsimulation/moveupdate/UpdateTrain.js
create mode 100644 src/jlmap3d/jl3dsimulation/simulationloader.js
create mode 100644 src/jlmap3d/jlmap3d.js
create mode 100644 src/jlmap3d/jlmap3dedit.js
create mode 100644 src/jlmap3d/main/export/OBJExporter.js
create mode 100644 src/jlmap3d/main/inflate.min.js
create mode 100644 src/jlmap3d/main/lib/stats.min.js
create mode 100644 src/jlmap3d/main/loaders/AssetLoader.js
create mode 100644 src/jlmap3d/main/loaders/DDSLoader.js
create mode 100644 src/jlmap3d/main/loaders/FBXLoader.js
create mode 100644 src/jlmap3d/main/loaders/FBXLoader2.js
create mode 100644 src/jlmap3d/main/loaders/MTLLoader.js
create mode 100644 src/jlmap3d/main/loaders/OBJLoader.js
create mode 100644 src/jlmap3d/main/loaders/model/Assetmaterial.js
create mode 100644 src/jlmap3d/main/loaders/model/Assetmodel.js
create mode 100644 src/jlmap3d/main/three.min.js
create mode 100644 src/jlmap3d/model/ModelLoad.js
create mode 100644 src/jlmap3d/model/RealSectionList.js
create mode 100644 src/jlmap3d/model/RealSectionModel.js
create mode 100644 src/jlmap3d/model/SectionList.js
create mode 100644 src/jlmap3d/model/SectionModel.js
create mode 100644 src/jlmap3d/model/SignalList.js
create mode 100644 src/jlmap3d/model/SignalModel.js
create mode 100644 src/jlmap3d/model/StationStandList.js
create mode 100644 src/jlmap3d/model/StationStandModel.js
create mode 100644 src/jlmap3d/model/SwitchList.js
create mode 100644 src/jlmap3d/model/SwitchModel.js
create mode 100644 src/jlmap3d/model/TrainList.js
create mode 100644 src/jlmap3d/model/TrainModel.js
create mode 100644 src/jlmap3d/utils/ReStart.js
create mode 100644 src/jlmap3d/utils/UpdateTrain.js
create mode 100644 src/jlmap3d/utils/UpdateTrainTest.js
create mode 100644 src/scripts/DeviceTypeDic.js
create mode 100644 src/scripts/FaultDic.js
create mode 100644 src/scripts/OperationConfig.js
create mode 100644 src/scripts/plugin/converter/CancelLimitOperationConverter.js
create mode 100644 src/scripts/plugin/converter/MixinOperationConverter.js
create mode 100644 src/scripts/plugin/converter/SectionOperationConverter.js
create mode 100644 src/scripts/plugin/converter/SignalRouteOperationConverter.js
create mode 100644 src/scripts/plugin/converter/StationControlOperationConverter.js
create mode 100644 src/scripts/plugin/converter/StationOperationConverter.js
create mode 100644 src/scripts/plugin/converter/StationStandOperationConverter.js
create mode 100644 src/scripts/plugin/converter/SwitchOperationConverter.js
create mode 100644 src/scripts/plugin/converter/TrainOperationConverter.js
create mode 100644 src/scripts/plugin/converter/manager.js
create mode 100644 src/scripts/plugin/operateConvert2Command.js
create mode 100644 src/scripts/plugin/trainingOperateHandler.js
create mode 100644 src/store/modules/exam.js
create mode 100644 src/store/modules/runplan.js
create mode 100644 src/store/modules/socket.js
create mode 100644 src/store/modules/trainingList.js
create mode 100644 src/utils/Blob.js
create mode 100644 src/utils/HZRecorder.js
create mode 100644 src/utils/animation.js
create mode 100644 src/utils/chatFomat.js
create mode 100644 src/utils/date.js
create mode 100644 src/utils/loaddata.js
create mode 100644 src/utils/screen.js
create mode 100644 src/views/components/filterCity/index.vue
create mode 100644 src/views/components/limits/distribute.vue
create mode 100644 src/views/components/limits/index.vue
create mode 100644 src/views/components/limits/transfer.vue
create mode 100644 src/views/components/pay/commit.vue
create mode 100644 src/views/components/pay/confirm.vue
create mode 100644 src/views/components/pay/finish.vue
create mode 100644 src/views/components/pay/index.vue
create mode 100644 src/views/components/quickMenu/index.vue
create mode 100644 src/views/components/systemTime/digit.vue
create mode 100644 src/views/components/systemTime/index.vue
create mode 100644 src/views/components/systemTime/point.vue
create mode 100644 src/views/components/systemTime/separator.vue
create mode 100644 src/views/demonstration/deomonList/index.vue
create mode 100644 src/views/demonstration/deomonTopic/index.vue
create mode 100644 src/views/demonstration/detail/index.vue
create mode 100644 src/views/demonstration/home.vue
create mode 100644 src/views/demonstration/index.vue
create mode 100644 src/views/demonstration/list/demonList.vue
create mode 100644 src/views/display/demon/addQuest.vue
create mode 100644 src/views/display/demon/chartView.vue
create mode 100644 src/views/display/demon/chatBox.vue
create mode 100644 src/views/display/demon/faultChoose.vue
create mode 100644 src/views/display/demon/runPlanLoad.vue
create mode 100644 src/views/display/demon/runPlanView.vue
create mode 100644 src/views/display/demon/setTime.vue
create mode 100644 src/views/display/index.vue
create mode 100644 src/views/display/menuDemon.vue
create mode 100644 src/views/display/menuExam.vue
create mode 100644 src/views/display/menuLesson.vue
create mode 100644 src/views/display/menuPlan.vue
create mode 100644 src/views/display/menuReplay.vue
create mode 100644 src/views/display/menuSchema.vue
create mode 100644 src/views/display/menuScreen.vue
create mode 100644 src/views/display/menuScript.vue
create mode 100644 src/views/display/menuSystemTime.vue
create mode 100644 src/views/display/scriptRecord/addAction.vue
create mode 100644 src/views/display/scriptRecord/addBehavior.vue
create mode 100644 src/views/display/scriptRecord/getAction.vue
create mode 100644 src/views/display/scriptRecord/getBehavior.vue
create mode 100644 src/views/display/scriptRecord/roleSection.vue
create mode 100644 src/views/display/scriptRecord/targetCondition.vue
create mode 100644 src/views/display/tipExamList.vue
create mode 100644 src/views/display/tipQuestDetail.vue
create mode 100644 src/views/display/tipScriptRecord.vue
create mode 100644 src/views/display/tipTrainingDetail.vue
create mode 100644 src/views/exam/detail/courseDetail.vue
create mode 100644 src/views/exam/detail/examDetail.vue
create mode 100644 src/views/exam/detail/questionDetail.vue
create mode 100644 src/views/exam/home.vue
create mode 100644 src/views/exam/index.vue
create mode 100644 src/views/exam/list/examList.vue
create mode 100644 src/views/exam/list/questionList.vue
create mode 100644 src/views/exam/result.vue
create mode 100644 src/views/index.js
create mode 100644 src/views/jlmap3d/edit/action.vue
create mode 100644 src/views/jlmap3d/edit/assets.vue
create mode 100644 src/views/jlmap3d/edit/index.vue
create mode 100644 src/views/jlmap3d/edit/map3dlist.vue
create mode 100644 src/views/jlmap3d/edit/menu.vue
create mode 100644 src/views/jlmap3d/edit/property.vue
create mode 100644 src/views/jlmap3d/index.vue
create mode 100644 src/views/jlmap3d/jlmap3dedit.vue
create mode 100644 src/views/jlmap3d/show/configmenu.vue
create mode 100644 src/views/jlmap3d/show/menu.vue
create mode 100644 src/views/jlmap3d/show/msg.vue
create mode 100644 src/views/jlmap3d/show/property.vue
create mode 100644 src/views/jlmap3d/simulation/jl3dsimulation.vue
create mode 100644 src/views/jlmap3d/simulation/sceneview/mmi.css
create mode 100644 src/views/jlmap3d/simulation/sceneview/mmi.js
create mode 100644 src/views/jlmap3d/simulation/sceneview/mmiimage.js
create mode 100644 src/views/jlmap3d/simulation/sceneview/mmiview.vue
create mode 100644 src/views/jlmap3d/simulation/sceneview/tmsview.vue
create mode 100644 src/views/jointTraining/chartView.vue
create mode 100644 src/views/jointTraining/chatWindow.vue
create mode 100644 src/views/jointTraining/index.vue
create mode 100644 src/views/jointTraining/menuDemon.vue
create mode 100644 src/views/jointTraining/menuDraft/chooseRole.vue
create mode 100644 src/views/jointTraining/menuDraft/operateMenu.vue
create mode 100644 src/views/jointTraining/menuSchema.vue
create mode 100644 src/views/lesson/lessoncategory/category/operateMenu.vue
create mode 100644 src/views/lesson/lessoncategory/category/tree.vue
create mode 100644 src/views/lesson/lessoncategory/edit/chapter/index.vue
create mode 100644 src/views/lesson/lessoncategory/edit/chapter/list.vue
create mode 100644 src/views/lesson/lessoncategory/edit/create/index.vue
create mode 100644 src/views/lesson/lessoncategory/edit/lesson/index.vue
create mode 100644 src/views/lesson/lessoncategory/edit/lesson/publish.vue
create mode 100644 src/views/lesson/lessoncategory/edit/sorttree/index.vue
create mode 100644 src/views/lesson/lessoncategory/index.vue
create mode 100644 src/views/lesson/scriptmanage/create.vue
create mode 100644 src/views/lesson/scriptmanage/list.vue
create mode 100644 src/views/lesson/taskmanage/createTask.vue
create mode 100644 src/views/lesson/taskmanage/list.vue
create mode 100644 src/views/lesson/trainingRule/addBatch.vue
create mode 100644 src/views/lesson/trainingRule/addEdit.vue
create mode 100644 src/views/lesson/trainingRule/detail/edit.vue
create mode 100644 src/views/lesson/trainingRule/detail/index.vue
create mode 100644 src/views/lesson/trainingRule/list.vue
create mode 100644 src/views/lesson/trainingcategory/edit.vue
create mode 100644 src/views/lesson/trainingcategory/index.vue
create mode 100644 src/views/lesson/trainingcategory/tree.vue
create mode 100644 src/views/lesson/trainingmanage/draft.vue
create mode 100644 src/views/lesson/trainingmanage/index.vue
create mode 100644 src/views/lesson/trainingrecord/category/draft.vue
create mode 100644 src/views/lesson/trainingrecord/category/operateMenu.vue
create mode 100644 src/views/lesson/trainingrecord/category/tree.vue
create mode 100644 src/views/lesson/trainingrecord/index.vue
create mode 100644 src/views/lesson/trainingrecord/manage/index.vue
create mode 100644 src/views/lesson/trainingrecord/manage/stepmanage/index.vue
create mode 100644 src/views/lesson/trainingrecord/manage/stepmanage/stationlist/index.vue
create mode 100644 src/views/lesson/trainingrecord/manage/stepmanage/stepinfo/index.vue
create mode 100644 src/views/lesson/trainingrecord/manage/stepmanage/stepinfo/list.vue
create mode 100644 src/views/lesson/trainingrecord/manage/stepmanage/stepinfo/step.vue
create mode 100644 src/views/management/dictionary/edit.vue
create mode 100644 src/views/management/dictionary/index.vue
create mode 100644 src/views/management/dictionaryDetail/edit.vue
create mode 100644 src/views/management/dictionaryDetail/index.vue
create mode 100644 src/views/management/existingSimulation/index.vue
create mode 100644 src/views/management/userControl/correlationMap.vue
create mode 100644 src/views/management/userControl/edit.vue
create mode 100644 src/views/management/userControl/index.vue
create mode 100644 src/views/management/userExam/edit.vue
create mode 100644 src/views/management/userExam/index.vue
create mode 100644 src/views/management/userSimulation/add.vue
create mode 100644 src/views/management/userSimulation/edit.vue
create mode 100644 src/views/management/userSimulation/index.vue
create mode 100644 src/views/management/userTraining/add.vue
create mode 100644 src/views/management/userTraining/addTraining.vue
create mode 100644 src/views/management/userTraining/edit.vue
create mode 100644 src/views/management/userTraining/index.vue
create mode 100644 src/views/map/product/draft.vue
create mode 100644 src/views/map/product/list.vue
create mode 100644 src/views/map/runplan/chart.vue
create mode 100644 src/views/map/runplan/draft/setting.vue
create mode 100644 src/views/map/runplan/index.vue
create mode 100644 src/views/map/runplan/manage/check.vue
create mode 100644 src/views/map/runplan/manage/create.vue
create mode 100644 src/views/map/runplan/manage/import.vue
create mode 100644 src/views/map/runplan/manage/list.vue
create mode 100644 src/views/map/runplan/manage/operateMenu.vue
create mode 100644 src/views/map/runplan/manage/publish.vue
create mode 100644 src/views/map/skinStyle/draft.vue
create mode 100644 src/views/map/skinStyle/index.vue
create mode 100644 src/views/orderauthor/author/detail.vue
create mode 100644 src/views/orderauthor/author/draft.vue
create mode 100644 src/views/orderauthor/author/index.vue
create mode 100644 src/views/orderauthor/commodity/draft.vue
create mode 100644 src/views/orderauthor/commodity/index.vue
create mode 100644 src/views/orderauthor/order/addGoods.vue
create mode 100644 src/views/orderauthor/order/canDistribute.vue
create mode 100644 src/views/orderauthor/order/draft.vue
create mode 100644 src/views/orderauthor/order/list.vue
create mode 100644 src/views/orderauthor/permission/detail.vue
create mode 100644 src/views/orderauthor/permission/draft/choosePermission.vue
create mode 100644 src/views/orderauthor/permission/draft/ruleForm.vue
create mode 100644 src/views/orderauthor/permission/index.vue
create mode 100644 src/views/package/draft/canDistribute.vue
create mode 100644 src/views/package/draft/editRule.vue
create mode 100644 src/views/package/draft/ruleForm.vue
create mode 100644 src/views/package/index.vue
create mode 100644 src/views/package/selectRole/list.vue
create mode 100644 src/views/planMonitor/detail.vue
create mode 100644 src/views/planMonitor/editTool/index.vue
create mode 100644 src/views/planMonitor/editTool/menuBar.vue
create mode 100644 src/views/planMonitor/editTool/menuTool.vue
create mode 100644 src/views/planMonitor/editTool/menus/addPlanningTrain.vue
create mode 100644 src/views/planMonitor/editTool/menus/addSmoothRunTime.vue
create mode 100644 src/views/planMonitor/editTool/menus/addTask.vue
create mode 100644 src/views/planMonitor/editTool/menus/components/dataTable.vue
create mode 100644 src/views/planMonitor/editTool/menus/createEmptyPlan.vue
create mode 100644 src/views/planMonitor/editTool/menus/deleteTask.vue
create mode 100644 src/views/planMonitor/editTool/menus/duplicateTrain.vue
create mode 100644 src/views/planMonitor/editTool/menus/editPlanningTrain.vue
create mode 100644 src/views/planMonitor/editTool/menus/editSmoothRunTime.vue
create mode 100644 src/views/planMonitor/editTool/menus/editStationBetweenTime.vue
create mode 100644 src/views/planMonitor/editTool/menus/lookup.vue
create mode 100644 src/views/planMonitor/editTool/menus/modifyingBeginTime.vue
create mode 100644 src/views/planMonitor/editTool/menus/modifyingRouting.vue
create mode 100644 src/views/planMonitor/editTool/menus/modifyingStationIntervalTime.vue
create mode 100644 src/views/planMonitor/editTool/menus/modifyingTask.vue
create mode 100644 src/views/planMonitor/editTool/menus/offLine.vue
create mode 100644 src/views/planMonitor/editTool/menus/openRunPlan.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/baseLoop.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/baseParameter.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/baseParkingDepot.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/baseRouting.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/baseStation.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/index.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/modifyingDepotProperty.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/modifyingStationProperty.vue
create mode 100644 src/views/planMonitor/editTool/menus/parameter/modifyingStationStandProperty.vue
create mode 100644 src/views/planMonitor/editTool/menus/quickLoopsIncrease.vue
create mode 100644 src/views/planMonitor/editTool/menus/quickTaskIncrease.vue
create mode 100644 src/views/planMonitor/editTool/menus/routingSelection.vue
create mode 100644 src/views/planMonitor/editTool/menus/selectDeleteRoute.vue
create mode 100644 src/views/planMonitor/editTool/menus/selectPrintArea.vue
create mode 100644 src/views/planMonitor/editTool/menus/systermOut.vue
create mode 100644 src/views/planMonitor/editTool/menus/updateStationIntervalTime.vue
create mode 100644 src/views/planMonitor/editTool/schedule.vue
create mode 100644 src/views/planMonitor/editTool/statusBar.vue
create mode 100644 src/views/planMonitor/editTool/titleBar.vue
create mode 100644 src/views/planMonitor/home.vue
create mode 100644 src/views/planMonitor/index.vue
create mode 100644 src/views/planMonitor/planmanage/planList.vue
create mode 100644 src/views/publish/examRule/draft/editRule.vue
create mode 100644 src/views/publish/examRule/draft/examFrom.vue
create mode 100644 src/views/publish/examRule/draft/index.vue
create mode 100644 src/views/publish/examRule/draft/rule.vue
create mode 100644 src/views/publish/examRule/index.vue
create mode 100644 src/views/publish/productStatus/index.vue
create mode 100644 src/views/publish/publishLesson/index.vue
create mode 100644 src/views/publish/publishMap/draft.vue
create mode 100644 src/views/publish/publishMap/index.vue
create mode 100644 src/views/publish/runPlanCommon/chooseTemplatePlan.vue
create mode 100644 src/views/publish/runPlanCommon/draft.vue
create mode 100644 src/views/publish/runPlanCommon/index.vue
create mode 100644 src/views/publish/runPlanEveryDay/index.vue
create mode 100644 src/views/publish/runPlanTemplate/index.vue
create mode 100644 src/views/publish/simulationScript/index.vue
create mode 100644 src/views/replay/index.vue
create mode 100644 src/views/screenMonitor/detail/index.vue
create mode 100644 src/views/screenMonitor/home.vue
create mode 100644 src/views/screenMonitor/index.vue
create mode 100644 src/views/screenMonitor/list/demonList.vue
create mode 100644 src/views/teach/category/tree.vue
create mode 100644 src/views/teach/detail/index.vue
create mode 100644 src/views/teach/home.vue
create mode 100644 src/views/teach/index.vue
create mode 100644 src/views/teach/practical/index.vue
create mode 100644 src/views/trainRoom/addPerson.vue
create mode 100644 src/views/trainRoom/index.vue
create mode 100644 src/views/trainRoom/operateMenu.vue
create mode 100644 src/views/trainRoom/trainChat.vue
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..9e69c3963
--- /dev/null
+++ b/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/chat.js b/src/api/chat.js
new file mode 100644
index 000000000..66acbabd1
--- /dev/null
+++ b/src/api/chat.js
@@ -0,0 +1,241 @@
+
+import request from '@/utils/request';
+
+export function postDataBd(data) {
+ return request({
+ url: `/api/audio/bd?group=${data.group}&conversationId=${data.conversationId}`,
+ method: 'post',
+ data: data.file,
+ });
+}
+
+// 创建/获取会话id
+export function getConversation(data) {
+ return request({
+ url: `/api/audio/conversation`,
+ method: 'get',
+ params: {
+ group: data.group,
+ userId: data.userId,
+ code: data.code
+ }
+ });
+}
+
+export function postDataXf(data) {
+ return request({
+ url: `/api/audio/xf`,
+ method: 'post',
+ data: data
+ });
+}
+
+// 获取语音历史记录
+export function getHistoryVoice(code) {
+ return request({
+ url: `/api/audio/${code}/history`,
+ method: 'get'
+ });
+}
+
+// 文字聊天 发送文字
+export function chatWithText(data, group) {
+ return request({
+ url: `/api/jointTraining/chatWithText?group=${group}`,
+ method: 'post',
+ data: {
+ message: data,
+ }
+ });
+}
+
+// 文字聊天 发送文字
+export function chatWithAudio(file, group) {
+ return request({
+ url: `/api/jointTraining/chatWithAudio?group=${group}`,
+ method: 'post',
+ data: file
+ });
+}
+
+// 文字聊天 发送文字
+export function getJoinTrainCode(data, group) {
+ return request({
+ url: `/api/jointTraining/qrCode?group=${group}`,
+ method: 'post',
+ data: data
+ });
+}
+
+
+// 创建房间
+export function postCreateRoom(data) {
+ return request({
+ url: `/api/jointTraining/room`,
+ method: 'post',
+ data: data
+ });
+}
+
+// 检查房间存在
+export function checkRoomExist(params) {
+ return request({
+ url: `/api/simulationRoom`,
+ method: 'get',
+ params
+ });
+}
+
+// 获取房间详情
+export function postRoomDetail(group) {
+ return request({
+ url: `/api/jointTraining/room/${group}`,
+ method: 'get',
+ });
+}
+
+// 销毁房间
+export function deljointTrainRoom(group) {
+ return request({
+ url: `/api/jointTraining/room`,
+ method: 'delete',
+ params: {
+ group: group,
+ }
+ });
+}
+
+// 查询有权限房间列表
+export function getjointTrainList() {
+ return request({
+ url: `/api/jointTraining/room/list`,
+ method: 'get'
+ });
+}
+
+// 加入房间
+export function getjointTraining(group) {
+ return request({
+ url: `/api/jointTraining/room/join`,
+ method: 'put',
+ params: {
+ group: group,
+ }
+ });
+}
+
+// 设置人员角色
+export function putUserRoles(data, group) {
+ return request({
+ url: `/api/jointTraining/room/user/role?group=${group}`,
+ method: 'put',
+ data: data
+ });
+}
+
+// 设置人员角色
+export function getJointTrainRoomUserList(group) {
+ return request({
+ url: `/api/jointTraining/room/${group}/user/list`,
+ method: 'get',
+ });
+}
+
+// 离开房间接口
+export function putJointTrainingExit(group) {
+ return request({
+ url: `/api/jointTraining/room/exit`,
+ method: 'put',
+ params: {
+ group: group,
+ }
+ });
+}
+
+// 开始联合演练
+export function startJointTraining(group) {
+ return request({
+ url: `/api/jointTraining/room/simulation`,
+ method: 'post',
+ params: {
+ group: group
+ }
+ });
+}
+
+// 获取个人信息
+export function getUserRoles(group) {
+ return request({
+ url: `/api/jointTraining/room/user/role`,
+ method: 'get',
+ params: {
+ group: group
+ }
+ });
+}
+
+// 返回房间
+export function putJointTrainingState() {
+ return request({
+ url: `/api/jointTraining/room/back`,
+ method: 'put',
+ });
+}
+
+// 踢出用户
+export function putJointTrainingUserkicked(userId, group) {
+ return request({
+ url: `/api/jointTraining/room/user`,
+ method: 'put',
+ params: {
+ userId: userId,
+ group: group,
+ }
+ });
+}
+
+// 管理员结束所有人的仿真
+export function putJointTrainingSimulation(group) {
+ return request({
+ url: `/api/jointTraining/room/simulation/all`,
+ method: 'put',
+ params: {
+ group: group,
+ }
+ });
+}
+
+// 结束仿真返回房间
+export function putJointTrainingSimulationUser(group) {
+ return request({
+ url: `/api/jointTraining/room/simulation/user/exit`,
+ method: 'put',
+ params: {
+ group: group,
+ }
+ });
+}
+
+// 进入仿真
+export function putJointTrainingSimulationEntrance(group) {
+ return request({
+ url: `/api/jointTraining/room/simulation/user/entrance`,
+ method: 'put',
+ params: {
+ group: group,
+ }
+ });
+}
+
+/**
+ * 权限获取(房间权限)
+ */
+export function getPermissionJoint(group) {
+ return request({
+ url: '/api/jointTraining/qrCode',
+ method: 'get',
+ params: {
+ group: group
+ }
+ });
+}
\ No newline at end of file
diff --git a/src/api/jlmap3d/load3ddata.js b/src/api/jlmap3d/load3ddata.js
new file mode 100644
index 000000000..b003b30b6
--- /dev/null
+++ b/src/api/jlmap3d/load3ddata.js
@@ -0,0 +1,77 @@
+import request from '@/utils/request';
+
+/** 获取地图版本信息*/
+export function getPublishMapVersion(skinStyle) {
+ return request({
+ url: `/api/map/${skinStyle}/version`,
+ method: 'get'
+ });
+}
+
+/** 获取发布地图详细内容*/
+export function getPublishMapDetail(skinStyle) {
+ let datad = request({
+ url: `/api/map/${skinStyle}/details`,
+ method: 'get'
+ });
+ return datad.then();
+}
+
+
+/** 根据地图id获取地图信息*/
+export function getPublishMapInfo(mapId) {
+ return request({
+ url: `/api/map/${mapId}`,
+ method: 'get'
+ });
+}
+
+
+/** 获取草稿地图详细内容*/
+export function getMapDetail(id) {
+ return request({
+ url: `/api/mapBuild/${id}/mapDataDetail`,
+ method: 'get'
+ });
+}
+
+/** 创建地图3d数据*/
+export function set3dMapData(data) {
+ return request({
+ url: `/api/mapBuild/3dMapData`,
+ method: 'post',
+ data: data
+ });
+}
+
+/**通过地图id获取地图3d数据*/
+export function get3dMapData(mapId) {
+ return request({
+ url: `/api/mapBuild/3dMapData/${mapId}`,
+ method: 'get'
+ });
+}
+
+/** 更新地图3d数据*/
+export function update3dMapData(data) {
+ return request({
+ url: `/api/mapBuild/3dMapData/${data.id}`,
+ method: 'put',
+ data: data
+ });
+}
+
+/** 获取模型资源列表*/
+export function loadmap3dModel() {
+ return request({
+ url: `/api/map3dModel/all`,
+ method: 'get'
+ });
+}
+export function getPublish3dMapDetail(skinStyle) {
+ let datad = request({
+ url: `/api/map/${skinStyle}/3dMapData`,
+ method: 'get'
+ });
+ return datad.then();
+}
diff --git a/src/api/jmap/lesson.js b/src/api/jmap/lesson.js
index fbb3187b4..5a55d45f4 100644
--- a/src/api/jmap/lesson.js
+++ b/src/api/jmap/lesson.js
@@ -2,67 +2,67 @@ import request from '@/utils/request';
/** 获取发布的课程列表*/
export function getPublishLessonList() {
- return request({
- url: '/api/lesson',
- method: 'get'
- });
+ return request({
+ url: '/api/lesson',
+ method: 'get'
+ });
}
/** 获取发布列表树*/
export function getPublishLessonTree(params) {
- return request({
- url: '/api/lesson/tree',
- method: 'get',
- params: params || {}
- });
+ return request({
+ url: '/api/lesson/tree',
+ method: 'get',
+ params: params || {}
+ });
}
/** 获取发布课程列表*/
export function getPublishLessonDetail(data) {
- return request({
- url: `/api/lesson/${data.id}`,
- method: 'get'
- });
+ return request({
+ url: `/api/lesson/${data.id}`,
+ method: 'get'
+ });
}
/** 发布课程分页列表列表*/
export function publishLessonList(param) {
- return request({
- url: `/api/lesson/publishedLesson`,
- method: 'get',
- params: param
- });
+ return request({
+ url: `/api/lesson/publishedLesson`,
+ method: 'get',
+ params: param
+ });
}
/** 删除发布课程*/
export function delPublishLesson(lessonId) {
- return request({
- url: `/api/lesson/publishedLesson/${lessonId}`,
- method: 'delete'
- });
+ return request({
+ url: `/api/lesson/publishedLesson/${lessonId}`,
+ method: 'delete'
+ });
}
-/** 发布课程上架*/
+/**发布课程上架*/
export function putLessonOnLine(id) {
- return request({
- url: `/api/lesson/${id}/onLine`,
- method: 'put'
- });
+ return request({
+ url: `/api/lesson/${id}/onLine`,
+ method: 'put',
+ });
}
-/** 发布课程下架*/
+/**发布课程下架*/
export function putLessonOffLine(id) {
- return request({
- url: `/api/lesson/${id}/offLine`,
- method: 'put'
- });
+ return request({
+ url: `/api/lesson/${id}/offLine`,
+ method: 'put',
+ });
}
/**
* 获取地图产品下的课程列表
*/
export function getCommodityProductLesson(prdCode) {
- return request({
- url: `/api/lesson/${prdCode}/list`,
- method: 'get'
- });
-}
+ return request({
+ url: `/api/lesson/${prdCode}/list`,
+ method: 'get',
+ });
+}
\ No newline at end of file
diff --git a/src/api/login.js b/src/api/login.js
index eb1297b44..60f1e6463 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -1,77 +1,68 @@
import request from '@/utils/request';
-
-// 修改密码
-export function changePassword(userId, data) {
- return request({
- url: `/api/login/${userId}/password`,
- method: 'put',
- data: data
- });
-}
-
// 账号密码 其他系统
export function login(params) {
- return request({
- url: '/api/login',
- method: 'post',
- data: params
- });
+ return request({
+ url: '/api/login',
+ method: 'post',
+ data: params
+ });
}
// 获取登陆url 二维码 其他系统
export function getLoginUrl(params) {
- return request({
- url: '/api/login/url',
- method: 'get',
- params: params
- });
+ return request({
+ url: '/api/login/url',
+ method: 'get',
+ params: params
+ });
}
+
// 获取登录信息
export function getInfo(token) {
- return request({
- url: '/api/login/getUserInfo',
- method: 'get',
- params: { token }
- });
+ return request({
+ url: '/api/login/getUserInfo',
+ method: 'get',
+ params: { token }
+ });
}
// 登出
export function logout(token) {
- return request({
- url: '/api/login/logout',
- method: 'get',
- params: {
- token
- }
- });
+ return request({
+ url: '/api/login/logout',
+ method: 'get',
+ params: {
+ token
+ }
+ });
}
// 检查登陆状态
export function checkLoginStatus(sessionId) {
- return new Promise((resolve, reject) => {
- request({
- url: '/api/login/checkStatus',
- method: 'get',
- params: {
- sessionId: sessionId
- }
- }).then(response => {
- if (response.data.status === '2') {
- resolve(response);
- } else {
- reject(response);
- }
- }).catch(error => {
- reject(error);
- });
- });
+ return new Promise((resolve, reject) => {
+ request({
+ url: '/api/login/checkStatus',
+ method: 'get',
+ params: {
+ sessionId: sessionId
+ }
+ }).then(response => {
+ if (response.data.status === '2') {
+ resolve(response);
+ } else {
+ reject(response);
+ }
+ }).catch(error => {
+ reject(error);
+ });
+ });
}
// 检测持续在线 防止掉线在大屏或者仿真系统下
export function checkLoginLine() {
- return request({
- url: '/api/cache/heartBeat',
- method: 'get'
- });
+ return request({
+ url: '/api/cache/heartBeat',
+ method: 'get',
+ });
}
diff --git a/src/api/management/mapskin.js b/src/api/management/mapskin.js
index 1c17e8d0c..98cf524c4 100644
--- a/src/api/management/mapskin.js
+++ b/src/api/management/mapskin.js
@@ -2,68 +2,68 @@ import request from '@/utils/request';
/** 分页查询皮肤*/
export function getSkinStylePageList(params) {
- return request({
- url: `/api/mapSkin`,
- method: 'get',
- params: params
- });
+ return request({
+ url: `/api/mapSkin`,
+ method: 'get',
+ params: params
+ });
}
/** 添加皮肤*/
export function addSkinStyle(data) {
- return request({
- url: `/api/mapSkin`,
- method: 'post',
- data: data
- });
+ return request({
+ url: `/api/mapSkin`,
+ method: 'post',
+ data: data
+ });
}
/** 删除皮肤*/
export function delSkinStyle(id) {
- return request({
- url: `/api/mapSkin/${id}`,
- method: 'delete'
- });
+ return request({
+ url: `/api/mapSkin/${id}`,
+ method: 'delete'
+ });
}
/** 查询地图皮肤 */
export function querySkinStyle(id) {
- return request({
- url: `/api/mapSkin/${id}`,
- method: 'get'
- });
+ return request({
+ url: `/api/mapSkin/${id}`,
+ method: 'get'
+ });
}
/** 修改地图皮肤*/
export function updateSkinStyle(data) {
- return request({
- url: `/api/mapSkin/${data.id}`,
- method: 'put',
- data: data
- });
+ return request({
+ url: `/api/mapSkin/${data.id}`,
+ method: 'put',
+ data: data
+ });
}
/** 通过皮肤Code更新地图皮肤*/
export function updateSkinStyleByCode(data) {
- return request({
- url: `/api/mapSkin/${data.code}/update`,
- method: 'put',
- data: data
- });
+ return request({
+ url: `/api/mapSkin/${data.code}/update`,
+ method: 'put',
+ data: data
+ });
}
/** 查询皮肤是否存在*/
export function querySkinStyleExistByCode(code) {
- return request({
- url: `/api/mapSkin/${code}/exist`,
- method: 'get'
- });
+ return request({
+ url: `/api/mapSkin/${code}/exist`,
+ method: 'get'
+ });
}
/** 获取皮肤列表*/
export function getSkinStyleList() {
- return request({
- url: `/api/mapSkin/list`,
- method: 'get'
- });
+ return request({
+ url: `/api/mapSkin/list`,
+ method: 'get'
+ });
}
diff --git a/src/api/quest.js b/src/api/quest.js
new file mode 100644
index 000000000..6491751e3
--- /dev/null
+++ b/src/api/quest.js
@@ -0,0 +1,40 @@
+import request from '@/utils/request';
+
+/** 分页查找仿真任务*/
+export function getQuestPageList(params) {
+ return request({
+ url: `/api/quest/paging`,
+ method: 'get',
+ params: params
+ });
+}
+/** 创建任务 */
+export function createQuest(data) {
+ return request({
+ url: `/api/quest`,
+ method: 'post',
+ data
+ });
+}
+/** 根据任务id删除任务 */
+export function deleteQuest(id) {
+ return request({
+ url: `/api/quest/${id}`,
+ method: 'delete'
+ });
+}
+/** 根据id查询任务基础信息 */
+export function getQuestById(id) {
+ return request({
+ url: `/api/quest/${id}`,
+ method: 'get',
+ });
+}
+/** 更新任务基本信息 */
+export function updateQuest(id, data) {
+ return request({
+ url: `/api/quest/${id}`,
+ method: 'put',
+ data
+ });
+}
diff --git a/src/api/runplan.js b/src/api/runplan.js
new file mode 100644
index 000000000..76165e6f0
--- /dev/null
+++ b/src/api/runplan.js
@@ -0,0 +1,379 @@
+import request from '@/utils/request';
+
+/**
+ * 获取运行图列表
+ */
+export function getRunPlanList() {
+ return request({
+ url: '/api/rp/tree',
+ method: 'get'
+ });
+}
+
+/**
+ * 获取地图速度等级列表
+ */
+export function getSpeedLevels(skinStyle) {
+ return request({
+ url: `/api/rp/${skinStyle}/speed`,
+ method: 'get',
+ });
+}
+
+/**
+ * 新建地图速度等级列表
+ */
+export function newSpeedLevels(data) {
+ return request({
+ url: '/api/rp/speed',
+ method: 'post',
+ data: data
+ });
+}
+
+/**
+ * 获取运行图的车站列表
+ */
+export function getStationList(mapId) {
+ return request({
+ url: `/api/rp/station/${mapId}`,
+ method: 'get',
+ });
+}
+
+/**
+ * 通过皮肤获取运行图车站列表
+ */
+export function getStationListBySkinStyle(skinStyle) {
+ return request({
+ url: `/api/rp/station/${skinStyle}/bySkin`,
+ method: 'get',
+ });
+}
+
+/**
+ * 创建运行图
+ */
+export function newRunPlan(data) {
+ return request({
+ url: '/api/rp',
+ method: 'post',
+ data: data
+ });
+}
+
+/**
+ * 查询运行图获取数据
+ */
+export function queryRunPlan(planId) {
+ return request({
+ url: `/api/rp/${planId}`,
+ method: 'get'
+ });
+}
+
+/**
+ * 删除运行图
+ */
+export function deleteRunPlan(planId) {
+ return request({
+ url: `/api/rp/${planId}`,
+ method: 'delete'
+ });
+}
+
+/**
+ * 发布运行图
+ */
+export function publishRunPlan(data) {
+ return request({
+ url: `/api/rp/${data.planId}/publish`,
+ method: 'post',
+ data: data
+ });
+}
+
+
+/**
+ * 导入真实运行图
+ */
+export function importRunPlan(data) {
+ return request({
+ url: `/api/rp/${data.skinStyle}/prdPlan`,
+ method: 'post',
+ data: data.runPlanList
+ });
+}
+
+/** 获取运行图停车点列表*/
+export function getRunPlanStopPointList(skinStyle) {
+ return request({
+ url: `/api/rp/stopPoint/${skinStyle}`,
+ method: 'get',
+ });
+}
+
+
+/** 运行图*/
+export function getRpListByMapId(mapId) {
+ return request({
+ url: `/api/rp/${mapId}/list`,
+ method: 'get'
+ });
+}
+
+/** 获取站间运行时间*/
+export function getStationRunning(skinStyle) {
+ return request({
+ url: `/api/rp/${skinStyle}/stationRunning`,
+ method: 'get'
+ });
+}
+
+/** 设置站间运行时间*/
+export function setStationRunning(skinStyle, data) {
+ return request({
+ url: `/api/rp/${skinStyle}/stationRunning`,
+ method: 'put',
+ data: data
+ });
+}
+
+/** 创建运行图*/
+export function createEmptyPlan(data) {
+ return request({
+ url: `/api/rp`,
+ method: 'post',
+ data: data
+ });
+}
+
+/** 查询运行图服务号是否存在*/
+export function checkServiceNumberExist({ planId, serviceNumber }) {
+ return request({
+ url: `/api/rp/${planId}/${serviceNumber}/service`,
+ method: 'get'
+ });
+}
+
+/** 查询交路列表*/
+export function getRoutingList(planId) {
+ return request({
+ url: `/api/rp/${planId}/routingList`,
+ method: 'get'
+ });
+}
+
+/** 根据交路查询交路区段列表*/
+export function querySectionListByRouting({ planId, routingCode }) {
+ return request({
+ url: `/api/rp/${planId}/${routingCode}/routingSectionList`,
+ method: 'get'
+ });
+}
+
+/** 有效性检查*/
+export function planEffectiveCheck(planId) {
+ return request({
+ url: `/api/rp/${planId}/check`,
+ method: 'get'
+ });
+}
+
+/** 增加计划*/
+export function addPlanService(data) {
+ return request({
+ url: `/api/rp/${data.planId}/service`,
+ method: 'post',
+ data: data,
+ });
+}
+
+/** 删除计划*/
+export function deletePlanService(data) {
+ return request({
+ url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
+ method: 'delete'
+ });
+}
+
+/** 复制计划*/
+export function duplicateService(data) {
+ return request({
+ url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
+ method: 'post',
+ data: data
+ });
+}
+
+/** 修改计划*/
+// export function updatePlanService(data) {
+// return request({
+// url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
+// method: 'put',
+// data: data
+// })
+// }
+
+/** 增加任务*/
+export function addPlanTrip(data) {
+ return request({
+ url: `/api/rp/${data.planId}/${data.serviceNumber}/trip`,
+ method: 'post',
+ data: data,
+ });
+}
+
+/** 删除任务*/
+export function deletePlanTrip(params) {
+ return request({
+ url: `/api/rp/${params.planId}/trip/${params.SDTNumber}`,
+ method: 'delete',
+ params: { deleteBefore: params.deleteBefore }
+ });
+}
+
+/** 修改任务*/
+export function updatePlanTrip(data) {
+ return request({
+ url: `/api/rp/${data.planId}/trip/${data.SDTNumber}`,
+ method: 'put',
+ data: data
+ });
+}
+
+/** 根据车次号查询交路*/
+export function getRoutingBySDTNumber(params) {
+ return request({
+ url: `/api/rp/${params.planId}/routing`,
+ method: 'get',
+ params: {
+ SDTNumber: params.SDTNumber
+ }
+ });
+}
+
+
+/** 运行图仿真测试*/
+export function runPlanNotify({ planId }) {
+ return request({
+ url: `/api/rp/${planId}/simulation`,
+ method: 'get',
+ });
+}
+
+/** 获取运行计划模板列表*/
+export function runPlanTemplateList(params) {
+ return request({
+ url: '/api/runPlan/template',
+ method: 'get',
+ params: params
+ });
+}
+
+/** 删除运行图模板*/
+export function deleteRunPlanTemplate(planId) {
+ return request({
+ url: `/api/runPlan/template/${planId}`,
+ method: 'delete'
+ });
+}
+
+/** 生成通用每日运行图*/
+export function generateCommonRunPlanEveryDay(planId) {
+ return request({
+ url: `/api/runPlan/template/generate/${planId}`,
+ method: 'post'
+ });
+}
+
+/** 生成用户每日运行图*/
+export function generateUserRunPlanEveryDay(planId, group) {
+ return request({
+ url: `/api/runPlan/daily/privilege/${planId}?group=${group}`,
+ method: 'post'
+ });
+}
+/** 获取运行计划每日列表*/
+export function runPlanEveryDayList(params) {
+ return request({
+ url: '/api/runPlan/daily',
+ method: 'get',
+ params: params
+ });
+}
+
+/** 删除运行图每日计划*/
+export function deleteRunPlanEveryDay(planId) {
+ return request({
+ url: `/api/runPlan/daily/${planId}`,
+ method: 'delete'
+ });
+}
+
+/** 获取地图运行图的车次号*/
+export function getPublishMapTrainNos(skinStyle) {
+ return request({
+ url: `/api/runPlan/daily/${skinStyle}/trainNos`,
+ method: 'get'
+ });
+}
+
+/** 获取服务号、车组号*/
+export function getPublishMapTrainServerNos(skinStyle) {
+ return request({
+ url: `/api/runPlan/daily/${skinStyle}/serverNos`,
+ method: 'get'
+ });
+}
+
+/** 分页查询加载计划*/
+export function getRunPlanLoadList(params) {
+ return request({
+ url: `/api/runPlan/daily/runPlanLoad`,
+ method: 'get',
+ params: params
+ });
+}
+
+/** 创建加载计划*/
+export function createRunPlanLoad(data) {
+ return request({
+ url: `/api/runPlan/daily/runPlanLoad`,
+ method: 'post',
+ data: data
+ });
+}
+
+/** 管理创建通用加载计划*/
+export function createRunPlanCommon(data) {
+ return request({
+ url: `/api/runPlan/daily/runPlanLoad/common`,
+ method: 'post',
+ data: data
+ });
+}
+
+/** 删除加载计划*/
+export function deleteRunPlanLoad(planId) {
+ return request({
+ url: `/api/runPlan/daily/runPlanLoad/${planId}`,
+ method: 'delete'
+ });
+}
+
+/** 查询模板运行图数据*/
+export function queryRunPlanTemplate(planId) {
+ return request({
+ url: `/api/runPlan/template/${planId}`,
+ method: 'get'
+ })
+}
+
+/** 查询当日运行图数据*/
+export function queryRunPlanDaily(planId) {
+ return request({
+ url: `/api/runPlan/daily/${planId}`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/simulation.js b/src/api/simulation.js
new file mode 100644
index 000000000..8deaed2ec
--- /dev/null
+++ b/src/api/simulation.js
@@ -0,0 +1,370 @@
+import request from '@/utils/request';
+
+/** 获取故障规则列表*/
+export function getFailureGenerateRules(params) {
+ return request({
+ url: `/api/simulation/failureGenerateRules`,
+ method: 'get',
+ params: params
+ });
+}
+
+/** 设置自动故障*/
+export function setFailureMode(data, group) {
+ return request({
+ url: `/api/simulation/${group}/failureMode`,
+ method: 'post',
+ data: data,
+ });
+}
+
+
+/**
+ * 仿真系统按计划行车
+ */
+export function runDiagramStart(params, group) {
+ return request({
+ url: `/api/simulation/${group}/start`,
+ method: 'put',
+ params: params
+ });
+}
+
+/**
+ * 仿真系统结束计划行车
+ */
+export function runDiagramOver(group) {
+ return request({
+ url: `/api/simulation/${group}/over`,
+ method: 'put',
+ });
+}
+
+/**
+ * 退出仿真系统
+ */
+export function runDiagramQuit(group) {
+ return request({
+ url: `/api/simulation/${group}/quit`,
+ method: 'put',
+ });
+}
+
+/** 获取仿真系统时间*/
+export function runDiagramGetTime(group) {
+ return request({
+ url: `/api/simulation/${group}/systemTime`,
+ method: 'get'
+ });
+}
+
+// 查看是否开始按计划行车
+export function runDiagramIsStart(group) {
+ return request({
+ url: `/api/simulation/${group}/isRunPlanStart`,
+ method: 'get'
+ });
+}
+
+
+/**
+ * 仿真系统CBTC
+ * @param {*} mapId
+ */
+export function simulationNotify({ mapId, code }) {
+ return request({
+ url: `/api/simulation/${mapId}/${code}`,
+ method: 'get'
+ });
+}
+
+/**
+ * 大屏系统CBTC
+ * @param {*} mapId
+ */
+export function bitScreenNotify({ mapId }) {
+ return request({
+ url: `/api/simulation/bigScreen/${mapId}`,
+ method: 'get'
+ });
+}
+
+/**
+ * 实训系统CBTC
+ * @param {*} data
+ */
+export function trainingNotify({ trainingId }) {
+ return request({
+ url: `/api/simulation/training/${trainingId}`,
+ method: 'get'
+ });
+}
+
+/**
+ * 考试系统CBTC
+ * @param {*} data
+ */
+export function examNotify({ examId }) {
+ return request({
+ url: `/api/simulation/exam/${examId}`,
+ method: 'get'
+ });
+}
+
+
+/**获取用户实训列表*/
+export function getSimulationList(data) {
+ return request({
+ url: `/api/simulation/stats`,
+ method: 'get',
+ params: data
+ });
+}
+
+/**添加用户仿真数据*/
+export function postSimulationStats(data) {
+ return request({
+ url: `/api/simulation/stats`,
+ method: 'post',
+ data: data
+ });
+}
+
+/**更新用户仿真数据*/
+export function putSimulationStats(data) {
+ return request({
+ url: `/api/simulation/${data.id}/stats`,
+ method: 'put',
+ data: data
+ });
+}
+
+/**删除用户仿真数据*/
+export function deleteSimulationStats(statsId) {
+ return request({
+ url: `/api/simulation/${statsId}`,
+ method: 'delete',
+ });
+}
+
+
+/** 获取用户鼠标左键选中的设备信息*/
+export function letfMouseSelectDevice(deviceCode, group) {
+ return request({
+ url: `/api/simulation/${group}/device/${deviceCode}`,
+ method: 'get',
+ });
+}
+
+/** 获取每日运行图*/
+export function getEveryDayRunPlanData(group) {
+ return request({
+ url: `/api/simulation/${group}/runPlan`,
+ method: 'get',
+ });
+}
+
+/** 生成手机同步仿真二维码*/
+// export function getSimulationQrCodeUrl(group) {
+// return request({
+// url: `/api/simulation/${group}/qrCode`,
+// method: 'post'
+// });
+// }
+
+/** 录制脚本仿真*/
+export function scriptRecordNotify(questId) {
+ return request({
+ url: `/api/simulation/questRecord/${questId}`,
+ method: 'get'
+ })
+}
+
+/** 保存剧本背景*/
+export function saveScriptScenes(group) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/scenes`,
+ method: 'post'
+ })
+}
+
+
+/** 保存录制任务数据*/
+export function saveScriptData(group) {
+ return request({
+ url: `/api/simulation/${group}/questRecord`,
+ method: 'post',
+ });
+}
+
+
+
+/** 清除仿真剧本数据*/
+export function dumpScriptData(scriptId) {
+ return request({
+ url: `/api/simulation/${scriptId}/clearScriptRecord`,
+ method: 'post'
+ });
+}
+
+
+/** 查询录制剧本步骤*/
+export function queryScriptStep(group) {
+ return request({
+ url: `/api/simulation/${group}/scriptRecordStage`,
+ method: 'get'
+ });
+}
+
+/** 获取指定时间里可加载列车的个数*/
+export function getDesignatedTimeTrainNum(params, group) {
+ return request({
+ url: `/api/simulation/${group}/plan/trainNum`,
+ method: 'get',
+ params
+ })
+}
+
+/** 根据成员角色查询设备列表*/
+export function getDevicesByRole(group, params) {
+ return request({
+ url: `/api/simulation/${group}/role/devices`,
+ method: 'get',
+ params
+ })
+}
+/** 获取任务录制的成员角色列表 */
+export function getMembersByGroup(group) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/members`,
+ method: 'get',
+ })
+}
+
+/** 添加任务角色成员 */
+export function postQuestMember(group, data) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/member`,
+ method: 'post',
+ data
+ })
+}
+
+/** 删除任务角色成员 */
+export function deleteQuestMember(group, memberId) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/member/${memberId}`,
+ method: 'delete',
+ })
+}
+
+// /** 添加/修改任务角色行为 */
+export function postMemberBehavior(group, memberId, data) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/${memberId}/behavior`,
+ method: 'post',
+ data
+ })
+}
+/** 删除任务角色行为 */
+export function deleteMemberBehavior(group, memberId, behaviorId) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}`,
+ method: 'delete'
+ })
+}
+/** 删除任务角色行为动作 */
+export function deleteMemberBehaviorAction(group, memberId, behaviorId, actionId) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action/${actionId}`,
+ method: 'delete'
+ })
+}
+/** 添加/修改任务角色行为动作 */
+export function postMemberBehaviorAction(group, memberId, behaviorId, data) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action`,
+ method: 'post',
+ data
+ })
+}
+/** 添加/修改任务目标条件*/
+export function postTargetConditionAction(group, data) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/targetCondition`,
+ method: 'post',
+ data
+ })
+}
+/** 删除任务目标条件*/
+export function deleteTargetConditionAction(group, tcId) {
+ return request({
+ url: `/api/simulation/${group}/questRecord/targetCondition/${tcId}`,
+ method: 'delete'
+ })
+}
+
+/** 分页查询存在的仿真 */
+export function getExistingSimulation(params) {
+ return request({
+ url: `/api/simulation/manage/page`,
+ method: 'get',
+ params,
+ });
+}
+
+/** 删除存在的仿真 */
+export function deleteExistingSimulation(group) {
+ return request({
+ url: `/api/simulation/manage/${group}`,
+ method: 'delete',
+ });
+}
+/** 根据设备类型获取设备列表 */
+export function getDeviceCodeByDeviceType(group, params) {
+ return request({
+ url: `/api/simulation/${group}/deviceType/devices`,
+ method: 'get',
+ params
+ });
+}
+/** 根据设备类型获取设备条件列表 */
+export function getDeviceCoditionByDeviceType(params) {
+ return request({
+ url: `/api/simulation/deviceType/conditions`,
+ method: 'get',
+ params
+ });
+}
+/** 获取任务录制的数据*/
+export function getQuestRecord(group) {
+ return request({
+ url: `/api/simulation/${group}/questRecord`,
+ method: 'get',
+ });
+}
+
+
+/** 加载任务*/
+export function loadQuest(questId, group) {
+ return request({
+ url: `/api/simulation/${group}/quest/${questId}`,
+ method: 'post',
+ });
+}
+
+/** 退出任务*/
+export function quitQuest(group) {
+ return request({
+ url: `/api/simulation/${group}/quest`,
+ method: 'put'
+ })
+}
+
+/** 根据group获取仿真对象*/
+export function getSimulationInfo(group) {
+ return request({
+ url: `/api/simulation/${group}`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/simulationRecord.js b/src/api/simulationRecord.js
new file mode 100644
index 000000000..f5e68fb7f
--- /dev/null
+++ b/src/api/simulationRecord.js
@@ -0,0 +1,67 @@
+
+import request from '@/utils/request';
+
+/** 分页查询仿真记录*/
+export function getSimulationRelpayList(params) {
+ return request({
+ url: `/api/simulationRecord`,
+ method: 'get',
+ params: params
+ });
+}
+
+// 删除回放
+export function delSimulationRecord(replayId) {
+ return request({
+ url: `/api/simulationRecord/${replayId}`,
+ method: 'delete',
+ });
+}
+
+/** 回放*/
+export function simulationRelpay(replayId) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/playBack`,
+ method: 'get'
+ });
+}
+
+// 结束回放
+export function putsSimulationRecord(replayId) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/over`,
+ method: 'put',
+ });
+}
+
+// 暂停回放
+export function putsSimulationRecordPause(replayId) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/pause`,
+ method: 'put',
+ });
+}
+
+// 播放回放
+export function putsSimulationRecordPlay(replayId) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/play`,
+ method: 'put',
+ });
+}
+
+// 设置速度回放
+export function putsSimulationRecordPlaySpeed(replayId, speed) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/playSpeed?playSpeed=${speed}`,
+ method: 'put',
+ });
+}
+
+// 播放
+export function putsSimulationRecordplayTime(replayId, offsetSeconds) {
+ return request({
+ url: `/api/simulationRecord/${replayId}/playTime?offsetSeconds=${offsetSeconds}`,
+ method: 'put',
+ });
+}
\ No newline at end of file
diff --git a/src/api/table.js b/src/api/table.js
new file mode 100644
index 000000000..10bac1b1b
--- /dev/null
+++ b/src/api/table.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request';
+
+export function getList(params) {
+ return request({
+ url: '/table/list',
+ method: 'get',
+ params
+ });
+}
diff --git a/src/api/test.js b/src/api/test.js
deleted file mode 100644
index a5b85f944..000000000
--- a/src/api/test.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import request from '@/utils/request';
-
-/** 获取发布地图详细内容*/
-export function getPublishMapDetail(skinStyle) {
- return request({
- url: `/api/map/${skinStyle}/details`,
- method: 'get'
- });
-}
\ No newline at end of file
diff --git a/src/api/user.js b/src/api/user.js
deleted file mode 100644
index dd4041fee..000000000
--- a/src/api/user.js
+++ /dev/null
@@ -1,99 +0,0 @@
-import request from '@/utils/request';
-
-
-/** 查询用户参数*/
-export function getUserConfigInfo() {
- return request({
- url: '/api/user/config',
- method: 'get'
- });
-}
-
-// /** 注册用户*/
-// export function createUserInfo(data) {
-// return request({
-// url: '/api/userinfo/create',
-// method: 'put',
-// data: data
-// });
-// }
-// /** 根据用户Id获取用户信息*/
-// export function getUserInfoByOpenId(params) {
-// return request({
-// url: '/api/userinfo/getByOpenId',
-// method: 'get',
-// params: params
-// });
-// }
-
-// /** 根据姓名或者手机号查询用户*/
-// export function getUserInfoByNameOrMobile(params) {
-// return request({
-// url: '/api/userinfo/nameOrMobile',
-// method: 'get',
-// params: params
-// });
-// }
-
-// /** 设置用户参数*/
-// export function setUserConfigInfo(data) {
-// return request({
-// url: '/api/user/config',
-// method: 'post',
-// data: data
-// });
-// }
-
-// /** 获取销售列表*/
-// export function getSellerList() {
-// return request({
-// url: `/api/user/seller`,
-// method: 'get'
-// });
-// }
-
-// /** 查询用户列表*/
-// export function getUserList(params) {
-// return request({
-// url: `/api/user`,
-// method: 'get',
-// params: params
-// });
-// }
-
-// /** 模糊查询用户 昵称、名称、手机号*/
-// export function getDimUserList(params) {
-// return request({
-// url: `/api/user/fuzzy`,
-// method: 'get',
-// params: params
-// });
-// }
-
-
-// /** 获取用户订阅地图列表*/
-// export function getUserSubscribe(userId) {
-// return request({
-// url: `/api/user/subscribe/${userId}`,
-// method: 'get'
-// });
-// }
-
-// /** 保存用户订阅地图列表*/
-// export function saveUserSubscribe(data) {
-// return request({
-// url: '/api/user/subscribe',
-// method: 'post',
-// data: data
-// });
-// }
-
-
-// // 修改用户权限
-// export function putRoles(data) {
-// return request({
-// url: `/api/user/${data.id}/role`,
-// method: 'put',
-// data: data
-// });
-// }
diff --git a/src/assets/downSection.png b/src/assets/downSection.png
new file mode 100644
index 0000000000000000000000000000000000000000..58dc1d231d7e645c7ad018878632119ff564c53a
GIT binary patch
literal 4925
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