taskScreen.vue 33 KB

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