index.tsx 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. import { defineComponent, onMounted, watchEffect, ref } from "vue";
  2. import { RouterView, useRoute, useRouter } from 'vue-router';
  3. import MarkerMap from '@/components/MarkerMap';
  4. import './index.scss';
  5. import { useIncidentStore, useDaHuaStore, useMainStore,useCommonStore,useMarkerStore } from '@/store';
  6. import { constants } from 'zlib';
  7. import clsx from "clsx";
  8. import moment from 'moment';
  9. // @ts-ignore
  10. import closeicon from '@/assets/icons/detail/close.png';
  11. import { ElMessage } from "element-plus";
  12. moment.locale('zh-cn', {
  13. months:
  14. '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
  15. '_',
  16. ),
  17. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
  18. weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  19. weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
  20. weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
  21. longDateFormat: {
  22. LT: 'Ah点mm分',
  23. LTS: 'Ah点m分s秒',
  24. L: 'YYYY-MM-DD',
  25. LL: 'YYYY年MMMD日',
  26. LLL: 'YYYY年MMMD日Ah点mm分',
  27. LLLL: 'YYYY年MMMD日ddddAh点mm分',
  28. l: 'YYYY-MM-DD',
  29. ll: 'YYYY年MMMD日',
  30. lll: 'YYYY年MMMD日Ah点mm分',
  31. llll: 'YYYY年MMMD日ddddAh点mm分',
  32. },
  33. meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  34. meridiemHour: function (h, meridiem) {
  35. let hour = h;
  36. if (hour === 12) {
  37. hour = 0;
  38. }
  39. if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  40. return hour;
  41. } else if (meridiem === '下午' || meridiem === '晚上') {
  42. return hour + 12;
  43. } else {
  44. // '中午'
  45. return hour >= 11 ? hour : hour + 12;
  46. }
  47. },
  48. meridiem: function (hour, minute, isLower) {
  49. const hm = hour * 100 + minute;
  50. if (hm < 600) {
  51. return '凌晨';
  52. } else if (hm < 900) {
  53. return '早上';
  54. } else if (hm < 1130) {
  55. return '上午';
  56. } else if (hm < 1230) {
  57. return '中午';
  58. } else if (hm < 1800) {
  59. return '下午';
  60. } else {
  61. return '晚上';
  62. }
  63. },
  64. calendar: {
  65. sameDay: function () {
  66. return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
  67. },
  68. nextDay: function () {
  69. return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
  70. },
  71. lastDay: function () {
  72. return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
  73. },
  74. nextWeek: function () {
  75. let startOfWeek, prefix;
  76. startOfWeek = moment().startOf('week');
  77. prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
  78. return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
  79. },
  80. lastWeek: function () {
  81. let startOfWeek, prefix;
  82. startOfWeek = moment().startOf('week');
  83. prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
  84. return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
  85. },
  86. sameElse: 'LL',
  87. },
  88. ordinalParse: /\d{1,2}(日|月|周)/,
  89. ordinal: function (number, period) {
  90. switch (period) {
  91. case 'd':
  92. case 'D':
  93. case 'DDD':
  94. return number + '日';
  95. case 'M':
  96. return number + '月';
  97. case 'w':
  98. case 'W':
  99. return number + '周';
  100. default:
  101. return number;
  102. }
  103. },
  104. relativeTime: {
  105. future: '%s内',
  106. past: '%s前',
  107. s: '几秒',
  108. m: '1 分钟',
  109. mm: '%d 分钟',
  110. h: '1 小时',
  111. hh: '%d 小时',
  112. d: '1 天',
  113. dd: '%d 天',
  114. M: '1 个月',
  115. MM: '%d 个月',
  116. y: '1 年',
  117. yy: '%d 年',
  118. },
  119. week: {
  120. // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
  121. dow: 1, // Monday is the first day of the week.
  122. doy: 4, // The week that contains Jan 4th is the first week of the year.
  123. },
  124. });
  125. export default defineComponent({
  126. setup() {
  127. const route = useRoute();
  128. const router = useRouter();
  129. const store = useIncidentStore();
  130. const daHuaStore = useDaHuaStore();
  131. const mainStore = useMainStore();
  132. const commonstore = useCommonStore();
  133. const markerstore = useMarkerStore();
  134. const sqdh = ref(import.meta.env.VITE_DH_SERVER as string + "/index.html");
  135. const markmap = ref(null);
  136. // console.log(sqdh.value);
  137. const handleDaHuaSystem = () => {
  138. daHuaStore.dahuaUserVisible = true;
  139. const DAHUA = document.getElementById('DAHUA') as HTMLIFrameElement;
  140. DAHUA?.contentWindow?.postMessage('creatMeeting', '*');
  141. };
  142. // console.log(daHuaStore.dhuser);
  143. // const list = computed(() => [
  144. // ]);
  145. // login da hua
  146. onMounted(async () => {
  147. const meeting = new Meeting();
  148. meeting.$Message = ElMessage;
  149. meeting.openClient(() => {
  150. // console.log("======")
  151. meeting.settargetId("vPlayArea");
  152. window.metting = meeting;
  153. });
  154. var dv = document.getElementsByClassName('videoifram')[0];
  155. var x = 0;
  156. var y = 0;
  157. var l = 0;
  158. var t = 0;
  159. var isDown = false;
  160. //鼠标按下事件
  161. dv.onmousedown = function (e) {
  162. //获取x坐标和y坐标
  163. x = e.clientX;
  164. y = e.clientY;
  165. //获取左部和顶部的偏移量
  166. l = dv.offsetLeft;
  167. t = dv.offsetTop;
  168. //开关打开
  169. isDown = true;
  170. //设置样式
  171. dv.style.cursor = 'move';
  172. }
  173. //鼠标移动
  174. window.onmousemove = function (e) {
  175. if (isDown == false) {
  176. return;
  177. }
  178. //获取x和y
  179. var nx = e.clientX;
  180. var ny = e.clientY;
  181. //计算移动后的左偏移量和顶部的偏移量
  182. var nl = nx - (x - l);
  183. var nt = ny - (y - t);
  184. dv.style.left = nl + 'px';
  185. dv.style.top = nt + 'px';
  186. setTimeout(() => {
  187. try{
  188. console.log(window.vPlayArea)
  189. if(window.vPlayArea){
  190. window.vPlayArea.dragResize(0,0,0,0)
  191. }
  192. }catch(E){
  193. console.log(E)
  194. }
  195. }, 1);
  196. }
  197. //鼠标抬起事件
  198. dv.onmouseup = function () {
  199. //开关关闭
  200. isDown = false;
  201. dv.style.cursor = 'default';
  202. }
  203. try {
  204. window.dologin = async () => {
  205. await markerstore.initDHUser();
  206. };
  207. window.dologin();
  208. } catch (error) {
  209. console.log(error)
  210. }
  211. // if (!localStorage.getItem('DAHUA_token')) {
  212. // daHuaStore.DAHUALogin();
  213. // } else {
  214. // daHuaStore.KEEPAlive(); //保活 //获取当前用户信息
  215. // daHuaStore.DAHUAUserInfo().then((res) => {
  216. // console.log(res);
  217. // daHuaStore.DAHUACreateMeet(res).then((data) => {
  218. // //创建会议
  219. // console.log(data);
  220. // let obj = {
  221. // user: res,
  222. // meetId: data.id,
  223. // member: [
  224. // {
  225. // userName: res.userName,
  226. // userId: res.userCode,
  227. // region: res.paasId,
  228. // type: 'client',
  229. // // speak:'true',
  230. // number: res.userPhone,
  231. // // department:'根组织'
  232. // },
  233. // ],
  234. // };
  235. // localStorage.setItem('meeting', JSON.stringify(obj));
  236. // // console.log(obj);
  237. // // daHuaStore.DAHUAMeetingMember(obj);
  238. // // daHuaStore.DAHUAMeetingUser(data.id);
  239. // // daHuaStore.DAHUADeleteMeet(data.id);
  240. // });
  241. // });
  242. // // console.log(dhUser);
  243. // daHuaStore.DAHUADeviceList('S4NbecfYB1DFLAIM9FFHQ8'); //测试执法记录仪
  244. // daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68AN187Q8'); //执法人员设备列表
  245. // daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68S6S0UFC'); //执法车辆列表
  246. // }
  247. // const DAHUA = document.getElementById('DAHUA') as HTMLIFrameElement;
  248. // if (!DAHUA) return
  249. // DAHUA.onload = function () {
  250. // // @ts-ignore
  251. // DAHUA.contentWindow.postMessage('onload', '*');
  252. // }
  253. // window.addEventListener('message', e => {
  254. // if (e.data === 'closeIframe') {
  255. // daHuaStore.dahuaUserVisible = false;
  256. // }
  257. // }, false);
  258. try {
  259. (yjzh_btn.value)?.addEventListener("click", () => {
  260. if(commonstore.isclick){
  261. return;
  262. }
  263. commonstore.isclick = true;
  264. var isc = true;
  265. if(window.theSocket){
  266. if(window.metting){
  267. setTimeout(() => {
  268. cremetting11();
  269. }, 1000);
  270. }else{
  271. const meeting = new Meeting();
  272. meeting.$Message = ElMessage;
  273. meeting.settargetId("vPlayArea");
  274. window.metting = meeting;
  275. setTimeout(() => {
  276. cremetting11();
  277. }, 1000);
  278. }
  279. }else{
  280. const meeting = new Meeting();
  281. meeting.$Message = ElMessage;
  282. meeting.openClient(() => {
  283. meeting.settargetId("vPlayArea");
  284. window.metting = meeting;
  285. setTimeout(() => {
  286. cremetting11();
  287. }, 1000);
  288. });
  289. }
  290. async function cremetting11() {
  291. try{
  292. window.metting.deleteAllMeeting(()=>{});
  293. }catch(E){}
  294. dothing();
  295. async function dothing(){
  296. if(!isc) return;
  297. isc = false;
  298. await window.metting.getLocalUserInfo();
  299. window.metting.queryUser(localStorage.getItem("userId")).then(res => {
  300. const chartParams = {
  301. chatName: "测试会商名称",
  302. groupType: 2,
  303. bOpenDirect: true,
  304. // groupType: 2, //1 群聊 传2 会商 传3 群聊会会商
  305. memberInfo: [
  306. {
  307. memberId: res.userCode, // 成员id
  308. memberName: res.name, // 成员名称
  309. memberType: 4, // 成员类型,Integer ,1 单兵;2 普通电话;3 对讲机;4 app|客户端;6 可是话机; 7 汇接话机(PSTN、手机号码等); 8 车载;9 无人机喊话云台; 10 无人机地面站对讲平台; 11 ipc; 12 NVR
  310. isOpenVideo: true,
  311. }
  312. ]
  313. };
  314. // window.theSocket && window.theSocket.openCreateGroupChatDlg();
  315. window.theSocket && window.theSocket.createGroupChat(chartParams);
  316. commonstore.isclick = false;
  317. });
  318. // _this.localUserInfo.masterName = res.userName;
  319. // _this.localUserInfo.masterId = res.userCode;
  320. // _this.localUserInfo.masterNumber = res.userPhone;
  321. // _this.localUserInfo.region = res.paasId;
  322. }
  323. }
  324. })
  325. } catch (error) {
  326. }
  327. });
  328. const timetext = ref("-");
  329. const datetext = ref('-');
  330. const weektext = ref('-');
  331. // debugger
  332. setInterval(() => {
  333. datetext.value =
  334. moment().format('YYYY年MM月DD日');
  335. weektext.value = moment().format('dddd');
  336. timetext.value = moment().format('HH:mm:ss');
  337. }, 1000)
  338. const yjzh_btn = ref(null);
  339. return () => (
  340. <section class="base-layout-container">
  341. {/* <iframe
  342. style={{ visibility: 'hidden', height: '100%', width: '100%' }}
  343. class={clsx('dahua-content', {
  344. ['display']: daHuaStore.dahuaUserVisible,
  345. })}
  346. id="DAHUA"
  347. name="DAHUA"
  348. src={sqdh.value}
  349. frameborder="0"
  350. /> */}
  351. <div
  352. class="videoifram"
  353. style={mainStore.videoisshow ? 'display:block' : 'display:none'}
  354. >
  355. <div class="title">{mainStore.videotitle}</div>
  356. <div class="closebtn" onClick={() => {
  357. mainStore.videoisshow = false;
  358. if(window.metting){
  359. window.metting.closeVideo();
  360. if (window.isdanbing) {
  361. window.metting.deleteAllMeeting(() => { });
  362. // window.metting.closeClient()
  363. // window.metting = false;
  364. // window.theSocket = false;
  365. }
  366. window.metting = false;
  367. }
  368. }}>
  369. <img src={closeicon} />
  370. </div>
  371. <div id="vPlayArea" ></div>
  372. </div>
  373. <header class="base-layout-title-contatisner" datatype={ process.env.NODE_ENV+"" }>
  374. <div class="back-to-home " onClick={() => router.push('/home')}></div>
  375. <div class="time-text ">
  376. <span>{timetext.value}</span>
  377. <span>{datetext.value}</span>
  378. <span>{weektext.value}</span>
  379. </div>
  380. </header>
  381. <main>
  382. <RouterView />
  383. <MarkerMap
  384. readonly={route.path.includes('incidentDetail')}
  385. ref={markmap}
  386. // marker={store.incidentDetail}
  387. />
  388. <div class={"yjld_btn " + (commonstore.isclick?"animate__animated animate__rotateIn":"")} ref={yjzh_btn}></div>
  389. </main>
  390. </section>
  391. );
  392. },
  393. });