useDaHuaStore.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import { defineStore } from 'pinia';
  2. import {
  3. DAHUALogin,
  4. DAHUALoginParams,
  5. LoginResponse,
  6. DAHUAKeepAlive,
  7. DAHUAUserInfo,
  8. DAHUAInfomation,
  9. DAHUACreateMeet,
  10. DAHUADeleteMeet,
  11. DAHUAMeetingUser,
  12. DAHUADevice,
  13. DAHUAMeetingMember,
  14. MeetingResponse,
  15. DAHUAUserObj,
  16. } from '@/api/dahua';
  17. import isString from 'lodash/isString';
  18. import { parseStr } from '@/utils';
  19. import md5 from 'crypto-js/md5';
  20. import { DA_HUA, DA_HUA_URL_PREFIX } from '@/constants/constants';
  21. import { ElMessage } from 'element-plus';
  22. export interface DaHuaStateType {
  23. dahuaUserVisible: boolean;
  24. dhuser: object;
  25. timer: NodeJS.Timer | null;
  26. dhToken: string;
  27. }
  28. export interface DaHuaActionsType {
  29. DAHUALogin(): void;
  30. KEEPAlive(): void;
  31. DAHUAUserInfo(): Promise<any>;
  32. DAHUAInfomation(): void;
  33. DAHUAUserObj(id: string): Promise<any>;
  34. DAHUAMeetingMember(obj: any): Promise<any>;
  35. DAHUADeviceList(id: string): Promise<any>;
  36. DAHUADeleteMeet(id: string): Promise<any>;
  37. DAHUAMeetingUser(id: string): void;
  38. DAHUACreateMeet(user: any): Promise<any>;
  39. }
  40. export default defineStore<'daHua', DaHuaStateType, {}, DaHuaActionsType>(
  41. 'daHua',
  42. {
  43. state: () => ({
  44. dahuaUserVisible: false,
  45. dhuser: {},
  46. deviceUser: {},
  47. timer: null,
  48. dhToken: localStorage.getItem('DAHUA_token') ?? '',
  49. }),
  50. actions: {
  51. async DAHUALogin() {
  52. try {
  53. const { password, username } = DA_HUA;
  54. const firstLoginRes = await fetch(
  55. `${DA_HUA_URL_PREFIX}/videoService/accounts/authorize`,
  56. {
  57. method: 'POST',
  58. headers: {
  59. 'Content-Type': 'application/json',
  60. 'X-Subject-Token': '',
  61. },
  62. body: JSON.stringify({
  63. userName: username,
  64. clientType: 'winpc',
  65. ipAddress: '', //可不传
  66. pid: 2548, //可不传
  67. }),
  68. },
  69. );
  70. const firstLogin = (await firstLoginRes.json()) as unknown as {
  71. realm?: string;
  72. randomKey: string;
  73. };
  74. const md1 = md5(password); //第1次加密
  75. const md2 = md5(username + md1); //第2次加密
  76. const md3 = md5(md2.toString()); //第3次加密
  77. const md4 = md5(username + ':' + firstLogin.realm + ':' + md3); //第4次加密
  78. const signature = md5(md4 + ':' + firstLogin.randomKey); //第5次加密
  79. const data = await DAHUALogin({
  80. userName: username,
  81. signature: signature.toString(),
  82. randomKey: firstLogin.randomKey,
  83. encryptType: 'MD5',
  84. clientType: 'winpc',
  85. pid: 2548,
  86. });
  87. const next = isString(data)
  88. ? parseStr<LoginResponse>(data)
  89. : data ?? {};
  90. this.dhToken = next.token ?? '';
  91. localStorage.setItem('DAHUA_token', next.token ?? '');
  92. localStorage.setItem(
  93. 'DAHUA_userId',
  94. JSON.stringify(next.userId || ''),
  95. );
  96. this.timer && clearInterval(this.timer);
  97. this.KEEPAlive();
  98. } catch (err) {
  99. ElMessage.error({
  100. message: '大华应急指挥调度实战平台鉴权失败, 请尝试刷新页面重试',
  101. });
  102. }
  103. },
  104. async KEEPAlive() {
  105. const that = this;
  106. // this.timer = setInterval(() => {
  107. // DAHUAKeepAlive({
  108. // token: that.dhToken,
  109. // });
  110. // }, 20000);
  111. },
  112. async DAHUAUserInfo() {
  113. const dahuaToken = localStorage.getItem('DAHUA_token') ?? '';
  114. const res = await DAHUAUserInfo({
  115. token: dahuaToken,
  116. });
  117. return res;
  118. },
  119. async DAHUAInfomation() {
  120. const res = await DAHUAInfomation({
  121. page: 1,
  122. pageSize: 1000,
  123. condition: {},
  124. keyCondition: {},
  125. token: this.dhToken,
  126. });
  127. return res;
  128. },
  129. async DAHUACreateMeet(user) {
  130. const res = await DAHUACreateMeet({
  131. masterName: user.userName,
  132. masterId: user.userCode,
  133. masterNumber: user.userPhone,
  134. region: user.paasId,
  135. mode: 'group',
  136. name: '11111',
  137. record: true,
  138. type: 'video',
  139. token: this.dhToken,
  140. });
  141. return isString(res) ? parseStr<MeetingResponse>(res) : res ?? {};
  142. },
  143. async DAHUAMeetingUser(id) {
  144. try {
  145. await DAHUAMeetingUser({
  146. token: this.dhToken,
  147. meetId: id,
  148. });
  149. } catch (error) {}
  150. },
  151. async DAHUADeleteMeet(id) {
  152. try {
  153. await DAHUADeleteMeet({
  154. token: this.dhToken,
  155. meetId: id,
  156. });
  157. } catch (error) {}
  158. },
  159. //设备列表
  160. async DAHUADeviceList(id) {
  161. const res = await DAHUADevice({
  162. token: this.dhToken,
  163. nodeType: 1,
  164. typeCode: '01;1;ALL',
  165. page: 1,
  166. pageSize: 100,
  167. id: id,
  168. });
  169. return res;
  170. },
  171. async DAHUAMeetingMember(obj) {
  172. await DAHUAMeetingMember({
  173. obj: {
  174. id: obj.meetId,
  175. inviteId: obj.user.userCode,
  176. inviteName: obj.user.userName,
  177. inviteNumber: obj.user.userPhone,
  178. member: obj.member,
  179. },
  180. token: this.dhToken,
  181. });
  182. },
  183. async DAHUAUserObj(id) {
  184. const res = await DAHUAUserObj({
  185. token: this.dhToken,
  186. id,
  187. });
  188. // this.deviceUser = res;
  189. return res;
  190. },
  191. },
  192. },
  193. );