fdb2 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.dockerignore +21 -0
  2. package/.editorconfig +11 -0
  3. package/.eslintrc.cjs +14 -0
  4. package/.eslintrc.json +7 -0
  5. package/.prettierrc.js +3 -0
  6. package/.tpl.env +22 -0
  7. package/README.md +260 -0
  8. package/bin/build.sh +28 -0
  9. package/bin/deploy.sh +8 -0
  10. package/bin/dev.sh +10 -0
  11. package/bin/docker/.env +4 -0
  12. package/bin/docker/dev-docker-compose.yml +43 -0
  13. package/bin/docker/dev.Dockerfile +24 -0
  14. package/bin/docker/prod-docker-compose.yml +17 -0
  15. package/bin/docker/prod.Dockerfile +29 -0
  16. package/bin/fdb2.js +142 -0
  17. package/data/connections.demo.json +32 -0
  18. package/env.d.ts +1 -0
  19. package/nw-build.js +120 -0
  20. package/nw-dev.js +65 -0
  21. package/package.json +114 -0
  22. package/public/favicon.ico +0 -0
  23. package/public/index.html +9 -0
  24. package/public/modules/header.tpl +14 -0
  25. package/public/modules/initial_state.tpl +55 -0
  26. package/server/index.ts +677 -0
  27. package/server/model/connection.entity.ts +66 -0
  28. package/server/model/database.entity.ts +246 -0
  29. package/server/service/connection.service.ts +334 -0
  30. package/server/service/database/base.service.ts +363 -0
  31. package/server/service/database/database.service.ts +510 -0
  32. package/server/service/database/index.ts +7 -0
  33. package/server/service/database/mssql.service.ts +723 -0
  34. package/server/service/database/mysql.service.ts +761 -0
  35. package/server/service/database/oracle.service.ts +839 -0
  36. package/server/service/database/postgres.service.ts +744 -0
  37. package/server/service/database/sqlite.service.ts +559 -0
  38. package/server/service/session.service.ts +158 -0
  39. package/server.js +128 -0
  40. package/src/adapter/ajax.ts +135 -0
  41. package/src/assets/base.css +1 -0
  42. package/src/assets/database.css +950 -0
  43. package/src/assets/images/collapse.png +0 -0
  44. package/src/assets/images/no-login.png +0 -0
  45. package/src/assets/images/svg/illustrations/illustration-1.svg +1 -0
  46. package/src/assets/images/svg/illustrations/illustration-2.svg +2 -0
  47. package/src/assets/images/svg/illustrations/illustration-3.svg +50 -0
  48. package/src/assets/images/svg/illustrations/illustration-4.svg +1 -0
  49. package/src/assets/images/svg/illustrations/illustration-5.svg +73 -0
  50. package/src/assets/images/svg/illustrations/illustration-6.svg +89 -0
  51. package/src/assets/images/svg/illustrations/illustration-7.svg +39 -0
  52. package/src/assets/images/svg/illustrations/illustration-8.svg +1 -0
  53. package/src/assets/images/svg/separators/curve-2.svg +3 -0
  54. package/src/assets/images/svg/separators/curve.svg +3 -0
  55. package/src/assets/images/svg/separators/line.svg +3 -0
  56. package/src/assets/images/theme/light/screen-1-1000x800.jpg +0 -0
  57. package/src/assets/images/theme/light/screen-2-1000x800.jpg +0 -0
  58. package/src/assets/login/bg.jpg +0 -0
  59. package/src/assets/login/bg.png +0 -0
  60. package/src/assets/login/left.jpg +0 -0
  61. package/src/assets/logo.svg +73 -0
  62. package/src/assets/logo.webp +0 -0
  63. package/src/assets/main.css +1 -0
  64. package/src/base/config.ts +20 -0
  65. package/src/base/detect.ts +134 -0
  66. package/src/base/entity.ts +92 -0
  67. package/src/base/eventBus.ts +37 -0
  68. package/src/base//345/237/272/347/241/200/345/261/202.md +7 -0
  69. package/src/components/connection-editor/index.vue +590 -0
  70. package/src/components/dataGrid/index.vue +105 -0
  71. package/src/components/dataGrid/pagination.vue +106 -0
  72. package/src/components/loading/index.vue +43 -0
  73. package/src/components/modal/index.ts +181 -0
  74. package/src/components/modal/index.vue +560 -0
  75. package/src/components/toast/index.ts +44 -0
  76. package/src/components/toast/toast.vue +58 -0
  77. package/src/components/user/name.vue +104 -0
  78. package/src/components/user/selector.vue +416 -0
  79. package/src/domain/SysConfig.ts +74 -0
  80. package/src/platform/App.vue +8 -0
  81. package/src/platform/database/components/connection-detail.vue +1154 -0
  82. package/src/platform/database/components/data-editor.vue +478 -0
  83. package/src/platform/database/components/data-import-export.vue +1602 -0
  84. package/src/platform/database/components/database-detail.vue +1173 -0
  85. package/src/platform/database/components/database-monitor.vue +1086 -0
  86. package/src/platform/database/components/db-tools.vue +577 -0
  87. package/src/platform/database/components/query-history.vue +1349 -0
  88. package/src/platform/database/components/sql-executor.vue +738 -0
  89. package/src/platform/database/components/sql-query-editor.vue +1046 -0
  90. package/src/platform/database/components/table-detail.vue +1376 -0
  91. package/src/platform/database/components/table-editor.vue +690 -0
  92. package/src/platform/database/explorer.vue +1840 -0
  93. package/src/platform/database/index.vue +1193 -0
  94. package/src/platform/database/layout.vue +367 -0
  95. package/src/platform/database/router.ts +37 -0
  96. package/src/platform/database/styles/common.scss +602 -0
  97. package/src/platform/database/types/common.ts +445 -0
  98. package/src/platform/database/utils/export.ts +232 -0
  99. package/src/platform/database/utils/helpers.ts +437 -0
  100. package/src/platform/index.ts +33 -0
  101. package/src/platform/router.ts +41 -0
  102. package/src/service/base.ts +128 -0
  103. package/src/service/database.ts +500 -0
  104. package/src/service/login.ts +121 -0
  105. package/src/shims-vue.d.ts +7 -0
  106. package/src/stores/connection.ts +266 -0
  107. package/src/stores/session.ts +87 -0
  108. package/src/typings/database-types.ts +413 -0
  109. package/src/typings/database.ts +364 -0
  110. package/src/typings/global.d.ts +58 -0
  111. package/src/typings/pinia.d.ts +8 -0
  112. package/src/utils/clipboard.ts +30 -0
  113. package/src/utils/database-types.ts +243 -0
  114. package/src/utils/modal.ts +124 -0
  115. package/src/utils/request.ts +55 -0
  116. package/src/utils/sleep.ts +4 -0
  117. package/src/utils/toast.ts +73 -0
  118. package/src/utils/util.ts +171 -0
  119. package/src/utils/xlsx.ts +228 -0
  120. package/tsconfig.json +33 -0
  121. package/tsconfig.server.json +19 -0
  122. package/view/index.html +9 -0
  123. package/view/modules/header.tpl +14 -0
  124. package/view/modules/initial_state.tpl +20 -0
  125. package/vite.config.ts +384 -0
@@ -0,0 +1,500 @@
1
+ import { request } from '@/service/base';
2
+ import type { ConnectionEntity, DatabaseEntity, TableEntity, ColumnEntity, IndexEntity, ForeignKeyEntity } from '@/typings/database';
3
+
4
+ /**
5
+ * 数据库连接管理服务
6
+ */
7
+ export class ConnectionService {
8
+
9
+ /**
10
+ * 获取所有数据库连接配置
11
+ */
12
+ async getAllConnections() {
13
+ return request('/api/database/getConnections', {});
14
+ }
15
+
16
+ /**
17
+ * 根据ID获取数据库连接配置
18
+ */
19
+ async getConnectionById(id: string) {
20
+ return request('/api/database/getConnection', { id });
21
+ }
22
+
23
+ /**
24
+ * 添加数据库连接配置
25
+ */
26
+ async addConnection(connection: ConnectionEntity) {
27
+ return request('/api/database/addConnection', connection);
28
+ }
29
+
30
+ /**
31
+ * 更新数据库连接配置
32
+ */
33
+ async updateConnection(id: string, updates: Partial<ConnectionEntity>) {
34
+ return request('/api/database/updateConnection', { id, ...updates });
35
+ }
36
+
37
+ /**
38
+ * 删除数据库连接配置
39
+ */
40
+ async deleteConnection(id: string) {
41
+ return request('/api/database/deleteConnection', { id });
42
+ }
43
+
44
+ /**
45
+ * 测试数据库连接
46
+ */
47
+ async testConnection(connection: ConnectionEntity) {
48
+ return request('/api/database/testConnection', connection);
49
+ }
50
+
51
+ /**
52
+ * 获取支持的数据库类型
53
+ */
54
+ async getDatabaseTypes() {
55
+ return request('/api/database/getSupportedDatabaseTypes');
56
+ }
57
+
58
+ /**
59
+ * 创建数据库
60
+ */
61
+ async createDatabase(connectionId: string, databaseName: string, options?: any) {
62
+ return request('/api/database/createDatabase', {
63
+ id: connectionId,
64
+ databaseName,
65
+ options
66
+ });
67
+ }
68
+
69
+ /**
70
+ * 删除数据库
71
+ */
72
+ async dropDatabase(connectionId: string, databaseName: string) {
73
+ return request('/api/database/dropDatabase', {
74
+ id: connectionId,
75
+ databaseName
76
+ });
77
+ }
78
+ }
79
+
80
+ /**
81
+ * 数据库管理服务
82
+ */
83
+ export class DatabaseService {
84
+
85
+ /**
86
+ * 获取数据库列表
87
+ */
88
+ async getDatabases(connectionId: string) {
89
+ return request('/api/database/getDatabases', { id: connectionId });
90
+ }
91
+
92
+ /**
93
+ * 获取数据库详细信息
94
+ */
95
+ async getDatabaseInfo(connectionId: string, databaseName: string) {
96
+ return request('/api/database/getDatabaseInfo', { id: connectionId, database: databaseName });
97
+ }
98
+
99
+ /**
100
+ * 获取数据库表列表
101
+ */
102
+ async getTables(connectionId: string, databaseName: string) {
103
+ return request('/api/database/getTables', { id: connectionId, database: databaseName });
104
+ }
105
+
106
+ /**
107
+ * 获取表详细信息
108
+ */
109
+ async getTableInfo(connectionId: string, databaseName: string, tableName: string) {
110
+ return request('/api/database/getTableInfo', { id: connectionId, database: databaseName, table: tableName });
111
+ }
112
+
113
+ /**
114
+ * 获取表数据
115
+ */
116
+ async getTableData(
117
+ connectionId: string,
118
+ databaseName: string,
119
+ tableName: string,
120
+ page: number = 1,
121
+ pageSize: number = 100,
122
+ where?: string,
123
+ orderBy?: string
124
+ ) {
125
+ const params = {
126
+ id: connectionId,
127
+ database: databaseName,
128
+ table: tableName,
129
+ page,
130
+ pageSize,
131
+ where,
132
+ orderBy
133
+ };
134
+ return request('/api/database/getTableData', params);
135
+ }
136
+
137
+ /**
138
+ * 执行SQL查询
139
+ */
140
+ async executeQuery(connectionId: string, sql: string, databaseName?: string) {
141
+ return request('/api/database/executeQuery', { id: connectionId, sql, database: databaseName });
142
+ }
143
+
144
+ /**
145
+ * 关闭数据库连接
146
+ */
147
+ async closeConnection(connectionId: string) {
148
+ return request('/api/database/closeConnection', { id: connectionId });
149
+ }
150
+
151
+ /**
152
+ * 导出表数据
153
+ */
154
+ async exportTableData(
155
+ connectionId: string,
156
+ databaseName: string,
157
+ tableName: string,
158
+ format: string = 'json',
159
+ where?: string
160
+ ) {
161
+ return request('/api/database/exportTableData', {
162
+ id: connectionId,
163
+ database: databaseName,
164
+ table: tableName,
165
+ format,
166
+ where
167
+ });
168
+ }
169
+
170
+ /**
171
+ * 导出表数据到SQL文件
172
+ */
173
+ async exportTableDataToSQL(
174
+ connectionId: string,
175
+ databaseName: string,
176
+ tableName: string,
177
+ options?: any
178
+ ) {
179
+ return request('/api/database/exportTableDataToSQL', {
180
+ id: connectionId,
181
+ database: databaseName,
182
+ table: tableName,
183
+ options
184
+ });
185
+ }
186
+
187
+ /**
188
+ * 导出表数据到CSV文件
189
+ */
190
+ async exportTableDataToCSV(
191
+ connectionId: string,
192
+ databaseName: string,
193
+ tableName: string,
194
+ options?: any
195
+ ) {
196
+ return request('/api/database/exportTableDataToCSV', {
197
+ id: connectionId,
198
+ database: databaseName,
199
+ table: tableName,
200
+ options
201
+ });
202
+ }
203
+
204
+ /**
205
+ * 导出表数据到JSON文件
206
+ */
207
+ async exportTableDataToJSON(
208
+ connectionId: string,
209
+ databaseName: string,
210
+ tableName: string,
211
+ options?: any
212
+ ) {
213
+ return request('/api/database/exportTableDataToJSON', {
214
+ id: connectionId,
215
+ database: databaseName,
216
+ table: tableName,
217
+ options
218
+ });
219
+ }
220
+
221
+ /**
222
+ * 导出表数据到Excel文件
223
+ */
224
+ async exportTableDataToExcel(
225
+ connectionId: string,
226
+ databaseName: string,
227
+ tableName: string,
228
+ options?: any
229
+ ) {
230
+ return request('/api/database/exportTableDataToExcel', {
231
+ id: connectionId,
232
+ database: databaseName,
233
+ table: tableName,
234
+ options
235
+ });
236
+ }
237
+
238
+ /**
239
+ * 保存表结构(新建表)
240
+ */
241
+ async saveTableStructure(
242
+ connectionId: string,
243
+ database: string,
244
+ table: any,
245
+ columns: any[]
246
+ ) {
247
+ return request('/api/database/saveTableStructure', {
248
+ id: connectionId,
249
+ database,
250
+ table,
251
+ columns
252
+ });
253
+ }
254
+
255
+ /**
256
+ * 修改表结构
257
+ */
258
+ async alterTable(
259
+ connectionId: string,
260
+ database: string,
261
+ tableName: string,
262
+ columns: any[],
263
+ oldColumns?: any[]
264
+ ) {
265
+ return request('/api/database/alterTable', {
266
+ id: connectionId,
267
+ database,
268
+ tableName,
269
+ columns,
270
+ oldColumns
271
+ });
272
+ }
273
+
274
+ /**
275
+ * 插入数据
276
+ */
277
+ async insertData(
278
+ connectionId: string,
279
+ database: string,
280
+ tableName: string,
281
+ data: any
282
+ ) {
283
+ return request('/api/database/insertData', {
284
+ id: connectionId,
285
+ database,
286
+ table: tableName,
287
+ data
288
+ });
289
+ }
290
+
291
+ /**
292
+ * 更新数据
293
+ */
294
+ async updateData(
295
+ connectionId: string,
296
+ database: string,
297
+ tableName: string,
298
+ data: any,
299
+ where: any
300
+ ) {
301
+ return request('/api/database/updateData', {
302
+ id: connectionId,
303
+ database,
304
+ table: tableName,
305
+ data,
306
+ where
307
+ });
308
+ }
309
+
310
+ /**
311
+ * 删除数据
312
+ */
313
+ async deleteData(
314
+ connectionId: string,
315
+ database: string,
316
+ tableName: string,
317
+ where: any
318
+ ) {
319
+ return request('/api/database/deleteData', {
320
+ id: connectionId,
321
+ database,
322
+ table: tableName,
323
+ where
324
+ });
325
+ }
326
+
327
+ /**
328
+ * 截断表
329
+ */
330
+ async truncateTable(
331
+ connectionId: string,
332
+ database: string,
333
+ tableName: string
334
+ ) {
335
+ return request(`/api/database/truncateTable/${connectionId}/${database}/${tableName}`);
336
+ }
337
+
338
+ /**
339
+ * 删除表
340
+ */
341
+ async dropTable(
342
+ connectionId: string,
343
+ database: string,
344
+ tableName: string
345
+ ) {
346
+ return request(`/api/database/dropTable/${connectionId}/${database}/${tableName}`);
347
+ }
348
+
349
+ /**
350
+ * 数据库备份
351
+ */
352
+ async backupDatabase(
353
+ connectionId: string,
354
+ database: string,
355
+ options?: any
356
+ ) {
357
+ return request('/api/database/backup', { id: connectionId, databaseName: database, options });
358
+ }
359
+
360
+ /**
361
+ * 恢复数据库
362
+ */
363
+ async restoreDatabase(
364
+ connectionId: string,
365
+ database: string,
366
+ filePath: string,
367
+ options?: any
368
+ ) {
369
+ return request('/api/database/restore', { id: connectionId, databaseName: database, filePath, options });
370
+ }
371
+
372
+ /**
373
+ * 获取数据库统计信息
374
+ */
375
+ async getDatabaseStats(
376
+ connectionId: string,
377
+ database: string
378
+ ) {
379
+ return request('/api/database/getStats', { id: connectionId, databaseName: database });
380
+ }
381
+
382
+ /**
383
+ * 优化数据库
384
+ */
385
+ async optimizeDatabase(
386
+ connectionId: string,
387
+ database: string
388
+ ) {
389
+ return request('/api/database/optimize', { id: connectionId, databaseName: database });
390
+ }
391
+
392
+ /**
393
+ * 分析表
394
+ */
395
+ async analyzeTables(
396
+ connectionId: string,
397
+ database: string
398
+ ) {
399
+ return request('/api/database/analyze', { id: connectionId, databaseName: database });
400
+ }
401
+
402
+ /**
403
+ * 修复表
404
+ */
405
+ async repairTables(
406
+ connectionId: string,
407
+ database: string
408
+ ) {
409
+ return request('/api/database/repair', { id: connectionId, databaseName: database });
410
+ }
411
+
412
+ /**
413
+ * 检查数据库健康状态
414
+ */
415
+ async checkDatabaseHealth(
416
+ connectionId: string,
417
+ database: string
418
+ ) {
419
+ return request(`/api/database/health/${connectionId}/${database}`);
420
+ }
421
+
422
+ /**
423
+ * 获取视图列表
424
+ */
425
+ async getViews(connectionId: string, databaseName: string) {
426
+ return request('/api/database/getViews', { id: connectionId, database: databaseName });
427
+ }
428
+
429
+ /**
430
+ * 获取视图定义
431
+ */
432
+ async getViewDefinition(connectionId: string, databaseName: string, viewName: string) {
433
+ return request('/api/database/getViewDefinition', { id: connectionId, database: databaseName, viewName });
434
+ }
435
+
436
+ /**
437
+ * 创建视图
438
+ */
439
+ async createView(connectionId: string, databaseName: string, viewName: string, definition: string) {
440
+ return request('/api/database/createView', {
441
+ id: connectionId,
442
+ database: databaseName,
443
+ viewName,
444
+ definition
445
+ });
446
+ }
447
+
448
+ /**
449
+ * 删除视图
450
+ */
451
+ async dropView(connectionId: string, databaseName: string, viewName: string) {
452
+ return request('/api/database/dropView', {
453
+ id: connectionId,
454
+ database: databaseName,
455
+ viewName
456
+ });
457
+ }
458
+
459
+ /**
460
+ * 获取存储过程列表
461
+ */
462
+ async getProcedures(connectionId: string, databaseName: string) {
463
+ return request('/api/database/getProcedures', { id: connectionId, database: databaseName });
464
+ }
465
+
466
+ /**
467
+ * 获取存储过程定义
468
+ */
469
+ async getProcedureDefinition(connectionId: string, databaseName: string, procedureName: string) {
470
+ return request('/api/database/getProcedureDefinition', {
471
+ id: connectionId,
472
+ database: databaseName,
473
+ procedureName
474
+ });
475
+ }
476
+
477
+ /**
478
+ * 创建存储过程
479
+ */
480
+ async createProcedure(connectionId: string, databaseName: string, procedureName: string, definition: string) {
481
+ const sql = `CREATE PROCEDURE \`${procedureName}\` ${definition}`;
482
+ return request('/api/database/executeQuery', {
483
+ id: connectionId,
484
+ sql,
485
+ database: databaseName
486
+ });
487
+ }
488
+
489
+ /**
490
+ * 删除存储过程
491
+ */
492
+ async dropProcedure(connectionId: string, databaseName: string, procedureName: string) {
493
+ const sql = `DROP PROCEDURE \`${procedureName}\``;
494
+ return request('/api/database/executeQuery', {
495
+ id: connectionId,
496
+ sql,
497
+ database: databaseName
498
+ });
499
+ }
500
+ }
@@ -0,0 +1,121 @@
1
+ import { sysConfig } from '@/domain/SysConfig';
2
+ import { request } from './base';
3
+ import { type RouteLocationNormalizedGeneric } from 'vue-router';
4
+ import Cookies from 'js-cookie';
5
+ import { useSessionStore } from '@/stores/session';
6
+
7
+
8
+
9
+ // 登陆
10
+ export async function login(account: string, password: string) {
11
+ try {
12
+ const res = await request('/api/session/loginByAccount', {
13
+ account,
14
+ password,
15
+ });
16
+ const sessionStorre = useSessionStore();
17
+ sessionStorre.setSession(res);
18
+ return { ret: 0, msg: '登录成功', data: res };
19
+ } catch (error) {
20
+ return { ret: error.ret || -1, msg: error.msg || '登录失败' };
21
+ }
22
+ }
23
+
24
+
25
+ export async function getLoginSession(token: string) {
26
+ try {
27
+ const res = await request('/api/session/getLoginSession', {
28
+ token
29
+ });
30
+ return { ret: 0, msg: '获取成功', data: res };
31
+ } catch (error) {
32
+ return { ret: error.ret || -1, msg: error.msg || '获取登录会话失败' };
33
+ }
34
+ }
35
+
36
+
37
+ export async function loginByCode(authCode: string,) {
38
+ try {
39
+ const res = await request('/api/session/loginByCode', {
40
+ authCode,
41
+ });
42
+ return { ret: 0, msg: '登录成功', data: res };
43
+ } catch (error) {
44
+ return { ret: error.ret || -1, msg: error.msg || '登录失败' };
45
+ }
46
+ }
47
+
48
+ export async function logout() {
49
+ try {
50
+ const sessionStorre = useSessionStore();
51
+ sessionStorre.clearSession();
52
+ Cookies.remove('token');
53
+ const res = await request('/api/session/logout');
54
+ return { ret: 0, msg: '登出成功', data: res };
55
+ } catch (error) {
56
+ return { ret: error.ret || -1, msg: error.msg || '登出失败' };
57
+ }
58
+ }
59
+
60
+ export function getLoginUrl(redirectUrl = location.href) {
61
+ return sysConfig.getLoginUrl(redirectUrl);
62
+ }
63
+
64
+ export function getLogoutUrl(redirectUrl = location.href) {
65
+ return sysConfig.getLogoutUrl(redirectUrl);
66
+ }
67
+
68
+ export async function redirectToLogin() {
69
+ const url = getLoginUrl();
70
+ location.replace(url);
71
+ return false;
72
+ }
73
+
74
+ // 如果没有登陆则跳去
75
+ export async function checkLogin() {
76
+ const sessionStore = useSessionStore();
77
+ console.log('Current state:', sessionStore.$state);
78
+ if(!sessionStore.isLoggedIn) return await redirectToLogin();
79
+ return sessionStore;
80
+ }
81
+
82
+ // 如果没有session,但有cookie或auth_code登陆码,则去验证
83
+ export async function initLoginState(to?: RouteLocationNormalizedGeneric) {
84
+ const sessionStore = useSessionStore();
85
+ if(sessionStore.isLoggedIn) return true;
86
+
87
+ try {
88
+ const token = Cookies.get('token');
89
+ if(token) {
90
+ const res = await getLoginSession(token);
91
+ if(res.ret === 0 && res.data) {
92
+ sessionStore.setSession(res.data);
93
+ }
94
+ }
95
+
96
+ if(sessionStore.isLoggedIn) return true;
97
+
98
+ // 获取当前 URL 的查询参数
99
+ const currentUrl = new URL(window.location.href);
100
+ const authCode = currentUrl.searchParams.get('auth_code');
101
+ // 删除 URL 中的 auth_code 参数
102
+ if (authCode) {
103
+
104
+ const res = await loginByCode(authCode);
105
+
106
+ if(res.ret === 0 && res.data) {
107
+ sessionStore.setSession(res.data);
108
+ Cookies.set('token', res.data.id);
109
+ }
110
+ currentUrl.searchParams.delete('auth_code');
111
+ const noauthUrl = currentUrl.toString();
112
+ console.log(noauthUrl);
113
+ window.location.replace(noauthUrl);
114
+ return false;
115
+ }
116
+ }
117
+ catch(e) {
118
+ console.error(e);
119
+ }
120
+ return true;
121
+ }
@@ -0,0 +1,7 @@
1
+ declare module '*.vue' {
2
+ import type { DefineComponent } from 'vue'
3
+ const component: DefineComponent<{
4
+ }, {}, any>
5
+
6
+ export default component
7
+ }