@mu-cabin/opms-permission 0.8.35 → 0.9.2
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.
- package/dist/index.cjs +371 -116
- package/dist/index.d.mts +234 -39
- package/dist/index.d.ts +234 -39
- package/dist/index.mjs +360 -115
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
@@ -31,17 +31,48 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
31
31
|
var index_exports = {};
|
32
32
|
__export(index_exports, {
|
33
33
|
DataHandler: () => DataHandler,
|
34
|
+
EnumOrgQueryMode: () => EnumOrgQueryMode,
|
35
|
+
EnumOrgQueryScope: () => EnumOrgQueryScope,
|
36
|
+
EventEmitter: () => EventEmitter,
|
34
37
|
OpmsPermission: () => Permission,
|
38
|
+
getOrgTree: () => getOrgTree,
|
39
|
+
getUserInfo: () => getUserInfo,
|
40
|
+
getUserOrgTree: () => getUserOrgTree,
|
35
41
|
jumpToSSOLogin: () => jumpToSSOLogin,
|
36
|
-
jumpToSSOLogout: () => jumpToSSOLogout
|
42
|
+
jumpToSSOLogout: () => jumpToSSOLogout,
|
43
|
+
login: () => login,
|
44
|
+
logout: () => logout,
|
45
|
+
queryOrgCompanies: () => queryOrgCompanies,
|
46
|
+
queryResource: () => queryResource
|
37
47
|
});
|
38
48
|
module.exports = __toCommonJS(index_exports);
|
39
49
|
|
40
50
|
// src/utils/storage.ts
|
41
51
|
var Storage = class {
|
52
|
+
constructor() {
|
53
|
+
this.currentVersion = "1.0.0";
|
54
|
+
}
|
42
55
|
setSystemId(systemId) {
|
43
56
|
this.systemId = systemId;
|
44
57
|
}
|
58
|
+
/**
|
59
|
+
* Set the current version for new data
|
60
|
+
* If version changes, all existing data for this systemId will be cleared
|
61
|
+
*/
|
62
|
+
setVersion(version) {
|
63
|
+
if (this.currentVersion !== version) {
|
64
|
+
this.clear();
|
65
|
+
this.currentVersion = version;
|
66
|
+
} else {
|
67
|
+
this.currentVersion = version;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Get the current version
|
72
|
+
*/
|
73
|
+
getVersion() {
|
74
|
+
return this.currentVersion;
|
75
|
+
}
|
45
76
|
prefixKey(key) {
|
46
77
|
return this.systemId !== void 0 ? `systemId-${this.systemId}-${key}` : key;
|
47
78
|
}
|
@@ -51,24 +82,35 @@ var Storage = class {
|
|
51
82
|
setItem(key, value, expireMinutes) {
|
52
83
|
const data = {
|
53
84
|
value,
|
54
|
-
expire: expireMinutes ? Date.now() + expireMinutes * 60 * 1e3 : null
|
85
|
+
expire: expireMinutes ? Date.now() + expireMinutes * 60 * 1e3 : null,
|
86
|
+
version: this.currentVersion,
|
87
|
+
timestamp: Date.now()
|
55
88
|
};
|
56
89
|
localStorage.setItem(this.prefixKey(key), JSON.stringify(data));
|
57
90
|
}
|
58
91
|
/**
|
59
92
|
* Get an item from localStorage, returns undefined if expired or not found
|
93
|
+
* Automatically expires data if version is different
|
60
94
|
*/
|
61
95
|
getItem(key) {
|
62
96
|
const raw = localStorage.getItem(this.prefixKey(key));
|
63
97
|
if (!raw) return void 0;
|
64
98
|
try {
|
65
99
|
const data = JSON.parse(raw);
|
100
|
+
if (!data.version) {
|
101
|
+
data.version = "0.0.0";
|
102
|
+
}
|
66
103
|
if (data.expire && Date.now() > data.expire) {
|
67
104
|
localStorage.removeItem(this.prefixKey(key));
|
68
105
|
return void 0;
|
69
106
|
}
|
107
|
+
if (data.version !== this.currentVersion) {
|
108
|
+
localStorage.removeItem(this.prefixKey(key));
|
109
|
+
return void 0;
|
110
|
+
}
|
70
111
|
return data.value;
|
71
|
-
} catch {
|
112
|
+
} catch (error) {
|
113
|
+
console.error("Error parsing stored data:", error);
|
72
114
|
return void 0;
|
73
115
|
}
|
74
116
|
}
|
@@ -78,6 +120,44 @@ var Storage = class {
|
|
78
120
|
removeItem(key) {
|
79
121
|
localStorage.removeItem(this.prefixKey(key));
|
80
122
|
}
|
123
|
+
/**
|
124
|
+
* Clear all data for the current systemId
|
125
|
+
*/
|
126
|
+
clear() {
|
127
|
+
if (this.systemId !== void 0) {
|
128
|
+
const prefix = `systemId-${this.systemId}-`;
|
129
|
+
Object.keys(localStorage).filter((key) => key.startsWith(prefix)).forEach((key) => localStorage.removeItem(key));
|
130
|
+
}
|
131
|
+
}
|
132
|
+
/**
|
133
|
+
* Get all keys for the current systemId
|
134
|
+
*/
|
135
|
+
getKeys() {
|
136
|
+
if (this.systemId === void 0) {
|
137
|
+
return Object.keys(localStorage);
|
138
|
+
}
|
139
|
+
const prefix = `systemId-${this.systemId}-`;
|
140
|
+
return Object.keys(localStorage).filter((key) => key.startsWith(prefix)).map((key) => key.substring(prefix.length));
|
141
|
+
}
|
142
|
+
/**
|
143
|
+
* Check if a key exists
|
144
|
+
*/
|
145
|
+
hasKey(key) {
|
146
|
+
return localStorage.getItem(this.prefixKey(key)) !== null;
|
147
|
+
}
|
148
|
+
/**
|
149
|
+
* Get storage info for debugging
|
150
|
+
*/
|
151
|
+
getStorageInfo() {
|
152
|
+
const totalKeys = Object.keys(localStorage).length;
|
153
|
+
const systemKeys = this.getKeys().length;
|
154
|
+
return {
|
155
|
+
systemId: this.systemId,
|
156
|
+
currentVersion: this.currentVersion,
|
157
|
+
totalKeys,
|
158
|
+
systemKeys
|
159
|
+
};
|
160
|
+
}
|
81
161
|
};
|
82
162
|
var storage = new Storage();
|
83
163
|
|
@@ -233,8 +313,6 @@ var import_axios = __toESM(require("axios"));
|
|
233
313
|
var USER_INFO_KEY = "opms_user_info";
|
234
314
|
var RESOURCE_KEY = "opms_resources";
|
235
315
|
var TOKEN_KEY = "omps_authorization";
|
236
|
-
var ORG_COMPANY_KEY = "opms_org_company";
|
237
|
-
var USER_ORG_KEY = "opms_user_org";
|
238
316
|
|
239
317
|
// src/api.ts
|
240
318
|
var axiosClient = import_axios.default.create();
|
@@ -261,6 +339,17 @@ axiosClient.interceptors.response.use(
|
|
261
339
|
return Promise.reject(error);
|
262
340
|
}
|
263
341
|
);
|
342
|
+
var EnumOrgQueryMode = /* @__PURE__ */ ((EnumOrgQueryMode2) => {
|
343
|
+
EnumOrgQueryMode2["BY_ROLES"] = "BY_ROLES";
|
344
|
+
EnumOrgQueryMode2["BY_DEPT"] = "BY_DEPT";
|
345
|
+
return EnumOrgQueryMode2;
|
346
|
+
})(EnumOrgQueryMode || {});
|
347
|
+
var EnumOrgQueryScope = /* @__PURE__ */ ((EnumOrgQueryScope2) => {
|
348
|
+
EnumOrgQueryScope2["ONLY_BRANCH"] = "ONLY_BRANCH";
|
349
|
+
EnumOrgQueryScope2["STEWARD_UNIT"] = "STEWARD_UNIT";
|
350
|
+
EnumOrgQueryScope2["WITH_DEPARTMENT"] = "WITH_DEPARTMENT";
|
351
|
+
return EnumOrgQueryScope2;
|
352
|
+
})(EnumOrgQueryScope || {});
|
264
353
|
async function login(baseUrl, authorizationCode) {
|
265
354
|
return await axiosClient.get(
|
266
355
|
`${baseUrl}/opmsDefaultAuth/oauthLogin`,
|
@@ -286,9 +375,16 @@ async function queryResource(baseUrl, params) {
|
|
286
375
|
params
|
287
376
|
);
|
288
377
|
}
|
289
|
-
async function
|
378
|
+
async function getOrgTree(baseUrl, params) {
|
290
379
|
return await axiosClient.post(
|
291
|
-
`${baseUrl}/
|
380
|
+
`${baseUrl}/opmsDefaultUser/orgTree`,
|
381
|
+
params
|
382
|
+
);
|
383
|
+
}
|
384
|
+
async function getUserOrgTree(baseUrl, params) {
|
385
|
+
return await axiosClient.post(
|
386
|
+
`${baseUrl}/opmsDefaultUser/userOrgTree`,
|
387
|
+
params
|
292
388
|
);
|
293
389
|
}
|
294
390
|
async function queryOrgCompanies(baseUrl, params) {
|
@@ -298,6 +394,104 @@ async function queryOrgCompanies(baseUrl, params) {
|
|
298
394
|
);
|
299
395
|
}
|
300
396
|
|
397
|
+
// src/utils/eventEmitter.ts
|
398
|
+
var EventEmitter = class {
|
399
|
+
constructor(allowedEvents) {
|
400
|
+
this.eventListeners = /* @__PURE__ */ new Map();
|
401
|
+
this.allowedEvents = new Set(allowedEvents || []);
|
402
|
+
}
|
403
|
+
/**
|
404
|
+
* Add event listener
|
405
|
+
*/
|
406
|
+
listen(event, listener) {
|
407
|
+
if (this.allowedEvents.size > 0 && !this.allowedEvents.has(event)) {
|
408
|
+
const allowedEventsList = Array.from(this.allowedEvents).join(", ");
|
409
|
+
throw new Error(
|
410
|
+
`Event "${String(event)}" is not registered. Allowed events: ${allowedEventsList}`
|
411
|
+
);
|
412
|
+
}
|
413
|
+
if (!this.eventListeners.has(event)) {
|
414
|
+
this.eventListeners.set(event, /* @__PURE__ */ new Set());
|
415
|
+
}
|
416
|
+
const listeners = this.eventListeners.get(event);
|
417
|
+
listeners.add(listener);
|
418
|
+
return () => {
|
419
|
+
listeners.delete(listener);
|
420
|
+
if (listeners.size === 0) {
|
421
|
+
this.eventListeners.delete(event);
|
422
|
+
}
|
423
|
+
};
|
424
|
+
}
|
425
|
+
/**
|
426
|
+
* Remove event listener
|
427
|
+
*/
|
428
|
+
unlisten(event, listener) {
|
429
|
+
const listeners = this.eventListeners.get(event);
|
430
|
+
if (listeners) {
|
431
|
+
listeners.delete(listener);
|
432
|
+
if (listeners.size === 0) {
|
433
|
+
this.eventListeners.delete(event);
|
434
|
+
}
|
435
|
+
}
|
436
|
+
}
|
437
|
+
/**
|
438
|
+
* Remove all listeners for a specific event or all events
|
439
|
+
*/
|
440
|
+
unlistenAll(event) {
|
441
|
+
if (event) {
|
442
|
+
this.eventListeners.delete(event);
|
443
|
+
} else {
|
444
|
+
this.eventListeners.clear();
|
445
|
+
}
|
446
|
+
}
|
447
|
+
/**
|
448
|
+
* Emit event to all listeners
|
449
|
+
*/
|
450
|
+
emit(event, data) {
|
451
|
+
const listeners = this.eventListeners.get(event);
|
452
|
+
if (listeners) {
|
453
|
+
listeners.forEach((listener) => {
|
454
|
+
try {
|
455
|
+
listener(data);
|
456
|
+
} catch (error) {
|
457
|
+
console.error(`Error in event listener for ${String(event)}:`, error);
|
458
|
+
}
|
459
|
+
});
|
460
|
+
}
|
461
|
+
}
|
462
|
+
/**
|
463
|
+
* Get the number of listeners for a specific event
|
464
|
+
*/
|
465
|
+
getListenerCount(event) {
|
466
|
+
const listeners = this.eventListeners.get(event);
|
467
|
+
return listeners ? listeners.size : 0;
|
468
|
+
}
|
469
|
+
/**
|
470
|
+
* Check if there are any listeners for a specific event
|
471
|
+
*/
|
472
|
+
hasListeners(event) {
|
473
|
+
return this.getListenerCount(event) > 0;
|
474
|
+
}
|
475
|
+
/**
|
476
|
+
* Get all registered event types
|
477
|
+
*/
|
478
|
+
getEventTypes() {
|
479
|
+
return Array.from(this.eventListeners.keys());
|
480
|
+
}
|
481
|
+
/**
|
482
|
+
* Get all allowed event types
|
483
|
+
*/
|
484
|
+
getAllowedEvents() {
|
485
|
+
return Array.from(this.allowedEvents);
|
486
|
+
}
|
487
|
+
/**
|
488
|
+
* Check if an event is allowed
|
489
|
+
*/
|
490
|
+
isEventAllowed(event) {
|
491
|
+
return this.allowedEvents.size === 0 || this.allowedEvents.has(event);
|
492
|
+
}
|
493
|
+
};
|
494
|
+
|
301
495
|
// src/permission.ts
|
302
496
|
var DataHandler = {
|
303
497
|
iterateOrgTree(orgTree) {
|
@@ -363,16 +557,63 @@ var DataHandler = {
|
|
363
557
|
var Permission = class {
|
364
558
|
constructor(options) {
|
365
559
|
this._userInfo = null;
|
366
|
-
this._orgTree = null;
|
367
|
-
this._orgCompany = null;
|
368
560
|
this.resources = [];
|
369
561
|
this.resourceMap = {};
|
370
562
|
this.widgetMap = {};
|
371
563
|
this.menuList = [];
|
372
564
|
this.menuMap = {};
|
565
|
+
// Event emitter instance - only allow tokenChange event
|
566
|
+
this.eventEmitter = new EventEmitter(["tokenChange"]);
|
373
567
|
this.baseUrl = options.baseUrl;
|
374
568
|
this.systemId = options.systemId;
|
375
569
|
storage.setSystemId(this.systemId);
|
570
|
+
storage.setVersion("1.0.0");
|
571
|
+
}
|
572
|
+
/**
|
573
|
+
* Add event listener
|
574
|
+
*/
|
575
|
+
listen(event, listener) {
|
576
|
+
try {
|
577
|
+
return this.eventEmitter.listen(event, listener);
|
578
|
+
} catch (error) {
|
579
|
+
if (error instanceof Error && error.message.includes("not registered")) {
|
580
|
+
const allowedEvents = this.eventEmitter.getAllowedEvents();
|
581
|
+
throw new Error(
|
582
|
+
`Permission event "${String(event)}" is not supported. Available events: ${allowedEvents.join(", ")}`
|
583
|
+
);
|
584
|
+
}
|
585
|
+
throw error;
|
586
|
+
}
|
587
|
+
}
|
588
|
+
/**
|
589
|
+
* Remove event listener
|
590
|
+
*/
|
591
|
+
unlisten(event, listener) {
|
592
|
+
this.eventEmitter.unlisten(event, listener);
|
593
|
+
}
|
594
|
+
/**
|
595
|
+
* Remove all listeners for a specific event or all events
|
596
|
+
*/
|
597
|
+
unlistenAll(event) {
|
598
|
+
this.eventEmitter.unlistenAll(event);
|
599
|
+
}
|
600
|
+
/**
|
601
|
+
* Emit event to all listeners
|
602
|
+
*/
|
603
|
+
emit(event, data) {
|
604
|
+
this.eventEmitter.emit(event, data);
|
605
|
+
}
|
606
|
+
/**
|
607
|
+
* Get available events that can be listened to
|
608
|
+
*/
|
609
|
+
getAvailableEvents() {
|
610
|
+
return this.eventEmitter.getAllowedEvents();
|
611
|
+
}
|
612
|
+
/**
|
613
|
+
* Check if an event is supported
|
614
|
+
*/
|
615
|
+
isEventSupported(event) {
|
616
|
+
return this.eventEmitter.isEventAllowed(event);
|
376
617
|
}
|
377
618
|
/**
|
378
619
|
* Login using code from URL, save userInfo
|
@@ -400,6 +641,7 @@ var Permission = class {
|
|
400
641
|
const { token } = obj;
|
401
642
|
url.searchParams.delete("code");
|
402
643
|
storage.setItem(TOKEN_KEY, token);
|
644
|
+
this.emit("tokenChange", token);
|
403
645
|
return token;
|
404
646
|
}
|
405
647
|
/**
|
@@ -410,25 +652,13 @@ var Permission = class {
|
|
410
652
|
clearData && this.clear();
|
411
653
|
}
|
412
654
|
clear() {
|
413
|
-
|
414
|
-
this.
|
415
|
-
this._orgCompany = null;
|
416
|
-
this.resources = [];
|
417
|
-
this.resourceMap = {};
|
418
|
-
this.widgetMap = {};
|
419
|
-
this.menuList = [];
|
420
|
-
this.menuMap = {};
|
421
|
-
storage.removeItem(RESOURCE_KEY);
|
422
|
-
storage.removeItem(TOKEN_KEY);
|
423
|
-
storage.removeItem(USER_INFO_KEY);
|
424
|
-
storage.removeItem(ORG_COMPANY_KEY);
|
425
|
-
storage.removeItem(USER_ORG_KEY);
|
655
|
+
storage.clear();
|
656
|
+
this.emit("tokenChange", "");
|
426
657
|
}
|
427
658
|
async getUserInfo() {
|
428
659
|
const data = await getUserInfo(this.baseUrl);
|
429
660
|
const { obj, success, msg, code } = data;
|
430
|
-
|
431
|
-
return this.userInfo;
|
661
|
+
return obj;
|
432
662
|
}
|
433
663
|
/**
|
434
664
|
* Get resources and process to menuList, menuMap, widgetMap (matches app store logic)
|
@@ -449,17 +679,12 @@ var Permission = class {
|
|
449
679
|
storage.setItem(
|
450
680
|
RESOURCE_KEY,
|
451
681
|
resources,
|
452
|
-
60 *
|
453
|
-
//
|
682
|
+
60 * 12
|
683
|
+
// 12 hours
|
454
684
|
);
|
455
685
|
}
|
456
686
|
const { resourceMap, widgetMap } = createResourceMap(resources);
|
457
687
|
const { menuList, menuMap } = createMenuList(resources);
|
458
|
-
this.resources = resources;
|
459
|
-
this.resourceMap = resourceMap;
|
460
|
-
this.widgetMap = widgetMap;
|
461
|
-
this.menuList = menuList;
|
462
|
-
this.menuMap = menuMap;
|
463
688
|
return {
|
464
689
|
resources,
|
465
690
|
resourceMap,
|
@@ -469,13 +694,28 @@ var Permission = class {
|
|
469
694
|
};
|
470
695
|
}
|
471
696
|
/**
|
472
|
-
*
|
697
|
+
* Generate cache key for user orgs query
|
473
698
|
*/
|
474
|
-
|
699
|
+
generateUserOrgsCacheKey(params) {
|
700
|
+
const sortedParams = Object.keys(params).sort().reduce((acc, key) => {
|
701
|
+
acc[key] = params[key];
|
702
|
+
return acc;
|
703
|
+
}, {});
|
704
|
+
return `user_orgs_${JSON.stringify(sortedParams)}`;
|
705
|
+
}
|
706
|
+
/**
|
707
|
+
* Query and process organization tree with caching
|
708
|
+
*/
|
709
|
+
async queryUserOrgs(params, config = { force: false, cacheTimeout: 2 }) {
|
475
710
|
try {
|
476
|
-
|
711
|
+
const { force, cacheTimeout = 2 } = config;
|
712
|
+
let orgTreeData = null;
|
713
|
+
if (!force) {
|
714
|
+
const cacheKey = this.generateUserOrgsCacheKey(params);
|
715
|
+
orgTreeData = storage.getItem(cacheKey) || null;
|
716
|
+
}
|
477
717
|
if (!orgTreeData) {
|
478
|
-
const res = await getUserOrgTree(this.baseUrl);
|
718
|
+
const res = await getUserOrgTree(this.baseUrl, params);
|
479
719
|
const { obj } = res;
|
480
720
|
orgTreeData = iterateNestedArray(obj, (item) => {
|
481
721
|
return {
|
@@ -490,33 +730,33 @@ var Permission = class {
|
|
490
730
|
orgId: item.orgId
|
491
731
|
};
|
492
732
|
});
|
493
|
-
|
733
|
+
const cacheKey = this.generateUserOrgsCacheKey(params);
|
734
|
+
storage.setItem(cacheKey, orgTreeData, cacheTimeout);
|
494
735
|
}
|
495
736
|
const data = handlePermissionTree(orgTreeData, "orgId");
|
496
|
-
const {
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
return { orgTree: orgTreeData, orgNoAuthMap: noAuthMap, authOrgTree: tree };
|
737
|
+
const { tree } = data;
|
738
|
+
return {
|
739
|
+
orgTree: tree
|
740
|
+
// orgNoAuthMap: noAuthMap,
|
741
|
+
// authOrgTree: tree,
|
742
|
+
};
|
503
743
|
} catch (error) {
|
504
744
|
console.log(error);
|
505
745
|
return null;
|
506
746
|
}
|
507
747
|
}
|
508
|
-
async queryCompanies() {
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
}
|
748
|
+
// async queryCompanies(): Promise<OrgRecord[]> {
|
749
|
+
// let orgCompanyList: OrgRecord[] | undefined =
|
750
|
+
// storage.getItem(ORG_COMPANY_KEY);
|
751
|
+
// if (!orgCompanyList) {
|
752
|
+
// const { obj } = await queryOrgCompanies(this.baseUrl, {
|
753
|
+
// queryAllBranches: true,
|
754
|
+
// });
|
755
|
+
// orgCompanyList = obj;
|
756
|
+
// storage.setItem(ORG_COMPANY_KEY, orgCompanyList);
|
757
|
+
// }
|
758
|
+
// return orgCompanyList;
|
759
|
+
// }
|
520
760
|
isLogin() {
|
521
761
|
return !!storage.getItem(TOKEN_KEY);
|
522
762
|
}
|
@@ -525,72 +765,77 @@ var Permission = class {
|
|
525
765
|
}
|
526
766
|
setToken(token) {
|
527
767
|
storage.setItem(TOKEN_KEY, token);
|
768
|
+
this.emit("tokenChange", token);
|
528
769
|
}
|
529
770
|
// --- Getters ---
|
530
|
-
get userInfo() {
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
}
|
538
|
-
get hasRootAuth() {
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
}
|
544
|
-
get userOrganizations() {
|
545
|
-
|
546
|
-
}
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
return this.companyOptions?.[0]?.value ?? "";
|
771
|
+
// get userInfo(): UserInfo | null {
|
772
|
+
// if (!this._userInfo) {
|
773
|
+
// this._userInfo = storage.getItem(USER_INFO_KEY);
|
774
|
+
// }
|
775
|
+
// if (!this._userInfo) return null;
|
776
|
+
// const { account, name, ehrId, crewCode, crewId } = this._userInfo;
|
777
|
+
// return { account, name, ehrId, crewCode, crewId };
|
778
|
+
// }
|
779
|
+
// get hasRootAuth() {
|
780
|
+
// const orgs = this._userInfo?.organizations || [];
|
781
|
+
// const first = orgs[0];
|
782
|
+
// if (!first) return false;
|
783
|
+
// return first.searchPath === '#1';
|
784
|
+
// }
|
785
|
+
// get userOrganizations(): UserOrganization[] {
|
786
|
+
// return this._userInfo?.userOrganizations || [];
|
787
|
+
// }
|
788
|
+
/**
|
789
|
+
* Get storage information for debugging and monitoring
|
790
|
+
*/
|
791
|
+
getStorageInfo() {
|
792
|
+
const keys = storage.getKeys();
|
793
|
+
const userOrgsCacheKeys = keys.filter((key) => key.startsWith("user_orgs_"));
|
794
|
+
return {
|
795
|
+
...storage.getStorageInfo(),
|
796
|
+
permissionKeys: {
|
797
|
+
resourceKey: RESOURCE_KEY,
|
798
|
+
tokenKey: TOKEN_KEY,
|
799
|
+
userInfoKey: USER_INFO_KEY
|
800
|
+
},
|
801
|
+
hasData: {
|
802
|
+
resources: storage.hasKey(RESOURCE_KEY),
|
803
|
+
token: storage.hasKey(TOKEN_KEY),
|
804
|
+
userInfo: storage.hasKey(USER_INFO_KEY)
|
805
|
+
},
|
806
|
+
cacheInfo: {
|
807
|
+
userOrgsCacheCount: userOrgsCacheKeys.length,
|
808
|
+
userOrgsCacheKeys
|
809
|
+
}
|
810
|
+
};
|
571
811
|
}
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
812
|
+
/**
|
813
|
+
* Get current storage version
|
814
|
+
*/
|
815
|
+
getStorageVersion() {
|
816
|
+
return storage.getVersion();
|
576
817
|
}
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
818
|
+
/**
|
819
|
+
* Clear all storage data for this system
|
820
|
+
*/
|
821
|
+
clearStorage() {
|
822
|
+
storage.clear();
|
581
823
|
}
|
582
|
-
|
583
|
-
|
584
|
-
|
824
|
+
/**
|
825
|
+
* Clear user orgs cache for specific parameters or all
|
826
|
+
*/
|
827
|
+
clearUserOrgsCache(params) {
|
828
|
+
if (params) {
|
829
|
+
const cacheKey = this.generateUserOrgsCacheKey(params);
|
830
|
+
storage.removeItem(cacheKey);
|
831
|
+
} else {
|
832
|
+
const keys = storage.getKeys();
|
833
|
+
keys.forEach((key) => {
|
834
|
+
if (key.startsWith("user_orgs_")) {
|
835
|
+
storage.removeItem(key);
|
836
|
+
}
|
837
|
+
});
|
585
838
|
}
|
586
|
-
const orgTree = this._orgTree;
|
587
|
-
if (!orgTree) return "";
|
588
|
-
return findFirstEnableCode(orgTree) ?? "";
|
589
|
-
}
|
590
|
-
get topLevelUnitOrgCodes() {
|
591
|
-
const orgTree = this._orgTree;
|
592
|
-
if (!orgTree) return [];
|
593
|
-
return DataHandler.topLevelUnitOrgCodes(orgTree);
|
594
839
|
}
|
595
840
|
};
|
596
841
|
|
@@ -631,7 +876,17 @@ function jumpToSSOLogout({
|
|
631
876
|
// Annotate the CommonJS export names for ESM import in node:
|
632
877
|
0 && (module.exports = {
|
633
878
|
DataHandler,
|
879
|
+
EnumOrgQueryMode,
|
880
|
+
EnumOrgQueryScope,
|
881
|
+
EventEmitter,
|
634
882
|
OpmsPermission,
|
883
|
+
getOrgTree,
|
884
|
+
getUserInfo,
|
885
|
+
getUserOrgTree,
|
635
886
|
jumpToSSOLogin,
|
636
|
-
jumpToSSOLogout
|
887
|
+
jumpToSSOLogout,
|
888
|
+
login,
|
889
|
+
logout,
|
890
|
+
queryOrgCompanies,
|
891
|
+
queryResource
|
637
892
|
});
|