useDaHuaStore.ts 5.6 KB

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