taskScreen.vue 33 KB

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