vome-core 0.0.16 → 0.0.18

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 (45) hide show
  1. package/dist/admin/api/client.js +2 -0
  2. package/dist/admin/config/plugin-dev.js +1 -1
  3. package/dist/admin/crud/config.js +1 -1
  4. package/dist/admin/crud/confirm.js +1 -1
  5. package/dist/admin/crud/dict.js +1 -1
  6. package/dist/admin/crud/index.js +1 -1
  7. package/dist/admin/crud/key.js +1 -1
  8. package/dist/admin/crud/mitt.js +1 -1
  9. package/dist/admin/crud/plugins.js +1 -1
  10. package/dist/admin/crud/span.js +1 -1
  11. package/dist/admin/crud/style.js +1 -1
  12. package/dist/admin/crud/validate.js +1 -1
  13. package/dist/admin/directives/perm.js +1 -1
  14. package/dist/admin/hooks/useUpload.js +1 -1
  15. package/dist/admin/hooks/useVome.d.ts +3 -1
  16. package/dist/admin/lib/browser.js +1 -1
  17. package/dist/admin/lib/cn.js +1 -1
  18. package/dist/admin/lib/dialog-float.js +1 -1
  19. package/dist/admin/lib/eps.d.ts +2 -11
  20. package/dist/admin/lib/eps.js +7 -33
  21. package/dist/admin/lib/menu.js +1 -1
  22. package/dist/admin/lib/tree.js +1 -1
  23. package/dist/admin/lib/upload.js +1 -1
  24. package/dist/admin/service/base.d.ts +2 -27
  25. package/dist/admin/service/base.js +1 -76
  26. package/dist/admin/service/index.d.ts +10 -16
  27. package/dist/admin/service/index.js +31 -259
  28. package/dist/client/base.d.ts +28 -0
  29. package/dist/client/base.js +77 -0
  30. package/dist/client/configure.d.ts +9 -0
  31. package/dist/client/configure.js +10 -0
  32. package/dist/client/eps.d.ts +12 -0
  33. package/dist/client/eps.js +42 -0
  34. package/dist/client/index.d.ts +4 -0
  35. package/dist/client/index.js +22 -0
  36. package/dist/client/service.d.ts +31 -0
  37. package/dist/client/service.js +299 -0
  38. package/dist/client/vite-plugin-eps.d.ts +42 -0
  39. package/dist/client/vite-plugin-eps.js +266 -0
  40. package/dist/index.js +1 -1
  41. package/dist/server/index.js +1 -1
  42. package/dist/shared/index.js +1 -1
  43. package/dist/shared/tree.js +1 -1
  44. package/package.json +46 -4
  45. package/typings/admin/comm/eps.d.ts +48 -0
@@ -1,11 +1,2 @@
1
- export type EpsSide = 'admin' | 'app';
2
- /** 拉取 EPS(默认 admin);公开接口失败不弹 toast */
3
- export declare function loadEps(force?: boolean, side?: EpsSide): Promise<any>;
4
- /** 并行拉取 admin + app */
5
- export declare function loadAllEps(force?: boolean): Promise<{
6
- admin: any;
7
- app: any;
8
- }>;
9
- export declare function getEps(side?: EpsSide): any;
10
- /** 按 prefix 找实体描述,如 /admin/base/user */
11
- export declare function findEpsEntity(prefix: string, side?: EpsSide): any;
1
+ export { loadEps, loadAllEps, getEps, findEpsEntity, type EpsSide, } from '../../client';
2
+ import '../api/client';
@@ -1,33 +1,7 @@
1
- import { request } from "../api/client";
2
- const EPS_URL = {
3
- admin: "/admin/base/open/eps",
4
- app: "/app/base/open/eps"
5
- };
6
- const cache = {
7
- admin: null,
8
- app: null
9
- };
10
- export async function loadEps(force = false, side = "admin") {
11
- if (cache[side] && !force)
12
- return cache[side];
13
- cache[side] = await request(EPS_URL[side], { toast: false }) || {};
14
- return cache[side];
15
- }
16
- export async function loadAllEps(force = false) {
17
- await Promise.all([loadEps(force, "admin"), loadEps(force, "app")]);
18
- return { admin: cache.admin, app: cache.app };
19
- }
20
- export function getEps(side = "admin") {
21
- return cache[side];
22
- }
23
- export function findEpsEntity(prefix, side = "admin") {
24
- const map = cache[side];
25
- if (!map)
26
- return;
27
- for (const list of Object.values(map)) {
28
- const hit = list.find((e) => e.prefix === prefix || e.prefix === prefix.replace(/\/$/, ""));
29
- if (hit)
30
- return hit;
31
- }
32
- return;
33
- }
1
+ export {
2
+ loadEps,
3
+ loadAllEps,
4
+ getEps,
5
+ findEpsEntity
6
+ } from "../../client";
7
+ import"../api/client";
@@ -1 +1 @@
1
- function _0x1eca(_0x46b148,_0x5a9766){_0x46b148=_0x46b148-0x1eb;const _0xe84422=_0xe844();let _0x1ecaa8=_0xe84422[_0x46b148];if(_0x1eca['qRpfnR']===undefined){var _0x264a3b=function(_0x5d4647){const _0x76d304='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x549dd0='',_0x3211d3='';for(let _0x2233c2=0x0,_0x4ea7fb,_0x28a68d,_0x74ee5b=0x0;_0x28a68d=_0x5d4647['charAt'](_0x74ee5b++);~_0x28a68d&&(_0x4ea7fb=_0x2233c2%0x4?_0x4ea7fb*0x40+_0x28a68d:_0x28a68d,_0x2233c2++%0x4)?_0x549dd0+=String['fromCharCode'](0xff&_0x4ea7fb>>(-0x2*_0x2233c2&0x6)):0x0){_0x28a68d=_0x76d304['indexOf'](_0x28a68d);}for(let _0x2353eb=0x0,_0x1a7bc3=_0x549dd0['length'];_0x2353eb<_0x1a7bc3;_0x2353eb++){_0x3211d3+='%'+('00'+_0x549dd0['charCodeAt'](_0x2353eb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3211d3);};_0x1eca['HyjJyB']=_0x264a3b,_0x1eca['vmRjdI']={},_0x1eca['qRpfnR']=!![];}const _0x51f116=_0xe84422[0x0],_0x54e54a=_0x46b148+_0x51f116,_0x4e2035=_0x1eca['vmRjdI'][_0x54e54a];return!_0x4e2035?(_0x1ecaa8=_0x1eca['HyjJyB'](_0x1ecaa8),_0x1eca['vmRjdI'][_0x54e54a]=_0x1ecaa8):_0x1ecaa8=_0x4e2035,_0x1ecaa8;}(function(_0x252ef6,_0x188d32){const _0x3c6ecc=_0x1eca,_0x4fd4f9=_0x252ef6();while(!![]){try{const _0x20e13b=-parseInt(_0x3c6ecc(0x1fb))/0x1*(parseInt(_0x3c6ecc(0x1f6))/0x2)+parseInt(_0x3c6ecc(0x1fc))/0x3*(-parseInt(_0x3c6ecc(0x1f3))/0x4)+-parseInt(_0x3c6ecc(0x1f7))/0x5*(-parseInt(_0x3c6ecc(0x1f9))/0x6)+-parseInt(_0x3c6ecc(0x1fd))/0x7+parseInt(_0x3c6ecc(0x1ed))/0x8+-parseInt(_0x3c6ecc(0x1f2))/0x9*(parseInt(_0x3c6ecc(0x1fa))/0xa)+parseInt(_0x3c6ecc(0x1ee))/0xb;if(_0x20e13b===_0x188d32)break;else _0x4fd4f9['push'](_0x4fd4f9['shift']());}catch(_0x4761de){_0x4fd4f9['push'](_0x4fd4f9['shift']());}}}(_0xe844,0x293b5));function _0xe844(){const _0x299633=['zMLSDgvY','odKWmZa0DMnTtgTZ','mJq5nJGZnuTWr05RvW','BwfW','y2HPBgrYzw4','AxntAg93','mZuYnZe5z25OC3Dx','mtjSzNDdAwK','CM91DgvY','BgvUz3rO','odC1nJzmyNnnzM0','mJeZnwLysMLnza','AxnbCNjHEq','mJyYmMPnEfvUBq','mtb6wM5xq0y','mLzxyxnosG','mtuWmJiYBgLptNzS','ntuZmdu2Ber5C3D5','DhLWzq'];_0xe844=function(){return _0x299633;};return _0xe844();}export function filterShowMenus(_0x549dd0){const _0x4765c8=_0x1eca;if(!Array[_0x4765c8(0x1f8)](_0x549dd0)||!_0x549dd0[_0x4765c8(0x1f5)])return[];return _0x549dd0[_0x4765c8(0x1ec)](_0x3211d3=>_0x3211d3&&_0x3211d3[_0x4765c8(0x1f1)]!==![])[_0x4765c8(0x1ef)](_0x2233c2=>({..._0x2233c2,'children':_0x2233c2[_0x4765c8(0x1f0)]?.['length']?filterShowMenus(_0x2233c2[_0x4765c8(0x1f0)]):undefined}))[_0x4765c8(0x1ec)](_0x4ea7fb=>{const _0x2b08b0=_0x4765c8,_0x28a68d=Number(_0x4ea7fb[_0x2b08b0(0x1eb)]);return _0x28a68d===0x0||_0x28a68d===0x1&&_0x4ea7fb[_0x2b08b0(0x1f4)]||(_0x4ea7fb[_0x2b08b0(0x1f0)]?.[_0x2b08b0(0x1f5)]??0x0)>0x0;});}
1
+ (function(_0x378045,_0x55cc3b){const _0x4d92c7=_0x1fb9,_0x13182d=_0x378045();while(!![]){try{const _0x4173a1=-parseInt(_0x4d92c7(0x188))/0x1+-parseInt(_0x4d92c7(0x186))/0x2*(parseInt(_0x4d92c7(0x195))/0x3)+-parseInt(_0x4d92c7(0x18c))/0x4*(parseInt(_0x4d92c7(0x192))/0x5)+-parseInt(_0x4d92c7(0x18a))/0x6+parseInt(_0x4d92c7(0x18b))/0x7*(parseInt(_0x4d92c7(0x18d))/0x8)+-parseInt(_0x4d92c7(0x196))/0x9+parseInt(_0x4d92c7(0x191))/0xa;if(_0x4173a1===_0x55cc3b)break;else _0x13182d['push'](_0x13182d['shift']());}catch(_0x466da3){_0x13182d['push'](_0x13182d['shift']());}}}(_0x443f,0xf1ed1));function _0x1fb9(_0xbf441c,_0x6b7e4e){_0xbf441c=_0xbf441c-0x186;const _0x443fbb=_0x443f();let _0x1fb9ab=_0x443fbb[_0xbf441c];if(_0x1fb9['VvsUkZ']===undefined){var _0x1355c4=function(_0x2a11db){const _0x5edbaa='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4e8d28='',_0x16f813='';for(let _0x562159=0x0,_0x35fc01,_0x2aa6dc,_0x5e6800=0x0;_0x2aa6dc=_0x2a11db['charAt'](_0x5e6800++);~_0x2aa6dc&&(_0x35fc01=_0x562159%0x4?_0x35fc01*0x40+_0x2aa6dc:_0x2aa6dc,_0x562159++%0x4)?_0x4e8d28+=String['fromCharCode'](0xff&_0x35fc01>>(-0x2*_0x562159&0x6)):0x0){_0x2aa6dc=_0x5edbaa['indexOf'](_0x2aa6dc);}for(let _0x2634b0=0x0,_0xbe99d8=_0x4e8d28['length'];_0x2634b0<_0xbe99d8;_0x2634b0++){_0x16f813+='%'+('00'+_0x4e8d28['charCodeAt'](_0x2634b0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x16f813);};_0x1fb9['jXmGRS']=_0x1355c4,_0x1fb9['tViQTP']={},_0x1fb9['VvsUkZ']=!![];}const _0x4e42ac=_0x443fbb[0x0],_0x52bd9f=_0xbf441c+_0x4e42ac,_0x37d00d=_0x1fb9['tViQTP'][_0x52bd9f];return!_0x37d00d?(_0x1fb9ab=_0x1fb9['jXmGRS'](_0x1fb9ab),_0x1fb9['tViQTP'][_0x52bd9f]=_0x1fb9ab):_0x1fb9ab=_0x37d00d,_0x1fb9ab;}function _0x443f(){const _0x1fb1ce=['DhLWzq','CM91DgvY','BwfW','ndK3mJe2mtbczLfHEfm','odvuBufAEeq','y2HPBgrYzw4','BgvUz3rO','mti3odnvwxPuCuK','mtqWmJaYme9fEe1qAa','nJK4BgfxuKXX','AxnbCNjHEq','mZK0mty0veDQB2vy','zMLSDgvY','mta4otu2mtbmCg5mweK','mte2odKWmKL4A0Xuva','ndiZmdG4zxb5uhLi','odbPDgjlr1O'];_0x443f=function(){return _0x1fb1ce;};return _0x443f();}export function filterShowMenus(_0x4e8d28){const _0x919750=_0x1fb9;if(!Array[_0x919750(0x187)](_0x4e8d28)||!_0x4e8d28['length'])return[];return _0x4e8d28[_0x919750(0x189)](_0x16f813=>_0x16f813&&_0x16f813['isShow']!==![])[_0x919750(0x190)](_0x562159=>({..._0x562159,'children':_0x562159[_0x919750(0x193)]?.['length']?filterShowMenus(_0x562159[_0x919750(0x193)]):undefined}))[_0x919750(0x189)](_0x35fc01=>{const _0x59b2d5=_0x919750,_0x2aa6dc=Number(_0x35fc01[_0x59b2d5(0x18e)]);return _0x2aa6dc===0x0||_0x2aa6dc===0x1&&_0x35fc01[_0x59b2d5(0x18f)]||(_0x35fc01[_0x59b2d5(0x193)]?.[_0x59b2d5(0x194)]??0x0)>0x0;});}
@@ -1 +1 @@
1
- function _0x5470(_0x5f1284,_0xc5376c){_0x5f1284=_0x5f1284-0x161;var _0x1e9ca6=_0x1e9c();var _0x5470df=_0x1e9ca6[_0x5f1284];if(_0x5470['ZBgBvl']===undefined){var _0x49fede=function(_0x42da39){var _0x24151c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x23fd14='',_0xc7d7ad='';for(var _0x3019a2=0x0,_0x5ad1da,_0x38bbb8,_0x4d596e=0x0;_0x38bbb8=_0x42da39['charAt'](_0x4d596e++);~_0x38bbb8&&(_0x5ad1da=_0x3019a2%0x4?_0x5ad1da*0x40+_0x38bbb8:_0x38bbb8,_0x3019a2++%0x4)?_0x23fd14+=String['fromCharCode'](0xff&_0x5ad1da>>(-0x2*_0x3019a2&0x6)):0x0){_0x38bbb8=_0x24151c['indexOf'](_0x38bbb8);}for(var _0x49552f=0x0,_0x3aa70c=_0x23fd14['length'];_0x49552f<_0x3aa70c;_0x49552f++){_0xc7d7ad+='%'+('00'+_0x23fd14['charCodeAt'](_0x49552f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xc7d7ad);};_0x5470['DCNOsH']=_0x49fede,_0x5470['tRDcwn']={},_0x5470['ZBgBvl']=!![];}var _0x30e46c=_0x1e9ca6[0x0],_0xc64339=_0x5f1284+_0x30e46c,_0x238457=_0x5470['tRDcwn'][_0xc64339];return!_0x238457?(_0x5470df=_0x5470['DCNOsH'](_0x5470df),_0x5470['tRDcwn'][_0xc64339]=_0x5470df):_0x5470df=_0x238457,_0x5470df;}function _0x1e9c(){var _0x5b4216=['mJi2nMrjBw5YDG','nJGZmtHXruvoAhC','nJG1nJbyyxHHzvG','ndm3mZbHugTYu2i','mtLwzgfjD1K','mJmYt1flsevf','mJDyB3P6Buu','mti2mdK0nezdqxvkCG','mZGYodqXmKrgq0jnza','mJi3nZnLwwP5D2W','mtaWmdy2mMrmu0nlrW'];_0x1e9c=function(){return _0x5b4216;};return _0x1e9c();}(function(_0x344cb7,_0xeb053d){var _0x5e0291=_0x5470,_0x5b90c0=_0x344cb7();while(!![]){try{var _0x81abe=parseInt(_0x5e0291(0x163))/0x1*(-parseInt(_0x5e0291(0x16b))/0x2)+parseInt(_0x5e0291(0x168))/0x3+-parseInt(_0x5e0291(0x164))/0x4*(-parseInt(_0x5e0291(0x161))/0x5)+parseInt(_0x5e0291(0x169))/0x6+parseInt(_0x5e0291(0x167))/0x7+-parseInt(_0x5e0291(0x166))/0x8*(-parseInt(_0x5e0291(0x165))/0x9)+parseInt(_0x5e0291(0x162))/0xa*(-parseInt(_0x5e0291(0x16a))/0xb);if(_0x81abe===_0xeb053d)break;else _0x5b90c0['push'](_0x5b90c0['shift']());}catch(_0x3219d2){_0x5b90c0['push'](_0x5b90c0['shift']());}}}(_0x1e9c,0x6b517));export{deepTree,flattenTree}from'../../shared/tree';
1
+ (function(_0x2ab8e9,_0x4da31d){var _0x59eb02=_0x33b7,_0x59eddd=_0x2ab8e9();while(!![]){try{var _0x3c95d4=-parseInt(_0x59eb02(0x79))/0x1+-parseInt(_0x59eb02(0x7a))/0x2*(parseInt(_0x59eb02(0x76))/0x3)+parseInt(_0x59eb02(0x78))/0x4*(-parseInt(_0x59eb02(0x7d))/0x5)+parseInt(_0x59eb02(0x77))/0x6*(-parseInt(_0x59eb02(0x75))/0x7)+-parseInt(_0x59eb02(0x74))/0x8+parseInt(_0x59eb02(0x7b))/0x9*(parseInt(_0x59eb02(0x73))/0xa)+parseInt(_0x59eb02(0x7c))/0xb;if(_0x3c95d4===_0x4da31d)break;else _0x59eddd['push'](_0x59eddd['shift']());}catch(_0x57805a){_0x59eddd['push'](_0x59eddd['shift']());}}}(_0x3427,0x451b2));export{deepTree,flattenTree}from'../../shared/tree';function _0x33b7(_0x5595e5,_0x599756){_0x5595e5=_0x5595e5-0x73;var _0x3427ae=_0x3427();var _0x33b75d=_0x3427ae[_0x5595e5];if(_0x33b7['IDhFKs']===undefined){var _0x9f3863=function(_0x4e14af){var _0x278ff0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1367b6='',_0x594ef='';for(var _0x2896e5=0x0,_0xfc20af,_0x18bdc3,_0x2abaff=0x0;_0x18bdc3=_0x4e14af['charAt'](_0x2abaff++);~_0x18bdc3&&(_0xfc20af=_0x2896e5%0x4?_0xfc20af*0x40+_0x18bdc3:_0x18bdc3,_0x2896e5++%0x4)?_0x1367b6+=String['fromCharCode'](0xff&_0xfc20af>>(-0x2*_0x2896e5&0x6)):0x0){_0x18bdc3=_0x278ff0['indexOf'](_0x18bdc3);}for(var _0x3921d2=0x0,_0x254474=_0x1367b6['length'];_0x3921d2<_0x254474;_0x3921d2++){_0x594ef+='%'+('00'+_0x1367b6['charCodeAt'](_0x3921d2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x594ef);};_0x33b7['hXOuDE']=_0x9f3863,_0x33b7['LKhtYM']={},_0x33b7['IDhFKs']=!![];}var _0x33519b=_0x3427ae[0x0],_0x270cc5=_0x5595e5+_0x33519b,_0x46ff76=_0x33b7['LKhtYM'][_0x270cc5];return!_0x46ff76?(_0x33b75d=_0x33b7['hXOuDE'](_0x33b75d),_0x33b7['LKhtYM'][_0x270cc5]=_0x33b75d):_0x33b75d=_0x46ff76,_0x33b75d;}function _0x3427(){var _0x3e467e=['mJa0mZq4qM5TyKTH','ngz3tuX4wG','ntyYmdG4zgX6wLzf','mty4ntGYsLHztLDZ','oxPkCuXuuq','mty4mdu0ndHjrhziB04','mtG5ntyZnvvrwgHutq','mteYmti5mhj2EKjrAW','ndCWotuYBxbOsxHg','ntzzs0fwv1K','m3PtvM1WDW'];_0x3427=function(){return _0x3e467e;};return _0x3427();}
@@ -1 +1 @@
1
- const _0x35844f=_0x3d8b;function _0x3d8b(_0x329785,_0x16e424){_0x329785=_0x329785-0x65;const _0xdf02da=_0xdf02();let _0x3d8b4d=_0xdf02da[_0x329785];if(_0x3d8b['JIATDB']===undefined){var _0x4b2d78=function(_0x144663){const _0x296261='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5ed67f='',_0x34d0f4='';for(let _0x4f66c4=0x0,_0x354f78,_0x4d81cb,_0x420923=0x0;_0x4d81cb=_0x144663['charAt'](_0x420923++);~_0x4d81cb&&(_0x354f78=_0x4f66c4%0x4?_0x354f78*0x40+_0x4d81cb:_0x4d81cb,_0x4f66c4++%0x4)?_0x5ed67f+=String['fromCharCode'](0xff&_0x354f78>>(-0x2*_0x4f66c4&0x6)):0x0){_0x4d81cb=_0x296261['indexOf'](_0x4d81cb);}for(let _0x560a98=0x0,_0x466e93=_0x5ed67f['length'];_0x560a98<_0x466e93;_0x560a98++){_0x34d0f4+='%'+('00'+_0x5ed67f['charCodeAt'](_0x560a98)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x34d0f4);};_0x3d8b['ljWgIr']=_0x4b2d78,_0x3d8b['QROUVC']={},_0x3d8b['JIATDB']=!![];}const _0x4cc275=_0xdf02da[0x0],_0x358891=_0x329785+_0x4cc275,_0x31dc39=_0x3d8b['QROUVC'][_0x358891];return!_0x31dc39?(_0x3d8b4d=_0x3d8b['ljWgIr'](_0x3d8b4d),_0x3d8b['QROUVC'][_0x358891]=_0x3d8b4d):_0x3d8b4d=_0x31dc39,_0x3d8b4d;}(function(_0x52cf3e,_0xa37825){const _0x1c5850=_0x3d8b,_0x2cbf12=_0x52cf3e();while(!![]){try{const _0x58e83d=parseInt(_0x1c5850(0x83))/0x1+-parseInt(_0x1c5850(0x71))/0x2*(parseInt(_0x1c5850(0xac))/0x3)+-parseInt(_0x1c5850(0x72))/0x4*(parseInt(_0x1c5850(0x65))/0x5)+parseInt(_0x1c5850(0xb0))/0x6*(parseInt(_0x1c5850(0xa2))/0x7)+parseInt(_0x1c5850(0x95))/0x8+parseInt(_0x1c5850(0x6d))/0x9+-parseInt(_0x1c5850(0x6c))/0xa*(parseInt(_0x1c5850(0x69))/0xb);if(_0x58e83d===_0xa37825)break;else _0x2cbf12['push'](_0x2cbf12['shift']());}catch(_0x3daf84){_0x2cbf12['push'](_0x2cbf12['shift']());}}}(_0xdf02,0xe2d27));export const DEFAULT_UPLOAD_RULES=[{'name':'图片','type':_0x35844f(0x9f),'color':'#67C23A','exts':[_0x35844f(0x74),_0x35844f(0x76),_0x35844f(0x8f),_0x35844f(0x7f),_0x35844f(0xab),'gif',_0x35844f(0x7d),'webp']},{'name':'视频','type':_0x35844f(0x81),'color':'#826aec','exts':[_0x35844f(0x92),_0x35844f(0x73),'mpg','mpeg',_0x35844f(0x88),'rm',_0x35844f(0x9b),'swf',_0x35844f(0x77),_0x35844f(0x98),_0x35844f(0x70)]},{'name':'音频','type':_0x35844f(0xaa),'color':_0x35844f(0x6f),'exts':['mp3',_0x35844f(0x79),_0x35844f(0xa7),'mp2',_0x35844f(0x94),_0x35844f(0x66),'ra',_0x35844f(0x9d),_0x35844f(0x80),_0x35844f(0x67)]},{'name':'文档','type':'word','color':'#53B7F4','exts':[_0x35844f(0x99),'docx','docm',_0x35844f(0xa4),_0x35844f(0xa5),_0x35844f(0x85)]},{'name':'表格','type':'excel','color':_0x35844f(0x7c),'exts':[_0x35844f(0x8e),_0x35844f(0x78),_0x35844f(0xa1),_0x35844f(0xaf),'xltx','xltm']},{'name':'演示','type':'ppt','color':_0x35844f(0xae),'exts':[_0x35844f(0x6e),'pptx',_0x35844f(0xa3),_0x35844f(0x7a),_0x35844f(0xa6),_0x35844f(0x82),_0x35844f(0xa8),'potm',_0x35844f(0x91),'dps']},{'name':_0x35844f(0x97),'type':_0x35844f(0x75),'color':'#8f3500','exts':[_0x35844f(0x75)]},{'name':_0x35844f(0x87),'type':_0x35844f(0x86),'color':_0x35844f(0x6a),'exts':[_0x35844f(0x86),'zip','7z',_0x35844f(0x68),'gz']},{'name':'文件','type':_0x35844f(0x8a),'color':'#909399','exts':[]}];export function extname(_0x5ed67f=''){const _0x551bec=_0x35844f,_0x34d0f4=String(_0x5ed67f)[_0x551bec(0x84)]('?')[0x0]?.[_0x551bec(0x93)](/\.([^.]+)$/);return _0x34d0f4?_0x34d0f4[0x1]['toLowerCase']():'';}function _0xdf02(){const _0x56e6c1=['CMfY','5y6l57YP5yYf','Bw92','BwfW','zMLSzq','Aw5JBhvKzxm','zgf0ytPPBwfNzs8','Dg9tDhjPBMC','EgXZ','ANbLzW','Cg9W','zhb0','yxzP','Bwf0y2G','zMXHyW','mZeZmZm5mMz5sLPfua','BM93','uerg','Bxa0','zg9J','CMvWBgfJzq','CMfT','DxjS','yxbL','zMLSDgvY','Aw1Hz2u','DhLWzq','EgXZBq','mtq5offqtuXMyW','Chb0Bq','zg90','zg90Ea','ChbZBq','D21H','Cg90Ea','AM9PBG','yxvKAw8','DgLM','nZa2mZHorgjUs2O','C2XPy2u','i0y1nKm2qW','EgX0','mZq0mtbzCwXIy08','ndmYmZvds2fVqNu','BwLKAq','y2rH','DgfY','mJjzqMzWs3C','i0zgqZC1nW','BgvUz3rO','mtaZnduZndbiswLNwwe','nZyWnZm1og1tz0zYvq','Chb0','iZGYnMfLyW','m2DW','nJjnwuLPwwm','mti0C0vbBxPh','D212','yM1W','CgrM','ANbN','zMX2','EgXZEa','D2f2','ChbZEa','zxH0CW','iZuZrdm5qW','C3zN','zMLUza','Cg5N','ywfJ','DMLKzw8','ChbZ','mtuZmtG4ogLLDLPRCW','C3bSAxq','zg90Bq'];_0xdf02=function(){return _0x56e6c1;};return _0xdf02();}export function filename(_0x4f66c4=''){const _0x3c5f8a=_0x35844f,_0x354f78=String(_0x4f66c4)[_0x3c5f8a(0x84)]('?')[0x0]?.[_0x3c5f8a(0x84)]('/')[_0x3c5f8a(0x90)]()||'',_0x4d81cb=extname(_0x354f78);return _0x4d81cb?_0x354f78[_0x3c5f8a(0xad)](0x0,-(_0x4d81cb['length']+0x1)):_0x354f78;}export function fileRule(_0x420923,_0x560a98=DEFAULT_UPLOAD_RULES){const _0x109364=_0x35844f;if(_0x420923?.[_0x109364(0x8b)](_0x109364(0x8c)))return _0x560a98[_0x109364(0x7e)](_0x526fee=>_0x526fee[_0x109364(0xa0)]===_0x109364(0x9f));const _0x466e93=extname(_0x420923||''),_0x23e706=_0x560a98[_0x109364(0x7e)](_0x163f4d=>_0x163f4d[_0x109364(0x7b)][_0x109364(0x8b)](_0x466e93));return _0x23e706||_0x560a98[_0x109364(0x7e)](_0x222cc3=>_0x222cc3['type']===_0x109364(0x8a));}export function getFileType(_0x2d05ee,_0x1c74ab=DEFAULT_UPLOAD_RULES){const _0x47f2df=_0x35844f;return fileRule(_0x2d05ee,_0x1c74ab)[_0x47f2df(0xa0)];}export function getUploadRule(_0x3a7089,_0x147338=DEFAULT_UPLOAD_RULES){const _0x5a55e1=_0x35844f;return _0x147338[_0x5a55e1(0x7e)](_0x529c4a=>_0x529c4a['type']===_0x3a7089)||_0x147338[_0x147338[_0x5a55e1(0x6b)]-0x1];}export function getUrls(_0x2ff825){const _0x25cb60=_0x35844f;return _0x2ff825[_0x25cb60(0x89)](_0x167a77=>String(_0x167a77[_0x25cb60(0x9c)]||'')[_0x25cb60(0x9a)](/,/g,encodeURIComponent(',')));}export function pathJoin(..._0x548a73){const _0x590c8b=_0x35844f;return _0x548a73[_0x590c8b(0x89)](_0x419363=>_0x419363[_0x590c8b(0x9a)](/(^\/+|\/+$)/g,''))[_0x590c8b(0x9e)](Boolean)[_0x590c8b(0xa9)]('/');}export function uploadUid(){const _0x5aed0c=_0x35844f;return Date[_0x5aed0c(0x96)]()+'_'+Math['random']()[_0x5aed0c(0x8d)](0x24)[_0x5aed0c(0xad)](0x2,0x9);}
1
+ function _0x4b0e(_0x2d6ac0,_0x540785){_0x2d6ac0=_0x2d6ac0-0x129;const _0x430470=_0x4304();let _0x4b0e53=_0x430470[_0x2d6ac0];if(_0x4b0e['kRICgt']===undefined){var _0x12ae70=function(_0x4696e4){const _0x505955='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xa56756='',_0x3eac54='';for(let _0x1db323=0x0,_0x33e64d,_0xdc9ef8,_0x157668=0x0;_0xdc9ef8=_0x4696e4['charAt'](_0x157668++);~_0xdc9ef8&&(_0x33e64d=_0x1db323%0x4?_0x33e64d*0x40+_0xdc9ef8:_0xdc9ef8,_0x1db323++%0x4)?_0xa56756+=String['fromCharCode'](0xff&_0x33e64d>>(-0x2*_0x1db323&0x6)):0x0){_0xdc9ef8=_0x505955['indexOf'](_0xdc9ef8);}for(let _0x34d678=0x0,_0x3799f6=_0xa56756['length'];_0x34d678<_0x3799f6;_0x34d678++){_0x3eac54+='%'+('00'+_0xa56756['charCodeAt'](_0x34d678)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3eac54);};_0x4b0e['ohhEtR']=_0x12ae70,_0x4b0e['yUqbLW']={},_0x4b0e['kRICgt']=!![];}const _0x21579f=_0x430470[0x0],_0x21337a=_0x2d6ac0+_0x21579f,_0x5602c9=_0x4b0e['yUqbLW'][_0x21337a];return!_0x5602c9?(_0x4b0e53=_0x4b0e['ohhEtR'](_0x4b0e53),_0x4b0e['yUqbLW'][_0x21337a]=_0x4b0e53):_0x4b0e53=_0x5602c9,_0x4b0e53;}function _0x4304(){const _0x5c8782=['EgXZEa','BgvUz3rO','Dg9tDhjPBMC','CMvWBgfJzq','zxHJzwW','zMXHyW','zg90Bq','CMfUzg9T','Cg90Ea','zg9JBq','ChbZEa','DxjS','zgf0ytPPBwfNzs8','DgLM','C3zN','iZuZqJDgna','CMfT','iZKWotm5oq','mJC1mg1HDNr5vG','mJrhwMnpr2e','mJaZoty3uM1vDKrX','nJq3mdC0ohnmDLHxva','iZuZrdm5qW','mJa2otK1CMvtt2DK','EgXZ','C2XPy2u','zMLUza','zMX2','BxbN','EgX0','iZy3qZiZqq','DhLWzq','D212','BxbLzW','Aw1Hz2u','AM9PBG','ChbZBq','Chb0Bq','C3DM','i0zgqZC1nW','ChbZ','zg9J','D29Yza','EgX0Ea','BwfW','D2vICa','Bwf0y2G','iZGYnMfLyW','yM1W','BxaZ','Chb0','BxaY','C3bSAxq','CgrM','Cg9W','BM93','uerg','mtrmsfbrz2K','zxH0CW','y2rH','Bw92','Dg9mB3DLCKnHC2u','zhb0','zg90','BwLKAq','mZzbz1Lls2u','ANbLzW','mte0mJmWnhvPs0Pvsa','odeYntDiq05uAei','ntC1nZa5nK1MwMTTzq','nJeXntnUy2XnwNK','D2f2','D21H','DMLKzw8','EgX0Bq','5y6l57YP5yYf','zMLSzq','i0y1nKm2qW','iZHMmZuWma','DgfY','Aw5JBhvKzxm'];_0x4304=function(){return _0x5c8782;};return _0x4304();}const _0x27cfac=_0x4b0e;(function(_0x5025b9,_0x400bf5){const _0x2f4133=_0x4b0e,_0x10a2cf=_0x5025b9();while(!![]){try{const _0x127e94=parseInt(_0x2f4133(0x141))/0x1*(parseInt(_0x2f4133(0x15f))/0x2)+parseInt(_0x2f4133(0x160))/0x3*(-parseInt(_0x2f4133(0x13c))/0x4)+parseInt(_0x2f4133(0x163))/0x5+parseInt(_0x2f4133(0x13e))/0x6*(-parseInt(_0x2f4133(0x134))/0x7)+-parseInt(_0x2f4133(0x140))/0x8+-parseInt(_0x2f4133(0x161))/0x9+-parseInt(_0x2f4133(0x15e))/0xa*(-parseInt(_0x2f4133(0x13f))/0xb);if(_0x127e94===_0x400bf5)break;else _0x10a2cf['push'](_0x10a2cf['shift']());}catch(_0x22154e){_0x10a2cf['push'](_0x10a2cf['shift']());}}}(_0x4304,0x5ba56));export const DEFAULT_UPLOAD_RULES=[{'name':'图片','type':_0x27cfac(0x16e),'color':_0x27cfac(0x16a),'exts':[_0x27cfac(0x12b),'jpg',_0x27cfac(0x13d),'png',_0x27cfac(0x159),'gif',_0x27cfac(0x15a),_0x27cfac(0x179)]},{'name':'视频','type':_0x27cfac(0x144),'color':'#826aec','exts':['avi',_0x27cfac(0x16c),_0x27cfac(0x168),_0x27cfac(0x16d),_0x27cfac(0x137),'rm',_0x27cfac(0x15c),_0x27cfac(0x172),_0x27cfac(0x167),'mp4','3gp']},{'name':'音频','type':'audio','color':_0x27cfac(0x12a),'exts':[_0x27cfac(0x12c),_0x27cfac(0x142),_0x27cfac(0x143),_0x27cfac(0x12e),_0x27cfac(0x151),_0x27cfac(0x13b),'ra','ape','aac',_0x27cfac(0x136)]},{'name':'文档','type':_0x27cfac(0x176),'color':_0x27cfac(0x15b),'exts':[_0x27cfac(0x175),'docx',_0x27cfac(0x155),_0x27cfac(0x13a),'dotx',_0x27cfac(0x152)]},{'name':'表格','type':_0x27cfac(0x150),'color':_0x27cfac(0x162),'exts':[_0x27cfac(0x164),_0x27cfac(0x14c),'xlsm',_0x27cfac(0x169),_0x27cfac(0x177),_0x27cfac(0x145)]},{'name':'演示','type':_0x27cfac(0x12d),'color':_0x27cfac(0x148),'exts':[_0x27cfac(0x12d),'pptx',_0x27cfac(0x171),_0x27cfac(0x156),_0x27cfac(0x170),_0x27cfac(0x174),_0x27cfac(0x154),'potm',_0x27cfac(0x139),'dps']},{'name':_0x27cfac(0x133),'type':_0x27cfac(0x130),'color':_0x27cfac(0x149),'exts':[_0x27cfac(0x130)]},{'name':_0x27cfac(0x146),'type':'rar','color':_0x27cfac(0x173),'exts':['rar','zip','7z',_0x27cfac(0x14a),'gz']},{'name':'文件','type':_0x27cfac(0x147),'color':_0x27cfac(0x15d),'exts':[]}];export function extname(_0xa56756=''){const _0x3001c2=_0x27cfac,_0x3eac54=String(_0xa56756)[_0x3001c2(0x12f)]('?')[0x0]?.[_0x3001c2(0x129)](/\.([^.]+)$/);return _0x3eac54?_0x3eac54[0x1][_0x3001c2(0x138)]():'';}export function filename(_0x1db323=''){const _0x2a5670=_0x27cfac,_0x33e64d=String(_0x1db323)[_0x2a5670(0x12f)]('?')[0x0]?.[_0x2a5670(0x12f)]('/')[_0x2a5670(0x131)]()||'',_0xdc9ef8=extname(_0x33e64d);return _0xdc9ef8?_0x33e64d[_0x2a5670(0x165)](0x0,-(_0xdc9ef8[_0x2a5670(0x14d)]+0x1)):_0x33e64d;}export function fileRule(_0x157668,_0x34d678=DEFAULT_UPLOAD_RULES){const _0x176c97=_0x27cfac;if(_0x157668?.[_0x176c97(0x14b)](_0x176c97(0x158)))return _0x34d678[_0x176c97(0x166)](_0x238db9=>_0x238db9[_0x176c97(0x16b)]===_0x176c97(0x16e));const _0x3799f6=extname(_0x157668||''),_0xa022bb=_0x34d678[_0x176c97(0x166)](_0x550080=>_0x550080[_0x176c97(0x135)][_0x176c97(0x14b)](_0x3799f6));return _0xa022bb||_0x34d678['find'](_0x26028b=>_0x26028b['type']===_0x176c97(0x147));}export function getFileType(_0x218b0c,_0x34aab6=DEFAULT_UPLOAD_RULES){const _0x5e1d58=_0x27cfac;return fileRule(_0x218b0c,_0x34aab6)[_0x5e1d58(0x16b)];}export function getUploadRule(_0x453480,_0x23f030=DEFAULT_UPLOAD_RULES){const _0x5e65a7=_0x27cfac;return _0x23f030[_0x5e65a7(0x166)](_0x34fae3=>_0x34fae3['type']===_0x453480)||_0x23f030[_0x23f030['length']-0x1];}export function getUrls(_0x5e8a86){const _0xdb1e21=_0x27cfac;return _0x5e8a86[_0xdb1e21(0x178)](_0x18955d=>String(_0x18955d[_0xdb1e21(0x157)]||'')[_0xdb1e21(0x14f)](/,/g,encodeURIComponent(',')));}export function pathJoin(..._0x296c18){const _0xf0d03f=_0x27cfac;return _0x296c18[_0xf0d03f(0x178)](_0x35e62e=>_0x35e62e[_0xf0d03f(0x14f)](/(^\/+|\/+$)/g,''))['filter'](Boolean)[_0xf0d03f(0x16f)]('/');}export function uploadUid(){const _0x1fdd59=_0x27cfac;return Date[_0x1fdd59(0x132)]()+'_'+Math[_0x1fdd59(0x153)]()[_0x1fdd59(0x14e)](0x24)['slice'](0x2,0x9);}
@@ -1,27 +1,2 @@
1
- /** BaseService:namespace + request + 标准 CRUD */
2
- export declare class BaseService {
3
- namespace?: string;
4
- constructor(namespace?: string);
5
- request(options?: ServiceRequestOptions): Promise<unknown>;
6
- page(data?: Record<string, unknown>): Promise<{
7
- list: Record<string, unknown>[];
8
- pagination: {
9
- page: number;
10
- size: number;
11
- total: number;
12
- };
13
- }>;
14
- list(data?: Record<string, unknown>): Promise<Record<string, unknown>[]>;
15
- info(params: {
16
- id: number | string;
17
- }): Promise<Record<string, unknown>>;
18
- add(data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown>;
19
- update(data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown>;
20
- delete(data: {
21
- ids: Array<number | string>;
22
- force?: boolean;
23
- } | Array<number | string> | Array<Record<string, unknown>>): Promise<unknown>;
24
- restore(data: {
25
- ids: Array<number | string>;
26
- }): Promise<unknown>;
27
- }
1
+ /** @deprecated 请从 vome-core/client 或本目录 index 使用 BaseService */
2
+ export { BaseService } from '../../client';
@@ -1,76 +1 @@
1
- import { request } from "../api/client";
2
- function stripTimeMeta(data) {
3
- if (Array.isArray(data))
4
- return data.map((item) => stripTimeMeta(item));
5
- if (data && typeof data === "object") {
6
- const out = { ...data };
7
- delete out.createTime;
8
- delete out.updateTime;
9
- return out;
10
- }
11
- return data;
12
- }
13
-
14
- export class BaseService {
15
- namespace;
16
- constructor(namespace) {
17
- if (namespace)
18
- this.namespace = namespace.replace(/^\//, "");
19
- }
20
- async request(options = {}) {
21
- let url = options.url || "";
22
- if (url && !/^https?:\/\//.test(url)) {
23
- if (this.namespace) {
24
- const ns = this.namespace.startsWith("/") ? this.namespace : `/${this.namespace}`;
25
- url = url.startsWith("/") ? `${ns}${url}` : `${ns}/${url}`;
26
- }
27
- if (!url.startsWith("/"))
28
- url = `/${url}`;
29
- }
30
- const method = (options.method || "GET").toUpperCase();
31
- if (method === "GET") {
32
- const params = options.params || {};
33
- const q = new URLSearchParams;
34
- for (const [k, v] of Object.entries(params)) {
35
- if (v == null)
36
- continue;
37
- q.set(k, String(v));
38
- }
39
- const qs = q.toString();
40
- return request(qs ? `${url}?${qs}` : url);
41
- }
42
- return request(url, {
43
- method,
44
- body: JSON.stringify(stripTimeMeta(options.data ?? {}))
45
- });
46
- }
47
- page(data = {}) {
48
- return this.request({ url: "/page", method: "POST", data });
49
- }
50
- list(data = {}) {
51
- return this.request({
52
- url: "/list",
53
- method: "POST",
54
- data
55
- });
56
- }
57
- info(params) {
58
- return this.request({
59
- url: "/info",
60
- method: "GET",
61
- params
62
- });
63
- }
64
- add(data) {
65
- return this.request({ url: "/add", method: "POST", data });
66
- }
67
- update(data) {
68
- return this.request({ url: "/update", method: "POST", data });
69
- }
70
- delete(data) {
71
- return this.request({ url: "/delete", method: "POST", data });
72
- }
73
- restore(data) {
74
- return this.request({ url: "/restore", method: "POST", data });
75
- }
76
- }
1
+ export { BaseService } from "../../client";
@@ -1,18 +1,12 @@
1
- import { BaseService } from './base';
2
- type ServiceRoot = Eps.Service & {
3
- request: BaseService['request'];
1
+ import { BaseService, createEpsService, resolveService, serviceOf, type CreateEpsOptions, type ServiceLeaf, type ServiceTree } from '../../client';
2
+ /** 与历史一致:默认挂在 admin */
3
+ export declare const service: ServiceTree & {
4
+ request: BaseService["request"];
4
5
  };
5
- /**
6
- * Proxy:任意模块读 service.xxx 都落到 globalThis 根上。
7
- * 避免 Vite 多实例下 `export const service = serviceRoot` 绑到不同对象。
8
- */
9
- export declare const service: ServiceRoot;
10
- /** 从 EPS 全量重建 service 树(无写死业务路由) */
11
- export declare function createEps(force?: boolean): Promise<any>;
6
+ /** 兼容 createEps() / createEps(true) */
7
+ export declare function createEps(forceOrOpts?: boolean | CreateEpsOptions): Promise<ServiceTree & {
8
+ request: BaseService["request"];
9
+ }>;
12
10
  export declare function setServicePerms(perms: string[], isSuper?: boolean): void;
13
- export declare function resolveService(path: string): ServiceLeaf | undefined;
14
- export declare function serviceOf(prefix: string): ServiceLeaf;
15
- /** @deprecated 请用 service.base.xxx */
16
- export declare function createEpsService(prefix: string): ServiceLeaf;
17
- export { BaseService };
18
- export type { ServiceLeaf, ServiceTree } from '../../../typings/admin/comm/service';
11
+ export { BaseService, createEpsService, resolveService, serviceOf, };
12
+ export type { ServiceLeaf, ServiceTree, CreateEpsOptions };
@@ -1,263 +1,35 @@
1
- import { loadEps } from "../lib/eps";
2
- import { BaseService } from "./base";
3
- const SIDE_ID = "admin";
4
- function toCamel(str) {
5
- return str.replace(/([^-])(?:-+([^-]))/g, (_m, a, b) => a + String(b).toUpperCase());
1
+ import { request } from "../api/client";
2
+ import {
3
+ BaseService,
4
+ bindEpsHotReload,
5
+ configureClient,
6
+ createEps as createEpsClient,
7
+ createEpsService,
8
+ getService,
9
+ resolveService,
10
+ serviceOf,
11
+ setServicePerms as setServicePermsClient
12
+ } from "../../client";
13
+ configureClient({ request });
14
+ bindEpsHotReload("admin");
15
+ export const service = getService("admin");
16
+ export async function createEps(forceOrOpts = false) {
17
+ if (typeof forceOrOpts === "boolean") {
18
+ return createEpsClient({ force: forceOrOpts, side: "admin", requireRoot: "base" });
19
+ }
20
+ return createEpsClient({
21
+ side: "admin",
22
+ requireRoot: "base",
23
+ ...forceOrOpts
24
+ });
6
25
  }
7
- function methodName(path) {
8
- return path.replace(/^\//, "").replace(/[:,\s/-]/g, "");
9
- }
10
- function isValidName(name) {
11
- return Boolean(name) && !["{", "}", ":"].some((c) => name.includes(c));
12
- }
13
- function resolvePermCode(prefix, action) {
14
- const parts = prefix.replace(/^\//, "").split("/").filter(Boolean);
15
- const module = parts[1] || parts[0] || "base";
16
- let resource = parts.slice(2).join(":");
17
- if (resource === module) {
18
- resource = module;
19
- } else if (resource.startsWith(`${module}:`)) {
20
- resource = resource.slice(module.length + 1);
21
- }
22
- const head = `${module}-`;
23
- if (resource.startsWith(head))
24
- resource = resource.slice(head.length);
25
- resource = resource.replace(/-/g, ":");
26
- if (!resource)
27
- resource = module;
28
- return `${module}:${resource}:${action}`;
29
- }
30
- function prefixToParts(prefix) {
31
- const raw = prefix.replace(/^\//, "");
32
- return raw.replace(new RegExp(`^${SIDE_ID}/?`), "").split("/").filter(Boolean).map(toCamel);
33
- }
34
- function bindCrud(leaf, base) {
35
- const proto = BaseService.prototype;
36
- for (const name of [
37
- "request",
38
- "page",
39
- "list",
40
- "info",
41
- "add",
42
- "update",
43
- "delete",
44
- "restore"
45
- ]) {
46
- const fn = proto[name];
47
- if (typeof fn === "function") {
48
- leaf[name] = fn.bind(base);
49
- }
50
- }
51
- }
52
- function bindApis(leaf, base, apis) {
53
- leaf.permission ||= {};
54
- for (const api of apis) {
55
- const name = methodName(api.path);
56
- if (!isValidName(name) || /[-:]/g.test(name))
57
- continue;
58
- const method = (api.method || "get").toLowerCase();
59
- leaf[name] = function(data) {
60
- return this.request({
61
- url: api.path.startsWith("/") ? api.path : `/${api.path}`,
62
- method,
63
- [method === "post" ? "data" : "params"]: data
64
- });
65
- }.bind(base);
66
- leaf.permission[name] = api.perms?.[0] || resolvePermCode(`/${leaf.namespace}`, name);
67
- }
68
- }
69
- function createLeaf(namespace, apis = []) {
70
- const ns = namespace.replace(/^\//, "");
71
- const base = new BaseService(ns);
72
- const leaf = base;
73
- leaf.namespace = ns;
74
- leaf.permission = {};
75
- leaf._permission = {};
76
- bindCrud(leaf, base);
77
- bindApis(leaf, base, apis);
78
- return leaf;
79
- }
80
- function attachLeaf(tree, prefix, apis = []) {
81
- const raw = prefix.replace(/^\//, "");
82
- const arr = prefixToParts(prefix);
83
- if (!arr.length)
84
- return;
85
- let node = tree;
86
- for (let i = 0;i < arr.length; i++) {
87
- const key = arr[i];
88
- const isLast = i === arr.length - 1;
89
- if (!isLast) {
90
- const cur = node[key];
91
- if (!cur || typeof cur !== "object" || "namespace" in cur) {
92
- node[key] = {};
93
- }
94
- node = node[key];
95
- continue;
96
- }
97
- const leaf = createLeaf(raw, apis);
98
- node[key] = leaf;
99
- return leaf;
100
- }
101
- return;
102
- }
103
- function buildFromEps(map) {
104
- const root = getOrCreateRoot();
105
- const list = Object.values(map).flat();
106
- for (const e of list) {
107
- if (!e?.prefix)
108
- continue;
109
- const leaf = attachLeaf(root, e.prefix, e.api || []);
110
- if (leaf) {
111
- const op = e.pageQueryOp;
112
- if (op) {
113
- leaf.search = {
114
- fieldEq: op.fieldEq,
115
- fieldLike: op.fieldLike,
116
- fieldArray: op.fieldArray,
117
- fieldRange: op.fieldRange,
118
- keyWordLikeFields: op.keyWordLikeFields
119
- };
120
- }
121
- }
122
- }
123
- }
124
- function normalizeEpsMap(input) {
125
- if (!input || typeof input !== "object")
126
- return {};
127
- const m = input;
128
- if ("code" in m && "data" in m && m.data && typeof m.data === "object" && !Array.isArray(m.data)) {
129
- return m.data;
130
- }
131
- return input;
132
- }
133
- function countPrefixedEntities(map) {
134
- return Object.values(map).flat().filter((e) => e && typeof e === "object" && Boolean(e.prefix)).length;
135
- }
136
- const SERVICE_ROOT_KEY = Symbol.for("vome.admin.service.root");
137
- const EPS_PROMISE_KEY = Symbol.for("vome.admin.service.eps");
138
- function createServiceRoot() {
139
- const root = new BaseService;
140
- return {
141
- request: root.request.bind(root)
142
- };
143
- }
144
- function getOrCreateRoot() {
145
- const g = globalThis;
146
- if (!g[SERVICE_ROOT_KEY]) {
147
- g[SERVICE_ROOT_KEY] = createServiceRoot();
148
- }
149
- return g[SERVICE_ROOT_KEY];
150
- }
151
- function resetServiceModules() {
152
- const root = getOrCreateRoot();
153
- for (const key of Object.keys(root)) {
154
- if (key === "request")
155
- continue;
156
- delete root[key];
157
- }
158
- }
159
- export const service = new Proxy({}, {
160
- get(_t, prop, _r) {
161
- const root = getOrCreateRoot();
162
- const val = Reflect.get(root, prop, root);
163
- return typeof val === "function" ? val.bind(root) : val;
164
- },
165
- set(_t, prop, value) {
166
- return Reflect.set(getOrCreateRoot(), prop, value);
167
- },
168
- has(_t, prop) {
169
- return Reflect.has(getOrCreateRoot(), prop);
170
- },
171
- ownKeys() {
172
- return Reflect.ownKeys(getOrCreateRoot());
173
- },
174
- getOwnPropertyDescriptor(_t, prop) {
175
- const desc = Reflect.getOwnPropertyDescriptor(getOrCreateRoot(), prop);
176
- if (desc)
177
- desc.configurable = true;
178
- return desc;
179
- }
180
- });
181
- export async function createEps(force = false) {
182
- const g = globalThis;
183
- if (!force && g[EPS_PROMISE_KEY])
184
- return g[EPS_PROMISE_KEY];
185
- const run = (async () => {
186
- const raw = await loadEps(force) || {};
187
- const map = normalizeEpsMap(raw);
188
- const n = countPrefixedEntities(map);
189
- if (!n) {
190
- throw new Error("[vome-eps] empty or invalid — enable vome.eps and check GET /admin/base/open/eps (expect module map with prefix)");
191
- }
192
- resetServiceModules();
193
- buildFromEps(map);
194
- const root = getOrCreateRoot();
195
- const base = root.base;
196
- if (!base || typeof base !== "object") {
197
- throw new Error("[vome-eps] mount failed: service.base missing after EPS apply");
198
- }
199
- return root;
200
- })();
201
- g[EPS_PROMISE_KEY] = run;
202
- try {
203
- return await run;
204
- } catch (e) {
205
- g[EPS_PROMISE_KEY] = null;
206
- throw e;
207
- }
208
- }
209
- if (undefined) {}
210
26
  export function setServicePerms(perms, isSuper = false) {
211
- const list = perms || [];
212
- const root = getOrCreateRoot();
213
- function deep(d) {
214
- if (!d || typeof d !== "object")
215
- return;
216
- const obj = d;
217
- if (obj.permission && obj.namespace) {
218
- obj._permission = {};
219
- for (const key of Object.keys(obj.permission)) {
220
- if (isSuper) {
221
- obj._permission[key] = true;
222
- continue;
223
- }
224
- const code = obj.permission[key];
225
- obj._permission[key] = list.includes(code) || list.some((p) => p.replace(/:/g, "/").includes(`${obj.namespace.replace(/^admin\//, "")}/${key}`));
226
- }
227
- return;
228
- }
229
- for (const k of Object.keys(obj)) {
230
- if (k === "request")
231
- continue;
232
- deep(obj[k]);
233
- }
234
- }
235
- deep(root);
236
- }
237
- export function resolveService(path) {
238
- const parts = path.replace(/^\//, "").split(".").filter(Boolean);
239
- let cur = getOrCreateRoot();
240
- for (const p of parts) {
241
- if (!cur || typeof cur !== "object")
242
- return;
243
- cur = cur[p];
244
- }
245
- if (cur && typeof cur === "object" && "namespace" in cur) {
246
- return cur;
247
- }
248
- return;
249
- }
250
- export function serviceOf(prefix) {
251
- const raw = prefix.replace(/\/$/, "");
252
- const path = prefixToParts(raw).join(".");
253
- const hit = resolveService(path);
254
- if (!hit) {
255
- throw new Error(`[vome-eps] service missing: ${prefix} (await createEps first)`);
256
- }
257
- return hit;
258
- }
259
- export function createEpsService(prefix) {
260
- return serviceOf(prefix);
27
+ return setServicePermsClient(perms, isSuper, "admin");
261
28
  }
262
29
 
263
- export { BaseService };
30
+ export {
31
+ BaseService,
32
+ createEpsService,
33
+ resolveService,
34
+ serviceOf
35
+ };
@@ -0,0 +1,28 @@
1
+ import type { ServiceRequestOptions } from '../../typings/admin/comm/service';
2
+ /** BaseService:namespace + request + 标准 CRUD */
3
+ export declare class BaseService {
4
+ namespace?: string;
5
+ constructor(namespace?: string);
6
+ request(options?: ServiceRequestOptions): Promise<unknown>;
7
+ page(data?: Record<string, unknown>): Promise<{
8
+ list: Record<string, unknown>[];
9
+ pagination: {
10
+ page: number;
11
+ size: number;
12
+ total: number;
13
+ };
14
+ }>;
15
+ list(data?: Record<string, unknown>): Promise<Record<string, unknown>[]>;
16
+ info(params: {
17
+ id: number | string;
18
+ }): Promise<Record<string, unknown>>;
19
+ add(data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown>;
20
+ update(data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown>;
21
+ delete(data: {
22
+ ids: Array<number | string>;
23
+ force?: boolean;
24
+ } | Array<number | string> | Array<Record<string, unknown>>): Promise<unknown>;
25
+ restore(data: {
26
+ ids: Array<number | string>;
27
+ }): Promise<unknown>;
28
+ }