浏览代码

feat: update dahua

Jiang, Wim 3 年之前
父节点
当前提交
5918da728e

+ 16 - 11
index.d.ts

@@ -1,26 +1,31 @@
-declare module "*.svg" {
+declare module '*.svg' {
   export default SVGAElement;
 }
-declare module "*.png";
-declare module "*.jpg";
-declare module "*.jpeg";
-declare module "*.gif";
-declare module "*.bmp";
-declare module "*.tiff";
+declare module '*.png';
+declare module '*.jpg';
+declare module '*.jpeg';
+declare module '*.gif';
+declare module '*.bmp';
+declare module '*.tiff';
 
-declare module "@element-plus/icons/lib/*.js" {
-  import { VNode } from "vue";
+declare module '@element-plus/icons/lib/*.js' {
+  import { VNode } from 'vue';
   export default VNode;
 }
 
-declare module "*.vue" {
-  import type { DefineComponent } from "vue";
+declare module '*.vue' {
+  import type { DefineComponent } from 'vue';
   const component: DefineComponent;
   export default component;
 }
 
 export declare global {
   interface Window {
+    vPlayArea: any;
+    theSocket: any;
+    VideoPlay: any;
+    slectOptionmini: any;
+    InitWebSocketClass: any;
     lib: any;
     rem: string | number | undefined | null;
     dpr: string | number | undefined | null;

+ 2 - 0
public/webClient/initWebSocket.js

@@ -334,3 +334,5 @@ class InitWebSocketClass {
         this.webSocketSend(params);
     }
 }
+
+window.InitWebSocketClass = InitWebSocketClass;

+ 96 - 105
src/api/dahua.ts

@@ -16,16 +16,18 @@ export interface DAHUADeviceParams {
 }
 
 export interface DAHUAKeepParams {
- token: string;
+  token: string;
 }
 
-export interface DAHUAInfomationParams{
+export interface DAHUAInfomationParams {
   token: string;
+  [key: string]: any;
 }
 
-export interface DAHUADeviceParams{
+export interface DAHUADeviceParams {
   token: string;
-  id: string
+  id: string;
+  [key: string]: any;
 }
 
 export interface LoginResponse extends BaseResponse {
@@ -38,147 +40,136 @@ export interface MeetingResponse extends BaseResponse {
 }
 
 export interface DAHUAMeetParams extends BaseResponse {
-  token?: string;
-  name?: string , //会议名称
-  masterId?: string , //主持人用户ID
-  masterName?: string, //主持人名字
-  masterNumber?: string, //主持人号码
-  region: "", //号码对应的PAAS域ID
-  record: true, //是否录像录音true:录像录音 false:不录
-  type?: string, //会议类型“audio”: 音频会议 “video”: 音视频会议
-  mode: "group", //会议模式“p2p”:点对点“group”:群聊
+  token: string;
+  name?: string; //会议名称
+  masterId?: string; //主持人用户ID
+  masterName?: string; //主持人名字
+  masterNumber?: string; //主持人号码
+  region: ''; //号码对应的PAAS域ID
+  record: true; //是否录像录音true:录像录音 false:不录
+  type?: string; //会议类型“audio”: 音频会议 “video”: 音视频会议
+  mode: 'group'; //会议模式“p2p”:点对点“group”:群聊
 }
 
-export interface DAHUAMeetDeleteParams{
+export interface DAHUAMeetDeleteParams {
   token: string;
-  meetId: string
+  meetId: string;
 }
 
-export interface DAHUAMemberParams{
+export interface DAHUAMemberParams {
   token: string;
-  obj:{}
+  obj: {};
 }
 
-export interface KeepAliveResponse extends BaseResponse {
-}
+export interface KeepAliveResponse extends BaseResponse {}
 
 export interface KeepMeetResponse extends BaseResponse {
-    id?: string 
+  id?: string;
 }
 
-
 export const DAHUALogin = (params: DAHUALoginParams) =>
   request<LoginResponse>('POST', {
     url: `${DA_HUA_URL_PREFIX}/videoService/accounts/authorize`,
     data: params,
-    headers: {
-      'Content-Type': 'application/json',
-      'X-Subject-Token': '',
-    },
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': '',
+    // },
   });
 
-  export const DAHUAKeepAlive = (params: DAHUAKeepParams) =>
+export const DAHUAKeepAlive = (params: DAHUAKeepParams) =>
   request<KeepAliveResponse>('PUT', {
     url: `${DA_HUA_URL_PREFIX}/videoService/accounts/token/keepalive`,
     data: params,
-    headers: {
-      'Content-Type': 'application/json',
-      'X-Subject-Token': params.token,
-    },
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-  export const DAHUAUserInfo = (params: DAHUAKeepParams) =>
+export const DAHUAUserInfo = (params: DAHUAKeepParams) =>
   request<BaseResponse>('GET', {
     url: `${DA_HUA_URL_PREFIX}/ras/user/info`,
-    params:params,
-    headers: {
-      'Content-Type':'application/json;charset=UTF-8',
-      'X-Subject-Token': params.token,
-    },
+    params: params,
+    // headers: {
+    //   'Content-Type': 'application/json;charset=UTF-8',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-  export const DAHUAInfomation = (params: DAHUAInfomationParams) =>
+export const DAHUAInfomation = (params: DAHUAInfomationParams) =>
   request<BaseResponse>('POST', {
     url: `${DA_HUA_URL_PREFIX}/ras/acd/user/list`,
-    data:params,
-    headers: {
-      'Content-Type':'application/json;charset=UTF-8',
-      'X-Subject-Token': params.token,
-    },
+    data: params,
+    // headers: {
+    //   'Content-Type': 'application/json;charset=UTF-8',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-
-  export const DAHUACreateMeet = (params: DAHUAMeetParams) =>
+export const DAHUACreateMeet = (params: DAHUAMeetParams) =>
   request<KeepMeetResponse>('POST', {
     url: `${DA_HUA_URL_PREFIX}/mcu/meeting`,
     data: params,
-    headers: {
-      'Content-Type': 'application/json',
-      'X-Subject-Token': params.token,
-    },
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-  export const DAHUADeleteMeet = (params: DAHUAMeetDeleteParams) =>
+export const DAHUADeleteMeet = (params: DAHUAMeetDeleteParams) =>
   request<KeepMeetResponse>('DELETE', {
-    url: `${DA_HUA_URL_PREFIX}/mcu/meeting/`+params.meetId,
-    headers: {
-      'Content-Type': 'application/json',
-      'X-Subject-Token': params.token,
-    },
+    url: `${DA_HUA_URL_PREFIX}/mcu/meeting/` + params.meetId,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-  export const DAHUAMeetingUser = (params: DAHUAMeetDeleteParams) =>
+export const DAHUAMeetingUser = (params: DAHUAMeetDeleteParams) =>
   request<KeepMeetResponse>('GET', {
-    url: `${DA_HUA_URL_PREFIX}/mcu/meeting/`+params.meetId,
-    headers: {
-      'Content-Type': 'application/json',
-      'X-Subject-Token': params.token,
-    },
+    url: `${DA_HUA_URL_PREFIX}/mcu/meeting/` + params.meetId,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
+  });
+
+export const DAHUADevice = (params: DAHUADeviceParams) =>
+  request<BaseResponse>('GET', {
+    url: `${DA_HUA_URL_PREFIX}/videoService/devicesManager/deviceTree`,
+    params: params,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
   });
 
-  export const DAHUADevice =(params : DAHUADeviceParams) =>
-  request<BaseResponse>('GET',
-    {
-      url: `${DA_HUA_URL_PREFIX}/videoService/devicesManager/deviceTree`,
-      params:params,
-      headers: {
-        'Content-Type': 'application/json',
-        'X-Subject-Token': params.token,
-      },
-    }
-  )
-
-  export const DAHUAMeetingMember =(params : DAHUAMemberParams) =>
-  request<BaseResponse>('POST',
-    {
-      url: `${DA_HUA_URL_PREFIX}/mcu/meeting/member`,
-      data:params.obj,
-      headers: {
-        'Content-Type': 'application/json',
-        'X-Subject-Token': params.token,
-      },
-    }
-  )
-
-  export const DAHUADeviceObj =(params : DAHUADeviceParams) =>
-  request<BaseResponse>('GET',
-    {
-      url: `${DA_HUA_URL_PREFIX}/videoService/devicesManager/devices/`+params.id,
-      headers: {
-        'Content-Type': 'application/json',
-        'X-Subject-Token': params.token,
-      },
-    }
-  )
-
-  export const DAHUAUserObj =(params : DAHUADeviceParams) =>
-  request<BaseResponse>('GET',
-    {
-      url: `${DA_HUA_URL_PREFIX}/ras/user/`+params.id,
-      headers: {
-        'Content-Type': 'application/json',
-        'X-Subject-Token': params.token,
-      },
-    }
-  )
+export const DAHUAMeetingMember = (params: DAHUAMemberParams) =>
+  request<BaseResponse>('POST', {
+    url: `${DA_HUA_URL_PREFIX}/mcu/meeting/member`,
+    data: params.obj,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
+  });
 
+export const DAHUADeviceObj = (params: DAHUADeviceParams) =>
+  request<BaseResponse>('GET', {
+    url:
+      `${DA_HUA_URL_PREFIX}/videoService/devicesManager/devices/` + params.id,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
+  });
+
+export const DAHUAUserObj = (params: DAHUADeviceParams) =>
+  request<BaseResponse>('GET', {
+    url: `${DA_HUA_URL_PREFIX}/ras/user/` + params.id,
+    // headers: {
+    //   'Content-Type': 'application/json',
+    //   'X-Subject-Token': params.token,
+    // },
+  });

+ 12 - 7
src/api/resource.ts

@@ -124,16 +124,21 @@ export interface AllResourcesResponse {
   };
 }
 
+export interface SingleDeviceResponse {
+  data: {
+    [key: string]: SingleDeviceItem;
+  };
+}
+
 /** 获取所有应急资源信息 */
 export const getAllResources = () => {
   return request<AllResourcesResponse>('GET', {
     url: `/zhdd/resource/location`,
   });
-}
-  
-export const getAllsingleDevice = () => { 
-   return request<AllResourcesResponse>('GET', {
-     url: `/zhdd/singleDevice/list`,
-   });
+};
 
-};
+export const getAllsingleDevice = () => {
+  return request<SingleDeviceResponse>('GET', {
+    url: `/zhdd/singleDevice/list`,
+  });
+};

+ 1 - 1
src/components/MarkerMap/constants.ts

@@ -161,5 +161,5 @@ export const SINGLE_PAWN = [
   {
     name: '单兵4',
     locations: '118.269259,33.974288',
-  }
+  },
 ];

+ 1 - 5
src/components/MarkerMap/dialog.ts

@@ -170,10 +170,9 @@ export const GET_TEAM_DIALOG_HTML = (item: ResourceItemDetail) => {
   return el;
 };
 
-
 export const GET_SINGLE_DEVICE_DIALOG_HTML = (
   item: SingleDeviceItem,
-  callback: Function,
+  callback = () => {},
 ) => {
   const el = document.createElement('div');
   el.innerHTML = `
@@ -214,7 +213,6 @@ export const GET_SINGLE_DEVICE_DIALOG_HTML = (
   return el;
 };
 
-
 export const renderElement = (image: any) => {
   const el = document.createElement('div');
   el.id = 'marker';
@@ -227,5 +225,3 @@ export const renderElement = (image: any) => {
 
   return el;
 };
-
-

+ 112 - 89
src/components/MarkerMap/index.tsx

@@ -30,7 +30,6 @@ import icon_map_dpf from '@/assets/icons/home/dpf.svg';
 /** @ts-ignore */
 import icon_map_dbsb from '@/assets/icons/home/dbsb.svg';
 
-
 import './index.scss';
 import {
   GET_INCIDENT_DIALOG_HTML,
@@ -58,7 +57,7 @@ const MARKER_MAP_TYPES = [
   '应急队伍',
   '应急仓库',
   '应急事件',
-  '单兵'
+  '单兵',
 ] as const;
 
 export type MarkerMapType = typeof MARKER_MAP_TYPES[number];
@@ -184,7 +183,7 @@ export default defineComponent({
         action: () =>
           handleAddMarkers('单兵', store.singleDevice, icon_map_dbsb),
         remove: () => handleRemoveMarkers('单兵', store.singleDevice),
-      }
+      },
     ]);
 
     const getMarkerPopupHTML = (type: MarkerMapType, marker: MarkerType) => {
@@ -199,48 +198,49 @@ export default defineComponent({
             handleSetDetailMarker(marker);
             store.currentIncident = marker;
           });
-        case '单兵': { 
+        case '单兵': {
           var callback = () => {
-            console.log(marker["deviceCode"])
-            console.log(marker["userId"])
+            console.log(marker['deviceCode']);
+            console.log(marker['userId']);
             const self = this;
-            
-            daHuaStore.DAHUAUserObj(marker["userId"]).then(deviceUser=>{
-                         console.log(deviceUser);
-                         let memberObj = {
-                                userName:deviceUser.userName,
-                                userId:deviceUser.userCode,
-                                region:deviceUser.paasId,
-                                type:'single',
-                                // speak:'true',
-                                number:deviceUser.userPhone,
-                                deviceId:marker["deviceCode"],
-                                channelId:marker["channelId"],
-                         }
-                         let meetObj = JSON.parse(localStorage.getItem('meeting'));
-                         let memberList = [];
-                         memberList.push(meetObj.member[0]);
-                         memberList.push(memberObj);
-                         meetObj.member = memberList
-                         console.log(meetObj);
-                         daHuaStore.DAHUAMeetingMember(meetObj).then(data=>{
-                                  //  console.log(11111111)
-                                   daHuaStore.DAHUAMeetingUser(meetObj.meetId);
-                                  daHuaStore.DAHUAUserInfo().then(u => {
-                                    console.log(u,'+++++++');    
-                                    initSocket(u.userCode,memberObj);
-                                  })
-                         })
-                         
-                        //  console.log(memberObj);
-                        //  meetObj.mebmber.push(memberObj);
 
-            });
+            marker['userId'] &&
+              daHuaStore.DAHUAUserObj(marker['userId']).then((deviceUser) => {
+                console.log(deviceUser);
+                let memberObj = {
+                  userName: deviceUser.userName,
+                  userId: deviceUser.userCode,
+                  region: deviceUser.paasId,
+                  type: 'single',
+                  // speak:'true',
+                  number: deviceUser.userPhone,
+                  deviceId: marker['deviceCode'],
+                  channelId: marker['channelId'],
+                };
+                let meetObj = JSON.parse(
+                  localStorage.getItem('meeting') ?? '{}',
+                );
+                let memberList = [];
+                memberList.push(meetObj.member[0]);
+                memberList.push(memberObj);
+                meetObj.member = memberList;
+                console.log(meetObj);
+                daHuaStore.DAHUAMeetingMember(meetObj).then((data) => {
+                  // daHuaStore.DAHUAMeetingUser(meetObj.meetId);
+                  initSocket(meetObj.user.userCode, memberObj);
+                });
+
+                //  console.log(memberObj);
+                //  meetObj.mebmber.push(memberObj);
+              });
             // console.log(daHuaStore.deviceUser);
           };
-            return GET_SINGLE_DEVICE_DIALOG_HTML(marker as SingleDeviceItem,callback);
+          return GET_SINGLE_DEVICE_DIALOG_HTML(
+            marker as SingleDeviceItem,
+            callback,
+          );
         }
-        
+
         case '应急仓库':
           return GET_WAREHOUSE_DIALOG_HTML({
             name: '应急仓库 111',
@@ -293,83 +293,103 @@ export default defineComponent({
       }
     };
 
-    const videoplay =(item)=>{
+    const videoplay = (item: { type: string; userId: any; channelId: any }) => {
       console.log('播放视频');
-      console.log(item);   
-      if (!theSocket.websocket) {
-        this.$Message.warning("请先打开视频插件");
+      console.log(item);
+      if (!window.theSocket.websocket) {
+        ElMessage.warning('请先打开视频插件');
         return;
       }
-      if (item.type == "client") {
-        this.slectOptionmini(item.userId).then((arr) => {
+      if (item.type == 'client') {
+        window.slectOptionmini(item.userId).then((arr: any) => {
           if (arr) {
-            this.vPlayArea.openAppVideo(arr);
+            window.vPlayArea.openAppVideo(arr);
           }
         });
-      } else if (item.type == "single") { //播放单兵视频
+      } else if (item.type == 'single') {
+        //播放单兵视频
         pullFlow(item.channelId);
-      } else if (item.type == "vehicle") { //播放车载视频
+      } else if (item.type == 'vehicle') {
+        //播放车载视频
         pullFlow(item.channelId);
-      } else if (item.type == "uav_dev") { //播放无人机视频
+      } else if (item.type == 'uav_dev') {
+        //播放无人机视频
         pullFlow(item.channelId);
-      }         
-     };
-
-     const pullFlow = (chinnelId) => {
-      if (chinnelId) {
-        window.vPlayArea&&window.vPlayArea.realTimeVideo([{"channelId": chinnelId}]);
       }
     };
 
+    const pullFlow = (channelId: any) => {
+      channelId &&
+        window.vPlayArea &&
+        window.vPlayArea.realTimeVideo([{ channelId }]);
+    };
 
-    const initSocket =(userCode,memberObj) => {
+    const initSocket = (
+      userCode: string,
+      memberObj: {
+        userName?: any;
+        userId: any;
+        region?: any;
+        type: string;
+        number?: any;
+        deviceId?: any;
+        channelId: any;
+      },
+    ) => {
       const self = this;
       console.log(userCode);
-      localStorage.setItem("userId",userCode);
+      localStorage.setItem('userId', userCode);
       //初始websocket实例,保存在window中方便调用。一个浏览器tab页面只能初始化一次。所有的控件窗口,通过该websocket实例去生成不同的窗口实例,不同的控件窗口通过自己的窗口实例去调用初始化、关闭、隐藏等
-      window.theSocket = new InitWebSocketClass(
-        userCode,localStorage.getItem("DAHUA_token"), {
+      window.theSocket = new window.InitWebSocketClass(
+        userCode,
+        localStorage.getItem('DAHUA_token'),
+        {
           //客户端登陆成功通知;
-          loginSuccess: (v)=> {
+          loginSuccess: (v: any) => {
             console.log(2222222222222222);
-            console.log("loginSuccess-->", v);
+            console.log('loginSuccess-->', v);
             initWnd();
           },
           //客户端窗口被拉起通知
-          onCreateVideoSuccess: v => {
-            console.log("客户端onCreateVideoSuccess-----", v);
+          onCreateVideoSuccess: (v: any) => {
+            console.log('客户端onCreateVideoSuccess-----', v);
           },
           //重点:统一分发客户端ws消息;vue 可以统一用$bus分发.第三方消息分发自定
-          onSocketBackInfos: data => {
+          onSocketBackInfos: (data: {
+            method: string;
+            params: { result: number; handleName: string };
+          }) => {
             //视频窗口创建成功通知
-            if (data && data.method === "createVideoDialogReuslt" && data.params.result === 0) {
-              if (
-                data.params.handleName === "#vPlayArea") {
+            if (
+              data &&
+              data.method === 'createVideoDialogReuslt' &&
+              data.params.result === 0
+            ) {
+              if (data.params.handleName === '#vPlayArea') {
                 //客户端窗口创建好后,界面显示窗口;
                 window.vPlayArea.resize();
-                ElMessage.warning("视频窗口创建成功!");
+                ElMessage.warning('视频窗口创建成功!');
                 videoplay(memberObj);
               }
             }
-          }
-        }
+          },
+        },
       );
-      console.log(theSocket);
+      // console.log(theSocket);
       //socket实例初始化websocket回调方法;
       window.theSocket
         .initWebSocket()
-        .then(v => {
-          console.log();
+        .then((v: any) => {
           if (v) {
-            ElMessage.warning("视频插件登陆完成!");
+            ElMessage.warning('视频插件登陆完成!');
           }
         })
-        .catch(v => {
-          ElMessage.warning("若要观看实时视频,请先安装视频插件");
+        .catch(() => {
+          ElMessage.warning('若要观看实时视频,请先安装视频插件');
         });
-    }
+    };
 
-    const initWnd =() => {
+    const initWnd = () => {
       console.log(1111);
       //左边窗口类型参数 分割 2行2列
       const typeObj = {
@@ -380,18 +400,18 @@ export default defineComponent({
         playerCtrlBarEnable: false,
         displayMode: 0,
         playMode: 0,
-        playParams: {}
+        playParams: {},
       };
       //左边窗口实例
       window.vPlayArea = new window.VideoPlay(
-        "#vPlayArea",
-        window.theSocket.websocket,//一个浏览器tab页面公用一个
-        window.theSocket.socketCode,//一个浏览器tab页面公用一个
-        typeObj
+        '#vPlayArea',
+        window.theSocket.websocket, //一个浏览器tab页面公用一个
+        window.theSocket.socketCode, //一个浏览器tab页面公用一个
+        typeObj,
       );
       //左边窗口初始化
-       window.vPlayArea.init();
-    }
+      window.vPlayArea.init();
+    };
 
     const updateTrafficSource = () => {
       if (state.map.getSource('Traffic')) {
@@ -643,9 +663,12 @@ export default defineComponent({
       // 如果存在id
       await incidentStore.getIncidentItem(route.query.id as string);
       handleSetDetailMarker(incidentStore.incidentDetail.baseInfo ?? {});
-      
-        document.getElementById("vPlayArea").style.height = (window.innerHeight - 20) + "px";
-        window.theSocket && window.theSocket.resize();
+
+      const vPlayAreaEl = document.getElementById('vPlayArea');
+
+      vPlayAreaEl &&
+        (vPlayAreaEl.style.height = window.innerHeight - 20 + 'px');
+      window.theSocket && window.theSocket.resize();
     });
 
     watch(
@@ -697,7 +720,7 @@ export default defineComponent({
     return () => (
       <div class="task-map-container">
         <MapView v-model:map={state.map} />
-        <div id='vPlayArea' />
+        <div id="vPlayArea" />
         <div
           class={clsx('address-type-card-container', {
             ['in-detail']: props.readonly,

+ 22 - 19
src/layout/BaseLayout/index.tsx

@@ -20,38 +20,41 @@ export default defineComponent({
 
     // login da hua
     onMounted(() => {
-      if (!localStorage.getItem("DAHUA_token")) {
+      if (!localStorage.getItem('DAHUA_token')) {
         daHuaStore.DAHUALogin();
       } else {
-        daHuaStore.KEEPAlive();  //保活 //获取当前用户信息
-        daHuaStore.DAHUAUserInfo().then(res => {
+        daHuaStore.KEEPAlive(); //保活 //获取当前用户信息
+        daHuaStore.DAHUAUserInfo().then((res) => {
           console.log(res);
-          daHuaStore.DAHUACreateMeet(res).then(data => {         //创建会议
+          daHuaStore.DAHUACreateMeet(res).then((data) => {
+            //创建会议
             console.log(data);
             let obj = {
               user: res,
               meetId: data.id,
-              member: [{
-                userName: res.userName,
-                userId: res.userCode,
-                region: res.paasId,
-                type: 'client',
-                // speak:'true',
-                number: res.userPhone,
-                // department:'根组织'
-              }]
-            }
+              member: [
+                {
+                  userName: res.userName,
+                  userId: res.userCode,
+                  region: res.paasId,
+                  type: 'client',
+                  // speak:'true',
+                  number: res.userPhone,
+                  // department:'根组织'
+                },
+              ],
+            };
             localStorage.setItem('meeting', JSON.stringify(obj));
             // console.log(obj);
             // daHuaStore.DAHUAMeetingMember(obj);
             // daHuaStore.DAHUAMeetingUser(data.id);
             // daHuaStore.DAHUADeleteMeet(data.id);
           });
-        })
+        });
         // console.log(dhUser);
-        daHuaStore.DAHUADeviceList('S4NbecfYB1DFLAIM9FFHQ8');   //测试执法记录仪
-        daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68AN187Q8');   //执法人员设备列表
-        daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68S6S0UFC');   //执法车辆列表
+        daHuaStore.DAHUADeviceList('S4NbecfYB1DFLAIM9FFHQ8'); //测试执法记录仪
+        daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68AN187Q8'); //执法人员设备列表
+        daHuaStore.DAHUADeviceList('S4NbecfYB1DGB68S6S0UFC'); //执法车辆列表
       }
     });
 
@@ -64,7 +67,7 @@ export default defineComponent({
           <RouterView />
           <MarkerMap
             readonly={route.path.includes('incidentDetail')}
-          // marker={store.incidentDetail}
+            // marker={store.incidentDetail}
           />
         </main>
       </section>

+ 101 - 101
src/store/useDaHuaStore.ts

@@ -1,37 +1,63 @@
 import { defineStore } from 'pinia';
 
-import { DAHUALogin, DAHUALoginParams, LoginResponse,DAHUAKeepAlive,DAHUAUserInfo,DAHUAInfomation,DAHUACreateMeet,DAHUADeleteMeet,DAHUAMeetingUser,
-  DAHUADevice,DAHUAMeetingMember,MeetingResponse,DAHUAUserObj } from '@/api/dahua';
+import {
+  DAHUALogin,
+  DAHUALoginParams,
+  LoginResponse,
+  DAHUAKeepAlive,
+  DAHUAUserInfo,
+  DAHUAInfomation,
+  DAHUACreateMeet,
+  DAHUADeleteMeet,
+  DAHUAMeetingUser,
+  DAHUADevice,
+  DAHUAMeetingMember,
+  MeetingResponse,
+  DAHUAUserObj,
+} from '@/api/dahua';
 import isString from 'lodash/isString';
 import { parseStr } from '@/utils';
 import md5 from 'crypto-js/md5';
 import { DA_HUA, DA_HUA_URL_PREFIX } from '@/constants/constants';
 import hex from 'crypto-js/format-hex';
 import { ElMessage } from 'element-plus';
+import request from '@/utils/request';
 
 export interface DaHuaStateType {
-  dhuser: object
+  dhuser: object;
+  timer: NodeJS.Timer | null;
+  dhToken: string;
 }
 
 export interface DaHuaActionsType {
   DAHUALogin(): void;
   KEEPAlive(): void;
-  DAHUAUserInfo(): void;
+  DAHUAUserInfo(): Promise<any>;
   DAHUAInfomation(): void;
-  DAHUAUserObj(): void;
+  DAHUAUserObj(id: string): Promise<any>;
+  DAHUAMeetingMember(obj: any): Promise<any>;
+  DAHUADeviceList(id: string): Promise<any>;
+  DAHUADeleteMeet(id: string): Promise<any>;
+  DAHUAMeetingUser(id: string): void;
+  DAHUACreateMeet(user: any): Promise<any>;
 }
 
 export default defineStore<'daHua', DaHuaStateType, {}, DaHuaActionsType>(
   'daHua',
   {
     state: () => ({
-        dhuser:{},
-        deviceUser:{}
+      dhuser: {},
+      deviceUser: {},
+      timer: null,
+      dhToken: localStorage.getItem('DAHUA_token') ?? '',
     }),
     actions: {
       async DAHUALogin() {
         try {
           const { password, username } = DA_HUA;
+          request('GET', {
+            url: 'http://api.xt.wenhq.top:8083/mock/49/getUser?noauth=401',
+          });
           const firstLoginRes = await fetch(
             `${DA_HUA_URL_PREFIX}/videoService/accounts/authorize`,
             {
@@ -70,137 +96,111 @@ export default defineStore<'daHua', DaHuaStateType, {}, DaHuaActionsType>(
           const next = isString(data)
             ? parseStr<LoginResponse>(data)
             : data ?? {};
-          localStorage.setItem('DAHUA_token', next.token);
+          this.dhToken = next.token ?? '';
+          localStorage.setItem('DAHUA_token', next.token ?? '');
           localStorage.setItem(
             'DAHUA_userId',
             JSON.stringify(next.userId || ''),
           );
           this.KEEPAlive();
         } catch (err) {
-          console.log(err);
           ElMessage.error({
             message: '大华应急指挥调度实战平台鉴权失败, 请尝试刷新页面重试',
           });
         }
       },
-      async KEEPAlive(){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // const dahuaToken = '5269850340392960_c63314d9429094389d84166a6d888338647bf98afd0c10d6f23bf696a84d439cd50d2efd7260977a26023391617a50343cf5125fc523acc8a1bb1b12191bf188';
-        console.log(dahuaToken);
-        const res = await DAHUAKeepAlive({
-            token:dahuaToken
-        });
+      async KEEPAlive() {
         const that = this;
-        setTimeout(function() {
-          that.KEEPAlive();
-      }, 20000);
+        this.timer = setTimeout(() => {
+          DAHUAKeepAlive({
+            token: that.dhToken,
+          });
+        }, 20000);
       },
-      async DAHUAUserInfo(){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
+      async DAHUAUserInfo() {
+        const dahuaToken = localStorage.getItem('DAHUA_token') ?? '';
         const res = await DAHUAUserInfo({
-          token:dahuaToken
-        });   
-        return res
+          token: dahuaToken,
+        });
+        return res;
       },
-      async DAHUAInfomation(){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
+      async DAHUAInfomation() {
         const res = await DAHUAInfomation({
-            page: 1,
-            pageSize: 1000,
-            condition: {},
-            keyCondition: {},
-            token:dahuaToken
-          });   
-          return res;
+          page: 1,
+          pageSize: 1000,
+          condition: {},
+          keyCondition: {},
+          token: this.dhToken,
+        });
+        return res;
       },
-      async DAHUACreateMeet(user){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // console.log(user.userName);
+      async DAHUACreateMeet(user) {
         const res = await DAHUACreateMeet({
-          masterName : user.userName,
-          masterId : user.userCode,
-          masterNumber : user.userPhone,
-          region : user.paasId,
-          mode : 'group',
-          name : '11111',
-          record : true,
-          type : 'video',
-          token : dahuaToken
-          });   
-          const next = isString(res)
-          ? parseStr<MeetingResponse>(res)
-          : res ?? {};
-          console.log(next);
-          return next
+          masterName: user.userName,
+          masterId: user.userCode,
+          masterNumber: user.userPhone,
+          region: user.paasId,
+          mode: 'group',
+          name: '11111',
+          record: true,
+          type: 'video',
+          token: this.dhToken,
+        });
+        return isString(res) ? parseStr<MeetingResponse>(res) : res ?? {};
       },
 
-      async DAHUAMeetingUser(id){
-        console.log(id);
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // console.log(user.userName);
-        const res = await DAHUAMeetingUser({
-              token: dahuaToken,
-              meetId: id
-          });   
-
-       console.log(res);
+      async DAHUAMeetingUser(id) {
+        try {
+          await DAHUAMeetingUser({
+            token: this.dhToken,
+            meetId: id,
+          });
+        } catch (error) {}
       },
 
-      async DAHUADeleteMeet(id){
-        console.log(id);
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // console.log(user.userName);
-        const res = await DAHUADeleteMeet({
-              token: dahuaToken,
-              meetId: id
-          });   
-       console.log(res);
+      async DAHUADeleteMeet(id) {
+        try {
+          await DAHUADeleteMeet({
+            token: this.dhToken,
+            meetId: id,
+          });
+        } catch (error) {}
       },
 
       //设备列表
-      async DAHUADeviceList(id){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // console.log(dahuaToken);
+      async DAHUADeviceList(id) {
         const res = await DAHUADevice({
-          token: dahuaToken,
+          token: this.dhToken,
           nodeType: 1,
-          typeCode : '01;1;ALL',
-          page : 1,
-          pageSize : 100,
-          id : id
-      });
-      console.log(res.results);
-      return res;
+          typeCode: '01;1;ALL',
+          page: 1,
+          pageSize: 100,
+          id: id,
+        });
+        return res;
       },
 
-      async DAHUAMeetingMember(obj){
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        console.log(dahuaToken);
-        const res = await DAHUAMeetingMember(
-          {
-            obj:{id:obj.meetId,
+      async DAHUAMeetingMember(obj) {
+        await DAHUAMeetingMember({
+          obj: {
+            id: obj.meetId,
             inviteId: obj.user.userCode,
             inviteName: obj.user.userName,
             inviteNumber: obj.user.userPhone,
-            member:obj.member
+            member: obj.member,
           },
-            token:dahuaToken
-          });
+          token: this.dhToken,
+        });
       },
 
-      async DAHUAUserObj(id){
-        console.log(id);
-        const dahuaToken = localStorage.getItem('DAHUA_token').replace('"','');
-        // console.log(user.userName);
+      async DAHUAUserObj(id) {
         const res = await DAHUAUserObj({
-              token: dahuaToken,
-              id: id
-          });   
-          // this.deviceUser = res;
-         return res;
+          token: this.dhToken,
+          id,
+        });
+        // this.deviceUser = res;
+        return res;
       },
-
-      
     },
   },
 );

+ 21 - 15
src/store/useMarkerStore.ts

@@ -3,7 +3,11 @@ import {
   IncidentItem,
   IncidentItemDetail,
 } from '@/api/incident';
-import { getAllResources, getAllsingleDevice } from '@/api/resource';
+import {
+  getAllResources,
+  getAllsingleDevice,
+  SingleDeviceItem,
+} from '@/api/resource';
 import {
   PENDING_DISPOSAL_INCIDENT,
   PENDING_INCIDENT,
@@ -12,16 +16,20 @@ import {
   WARNING_INCIDENT,
   SINGLE_PAWN,
   // EMERGENCY_TEAM,
-  
 } from '@/components/MarkerMap/constants';
+import { type } from 'os';
 import { defineStore } from 'pinia';
 
-export interface MarkerType
-  extends NonNullable<IncidentItemDetail['baseInfo']> {
+type AllResources = NonNullable<IncidentItemDetail['baseInfo']> &
+  NonNullable<SingleDeviceItem>;
+
+type Simply<T> = { [K in keyof T]: T[K] };
+
+export interface MarkerType extends Simply<AllResources> {
   locations?: string;
   marker?: any;
   popup?: any;
-  [key: string]: any;
+  // [key: string]: any;
 }
 
 export interface MarkerStateType {
@@ -32,7 +40,7 @@ export interface MarkerStateType {
   emergencyVehicles: MarkerType[];
   emergencyTeam: MarkerType[];
   emergencyWarehouse: MarkerType[];
-  singleDevice: MarkerType[];
+  singleDevice: SingleDeviceItem[];
   /** 详情页面 点击监控点位 打开视频 */
   livevideovisible: boolean;
   livevideos: MarkerType[];
@@ -60,7 +68,7 @@ export default defineStore<'marker', MarkerStateType, {}, MainActionsType>(
       videoSurveillance: VIDEO_SURVEILLANCE,
       emergencyVehicles: [],
       emergencyTeam: [],
-      singleDevice: SINGLE_PAWN,
+      singleDevice: [],
       emergencyWarehouse: [],
       livevideos: [],
       livevideovisible: false,
@@ -79,19 +87,17 @@ export default defineStore<'marker', MarkerStateType, {}, MainActionsType>(
           this.toggleLoading();
         }
       },
-      async getAllsingleDevice() { 
+      async getAllsingleDevice() {
         try {
           this.toggleLoading();
           const { data } = await getAllsingleDevice();
-          
+
           this.singleDevice = [];
-         
-          Object.values(data).forEach(datap => {
-            datap["locations"] = `${datap.gpsX},${datap.gpsY}`,
-            this.singleDevice.push(datap);
-          });
-           console.log(this.singleDevice);
 
+          this.singleDevice = Object.values(data).map((item) => ({
+            ...item,
+            locations: `${item.gpsX},${item.gpsY}`,
+          }));
         } finally {
           this.toggleLoading();
         }

+ 19 - 2
src/utils/request.ts

@@ -2,7 +2,8 @@ import axios, { AxiosRequestConfig } from 'axios';
 import qs from 'querystring';
 import { ElMessage } from 'element-plus';
 import useMainStore from '@/store/useMainStore';
-import { BaseLoginUrl } from '@/constants/constants';
+import { BaseLoginUrl, DA_HUA_URL_PREFIX } from '@/constants/constants';
+import { useDaHuaStore } from '@/store';
 
 const baseURL =
   process.env.NODE_ENV === 'production'
@@ -11,6 +12,7 @@ const baseURL =
 
 const CancelToken = axios.CancelToken;
 const source = CancelToken.source();
+let timer: NodeJS.Timeout;
 
 axios.interceptors.request.use((config) => {
   const main = useMainStore();
@@ -67,6 +69,17 @@ axios.interceptors.response.use(
   },
   (error) => {
     // ElMessage.error({ message: '系统异常, 请稍后重试!' });
+    const {
+      status,
+      config: { url },
+    } = error.response;
+    if (status === 401 && url?.includes(DA_HUA_URL_PREFIX)) {
+      clearTimeout(timer);
+      const dahuaStore = useDaHuaStore();
+      timer = setTimeout(() => {
+        dahuaStore.DAHUALogin();
+      }, 1000);
+    }
     throw Error(error);
   },
 );
@@ -82,7 +95,11 @@ export default function request<T>(
     headers: {
       Accept: 'application/json',
       'Content-Type': 'application/json',
-      Authorization: 'Bearer ' + window.localStorage.getItem('Authorization'),
+      Authorization:
+        'Bearer ' + window.localStorage.getItem('Authorization') ?? '',
+      ...{
+        'X-Subject-Token': window.localStorage.getItem('DAHUA_token') ?? '',
+      },
       ...confifg.headers,
     },
   });