@spacecorexdev/core 0.0.2 → 0.0.5
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/package.json +20 -38
- package/public/cmaps/78-EUC-H.bcmap +0 -0
- package/public/cmaps/78-EUC-V.bcmap +0 -0
- package/public/cmaps/78-H.bcmap +0 -0
- package/public/cmaps/78-RKSJ-H.bcmap +0 -0
- package/public/cmaps/78-RKSJ-V.bcmap +0 -0
- package/public/cmaps/78-V.bcmap +0 -0
- package/public/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/public/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/public/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/public/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/public/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/public/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/public/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/public/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/public/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/public/cmaps/Add-H.bcmap +0 -0
- package/public/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/public/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/public/cmaps/Add-V.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/public/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/public/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/public/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/public/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/public/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/public/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/public/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/public/cmaps/B5-H.bcmap +0 -0
- package/public/cmaps/B5-V.bcmap +0 -0
- package/public/cmaps/B5pc-H.bcmap +0 -0
- package/public/cmaps/B5pc-V.bcmap +0 -0
- package/public/cmaps/CNS-EUC-H.bcmap +0 -0
- package/public/cmaps/CNS-EUC-V.bcmap +0 -0
- package/public/cmaps/CNS1-H.bcmap +0 -0
- package/public/cmaps/CNS1-V.bcmap +0 -0
- package/public/cmaps/CNS2-H.bcmap +0 -0
- package/public/cmaps/CNS2-V.bcmap +3 -0
- package/public/cmaps/ETHK-B5-H.bcmap +0 -0
- package/public/cmaps/ETHK-B5-V.bcmap +0 -0
- package/public/cmaps/ETen-B5-H.bcmap +0 -0
- package/public/cmaps/ETen-B5-V.bcmap +0 -0
- package/public/cmaps/ETenms-B5-H.bcmap +3 -0
- package/public/cmaps/ETenms-B5-V.bcmap +0 -0
- package/public/cmaps/EUC-H.bcmap +0 -0
- package/public/cmaps/EUC-V.bcmap +0 -0
- package/public/cmaps/Ext-H.bcmap +0 -0
- package/public/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/public/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/public/cmaps/Ext-V.bcmap +0 -0
- package/public/cmaps/GB-EUC-H.bcmap +0 -0
- package/public/cmaps/GB-EUC-V.bcmap +0 -0
- package/public/cmaps/GB-H.bcmap +4 -0
- package/public/cmaps/GB-V.bcmap +0 -0
- package/public/cmaps/GBK-EUC-H.bcmap +0 -0
- package/public/cmaps/GBK-EUC-V.bcmap +0 -0
- package/public/cmaps/GBK2K-H.bcmap +0 -0
- package/public/cmaps/GBK2K-V.bcmap +0 -0
- package/public/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/public/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/public/cmaps/GBT-EUC-H.bcmap +0 -0
- package/public/cmaps/GBT-EUC-V.bcmap +0 -0
- package/public/cmaps/GBT-H.bcmap +0 -0
- package/public/cmaps/GBT-V.bcmap +0 -0
- package/public/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/public/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/public/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/public/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/public/cmaps/H.bcmap +0 -0
- package/public/cmaps/HKdla-B5-H.bcmap +0 -0
- package/public/cmaps/HKdla-B5-V.bcmap +0 -0
- package/public/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/public/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/public/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/public/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/public/cmaps/HKm314-B5-H.bcmap +0 -0
- package/public/cmaps/HKm314-B5-V.bcmap +0 -0
- package/public/cmaps/HKm471-B5-H.bcmap +0 -0
- package/public/cmaps/HKm471-B5-V.bcmap +0 -0
- package/public/cmaps/HKscs-B5-H.bcmap +0 -0
- package/public/cmaps/HKscs-B5-V.bcmap +0 -0
- package/public/cmaps/Hankaku.bcmap +0 -0
- package/public/cmaps/Hiragana.bcmap +0 -0
- package/public/cmaps/KSC-EUC-H.bcmap +0 -0
- package/public/cmaps/KSC-EUC-V.bcmap +0 -0
- package/public/cmaps/KSC-H.bcmap +0 -0
- package/public/cmaps/KSC-Johab-H.bcmap +0 -0
- package/public/cmaps/KSC-Johab-V.bcmap +0 -0
- package/public/cmaps/KSC-V.bcmap +0 -0
- package/public/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/public/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/public/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/public/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/public/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/public/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/public/cmaps/Katakana.bcmap +0 -0
- package/public/cmaps/LICENSE +36 -0
- package/public/cmaps/NWP-H.bcmap +0 -0
- package/public/cmaps/NWP-V.bcmap +0 -0
- package/public/cmaps/RKSJ-H.bcmap +0 -0
- package/public/cmaps/RKSJ-V.bcmap +0 -0
- package/public/cmaps/Roman.bcmap +0 -0
- package/public/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/public/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/public/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/public/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/public/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/public/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/public/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/public/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/public/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/public/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/public/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/public/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/public/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/public/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/public/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/public/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/public/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/public/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/public/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/public/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/public/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/public/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/public/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/public/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/public/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/public/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/public/cmaps/V.bcmap +0 -0
- package/public/cmaps/WP-Symbol.bcmap +0 -0
- package/public/polyfills/polyfills.js +802 -0
- package/public/vendor/docx/docx.worker.js +5 -0
- package/public/vendor/docx/jszip.min.js +13 -0
- package/public/vendor/libarchive/libarchive.wasm +0 -0
- package/public/vendor/libarchive/worker-bundle.js +6 -0
- package/public/vendor/pptx/pptx.worker.js +26 -0
- package/public/wasm/cad/0.8.2/dwfv-render.wasm +0 -0
- package/public/wasm/cad/0.8.2/dwg-worker.js +24 -0
- package/public/wasm/cad/0.8.2/dwg-worker.js.map +1 -0
- package/public/wasm/cad/0.8.2/libredwg-web.js +2 -0
- package/public/wasm/cad/0.8.2/libredwg-web.wasm +0 -0
- package/public/wasm/cad/dwfv-render.wasm +0 -0
- package/public/wasm/cad/dwg-worker.js +24 -0
- package/public/wasm/cad/dwg-worker.js.map +1 -0
- package/public/wasm/cad/libredwg-web.js +2 -0
- package/public/wasm/cad/libredwg-web.wasm +0 -0
- package/public/wasm/data/sql-wasm.wasm +0 -0
- package/public/wasm/hdiff.wasm +0 -0
- package/public/wasm/model/LICENSE.occt-import-js.txt +504 -0
- package/public/wasm/model/LICENSE.occt.txt +502 -0
- package/public/wasm/model/occt-import-js.js +19 -0
- package/public/wasm/model/occt-import-js.wasm +0 -0
- package/public/wasm/model/occt-worker.js +83 -0
- package/public/wasm/typst/fonts/DejaVuSansMono-Bold.ttf +0 -0
- package/public/wasm/typst/fonts/DejaVuSansMono-BoldOblique.ttf +0 -0
- package/public/wasm/typst/fonts/DejaVuSansMono-Oblique.ttf +0 -0
- package/public/wasm/typst/fonts/DejaVuSansMono.ttf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-Bold.otf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-BoldItalic.otf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-Italic.otf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-Regular.otf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-Semibold.otf +0 -0
- package/public/wasm/typst/fonts/LibertinusSerif-SemiboldItalic.otf +0 -0
- package/public/wasm/typst/fonts/NewCM10-Bold.otf +0 -0
- package/public/wasm/typst/fonts/NewCM10-BoldItalic.otf +0 -0
- package/public/wasm/typst/fonts/NewCM10-Italic.otf +0 -0
- package/public/wasm/typst/fonts/NewCM10-Regular.otf +0 -0
- package/public/wasm/typst/fonts/NewCMMath-Bold.otf +0 -0
- package/public/wasm/typst/fonts/NewCMMath-Book.otf +0 -0
- package/public/wasm/typst/fonts/NewCMMath-Regular.otf +0 -0
- package/public/wasm/typst/fonts/README.md +7 -0
- package/public/wasm/typst/typst_ts_renderer_bg.wasm +0 -0
- package/public/wasm/typst/typst_ts_web_compiler_bg.wasm +0 -0
- package/scripts/patch-docx-grid.cjs +412 -0
- package/src/api/_base.ts +243 -0
- package/src/api/index.ts +17 -0
- package/src/api/project.ts +1345 -0
- package/src/api/user.ts +1174 -0
- package/src/contract.ts +50 -0
- package/src/hooks/index.ts +2 -0
- package/{dist/hooks/index.js → src/hooks/useLongPress.ts} +53 -49
- package/src/hooks/useOnlineStatus.ts +22 -0
- package/src/index.ts +14 -0
- package/src/types/id.ts +2 -0
- package/src/types/index.ts +5 -0
- package/src/types/project/base.ts +63 -0
- package/src/types/project/contract.ts +79 -0
- package/src/types/project/contractStatus.tsx +15 -0
- package/src/types/project/index.ts +5 -0
- package/src/types/project/member.ts +46 -0
- package/src/types/project/progress.ts +43 -0
- package/src/types/projectRole.ts +17 -0
- package/src/types/theme.ts +1 -0
- package/src/types/user/index.ts +1 -0
- package/src/types/user/role.ts +7 -0
- package/src/ui/CommentTimeline/index.tsx +330 -0
- package/src/ui/FileManager/FileContextMenu.tsx +628 -0
- package/src/ui/FileManager/FileGridView.tsx +529 -0
- package/src/ui/FileManager/FileTableView.tsx +405 -0
- package/src/ui/FileManager/FileToolbar.tsx +119 -0
- package/src/ui/FileManager/FileVersionHistoryModal.tsx +175 -0
- package/src/ui/FileManager/MoveCopyToProjectModal.tsx +119 -0
- package/src/ui/FileManager/ShareToWechatModal.tsx +419 -0
- package/src/ui/FileManager/hooks/useFileManagerActions.ts +2532 -0
- package/src/ui/FileManager/hooks/useFileManagerState.ts +419 -0
- package/src/ui/FileManager/index.tsx +580 -0
- package/src/ui/FileManager/projectFileManagerApi.ts +57 -0
- package/src/ui/FileManager/types.ts +184 -0
- package/src/ui/FileManager/utils/fileDeltaWorker.ts +193 -0
- package/src/ui/FileManager/utils/fileTree.ts +178 -0
- package/src/ui/FileManager/utils/fileUpload.ts +714 -0
- package/src/ui/FileManager/utils/fileUtils.ts +65 -0
- package/src/ui/InvoiceRecordsList/index.tsx +813 -0
- package/src/ui/MyFileSelectorModal.tsx +261 -0
- package/src/ui/ProjectSelector/index.tsx +472 -0
- package/src/ui/ProjectSelector/projectCache.ts +40 -0
- package/src/ui/RoleSelector/index.tsx +473 -0
- package/src/ui/RoleSelector/roleCache.ts +40 -0
- package/src/ui/UIAlert.tsx +399 -0
- package/src/ui/UIAlertExample.tsx +129 -0
- package/src/ui/UIConfirm.tsx +335 -0
- package/src/ui/UIConfirmExample.tsx +165 -0
- package/src/ui/UIDatePicker.tsx +146 -0
- package/src/ui/UIDateRangePicker.tsx +38 -0
- package/src/ui/UIFilePreview/ExcelEditor/index.tsx +617 -0
- package/src/ui/UIFilePreview/ExcelEditor/types.ts +24 -0
- package/src/ui/UIFilePreview/ExportDropdown.css +85 -0
- package/src/ui/UIFilePreview/ExportDropdown.tsx +109 -0
- package/src/ui/UIFilePreview/IndexedDBUtils.ts +564 -0
- package/src/ui/UIFilePreview/MarkdownEditor/exportMarkdownPdf.ts +576 -0
- package/src/ui/UIFilePreview/MarkdownEditor/index.tsx +677 -0
- package/src/ui/UIFilePreview/MarkdownEditor/markdownEditor.css +1005 -0
- package/src/ui/UIFilePreview/MarkdownEditor/types.ts +15 -0
- package/src/ui/UIFilePreview/PPTXEditor/index.tsx +602 -0
- package/src/ui/UIFilePreview/RichDocEditor/exportRDocMarkdown.ts +77 -0
- package/src/ui/UIFilePreview/RichDocEditor/exportRDocPdf.ts +374 -0
- package/src/ui/UIFilePreview/RichDocEditor/index.tsx +730 -0
- package/src/ui/UIFilePreview/RichDocEditor/richdoc-editor.css +59 -0
- package/src/ui/UIFilePreview/UIFilePreview.tsx +611 -0
- package/src/ui/UIFilePreview/WordEditor/index.tsx +3933 -0
- package/src/ui/UIFilePreview/WordEditor/style.ts +1213 -0
- package/src/ui/UIFilePreview/WordEditor/word-editor.css +999 -0
- package/src/ui/UIFilePreview/filePreview.css +193 -0
- package/src/ui/UIFilePreview/filetypes/archive.tsx +66 -0
- package/src/ui/UIFilePreview/filetypes/cad.tsx +287 -0
- package/src/ui/UIFilePreview/filetypes/excel.tsx +355 -0
- package/src/ui/UIFilePreview/filetypes/image.tsx +20 -0
- package/src/ui/UIFilePreview/filetypes/imageLoader.ts +63 -0
- package/src/ui/UIFilePreview/filetypes/pdf.tsx +156 -0
- package/src/ui/UIFilePreview/filetypes/ppt.tsx +535 -0
- package/src/ui/UIFilePreview/filetypes/pptExportPdf.ts +523 -0
- package/src/ui/UIFilePreview/filetypes/video.tsx +482 -0
- package/src/ui/UIFilePreview/filetypes/word.tsx +245 -0
- package/src/ui/UIFilePreview/filetypes/wordExportMarkdown.ts +86 -0
- package/src/ui/UIFilePreview/filetypes/wordExportPdf.tsx +427 -0
- package/src/ui/UIFilePreview/index.ts +35 -0
- package/src/ui/UIFilePreview/pdfPagination.ts +143 -0
- package/src/ui/UIFilePreview/previewUtils.tsx +531 -0
- package/src/ui/UIFileUpload.tsx +382 -0
- package/src/ui/UIImageUpload.tsx +195 -0
- package/src/ui/UILoading.tsx +255 -0
- package/src/ui/UILoadingExample.tsx +139 -0
- package/src/ui/UISelect.tsx +105 -0
- package/src/ui/UIToast.tsx +381 -0
- package/src/ui/UIToastExample.tsx +69 -0
- package/src/ui/UIToastSingle.tsx +279 -0
- package/src/ui/UIViewToggle.tsx +64 -0
- package/src/ui/UserSelector/index.tsx +583 -0
- package/src/ui/index.ts +84 -0
- package/src/ui/upload/image.ts +135 -0
- package/src/ui/upload/index.ts +73 -0
- package/src/ui/upload/submitFile.ts +106 -0
- package/src/ui/upload/submitForm.ts +124 -0
- package/src/ui/upload/upload.err.ts +15 -0
- package/src/ui/upload/upload.ts +250 -0
- package/src/utils/CacheDepartmentInfo.ts +372 -0
- package/src/utils/CacheFileContent.ts +315 -0
- package/src/utils/CachePermissionInfo.ts +235 -0
- package/src/utils/CacheRoleInfo.ts +303 -0
- package/src/utils/CacheUserInfo.ts +818 -0
- package/src/utils/CacheViewToggleInfo.ts +182 -0
- package/src/utils/MessageContentUtils.ts +268 -0
- package/src/utils/clipboard.ts +70 -0
- package/src/utils/companyEmail.ts +19 -0
- package/src/utils/forbidDebugger.ts +59 -0
- package/src/utils/formatters.ts +94 -0
- package/src/utils/htmlUtils.tsx +59 -0
- package/src/utils/index.ts +18 -0
- package/src/utils/keyboard.ts +114 -0
- package/src/utils/mammothApi.ts +16 -0
- package/src/utils/polyfills.ts +928 -0
- package/src/utils/regex.ts +14 -0
- package/src/utils/storage.ts +95 -0
- package/src/utils/workerBootstrap.ts +87 -0
- package/dist/api/index.js +0 -1553
- package/dist/contract.js +0 -5
- package/dist/index.js +0 -4492
- package/dist/types/index.js +0 -49
- package/dist/ui/index.css +0 -1876
- package/dist/ui/index.js +0 -22245
- package/dist/utils/index.js +0 -4296
- /package/{dist → src}/styles/ant-modal.css +0 -0
- /package/{dist → src}/styles/ant-spin.css +0 -0
- /package/{dist → src}/styles/ant-table.css +0 -0
- /package/{dist → src}/styles/index.css +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import Dexie, { Table } from 'dexie';
|
|
4
|
+
import { API } from "../api";
|
|
5
|
+
import { ResponseCode } from "../api/_base";
|
|
6
|
+
import { CacheUserInfo } from './CacheUserInfo';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 系统权限标识常量(统一存放点)
|
|
10
|
+
* 权限 key 需与后端权限配置(permissions.const.ts 中 URL → 权限映射)保持一致;
|
|
11
|
+
* 后续新增权限标识统一在此扩展,业务代码直接 import 使用,避免硬编码散落各处。
|
|
12
|
+
*/
|
|
13
|
+
/** 发票列表查看权限(/api/approval/invoice/list) */
|
|
14
|
+
export const PERMISSION_INVOICE_LIST = 'approver:approvalinvoice:getInvoiceList';
|
|
15
|
+
|
|
16
|
+
/** 项目文件夹打包下载权限 (/api/project/files/downloadFolder)*/
|
|
17
|
+
export const PERMISSION_FOLDER_DOWNLOAD = 'project:projectfile:downloadFolderPermission';
|
|
18
|
+
|
|
19
|
+
/** CRM 新建客户权限(/api/crm/customer/createCustomer) */
|
|
20
|
+
export const PERMISSION_CRM_CREATE = 'crm:customer:createCustomer';
|
|
21
|
+
/** CRM 编辑客户权限(/api/crm/customer/updateCustomer) */
|
|
22
|
+
export const PERMISSION_CRM_UPDATE = 'crm:customer:updateCustomer';
|
|
23
|
+
/** CRM 删除客户权限(/api/crm/customer/deleteCustomer) */
|
|
24
|
+
export const PERMISSION_CRM_DELETE = 'crm:customer:deleteCustomer';
|
|
25
|
+
/** CRM 查看客户联系方式明文权限(/api/crm/customer/viewContact);客户负责业务员无需此权限 */
|
|
26
|
+
export const PERMISSION_CRM_VIEW_CONTACT = 'crm:customer:viewContact';
|
|
27
|
+
/** CRM 客户移交权限(/api/crm/customer/transferCustomer) */
|
|
28
|
+
export const PERMISSION_CRM_TRANSFER = 'crm:customer:transferCustomer';
|
|
29
|
+
/** CRM 客户文件查看权限(/api/crm/file/viewFile);客户负责人无需此权限 */
|
|
30
|
+
export const PERMISSION_CRM_VIEW_FILE = 'crm:file:viewFile';
|
|
31
|
+
/** CRM 客户文件管理权限(/api/crm/file/manageFile):上传、重命名、移动、删除;客户负责人无需此权限 */
|
|
32
|
+
export const PERMISSION_CRM_MANAGE_FILE = 'crm:file:manageFile';
|
|
33
|
+
|
|
34
|
+
const CACHE_EXPIRATION_MS = 10 * 60 * 1000;
|
|
35
|
+
|
|
36
|
+
export interface PermissionInfo {
|
|
37
|
+
permission: string;
|
|
38
|
+
descs: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface PermissionCache {
|
|
42
|
+
id: string;
|
|
43
|
+
data: PermissionInfo[];
|
|
44
|
+
timestamp: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
class PermissionInfoDatabase extends Dexie {
|
|
48
|
+
permissionCache!: Table<PermissionCache, string>;
|
|
49
|
+
|
|
50
|
+
constructor() {
|
|
51
|
+
super('PermissionInfoDB');
|
|
52
|
+
this.version(1).stores({
|
|
53
|
+
permissionCache: 'id, timestamp'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const db = new PermissionInfoDatabase();
|
|
59
|
+
|
|
60
|
+
const getFromCache = async (userId: string): Promise<PermissionInfo[] | null> => {
|
|
61
|
+
try {
|
|
62
|
+
const cached = await db.permissionCache.get(`PERMISSION_${userId}`);
|
|
63
|
+
if (cached) {
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
if (now - cached.timestamp < CACHE_EXPIRATION_MS) {
|
|
66
|
+
return cached.data;
|
|
67
|
+
}
|
|
68
|
+
await db.permissionCache.delete(`PERMISSION_${userId}`);
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error('读取权限缓存失败:', error);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const setToCache = async (userId: string, data: PermissionInfo[]): Promise<void> => {
|
|
78
|
+
try {
|
|
79
|
+
await db.permissionCache.put({
|
|
80
|
+
id: `PERMISSION_${userId}`,
|
|
81
|
+
data,
|
|
82
|
+
timestamp: Date.now()
|
|
83
|
+
});
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error('写入权限缓存失败:', error);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const clearCache = async (userId?: string): Promise<void> => {
|
|
90
|
+
try {
|
|
91
|
+
if (userId) {
|
|
92
|
+
await db.permissionCache.delete(`PERMISSION_${userId}`);
|
|
93
|
+
} else {
|
|
94
|
+
await db.permissionCache.clear();
|
|
95
|
+
}
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error('清除权限缓存失败:', error);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const getUserPermissions = async (
|
|
102
|
+
{
|
|
103
|
+
userId,
|
|
104
|
+
forceRefresh = false
|
|
105
|
+
}: {
|
|
106
|
+
userId?: string,
|
|
107
|
+
forceRefresh?: boolean
|
|
108
|
+
}
|
|
109
|
+
): Promise<PermissionInfo[] | null> => {
|
|
110
|
+
const user = userId ? { id: userId } : await CacheUserInfo.getUserInfo({});
|
|
111
|
+
if (!user) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const uid = user.id;
|
|
116
|
+
|
|
117
|
+
if (!forceRefresh) {
|
|
118
|
+
const cachedPermissions = await getFromCache(uid);
|
|
119
|
+
if (cachedPermissions) {
|
|
120
|
+
return cachedPermissions;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const res = await API.user.role.listUserPermissions({ user_id: uid });
|
|
125
|
+
|
|
126
|
+
if (res?.code !== ResponseCode.SUCCESS) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const permissions = res.data || [];
|
|
131
|
+
|
|
132
|
+
await setToCache(uid, permissions);
|
|
133
|
+
|
|
134
|
+
return permissions;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const hasPermission = async (
|
|
138
|
+
{
|
|
139
|
+
permission,
|
|
140
|
+
userId,
|
|
141
|
+
forceRefresh = false
|
|
142
|
+
}: {
|
|
143
|
+
permission: string,
|
|
144
|
+
userId?: string,
|
|
145
|
+
forceRefresh?: boolean
|
|
146
|
+
}
|
|
147
|
+
): Promise<boolean> => {
|
|
148
|
+
const permissions = await getUserPermissions({ userId, forceRefresh });
|
|
149
|
+
|
|
150
|
+
if (!permissions) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return permissions.some(p => p.permission === permission);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const hasPermissions = async (
|
|
158
|
+
{
|
|
159
|
+
permissions,
|
|
160
|
+
userId,
|
|
161
|
+
forceRefresh = false,
|
|
162
|
+
allRequired = true
|
|
163
|
+
}: {
|
|
164
|
+
permissions: string[],
|
|
165
|
+
userId?: string,
|
|
166
|
+
forceRefresh?: boolean,
|
|
167
|
+
allRequired?: boolean
|
|
168
|
+
}
|
|
169
|
+
): Promise<boolean> => {
|
|
170
|
+
const userPermissions = await getUserPermissions({ userId, forceRefresh });
|
|
171
|
+
|
|
172
|
+
if (!userPermissions) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const userPermSet = new Set(userPermissions.map(p => p.permission));
|
|
177
|
+
|
|
178
|
+
if (allRequired) {
|
|
179
|
+
return permissions.every(p => userPermSet.has(p));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return permissions.some(p => userPermSet.has(p));
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const getPermissionDesc = async (
|
|
186
|
+
{
|
|
187
|
+
permission,
|
|
188
|
+
userId,
|
|
189
|
+
forceRefresh = false
|
|
190
|
+
}: {
|
|
191
|
+
permission: string,
|
|
192
|
+
userId?: string,
|
|
193
|
+
forceRefresh?: boolean
|
|
194
|
+
}
|
|
195
|
+
): Promise<string> => {
|
|
196
|
+
const permissions = await getUserPermissions({ userId, forceRefresh });
|
|
197
|
+
|
|
198
|
+
if (!permissions) {
|
|
199
|
+
return '';
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const found = permissions.find(p => p.permission === permission);
|
|
203
|
+
return found?.descs || '';
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
const clearPermissionCache = async (userId?: string): Promise<void> => {
|
|
207
|
+
await clearCache(userId);
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const getCacheStats = async (): Promise<{ count: number; oldest: number | null; newest: number | null }> => {
|
|
211
|
+
try {
|
|
212
|
+
const all = await db.permissionCache.toArray();
|
|
213
|
+
if (all.length === 0) {
|
|
214
|
+
return { count: 0, oldest: null, newest: null };
|
|
215
|
+
}
|
|
216
|
+
const timestamps = all.map(item => item.timestamp);
|
|
217
|
+
return {
|
|
218
|
+
count: all.length,
|
|
219
|
+
oldest: Math.min(...timestamps),
|
|
220
|
+
newest: Math.max(...timestamps)
|
|
221
|
+
};
|
|
222
|
+
} catch (error) {
|
|
223
|
+
console.error('获取权限缓存统计失败:', error);
|
|
224
|
+
return { count: 0, oldest: null, newest: null };
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
export const CachePermissionInfo = {
|
|
229
|
+
getUserPermissions,
|
|
230
|
+
hasPermission,
|
|
231
|
+
hasPermissions,
|
|
232
|
+
getPermissionDesc,
|
|
233
|
+
clearPermissionCache,
|
|
234
|
+
getCacheStats
|
|
235
|
+
};
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) 2025 SPACECORE Co.,Ltd. All Rights Reserved.
|
|
5
|
+
* Author: brian.li
|
|
6
|
+
* Date: 2025-04-02 11:43
|
|
7
|
+
* Desc: 角色信息工具类 - 支持Dexie缓存
|
|
8
|
+
*
|
|
9
|
+
* @example 使用方法
|
|
10
|
+
*
|
|
11
|
+
* // 1. 获取所有角色信息
|
|
12
|
+
* import { getRoleInfo } from './CacheRoleInfo';
|
|
13
|
+
* const roles = await getRoleInfo({});
|
|
14
|
+
* console.log(roles);
|
|
15
|
+
*
|
|
16
|
+
* // 2. 强制刷新缓存(不使用缓存)
|
|
17
|
+
* const roles = await getRoleInfo({ forceRefresh: true });
|
|
18
|
+
*
|
|
19
|
+
* // 3. 清除角色缓存
|
|
20
|
+
* import { clearRoleCache } from './CacheRoleInfo';
|
|
21
|
+
* await clearRoleCache();
|
|
22
|
+
*
|
|
23
|
+
* // 4. 获取缓存统计信息
|
|
24
|
+
* import { getCacheStats } from './CacheRoleInfo';
|
|
25
|
+
* const stats = await getCacheStats();
|
|
26
|
+
* console.log(`缓存数量: ${stats.count}`);
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import Dexie, { Table } from 'dexie';
|
|
30
|
+
import { API } from "../api";
|
|
31
|
+
import { ResponseCode } from "../api/_base";
|
|
32
|
+
|
|
33
|
+
/** 角色信息缓存时间(毫秒)1小时 */
|
|
34
|
+
const CACHE_EXPIRATION_MS = 1 * 60 * 60 * 1000;
|
|
35
|
+
|
|
36
|
+
/** 角色信息数据类型 */
|
|
37
|
+
export interface RoleInfo {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
descs: string;
|
|
41
|
+
created_at: Date;
|
|
42
|
+
admin_id: string;
|
|
43
|
+
parent_id: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** 角色信息缓存数据结构 */
|
|
47
|
+
interface RoleCache {
|
|
48
|
+
id: string;
|
|
49
|
+
data: RoleInfo[];
|
|
50
|
+
timestamp: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Dexie 数据库类 */
|
|
54
|
+
class RoleInfoDatabase extends Dexie {
|
|
55
|
+
roleCache!: Table<RoleCache, string>;
|
|
56
|
+
|
|
57
|
+
constructor() {
|
|
58
|
+
super('RoleInfoDB');
|
|
59
|
+
this.version(1).stores({
|
|
60
|
+
roleCache: 'id, timestamp'
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** 单例数据库实例 */
|
|
66
|
+
const db = new RoleInfoDatabase();
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 从缓存获取角色信息
|
|
70
|
+
* @returns 缓存的角色信息或null
|
|
71
|
+
*/
|
|
72
|
+
const getFromCache = async (): Promise<RoleInfo[] | null> => {
|
|
73
|
+
try {
|
|
74
|
+
const cached = await db.roleCache.get('ROLE_ALL');
|
|
75
|
+
if (cached) {
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
if (now - cached.timestamp < CACHE_EXPIRATION_MS) {
|
|
78
|
+
return cached.data;
|
|
79
|
+
}
|
|
80
|
+
await db.roleCache.delete('ROLE_ALL');
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error('读取角色缓存失败:', error);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 设置角色信息到缓存
|
|
91
|
+
* @param data 角色信息数组
|
|
92
|
+
*/
|
|
93
|
+
const setToCache = async (data: RoleInfo[]): Promise<void> => {
|
|
94
|
+
try {
|
|
95
|
+
await db.roleCache.put({
|
|
96
|
+
id: 'ROLE_ALL',
|
|
97
|
+
data,
|
|
98
|
+
timestamp: Date.now()
|
|
99
|
+
});
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error('写入角色缓存失败:', error);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 清除所有角色缓存
|
|
107
|
+
*/
|
|
108
|
+
const clearCache = async (): Promise<void> => {
|
|
109
|
+
try {
|
|
110
|
+
await db.roleCache.clear();
|
|
111
|
+
} catch (error) {
|
|
112
|
+
console.error('清除角色缓存失败:', error);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* 获取所有角色信息
|
|
118
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
119
|
+
* @returns 角色信息数组
|
|
120
|
+
*/
|
|
121
|
+
const getRoleList = async (
|
|
122
|
+
{
|
|
123
|
+
forceRefresh = false
|
|
124
|
+
}: {
|
|
125
|
+
forceRefresh?: boolean
|
|
126
|
+
}
|
|
127
|
+
): Promise<RoleInfo[] | null> => {
|
|
128
|
+
|
|
129
|
+
if (!forceRefresh) {
|
|
130
|
+
const cachedRoleInfo = await getFromCache();
|
|
131
|
+
if (cachedRoleInfo) {
|
|
132
|
+
return cachedRoleInfo;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const res = await API.user.role.listRoles();
|
|
137
|
+
|
|
138
|
+
if (res?.code !== ResponseCode.SUCCESS) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const roles = res.data || [];
|
|
143
|
+
|
|
144
|
+
await setToCache(roles);
|
|
145
|
+
|
|
146
|
+
return roles;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* 根据角色ID获取角色信息
|
|
151
|
+
* @param roleId 角色ID
|
|
152
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
153
|
+
* @returns 角色信息或null
|
|
154
|
+
*/
|
|
155
|
+
const getRoleById = async (
|
|
156
|
+
{
|
|
157
|
+
roleId,
|
|
158
|
+
forceRefresh = false
|
|
159
|
+
}: {
|
|
160
|
+
roleId: string,
|
|
161
|
+
forceRefresh?: boolean
|
|
162
|
+
}
|
|
163
|
+
): Promise<RoleInfo | null> => {
|
|
164
|
+
const roles = await getRoleList({ forceRefresh });
|
|
165
|
+
|
|
166
|
+
if (!roles) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return roles.find(role => role.id === roleId) || null;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* 根据角色ID获取角色名称
|
|
175
|
+
* @param roleId 角色ID
|
|
176
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
177
|
+
* @returns 角色名称或空字符串
|
|
178
|
+
*/
|
|
179
|
+
const getRoleNameById = async (
|
|
180
|
+
{
|
|
181
|
+
roleId,
|
|
182
|
+
forceRefresh = false
|
|
183
|
+
}: {
|
|
184
|
+
roleId: string,
|
|
185
|
+
forceRefresh?: boolean
|
|
186
|
+
}
|
|
187
|
+
): Promise<string> => {
|
|
188
|
+
const role = await getRoleById({ roleId, forceRefresh });
|
|
189
|
+
return role?.name || '';
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 获取角色ID到角色名称的映射
|
|
194
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
195
|
+
* @returns 角色ID -> 角色名称
|
|
196
|
+
*/
|
|
197
|
+
const getRoleNameMap = async (
|
|
198
|
+
{
|
|
199
|
+
forceRefresh = false
|
|
200
|
+
}: {
|
|
201
|
+
forceRefresh?: boolean
|
|
202
|
+
} = {}
|
|
203
|
+
): Promise<Record<string, string>> => {
|
|
204
|
+
const roles = await getRoleList({ forceRefresh });
|
|
205
|
+
const map: Record<string, string> = {};
|
|
206
|
+
(roles || []).forEach((role) => {
|
|
207
|
+
map[role.id] = role.name;
|
|
208
|
+
});
|
|
209
|
+
return map;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* 获取指定角色ID的名称映射;若缓存中缺失部分角色,强制刷新一次后重试
|
|
214
|
+
* @param roleIds 需要解析的角色ID数组
|
|
215
|
+
* @returns 角色ID -> 角色名称
|
|
216
|
+
*/
|
|
217
|
+
const getRoleNameMapForIds = async (
|
|
218
|
+
{
|
|
219
|
+
roleIds
|
|
220
|
+
}: {
|
|
221
|
+
roleIds: string[]
|
|
222
|
+
}
|
|
223
|
+
): Promise<Record<string, string>> => {
|
|
224
|
+
let map = await getRoleNameMap();
|
|
225
|
+
const missing = (roleIds || []).filter((id) => !!id && !map[id]);
|
|
226
|
+
if (missing.length > 0) {
|
|
227
|
+
map = await getRoleNameMap({ forceRefresh: true });
|
|
228
|
+
}
|
|
229
|
+
return map;
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* 清除角色缓存
|
|
234
|
+
*/
|
|
235
|
+
const clearRoleCache = async (): Promise<void> => {
|
|
236
|
+
await clearCache();
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* 获取缓存统计信息
|
|
241
|
+
* @returns 缓存统计信息
|
|
242
|
+
*/
|
|
243
|
+
const getCacheStats = async (): Promise<{ count: number; oldest: number | null; newest: number | null }> => {
|
|
244
|
+
try {
|
|
245
|
+
const all = await db.roleCache.toArray();
|
|
246
|
+
if (all.length === 0) {
|
|
247
|
+
return { count: 0, oldest: null, newest: null };
|
|
248
|
+
}
|
|
249
|
+
const timestamps = all.map(item => item.timestamp);
|
|
250
|
+
return {
|
|
251
|
+
count: all.length,
|
|
252
|
+
oldest: Math.min(...timestamps),
|
|
253
|
+
newest: Math.max(...timestamps)
|
|
254
|
+
};
|
|
255
|
+
} catch (error) {
|
|
256
|
+
console.error('获取缓存统计失败:', error);
|
|
257
|
+
return { count: 0, oldest: null, newest: null };
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
export const CacheRoleInfo = {
|
|
262
|
+
/**
|
|
263
|
+
* 获取所有角色信息
|
|
264
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
265
|
+
* @returns 角色信息数组
|
|
266
|
+
*/
|
|
267
|
+
getRoleList,
|
|
268
|
+
/**
|
|
269
|
+
* 根据角色ID获取角色信息
|
|
270
|
+
* @param roleId 角色ID
|
|
271
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
272
|
+
* @returns 角色信息或null
|
|
273
|
+
*/
|
|
274
|
+
getRoleById,
|
|
275
|
+
/**
|
|
276
|
+
* 根据角色ID获取角色名称
|
|
277
|
+
* @param roleId 角色ID
|
|
278
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
279
|
+
* @returns 角色名称或空字符串
|
|
280
|
+
*/
|
|
281
|
+
getRoleNameById,
|
|
282
|
+
/**
|
|
283
|
+
* 获取角色ID到角色名称的映射
|
|
284
|
+
* @param forceRefresh 是否强制刷新缓存(默认false,使用缓存)
|
|
285
|
+
* @returns 角色ID -> 角色名称
|
|
286
|
+
*/
|
|
287
|
+
getRoleNameMap,
|
|
288
|
+
/**
|
|
289
|
+
* 获取指定角色ID的名称映射;若缓存中缺失部分角色,强制刷新一次后重试
|
|
290
|
+
* @param roleIds 需要解析的角色ID数组
|
|
291
|
+
* @returns 角色ID -> 角色名称
|
|
292
|
+
*/
|
|
293
|
+
getRoleNameMapForIds,
|
|
294
|
+
/**
|
|
295
|
+
* 清除角色缓存
|
|
296
|
+
*/
|
|
297
|
+
clearRoleCache,
|
|
298
|
+
/**
|
|
299
|
+
* 获取缓存统计信息
|
|
300
|
+
* @returns 缓存统计信息
|
|
301
|
+
*/
|
|
302
|
+
getCacheStats
|
|
303
|
+
}
|