taskScreen.vue 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. <template>
  2. <v-scale-screen width="2200" height="1080">
  3. <div class="task_screen_cotainer">
  4. <div class="task_header">「{{ currentTaskName }}」当前态势</div>
  5. <div class="tag1" @click="jumpToHistory">
  6. 历史态势
  7. </div>
  8. <div class="tag2" @click="jumpToDangqian">
  9. 当前态势列表
  10. </div>
  11. <div class="content_cotainer">
  12. <div class="center_chart_cotainer_task" id="taskItem">
  13. <div class="task_detail_cotainer_task" style="width:100%;">
  14. <div v-if="false" class="header_line_style">
  15. <div class="headerTitle"></div>
  16. </div>
  17. <div v-if="false" class="task_name_header">「{{ currentTaskName }}」任务态势大屏</div>
  18. <!-- 任务屏幕 -->
  19. <div class="task_item_header">
  20. <el-select
  21. v-model="wholeOutTaskId"
  22. placeholder="「切换任务」"
  23. style="width:270px;"
  24. @change="changeTask"
  25. filterable
  26. >
  27. <el-option
  28. v-for="item in taskOPtion"
  29. :key="item.value"
  30. :label="item.label"
  31. :value="item.value"
  32. >
  33. </el-option>
  34. </el-select>
  35. <el-image
  36. @click="showMoreInfo('more')"
  37. class="showLessStyle"
  38. style="width: 30px; height: 22px; margin-right:6px; margin-left: 10px;"
  39. :src="require('../assets/img/small.svg')"
  40. fit="contain"
  41. >
  42. </el-image>
  43. <el-image
  44. v-if="false"
  45. @click="showMoreInfo('less')"
  46. :src="require('../assets/img/iconMore.svg')"
  47. fit="contain"
  48. class="showLessStyle"
  49. style="width: 30px; height: 22px; margin-right:6px; margin-left: 10px;"
  50. >
  51. </el-image>
  52. </div>
  53. <div class="task_header_top">
  54. <div class="subject_task_item_task">
  55. <div class="task_outer_cotnainer_status">
  56. <div class="map_more_box">
  57. <div class="task_list_header" style="font-size:16px; margin: 0 24px 8px 0; white-space: nowrap; ">
  58. <el-image
  59. style="width: 30px; height: 22px; margin-right:6px;"
  60. :src="require('../assets/img/rightIcon.svg')"
  61. fit="contain"
  62. >
  63. </el-image>
  64. 课目分布
  65. </div>
  66. <div class="select_lsit_box">
  67. <el-select
  68. v-model="systemSubjectId"
  69. placeholder="切换系统名称"
  70. style="width:55%; margin-right:5px;"
  71. @change="changeTaskAndSystem"
  72. clearable
  73. filterable
  74. >
  75. <el-option
  76. v-for="item in systemOption"
  77. :key="item.value"
  78. :label="item.label"
  79. :value="item.value"
  80. >
  81. </el-option>
  82. </el-select>
  83. <el-select
  84. v-model="unitSubjectValue"
  85. placeholder="切换单位名称"
  86. style="width:55%;"
  87. clearable
  88. @change="changeTaskAndUnit"
  89. filterable
  90. >
  91. <el-option
  92. v-for="item in unitOption"
  93. :key="item.value"
  94. :label="item.label"
  95. :value="item.value"
  96. >
  97. </el-option>
  98. </el-select>
  99. </div>
  100. </div>
  101. <div class="subject_list_container" id="subjectList">
  102. <template v-for="(item,index) in subjectDatas">
  103. <div class="subject_list_item_new" :key="index" @click="changeVideo(item.subjectName)">
  104. <div class="subject_list_header">
  105. <div>
  106. <div class="subject_list_name">
  107. {{ item.subjectName ||'-' }}
  108. </div>
  109. <div class="orgainzers">
  110. 参与人员:{{ item.participatingPeople && item.participatingPeople.join(',') || '-' }}
  111. </div>
  112. </div>
  113. <el-image
  114. style="width: 36px; height: 36px; "
  115. :src="subjectMap[item.status]"
  116. fit="contain"
  117. >
  118. </el-image>
  119. </div>
  120. <div class="system_task_style">
  121. <div>参加系统:{{ item.participatingSystems && item.participatingSystems.join(',') || '-'}}</div>
  122. <div
  123. v-if="item.status=='已完成'"
  124. class="view_table_style"
  125. @click="viewManData(item)">
  126. 表格查看
  127. </div>
  128. </div>
  129. </div>
  130. </template>
  131. </div>
  132. </div>
  133. </div>
  134. <div class="unit_map_box_task_new">
  135. <div class="map_more_box">
  136. <div class="task_list_header" style="font-size:16px; margin-bottom:8px;">
  137. <el-image
  138. style="width: 30px; height: 22px; margin-right:6px;"
  139. :src="require('../assets/img/rightIcon.svg')"
  140. fit="contain"
  141. >
  142. </el-image>
  143. 流程图
  144. </div>
  145. </div>
  146. <form-task-process-viewer
  147. :processInstanceId="processInstanceId"
  148. :processDefinitionId="processDefinitionId"
  149. v-if="isReady"
  150. ref="FormTaskProcessViewer"
  151. ></form-task-process-viewer>
  152. </div>
  153. </div>
  154. <div class="task_header_footer_task_new">
  155. <div class="subject_task_item_task" style="width:28.2%;">
  156. <div class="task_outer_cotnainer_status">
  157. <div class="task_outer_cotnainer_status">
  158. <div class="map_more_box">
  159. <div class="task_list_header" style="font-size:16px; margin-bottom:8px;">
  160. <el-image
  161. style="width: 30px; height: 22px; margin-right:6px;"
  162. :src="require('../assets/img/rightIcon.svg')"
  163. fit="contain"
  164. >
  165. </el-image>
  166. 指令监控
  167. </div>
  168. </div>
  169. <div class="subject_list_container_int" id="moninter">
  170. <div class="task_other_cotainer_scrool">
  171. <myscrollBoard :key="updatekey" :config="scrollTableConfig" style="width: 100%; height: 100%" />
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </div>
  177. <div class="unit_map_box_task">
  178. <!-- <div class="task_outer_cotnainer_status"> -->
  179. <div class="map_more_box">
  180. <div class="task_list_header" style="font-size: 16px; margin-bottom: 8px">
  181. <el-image
  182. style="width: 30px; height: 22px; margin-right: 6px"
  183. :src="require('../assets/img/rightIcon.svg')"
  184. fit="contain"
  185. ></el-image>
  186. <!-- 训练态势监控-->
  187. 指令监控
  188. </div>
  189. <!-- <el-image-->
  190. <!-- @click="showFull('allVideo')"-->
  191. <!-- style="width: 20px; height: 20px; margin-right: 6px; margin-top: -10px"-->
  192. <!-- :src="require('../assets/img/iconMore.svg')"-->
  193. <!-- fit="contain"-->
  194. <!-- class="moreBtn_style"-->
  195. <!-- ></el-image>-->
  196. </div>
  197. <!-- <div class="video_title">{{ camaraName[0] }}</div>-->
  198. <!-- <hk-camara v-if="HKCamaraShow" :companyVideoData="camaraData" @init="HKCardInit" ref="hkCard"/>-->
  199. </div>
  200. <div class="commandMonitoring_task">
  201. <div class="map_more_box">
  202. <div class="task_list_header" style="font-size: 16px; margin-bottom: 8px">
  203. <el-image
  204. style="width: 30px; height: 22px; margin-right: 6px"
  205. :src="require('../assets/img/rightIcon.svg')"
  206. fit="contain"
  207. ></el-image>
  208. 训练态势监控
  209. </div>
  210. <el-image
  211. @click="showFull1('allVideo')"
  212. style="width: 20px; height: 20px; margin-right: 6px; margin-top: -10px"
  213. :src="require('../assets/img/iconMore.svg')"
  214. fit="contain"
  215. class="moreBtn_style"
  216. ></el-image>
  217. </div>
  218. <!-- <div class="video_body2"><HKVideo2 :companyVideoData="mainVideoData" :videoType="2"></HKVideo2></div> -->
  219. <div class="task_outer_cotnainer_status">
  220. <hkv v-if="HKCardShow" :companyVideoData="hebingjiankongData" ref="hkv"/>
  221. <div class="center_no_data" v-if="false">
  222. <el-image
  223. style="width: 100px; height: 100px; margin-right: 6px"
  224. :src="require('../assets/img/build.png')"
  225. fit="contain"
  226. ></el-image>
  227. <div>系统正在建设中,敬请期待~</div>
  228. </div>
  229. </div>
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234. <!-- 任务详情弹窗 -->
  235. <el-dialog
  236. title=""
  237. :show-close="false"
  238. :destroy-on-close="true"
  239. :visible.sync="dialogVisible"
  240. width="650px"
  241. top="300px"
  242. >
  243. <div>
  244. <div class="task_detail_dialog">
  245. <div class="header_line_style"></div>
  246. <div class="task_dialog_box_other" v-if="dialogType == 2">
  247. <el-table
  248. :data="gridData"
  249. :header-cell-style="changeHeaderCellStyle"
  250. :cell-style="changeCellStyle"
  251. stripe
  252. :border="true"
  253. >
  254. <el-table-column
  255. align="center"
  256. property="participantName"
  257. label="姓名"
  258. max-width="350"
  259. ></el-table-column>
  260. <el-table-column align="center" property="score" label="成绩" max-width="300"></el-table-column>
  261. </el-table>
  262. </div>
  263. <div class="dialog_footer_box">
  264. <div class="view_more" @click="dialogVisible = false" style="color: #fff; padding: 3px 30px">关闭</div>
  265. </div>
  266. </div>
  267. </div>
  268. </el-dialog>
  269. </div>
  270. </div>
  271. </v-scale-screen>
  272. </template>
  273. <script>
  274. import myFlylineChartEnhanced from '../components/my-flyline-chart-enhanced/index'
  275. import myscrollBoard from '../components/myscroll-board/src/main'
  276. import sacleBox from '../components/sacle-box/index'
  277. import { request } from '../utils/request';
  278. var uploadedDataURL = require('../../public/json/taiyuan.json')
  279. import './taskScreen.css'
  280. import Videojs from "video.js"; // 引入Videojs
  281. import FormTaskProcessViewer from '../components/workflow/formTaskProcessViewer.vue';
  282. import hkv from '../components/hk/hkv.vue'
  283. import hkCamara from '../components/hk/hkCamara.vue'
  284. export default {
  285. components:{
  286. myFlylineChartEnhanced,
  287. sacleBox,
  288. myscrollBoard,
  289. hkv,
  290. hkCamara,
  291. FormTaskProcessViewer,
  292. },
  293. data() {
  294. return {
  295. SubjectInfo1:'',
  296. SubjectInfo2:'',
  297. SubjectInfo3:[],
  298. HKCardShow: false,
  299. HKCamaraShow: false,
  300. systemFinshedValue:'',
  301. unitFinshedValue:'',
  302. wholeOutTaskId:'',
  303. systemSubjectId:'',
  304. unitSubjectValue:'',
  305. subjectItem:{},
  306. processDefinitionId: "",
  307. processInstanceId:"",
  308. moreFlag:true,
  309. dialogVisible:false,
  310. taskList:[],
  311. websocket: null, //建立的连接
  312. websocketOrder: null, //建立的连接
  313. websocketBpmn: null, //建立的连接
  314. updatekey:'1',
  315. scrollTableConfig:{
  316. header: ['课目名称', '指令名称', '特情注入', '指令内容', '模训系统', '时间'],
  317. waitTime:1500,
  318. data: [],
  319. columnWidth: [80],
  320. oddRowBGC:'#072347',
  321. evenRowBGC:'#021736'
  322. },
  323. dialogType:1,
  324. subjectDatas:[],
  325. subjectMap:{
  326. '待执行':require('../assets/img/waite.png'),
  327. '执行中':require('../assets/img/doing.png'),
  328. '已完成':require('../assets/img/finshed.png') ,
  329. },
  330. instructList: [],
  331. unitOption: [],
  332. systemOption: [],
  333. taskOPtion: [],
  334. isReady: false,
  335. currentTaskName: "",
  336. currentTaskGrade: "",
  337. unitSubGradeValue: "",
  338. gridData: [],
  339. camaraSrc: ["", "", "", "", ""],
  340. completionRate: false,
  341. playerList: [],
  342. camaraName: ["监控名称", "监控名称", "监控名称", "监控名称", "监控名称"],
  343. videoList: [
  344. "videoPlayerTask",
  345. "videoPlayer_first",
  346. "videoPlayer_second",
  347. "videoPlayer_third",
  348. "videoPlayer_fourth"
  349. ],
  350. mainVideoData: {},
  351. currentSubject: '',
  352. camaraData:[],
  353. cardData:[],
  354. hebingjiankongData:[],
  355. cardName:[],
  356. cardSrc:[]
  357. };
  358. },
  359. methods:{
  360. HKCardInit(){
  361. this.HKCardShow = true;
  362. },
  363. jumpToHistory() {
  364. // this.$refs.hk.$destroy();
  365. // this.HKshow = false;
  366. this.$router.push("/situationScreen")
  367. },
  368. jumpToDangqian() {
  369. this.$router.push("/mainScreen")
  370. },
  371. // 表格样式修改
  372. changeHeaderCellStyle(row,column, rowIndex, columnIndex){
  373. if(row.columnIndex === 0){
  374. return 'background: #004279 ; color:#fff;'; // 修改的样式
  375. }else {
  376. return 'background: #004279 ;color:#fff; ';
  377. }
  378. },
  379. changeCellStyle(row,column, rowIndex, columnIndex){
  380. if(row.columnIndex === 0){
  381. return 'background: #0A427C ; color:#fff;'; // 修改的样式
  382. }else {
  383. return 'background: #0A427C ; color:#fff;';
  384. }
  385. },
  386. // 获取全部系统
  387. async getAllSystems(){
  388. let params={}
  389. const res = await request('/dt_screen/rest/v1/screen/listSystem/', 'get', params, false)
  390. const { errorCode, errorMessage, success,data } = res.data;
  391. if (success) {
  392. console.log('获取全部系统', data);
  393. this.systemOption = data.map((item)=>{
  394. return {
  395. label:item.systemName,
  396. value: item.systemId
  397. }
  398. })
  399. this.systemFinshedValue=this.systemOption[0].value
  400. } else {
  401. this.$message.error(errorMessage)
  402. }
  403. },
  404. // 获取全部单位
  405. async getAllUnits (){
  406. let params={}
  407. const res = await request('/dt_screen/rest/v1/screen/listUnit/', 'get', params, false)
  408. const { errorCode, errorMessage, success,data } = res.data;
  409. if (success) {
  410. console.log('获取全部单位', data);
  411. // 获取任务数据
  412. this.getTaskList()
  413. this.unitOption = data.map((item)=>{
  414. return {
  415. label:item.unitName,
  416. value: item.unitId
  417. }
  418. })
  419. this.unitFinshedValue=this.unitOption[0].value
  420. this.unitSubGradeValue=this.unitOption[0].value
  421. } else {
  422. this.$message.error(errorMessage)
  423. }
  424. },
  425. // 获取任务列表
  426. async getTaskList() {
  427. let params = {};
  428. // const res = await request("/dt_screen/rest/v2/task/listCurrentTask/", "post", params, false);
  429. const res = await request("/dt_screen/rest/v2/task/listRunningTasks/", "post", params, false);
  430. const { errorCode, errorMessage, success, data } = res.data;
  431. if (success) {
  432. console.log("获取任务列表", data);
  433. this.taskList = data;
  434. if(this.$route.query.key1){
  435. this.wholeOutTaskId = this.$route.query.key1;
  436. if(location.href.indexOf('#reloaded')==-1){
  437. location.href=location.href+"#reloaded";
  438. location.reload();
  439. }
  440. }else{
  441. this.wholeOutTaskId = data[0].taskId;
  442. }
  443. this.processInstanceId = this.wholeOutTaskId;
  444. this.taskOPtion = data.map((item) => {
  445. return {
  446. label: item.taskName,
  447. value: item.taskId
  448. };
  449. });
  450. let param = {taskId: this.processInstanceId};
  451. const res1 = await request("/dt_screen/rest/v2/task/getDefId/", "post", param, false);
  452. this.processDefinitionId = res1.data;
  453. this.initWebsoketBpmn();
  454. this.isReady = true;
  455. this.currentTaskName = data[0].taskName;
  456. this.currentTaskGrade = data[0].syntheticTaskScore;
  457. // 获取地图的信息
  458. if (data.length) {
  459. // 获取任务的课目信息
  460. this.getSubjectList(data[0].taskId);
  461. // 获取任务的指令信息
  462. this.getinstructList(data[0].taskId);
  463. // 建立指令websocket 链接
  464. this.initInstructWebsoket();
  465. }
  466. } else {
  467. this.$message.error(errorMessage);
  468. }
  469. },
  470. // 切换任务
  471. async changeTask() {
  472. this.camaraData = []
  473. this.cardData = []
  474. this.systemSubjectId = "";
  475. this.unitSubjectValue = "";
  476. this.isReady = false;
  477. this.currentTaskName = this.taskOPtion.find((item) => item.value == this.wholeOutTaskId).label;
  478. this.currentTaskGrade = this.taskList.find((item) => item.taskId == this.wholeOutTaskId).syntheticTaskScore;
  479. // 获取任务的课目信息
  480. this.processInstanceId = this.wholeOutTaskId;
  481. let param = {taskId: this.processInstanceId};
  482. const res2 = await request("/dt_screen/rest/v2/task/getDefId/", "post", param, false);
  483. console.log('res2 :>> ', res2.data);
  484. this.processDefinitionId = res2.data;
  485. this.isReady = true;
  486. this.getSubjectList(this.wholeOutTaskId);
  487. // 获取任务的指令信息
  488. this.getinstructList(this.wholeOutTaskId);
  489. // 建立指令websocket 链接
  490. this.initInstructWebsoket();
  491. this.initWebsoketBpmn();
  492. },
  493. changeTaskAndUnit() {
  494. this.systemSubjectId=''
  495. if(this.unitSubjectValue){
  496. this.getUnitSubjectList(this.wholeOutTaskId, this.unitSubjectValue)
  497. }else {
  498. this.getSubjectList(this.wholeOutTaskId)
  499. }
  500. },
  501. changeTaskAndSystem() {
  502. this.unitSubjectValue=''
  503. if(this.systemSubjectId){
  504. this.getSystemSubjectList(this.wholeOutTaskId, this.systemSubjectId)
  505. }else {
  506. this.getSubjectList(this.wholeOutTaskId)
  507. }
  508. },
  509. // 获取任务的课目信息
  510. async getSubjectList(taskId){
  511. let params={}
  512. const res = await request(`/dt_screen/rest/v2/subject/list/${taskId}`, 'get', params, false)
  513. const { errorCode, errorMessage, success,data } = res.data;
  514. if (success) {
  515. console.log('获取任务的课目信息', data);
  516. this.subjectDatas=data
  517. this.SubjectInfo1=this.subjectDatas[0].subjectName
  518. this.SubjectInfo2=taskId
  519. this.initUrl(this.subjectDatas[0].subjectName)
  520. } else {
  521. this.$message.error(errorMessage)
  522. }
  523. },
  524. // 获取任务的指令
  525. async getinstructList (taskId) {
  526. let params={}
  527. const res = await request(`/dt_screen/rest/v2/order/list/${taskId}`, 'get', params, false)
  528. const { errorCode, errorMessage, success,data } = res.data;
  529. if (success) {
  530. console.log('获取任务的指令', data);
  531. this.instructList=data
  532. let tempData=[]
  533. data.forEach((item)=>{
  534. tempData.push([item.subjectName, item.name, item.situation, item.content, item.system,item.time])
  535. })
  536. this.scrollTableConfig.data=tempData
  537. console.log("🚀 data >> ", this.scrollTableConfig.data);
  538. this.updatekey=new Date().getTime()
  539. } else {
  540. this.$message.error(errorMessage)
  541. }
  542. },
  543. // 切换单位再结合任务id 获取课目课目列表
  544. async getUnitSubjectList(taskId,unitId){
  545. let params={}
  546. params["taskId"] = taskId
  547. params["unitId"] = unitId
  548. // const res = await request(`/dt_screen/rest/v1/subject/list/task/${taskId}/unit/${unitId}`, 'get', params, false)
  549. const res = await request(`/dt_screen/rest/v2/subject/listByCondition`, 'post', params, false)
  550. const { errorCode, errorMessage, success,data } = res.data;
  551. if (success) {
  552. this.subjectDatas=data
  553. } else {
  554. this.$message.error(errorMessage)
  555. }
  556. },
  557. // 切换系统再结合任务id 获取课目课目列表
  558. async getSystemSubjectList(taskId,systemId){
  559. let params={}
  560. params["taskId"] = taskId
  561. params["systemId"] = systemId
  562. // const res = await request(`/dt_screen/rest/v1/subject/list/task/${taskId}/system/${systemId}`, 'get', params, false)
  563. const res = await request(`/dt_screen/rest/v2/subject/listByCondition`, 'post', params, false)
  564. const { errorCode, errorMessage, success,data } = res.data;
  565. if (success) {
  566. this.subjectDatas=data
  567. } else {
  568. this.$message.error(errorMessage)
  569. }
  570. },
  571. // 建立websocket 链接 任务
  572. initWebsoket(){
  573. this.websocket = new WebSocket(`ws://${this.$store.state.webSocketIp}:${this.$store.state.webSocketPort}/websocket/task`);//这里将http替换成ws
  574. switch (this.websocket.readyState) {
  575. case 0:
  576. console.log("正在连接");
  577. break;
  578. case 1:
  579. console.log("已经链接并且可以通讯");
  580. break;
  581. case 2:
  582. console.log("连接正在关闭");
  583. break;
  584. case 3:
  585. console.log("连接已关闭或者没有链接成功");
  586. break;
  587. };
  588. this.websocket.onopen = this.websocketsend;//websoket连接成功
  589. this.websocket.onmessage =this. websocketonmessage;//websoket收到信息
  590. this.websocket.onclose = this.websocketclose;//websoket连接关闭
  591. },
  592. websocketsend(){
  593. console.log('ws 连接成功');
  594. },
  595. websocketonmessage(msg){
  596. // 获取全部单位
  597. this.getAllUnits()
  598. // 获取全部系统
  599. this.getAllSystems()
  600. console.log('收到任务信息',msg);
  601. },
  602. websocketclose(){
  603. console.log('ws 连接关闭');
  604. this.initWebsoket();//重新建立连接
  605. },
  606. // 建立websocket 链接 任务
  607. initWebsoketBpmn(){
  608. this.websocketBpmn = new WebSocket(`ws://${this.$store.state.webSocketIp}:${this.$store.state.webSocketPort}/websocket/bpmn`);//这里将http替换成ws
  609. switch (this.websocketBpmn.readyState) {
  610. case 0:
  611. console.log("正在连接");
  612. break;
  613. case 1:
  614. console.log("已经链接并且可以通讯");
  615. break;
  616. case 2:
  617. console.log("连接正在关闭");
  618. break;
  619. case 3:
  620. console.log("连接已关闭或者没有链接成功");
  621. break;
  622. };
  623. this.websocketBpmn.onopen = this.bpmnWebsocketsend;//websoket连接成功
  624. this.websocketBpmn.onmessage =this.bpmnWebsocketonmessage;//websoket收到信息
  625. this.websocketBpmn.onclose = this.bpmnWebsocketclose;//websoket连接关闭
  626. },
  627. bpmnWebsocketsend(){
  628. console.log('ws 连接成功');
  629. },
  630. bpmnWebsocketonmessage(msg){
  631. // 更新流程图
  632. this.$refs.FormTaskProcessViewer.getTaskHighlightData();
  633. this.$refs.FormTaskProcessViewer.getTaskProcessXml();
  634. console.log('收到指令信息',msg);
  635. },
  636. bpmnWebsocketclose(){
  637. console.log('ws 连接关闭');
  638. this.initWebsoketBpmn();//重新建立连接
  639. },
  640. initInstructWebsoket(){
  641. // 指令的ws
  642. this.websocketOrder = new WebSocket(`ws://${this.$store.state.webSocketIp}:${this.$store.state.webSocketPort}/websocket/order/${this.wholeOutTaskId}`);//这里将http替换成ws
  643. switch (this.websocketOrder.readyState) {
  644. case 0:
  645. console.log("正在连接");
  646. break;
  647. case 1:
  648. console.log("已经链接并且可以通讯");
  649. break;
  650. case 2:
  651. console.log("连接正在关闭");
  652. break;
  653. case 3:
  654. console.log("连接已关闭或者没有链接成功");
  655. break;
  656. };
  657. this.websocketOrder.onopen = this.orderWebsocketsend;//websoket连接成功
  658. this.websocketOrder.onmessage =this. orderWebsocketonmessage;//websoket收到信息
  659. this.websocketOrder.onclose = this.orderWebsocketclose;//websoket连接关闭
  660. },
  661. orderWebsocketsend(){
  662. console.log('ws 连接成功');
  663. },
  664. orderWebsocketonmessage(msg){
  665. // 获取任务的指令信息
  666. this.getinstructList(this.wholeOutTaskId)
  667. console.log('收到指令信息',msg);
  668. },
  669. orderWebsocketclose(){
  670. console.log('ws 连接关闭');
  671. this.initInstructWebsoket();//重新建立连接
  672. },
  673. // 查看成绩表格
  674. viewManData(item){
  675. this.dialogType=2
  676. this.dialogVisible=true
  677. console.log('item',item);
  678. const { subjectScore } = item
  679. this.gridData=subjectScore
  680. },
  681. // 全屏事件
  682. showFull(id){
  683. console.log('this.camaraData :>> ', this.camaraData);
  684. console.log('ckx debug 监控大屏' )
  685. this.$router.push(
  686. {
  687. path: './monitorScreen',
  688. query: {
  689. subjectInfo1:this.SubjectInfo1,
  690. subjectInfo2:this.SubjectInfo2,
  691. // subjectInfo3:this.SubjectInfo3,
  692. // camaraData: JSON.stringify(this.camaraData),
  693. // cardData: JSON.stringify(this.cardData)
  694. }
  695. }
  696. )
  697. },
  698. showFull1(id){
  699. console.log('this.camaraData :>> ', this.cardData);
  700. console.log('ckx debug 监控大屏' )
  701. this.$router.push(
  702. {
  703. path: './monitorScreen',
  704. // query: {
  705. // camaraData: JSON.stringify(this.cardData)
  706. // }
  707. query: {
  708. subjectInfo1:this.SubjectInfo1,
  709. subjectInfo2:this.SubjectInfo2,
  710. // subjectInfo3:this.SubjectInfo3,
  711. // camaraData: JSON.stringify(this.camaraData),
  712. // cardData: JSON.stringify(this.cardData)
  713. }
  714. }
  715. )
  716. },
  717. // 退出全屏
  718. exitFull(){
  719. let exitFullScreen =
  720. document.exitFullScreen ||
  721. document.mozCancelFullScreen ||
  722. document.webkitExitFullscreen ||
  723. document.msExitFullscreen;
  724. if (exitFullScreen) {
  725. exitFullScreen.call(document);
  726. }
  727. this.updatekey=new Date().getTime()
  728. },
  729. // 展开全屏
  730. requestFullScreen(elem){
  731. console.log('ckx debug ', )
  732. // #兼容不同的浏览器
  733. var requestMethod =
  734. elem.requestFullScreen ||
  735. elem.webkitRequestFullScreen ||
  736. elem.mozRequestFullScreen ||
  737. elem.msRequestFullScreen;
  738. if (requestMethod) {
  739. requestMethod.call(elem);
  740. } else if (typeof window.ActiveXObject !== "undefined") {
  741. // #模拟F11 实现全屏
  742. var wscript = new ActiveXObject("WScript.Shell");
  743. if (wscript !== null) {
  744. wscript.SendKeys("{F11}");
  745. }
  746. }
  747. let that =this
  748. window.addEventListener('resize',function () {//执行
  749. let isFull = document.mozFullScreen ||
  750. document.fullScreen ||
  751. //谷歌浏览器及Webkit内核浏览器
  752. document.webkitIsFullScreen ||
  753. document.webkitRequestFullScreen ||
  754. document.mozRequestFullScreen ||
  755. document.msFullscreenEnabled
  756. if (isFull === undefined) {
  757. that.exitFull()
  758. }else {
  759. }
  760. })
  761. },
  762. checkFull() {
  763. //判断浏览器是否处于全屏状态 (需要考虑兼容问题)
  764. //火狐浏览器
  765. let isFull = document.mozFullScreen ||
  766. document.fullScreen ||
  767. //谷歌浏览器及Webkit内核浏览器
  768. document.webkitIsFullScreen ||
  769. document.webkitRequestFullScreen ||
  770. document.mozRequestFullScreen ||
  771. document.msFullscreenEnabled
  772. if (isFull === undefined) {
  773. isFull = false
  774. }
  775. return isFull;
  776. },
  777. showMoreInfo(type){
  778. if(type=='more'){
  779. this.$router.push('/situationScreen')
  780. }else {
  781. this.$router.push('/taskScreen')
  782. }
  783. },
  784. // 初始化视频
  785. initVideo(nowPlayVideoUrl,id) {
  786. let that =this
  787. // 这些options属性也可直接设置在video标签上,见 muted
  788. let options = {
  789. autoplay: true, // 设置自动播放
  790. controls: true, // 显示播放的控件
  791. sources: [
  792. // 注意,如果是以option方式设置的src,是不能实现 换台的 (即使监听了nowPlayVideoUrl也没实现)
  793. {
  794. src: nowPlayVideoUrl,
  795. type: "application/x-mpegURL" // 告诉videojs,这是一个hls流
  796. }
  797. ]
  798. };
  799. // videojs的第一个参数表示的是,文档中video的id
  800. const myPlyer= Videojs(id, options, function onPlayerReady() {
  801. console.log("onPlayerReady 中的this指的是:", this); // 这里的this是指Player,是由Videojs创建出来的实例
  802. console.log(myPlyer === this); // 这里返回的是true
  803. });
  804. this.playerList.push(myPlyer)
  805. },
  806. async initUrl(subjectName) {
  807. if (subjectName == '')
  808. return;
  809. let params = {
  810. subjectName: subjectName,
  811. taskId: this.wholeOutTaskId
  812. };
  813. this.currentSubject = subjectName;
  814. this.camaraData = [];
  815. this.cardData = [];
  816. this.hebingjiankongData = [];
  817. const res = await request("/dt_screen/rest/v2/video/videos/getSubjectUrls", "post", params, false);
  818. let index = 0;
  819. // this.SubjectInfo1=params.subjectName
  820. // this.SubjectInfo2=params.taskId
  821. // this.SubjectInfo3=res.data.data
  822. console.log("cansgu",params.subjectName,params.taskId)
  823. console.log("res",res.data.data)
  824. this.camaraSrc = ["", "", "", "", ""];
  825. this.camaraName = ["监控名称", "监控名称", "监控名称", "监控名称", "监控名称"];
  826. for (let item in res.data.data) {
  827. // this.camaraSrc[index] = res.data.data[item].url;
  828. // this.camaraName[index++] = res.data.data[item].name;
  829. let data = {
  830. ip: res.data.data[item].ip,
  831. Port: res.data.data[item].port,
  832. Username: res.data.data[item].username,
  833. Password: res.data.data[item].password,
  834. channelName: res.data.data[item].channelName
  835. };
  836. this.camaraData.push(data);
  837. this.hebingjiankongData.push(data);
  838. }
  839. setTimeout(() => {
  840. this.HKCardShow = true
  841. }, 800);
  842. let params1 = {
  843. subjectName: subjectName,
  844. taskId: this.wholeOutTaskId
  845. };
  846. this.currentSubject = subjectName;
  847. const res1 = await request("/dt_screen/rest/v2/video/videos/getSubjectCardUrls", "post", params1, false);
  848. console.log('res1 :>> ', res1);
  849. let index1 = 0;
  850. this.cardSrc = ["", "", "", "", ""];
  851. this.cardName = ["监控名称", "监控名称", "监控名称", "监控名称", "监控名称"];
  852. for (let item in res1.data.data) {
  853. // this.cardSrc[index1] = res1.data.data[item].url;
  854. // this.cardName[index1++] = res1.data.data[item].name;
  855. let data = {
  856. ip: res1.data.data[item].ip,
  857. Port: res1.data.data[item].port,
  858. Username: res1.data.data[item].username,
  859. Password: res1.data.data[item].password,
  860. channelName: res1.data.data[item].channelName
  861. };
  862. this.cardData.push(data);
  863. this.hebingjiankongData.push(data);
  864. }
  865. console.log('cardData :>> ', this.cardData);
  866. console.log('hebingjiankongData :>> ', this.hebingjiankongData);
  867. },
  868. resolveUrl(url){
  869. if(url ==''){
  870. return;
  871. }
  872. let data = {};
  873. url = url.split("/");
  874. url = url[2];
  875. url = url.split(":");
  876. data.Username = url[0];
  877. data.Port = 80;
  878. url = url[1];
  879. url = url.split("@");
  880. data.ip = url[1];
  881. data.Password = url[0];
  882. data.channelName = "test1";
  883. return data;
  884. },
  885. changeVideo(subjectName) {
  886. if (subjectName == '')
  887. return;
  888. if(subjectName != this.currentSubject) {
  889. this.currentSubject = subjectName;
  890. // this.$refs.hkv.stopAll();
  891. // this.$refs.hkCard.stopAll();
  892. this.camaraData = []
  893. this.cardData = []
  894. this.initUrl(subjectName);
  895. }
  896. }
  897. },
  898. mounted() {
  899. // 获取全部单位
  900. this.getAllUnits();
  901. // 获取全部系统
  902. this.getAllSystems();
  903. // 建立任务的weksocket链接
  904. this.initWebsoket();
  905. // this.SubjectInfo1=this.subjectName
  906. // this.SubjectInfo2=this.taskId
  907. // setTimeout(() => {
  908. // this.initUrl('步坦协同课目');
  909. // }, 1000);
  910. // setTimeout(() => {
  911. // console.log('this.camaraSrc :>> ', this.camaraSrc);
  912. // for(let index = 0; index < this.camaraSrc.length;index++)
  913. // {
  914. // this.camaraData.push(this.resolveUrl(this.camaraSrc[index]))
  915. // }
  916. // console.log('this.camaraData :>> ', this.camaraData);
  917. // }, 1000);
  918. // setTimeout(() => {
  919. // this.HKshow = true;
  920. // }, 800);
  921. // this.currentSubject = "步坦协同课目";
  922. //
  923. // // // 过14秒调用
  924. // setTimeout(() => {
  925. // for (let index = 0; index < this.camaraSrc.length; index++) {
  926. // console.log('object :>> ',this.camaraSrc[index]);
  927. // this.initVideo(this.camaraSrc[index], this.videoList[index]);
  928. // }
  929. // }, 5000);
  930. },
  931. beforeDestroy() {
  932. this.HKshow = false;
  933. if (this.playerList.length) {
  934. this.playerList.forEach((item) => {
  935. item.dispose();
  936. });
  937. }
  938. let params ={}
  939. const res = request("/dt_screen/video/videos/videoClose", "get", params, false);
  940. }
  941. };
  942. </script>
  943. <style scoped>
  944. #videoPlayerTask {
  945. width: 906px;
  946. height: 350px;
  947. }
  948. #videoPlayer_first {
  949. width: 278px;
  950. height: 164px;
  951. margin-right: 10px;
  952. margin-bottom: 10px;
  953. }
  954. #videoPlayer_second {
  955. width: 278px;
  956. height: 164px;
  957. margin-bottom: 10px;
  958. }
  959. #videoPlayer_third {
  960. width: 278px;
  961. height: 164px;
  962. margin-right: 10px;
  963. }
  964. #videoPlayer_fourth {
  965. width: 278px;
  966. height: 164px;
  967. }
  968. .video_flex_style {
  969. display: flex;
  970. align-items: center;
  971. flex-wrap: wrap;
  972. padding: 10px 0;
  973. box-sizing: border-box;
  974. }
  975. </style>