diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..e605da20 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "cSpell.words": [ + "Antd", + "apinto", + "Apipark", + "logsettings", + "resourcesettings" + ] +} \ No newline at end of file diff --git a/frontend/README.pro.md b/frontend/README.pro.md deleted file mode 100644 index b95b1e79..00000000 --- a/frontend/README.pro.md +++ /dev/null @@ -1,17 +0,0 @@ -# 部署 - -## 代码同步 - packages目录下,部分子项目为企业版独有,不要同步到开源版: - packages/businessEntry, packages/openApi, packages/systemRunning, README.pro.md - -## 安装依赖 - 建议使用pnpm - `npm install -g pnpm` - 使用pnpm安装依赖 - `pnpm install` - -## 编译 -### 开源版本 - `pnpm run build` -### 企业版本 - `pnpm run build:pro` \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 41e27f69..5fa0b6c5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,11 +9,9 @@ "scripts": { "test": "jest", "build": "set NODE_OPTIONS=--max-old-space-size=4096 && lerna run build --scope=core --stream --verbose ", - "build:pro": "set NODE_OPTIONS=--max-old-space-size=4096 && lerna run build --scope=business-entry --stream --verbose ", "serve": "lerna run preview --parallel", "serve:remotes": "lerna run serve --scope=remote --parallel", "dev": "lerna run dev --scope=core --stream", - "dev:pro": "lerna run dev --scope=business-entry --stream", "stop": "kill-port --port 5000", "scan": "i18next-scanner --config i18next-scanner.config.js" }, diff --git a/frontend/packages/businessEntry/.env b/frontend/packages/businessEntry/.env deleted file mode 100644 index ef729214..00000000 --- a/frontend/packages/businessEntry/.env +++ /dev/null @@ -1,5 +0,0 @@ - -// .env.pro -VITE_APP_MODE=pro -VITE_APP_TITLE=My Production App -VITE_API_BASE_URL=https://api.production.example.com \ No newline at end of file diff --git a/frontend/packages/businessEntry/.eslintrc.cjs b/frontend/packages/businessEntry/.eslintrc.cjs deleted file mode 100644 index 87e6dac6..00000000 --- a/frontend/packages/businessEntry/.eslintrc.cjs +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs','public','code-snippet','ace-editor'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, -} diff --git a/frontend/packages/businessEntry/.gitignore b/frontend/packages/businessEntry/.gitignore deleted file mode 100644 index b5e526e8..00000000 --- a/frontend/packages/businessEntry/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* -node_modules -dist -dist-ssr -*.local -public/tinymce - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - diff --git a/frontend/packages/businessEntry/README.md b/frontend/packages/businessEntry/README.md deleted file mode 100644 index 38866cff..00000000 --- a/frontend/packages/businessEntry/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# `businessEntry` - -> TODO: description - -## Usage - -``` -const businessEntry = require('businessEntry'); - -// TODO: DEMONSTRATE API -``` diff --git a/frontend/packages/businessEntry/__tests__/businessEntry.test.js b/frontend/packages/businessEntry/__tests__/businessEntry.test.js deleted file mode 100644 index 46213a5b..00000000 --- a/frontend/packages/businessEntry/__tests__/businessEntry.test.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const businessEntry = require('..'); -const assert = require('assert').strict; - -assert.strictEqual(businessEntry(), 'Hello from businessEntry'); -console.info('businessEntry tests passed'); diff --git a/frontend/packages/businessEntry/index.html b/frontend/packages/businessEntry/index.html deleted file mode 100644 index aa5cad3d..00000000 --- a/frontend/packages/businessEntry/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - 2APIPark - - -
- - - - - diff --git a/frontend/packages/businessEntry/package.json b/frontend/packages/businessEntry/package.json deleted file mode 100644 index 98766f5c..00000000 --- a/frontend/packages/businessEntry/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "business-entry", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": " vite --port 5000 --strictPort", - "build": "vite build ", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview --port 5000 --strictPort", - "serve": "vite preview --port 5000 --strictPort" - }, - "dependencies": { - }, - "devDependencies": { - } -} diff --git a/frontend/packages/businessEntry/postcss.config.js b/frontend/packages/businessEntry/postcss.config.js deleted file mode 100644 index 494471a0..00000000 --- a/frontend/packages/businessEntry/postcss.config.js +++ /dev/null @@ -1,9 +0,0 @@ -export default { - plugins: { - 'postcss-import': {}, - 'tailwindcss/nesting': {}, - tailwindcss: {}, - autoprefixer: {} - }, - } - \ No newline at end of file diff --git a/frontend/packages/businessEntry/public/favicon.ico b/frontend/packages/businessEntry/public/favicon.ico deleted file mode 100644 index 2c1de84c..00000000 Binary files a/frontend/packages/businessEntry/public/favicon.ico and /dev/null differ diff --git a/frontend/packages/businessEntry/public/iconpark_apinto.js b/frontend/packages/businessEntry/public/iconpark_apinto.js deleted file mode 100644 index 93caf0e3..00000000 --- a/frontend/packages/businessEntry/public/iconpark_apinto.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){window.__iconpark__=window.__iconpark__||{};var obj=JSON.parse("{\"680840\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"},\"680856\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680857\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680858\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680859\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680860\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680861\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680862\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680863\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680864\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680865\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680866\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680867\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680868\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680869\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680870\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680871\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680872\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680873\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680874\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680875\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680876\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680877\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680878\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680879\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680880\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680881\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680882\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680883\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680884\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680885\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680886\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680887\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680888\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680889\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680890\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680891\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680892\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680893\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680894\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680895\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680896\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680897\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680898\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680899\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680900\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680901\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680902\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680903\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680904\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680905\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680906\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680907\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680908\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680909\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680910\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680911\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680912\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680913\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680914\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680915\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680916\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680917\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680918\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680919\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680920\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680921\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680922\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680923\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680924\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680925\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680926\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680927\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680928\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680929\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680930\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680931\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680932\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680933\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680934\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680935\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680936\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680937\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680938\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"680939\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681014\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681015\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681016\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681017\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681018\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681019\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"content\":\"\"},\"681787\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"},\"694557\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"694558\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707431\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707736\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707739\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707741\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707742\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707743\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707744\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"707749\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708142\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708144\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708145\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708146\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708147\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"708181\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"709715\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"808898\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"808900\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"808916\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"810363\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"810396\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"818250\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"818340\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"}}");for(var _k in obj){window.__iconpark__[_k] = obj[_k]};var nm={"fuzhi1":680840,"bianji":680856,"tishi":680857,"xinkaibiaoqian":680858,"bianjiyoujian":680859,"suoyou":680860,"fuzhi":680861,"shijian":680862,"gundongxuanze":680863,"guanbi":680864,"zanting":680865,"chenggong":680866,"chakanyinyong":680867,"guidang":680868,"tihuan":680869,"zhankai":680870,"duankailianjie":680871,"Cookieguanli":680872,"riqi":680873,"zhongwen":680874,"yingwen":680875,"shuaxinjiankongzhuangtai":680876,"rili":680877,"genmulu":680878,"shangxianguanli":680879,"daimashili":680880,"yingyong":680881,"tianjia-2":680882,"qingchu":680883,"daoru":680884,"xiala":680885,"kuaisuceshi-2":680886,"saoyisao":680887,"shiyongjiaocheng":680888,"tianjiafujian":680889,"xiazai":680890,"jinzhidengji":680891,"fasongyoujian":680892,"bug":680893,"chaping":680894,"kuaisuceshi":680895,"yunshangchuan":680896,"yunxiazai":680897,"sousuo":680898,"peizhi":680899,"xinchuangkoudakai":680900,"shanchu-2":680901,"quanjusuoxiao":680902,"qiehuan":680903,"jianshao":680904,"chakanAPIlishi":680905,"lianjie":680906,"dunpaibaoxianrenzheng":680907,"shaixuan":680908,"zhihang":680909,"congmobanzhongchuangjianyongli":680910,"zhengligeshi":680911,"haoping":680912,"shouqi-2":680913,"gouwuche":680914,"lishi":680915,"tianjiaziji":680916,"tianjia":680917,"shouqi":680918,"gailan":680919,"paixu":680920,"gengduo":680921,"guanliyuanrenzheng":680922,"fenxiang":680923,"shanchu":680924,"yidong":680925,"chakan":680926,"shujuku":680927,"shangyoufuwu-":680928,"huanyuangeshi":680929,"jiangxu":680930,"shengxu":680931,"quanjufangda":680932,"xuanzhong":680933,"riqiqujian":680934,"ditu-1":680935,"qunzu":680936,"daochu":680937,"zhankai-":680938,"ditu-2":680939,"Eolink":681014,"APISpace":681015,"Apinto":681016,"json":681017,"webhook":681018,"linux":681019,"xinzengfenzu":681787,"circle-right-up":694557,"circle-right-down":694558,"APIjiekou-7mme3dcg":707431,"connection-box":707736,"system":707739,"form-one":707741,"yingyong-7mmhj11e":707742,"jiankongshexiangtou":707743,"file-cabinet":707744,"network-tree":707749,"search":708142,"find":708144,"circle-right-up-7mnlo5g9":708145,"circle-right-down-7mnlphn2":708146,"reduce-one":708147,"tool":708181,"shangxianguanli-new":709715,"hamburger-button":808898,"puzzle":808900,"keyline":808916,"daohang":810363,"lanjieqiguanli":810396,"shop":818250,"xiangmu":818340};for(var _i in nm){window.__iconpark__[_i] = obj[nm[_i]]}})();"object"!=typeof globalThis&&(Object.prototype.__defineGetter__("__magic__",function(){return this}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__);(()=>{"use strict";var t={816:(t,e,i)=>{var s,r,o,n;i.d(e,{Vm:()=>z,dy:()=>P,Jb:()=>x,Ld:()=>$,sY:()=>T,YP:()=>A});const l=globalThis.trustedTypes,a=l?l.createPolicy("lit-html",{createHTML:t=>t}):void 0,h=`lit$${(Math.random()+"").slice(9)}$`,c="?"+h,d=`<${c}>`,u=document,p=(t="")=>u.createComment(t),v=t=>null===t||"object"!=typeof t&&"function"!=typeof t,f=Array.isArray,y=t=>{var e;return f(t)||"function"==typeof(null===(e=t)||void 0===e?void 0:e[Symbol.iterator])},m=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,g=/-->/g,b=/>/g,S=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,w=/'/g,k=/"/g,E=/^(?:script|style|textarea)$/i,C=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),P=C(1),A=C(2),x=Symbol.for("lit-noChange"),$=Symbol.for("lit-nothing"),O=new WeakMap,T=(t,e,i)=>{var s,r;const o=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:e;let n=o._$litPart$;if(void 0===n){const t=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;o._$litPart$=n=new H(e.insertBefore(p(),t),t,void 0,i)}return n.I(t),n},R=u.createTreeWalker(u,129,null,!1),_=(t,e)=>{const i=t.length-1,s=[];let r,o=2===e?"":"",n=m;for(let e=0;e"===a[0]?(n=null!=r?r:m,c=-1):void 0===a[1]?c=-2:(c=n.lastIndex-a[2].length,l=a[1],n=void 0===a[3]?S:'"'===a[3]?k:w):n===k||n===w?n=S:n===g||n===b?n=m:(n=S,r=void 0);const p=n===S&&t[e+1].startsWith("/>")?" ":"";o+=n===m?i+d:c>=0?(s.push(l),i.slice(0,c)+"$lit$"+i.slice(c)+h+p):i+h+(-2===c?(s.push(void 0),e):p)}const l=o+(t[i]||"")+(2===e?"":"");return[void 0!==a?a.createHTML(l):l,s]};class N{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let r=0,o=0;const n=t.length-1,a=this.parts,[d,u]=_(t,e);if(this.el=N.createElement(d,i),R.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(s=R.nextNode())&&a.length0){s.textContent=l?l.emptyScript:"";for(let i=0;i2||""!==i[0]||""!==i[1]?(this.H=Array(i.length-1).fill($),this.strings=i):this.H=$}get tagName(){return this.element.tagName}I(t,e=this,i,s){const r=this.strings;let o=!1;if(void 0===r)t=U(this,t,e,0),o=!v(t)||t!==this.H&&t!==x,o&&(this.H=t);else{const s=t;let n,l;for(t=r[0],n=0;n{i.r(e),i.d(e,{customElement:()=>s,eventOptions:()=>a,property:()=>o,query:()=>h,queryAll:()=>c,queryAssignedNodes:()=>v,queryAsync:()=>d,state:()=>n});const s=t=>e=>"function"==typeof e?((t,e)=>(window.customElements.define(t,e),e))(t,e):((t,e)=>{const{kind:i,elements:s}=e;return{kind:i,elements:s,finisher(e){window.customElements.define(t,e)}}})(t,e),r=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function o(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):r(t,e)}function n(t){return o({...t,state:!0,attribute:!1})}const l=({finisher:t,descriptor:e})=>(i,s)=>{var r;if(void 0===s){const s=null!==(r=i.originalKey)&&void 0!==r?r:i.key,o=null!=e?{kind:"method",placement:"prototype",key:s,descriptor:e(i.key)}:{...i,key:s};return null!=t&&(o.finisher=function(e){t(e,s)}),o}{const r=i.constructor;void 0!==e&&Object.defineProperty(i,s,e(s)),null==t||t(r,s)}};function a(t){return l({finisher:(e,i)=>{Object.assign(e.prototype[i],t)}})}function h(t,e){return l({descriptor:i=>{const s={get(){var e;return null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof i?Symbol():"__"+i;s.get=function(){var i;return void 0===this[e]&&(this[e]=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t)),this[e]}}return s}})}function c(t){return l({descriptor:e=>({get(){var e;return null===(e=this.renderRoot)||void 0===e?void 0:e.querySelectorAll(t)},enumerable:!0,configurable:!0})})}function d(t){return l({descriptor:e=>({async get(){var e;return await this.updateComplete,null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0})})}const u=Element.prototype,p=u.msMatchesSelector||u.webkitMatchesSelector;function v(t="",e=!1,i=""){return l({descriptor:s=>({get(){var s,r;const o="slot"+(t?`[name=${t}]`:":not([name])");let n=null===(r=null===(s=this.renderRoot)||void 0===s?void 0:s.querySelector(o))||void 0===r?void 0:r.assignedNodes({flatten:e});return n&&i&&(n=n.filter((t=>t.nodeType===Node.ELEMENT_NODE&&(t.matches?t.matches(i):p.call(t,i))))),n},enumerable:!0,configurable:!0})})}},23:(t,e,i)=>{i.r(e),i.d(e,{unsafeSVG:()=>l});const s=t=>(...e)=>({_$litDirective$:t,values:e});var r=i(816);class o extends class{constructor(t){}T(t,e,i){this.Σdt=t,this.M=e,this.Σct=i}S(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}{constructor(t){if(super(t),this.vt=r.Ld,2!==t.type)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===r.Ld)return this.Vt=void 0,this.vt=t;if(t===r.Jb)return t;if("string"!=typeof t)throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.vt)return this.Vt;this.vt=t;const e=[t];return e.raw=e,this.Vt={_$litType$:this.constructor.resultType,strings:e,values:[]}}}o.directiveName="unsafeHTML",o.resultType=1,s(o);class n extends o{}n.directiveName="unsafeSVG",n.resultType=2;const l=s(n)},249:(t,e,i)=>{i.r(e),i.d(e,{CSSResult:()=>n,LitElement:()=>x,ReactiveElement:()=>b,UpdatingElement:()=>A,_Σ:()=>s.Vm,_Φ:()=>$,adoptStyles:()=>c,css:()=>h,defaultConverter:()=>y,getCompatibleStyle:()=>d,html:()=>s.dy,noChange:()=>s.Jb,notEqual:()=>m,nothing:()=>s.Ld,render:()=>s.sY,supportsAdoptingStyleSheets:()=>r,svg:()=>s.YP,unsafeCSS:()=>l});var s=i(816);const r=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol();class n{constructor(t,e){if(e!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return r&&void 0===this.t&&(this.t=new CSSStyleSheet,this.t.replaceSync(this.cssText)),this.t}toString(){return this.cssText}}const l=t=>new n(t+"",o),a=new Map,h=(t,...e)=>{const i=e.reduce(((e,i,s)=>e+(t=>{if(t instanceof n)return t.cssText;if("number"==typeof t)return t;throw Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(i)+t[s+1]),t[0]);let s=a.get(i);return void 0===s&&a.set(i,s=new n(i,o)),s},c=(t,e)=>{r?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const i=document.createElement("style");i.textContent=e.cssText,t.appendChild(i)}))},d=r?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return l(e)})(t):t;var u,p,v,f;const y={toAttribute(t,e){switch(e){case Boolean:t=t?"":null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},m=(t,e)=>e!==t&&(e==e||t==t),g={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:m};class b extends HTMLElement{constructor(){super(),this.Πi=new Map,this.Πo=void 0,this.Πl=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this.Πh=null,this.u()}static addInitializer(t){var e;null!==(e=this.v)&&void 0!==e||(this.v=[]),this.v.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const s=this.Πp(i,e);void 0!==s&&(this.Πm.set(s,i),t.push(s))})),t}static createProperty(t,e=g){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,s=this.getPropertyDescriptor(t,i,e);void 0!==s&&Object.defineProperty(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(s){const r=this[t];this[e]=s,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||g}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this.Πm=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(d(t))}else void 0!==t&&e.push(d(t));return e}static Πp(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this.Πg=new Promise((t=>this.enableUpdating=t)),this.L=new Map,this.Π_(),this.requestUpdate(),null===(t=this.constructor.v)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this.ΠU)&&void 0!==e?e:this.ΠU=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this.ΠU)||void 0===e||e.splice(this.ΠU.indexOf(t)>>>0,1)}Π_(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this.Πi.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return c(e,this.constructor.elementStyles),e}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)})),this.Πl&&(this.Πl(),this.Πo=this.Πl=void 0)}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)})),this.Πo=new Promise((t=>this.Πl=t))}attributeChangedCallback(t,e,i){this.K(t,i)}Πj(t,e,i=g){var s,r;const o=this.constructor.Πp(t,i);if(void 0!==o&&!0===i.reflect){const n=(null!==(r=null===(s=i.converter)||void 0===s?void 0:s.toAttribute)&&void 0!==r?r:y.toAttribute)(e,i.type);this.Πh=t,null==n?this.removeAttribute(o):this.setAttribute(o,n),this.Πh=null}}K(t,e){var i,s,r;const o=this.constructor,n=o.Πm.get(t);if(void 0!==n&&this.Πh!==n){const t=o.getPropertyOptions(n),l=t.converter,a=null!==(r=null!==(s=null===(i=l)||void 0===i?void 0:i.fromAttribute)&&void 0!==s?s:"function"==typeof l?l:null)&&void 0!==r?r:y.fromAttribute;this.Πh=n,this[n]=a(e,t.type),this.Πh=null}}requestUpdate(t,e,i){let s=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||m)(this[t],e)?(this.L.has(t)||this.L.set(t,e),!0===i.reflect&&this.Πh!==t&&(void 0===this.Πk&&(this.Πk=new Map),this.Πk.set(t,i))):s=!1),!this.isUpdatePending&&s&&(this.Πg=this.Πq())}async Πq(){this.isUpdatePending=!0;try{for(await this.Πg;this.Πo;)await this.Πo}catch(t){Promise.reject(t)}const t=this.performUpdate();return null!=t&&await t,!this.isUpdatePending}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this.Πi&&(this.Πi.forEach(((t,e)=>this[e]=t)),this.Πi=void 0);let e=!1;const i=this.L;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this.Π$()}catch(t){throw e=!1,this.Π$(),t}e&&this.E(i)}willUpdate(t){}E(t){var e;null===(e=this.ΠU)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}Π$(){this.L=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this.Πg}shouldUpdate(t){return!0}update(t){void 0!==this.Πk&&(this.Πk.forEach(((t,e)=>this.Πj(e,this[e],t))),this.Πk=void 0),this.Π$()}updated(t){}firstUpdated(t){}}var S,w,k,E,C,P;b.finalized=!0,b.shadowRootOptions={mode:"open"},null===(p=(u=globalThis).reactiveElementPlatformSupport)||void 0===p||p.call(u,{ReactiveElement:b}),(null!==(v=(f=globalThis).reactiveElementVersions)&&void 0!==v?v:f.reactiveElementVersions=[]).push("1.0.0-rc.1");const A=b;(null!==(S=(P=globalThis).litElementVersions)&&void 0!==S?S:P.litElementVersions=[]).push("3.0.0-rc.1");class x extends b{constructor(){super(...arguments),this.renderOptions={host:this},this.Φt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const e=this.render();super.update(t),this.Φt=(0,s.sY)(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!1)}render(){return s.Jb}}x.finalized=!0,x._$litElement$=!0,null===(k=(w=globalThis).litElementHydrateSupport)||void 0===k||k.call(w,{LitElement:x}),null===(C=(E=globalThis).litElementPlatformSupport)||void 0===C||C.call(E,{LitElement:x});const $={K:(t,e,i)=>{t.K(e,i)},L:t=>t.L}},409:function(t,e,i){var s=this&&this.__decorate||function(t,e,i,s){var r,o=arguments.length,n=o<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,s);else for(var l=t.length-1;l>=0;l--)(r=t[l])&&(n=(o<3?r(n):o>3?r(e,i,n):r(e,i))||n);return o>3&&n&&Object.defineProperty(e,i,n),n};Object.defineProperty(e,"__esModule",{value:!0}),e.IconparkIconElement=void 0;const r=i(249),o=i(26),n=i(23),l={color:1,fill:1,stroke:1},a={STROKE:{trackAttr:"data-follow-stroke",rawAttr:"stroke"},FILL:{trackAttr:"data-follow-fill",rawAttr:"fill"}};class h extends r.LitElement{constructor(){super(...arguments),this.name="",this.identifyer="",this.size="1em"}get _width(){return this.width||this.size}get _height(){return this.height||this.size}get _stroke(){return this.stroke||this.color}get _fill(){return this.fill||this.color}get SVGConfig(){return(window.__iconpark__||{})[this.identifyer]||(window.__iconpark__||{})[this.name]||{viewBox:"0 0 0 0",content:""}}connectedCallback(){super.connectedCallback(),setTimeout((()=>{this.monkeyPatch("STROKE",!0),this.monkeyPatch("FILL",!0)}))}monkeyPatch(t,e){switch(t){case"STROKE":this.updateDOMByHand(this.strokeAppliedNodes,"STROKE",this._stroke,!!e);break;case"FILL":this.updateDOMByHand(this.fillAppliedNodes,"FILL",this._fill,!!e)}}updateDOMByHand(t,e,i,s){!i&&s||t&&t.forEach((t=>{i&&i===t.getAttribute(a[e].rawAttr)||t.setAttribute(a[e].rawAttr,i||t.getAttribute(a[e].trackAttr))}))}attributeChangedCallback(t,e,i){super.attributeChangedCallback(t,e,i),"name"===t||"identifyer"===t?setTimeout((()=>{this.monkeyPatch("STROKE"),this.monkeyPatch("FILL")})):l[t]&&(this.monkeyPatch("STROKE"),this.monkeyPatch("FILL"))}render(){return r.svg`${n.unsafeSVG(this.SVGConfig.content)}`}}h.styles=r.css`:host {display: inline-flex; align-items: center; justify-content: center;} :host([spin]) svg {animation: iconpark-spin 1s infinite linear;} :host([spin][rtl]) svg {animation: iconpark-spin-rtl 1s infinite linear;} :host([rtl]) svg {transform: scaleX(-1);} @keyframes iconpark-spin {0% { -webkit-transform: rotate(0); transform: rotate(0);} 100% {-webkit-transform: rotate(360deg); transform: rotate(360deg);}} @keyframes iconpark-spin-rtl {0% {-webkit-transform: scaleX(-1) rotate(0); transform: scaleX(-1) rotate(0);} 100% {-webkit-transform: scaleX(-1) rotate(360deg); transform: scaleX(-1) rotate(360deg);}}`,s([o.property({reflect:!0})],h.prototype,"name",void 0),s([o.property({reflect:!0,attribute:"icon-id"})],h.prototype,"identifyer",void 0),s([o.property({reflect:!0})],h.prototype,"color",void 0),s([o.property({reflect:!0})],h.prototype,"stroke",void 0),s([o.property({reflect:!0})],h.prototype,"fill",void 0),s([o.property({reflect:!0})],h.prototype,"size",void 0),s([o.property({reflect:!0})],h.prototype,"width",void 0),s([o.property({reflect:!0})],h.prototype,"height",void 0),s([o.queryAll(`[${a.STROKE.trackAttr}]`)],h.prototype,"strokeAppliedNodes",void 0),s([o.queryAll(`[${a.FILL.trackAttr}]`)],h.prototype,"fillAppliedNodes",void 0),e.IconparkIconElement=h,customElements.get("iconpark-icon")||customElements.define("iconpark-icon",h)}},e={};function i(s){var r=e[s];if(void 0!==r)return r.exports;var o=e[s]={exports:{}};return t[s].call(o.exports,o,o.exports,i),o.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(409)})(); - \ No newline at end of file diff --git a/frontend/packages/businessEntry/public/iconpark_eolink.js b/frontend/packages/businessEntry/public/iconpark_eolink.js deleted file mode 100644 index 8cc587d7..00000000 --- a/frontend/packages/businessEntry/public/iconpark_eolink.js +++ /dev/null @@ -1 +0,0 @@ -(function(){window.__iconpark__=window.__iconpark__||{};var obj=JSON.parse("{\"647367\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"684408\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"684409\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"684411\":{\"viewBox\":\"0 0 119.19 102.5\",\"content\":\"\"},\"684412\":{\"viewBox\":\"0 0 108.55 93.99\",\"fill\":\"currentColor\",\"content\":\"\"},\"684413\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"684414\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"686740\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686741\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686742\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686743\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686744\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686745\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686746\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686747\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686748\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686749\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686750\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686751\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686752\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686753\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686754\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"686993\":{\"viewBox\":\"0 0 38.22 22.18\",\"fill\":\"currentColor\",\"content\":\"\"},\"687741\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"687742\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"691262\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"691537\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"691538\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"691806\":{\"viewBox\":\"0 0 194 194\",\"content\":\"\"},\"695738\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695739\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695740\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695741\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695742\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695743\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695746\":{\"viewBox\":\"0 0 1185 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695747\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695748\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695750\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695751\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695752\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695754\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695755\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695756\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"695758\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695759\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695760\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695761\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695762\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695763\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695764\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695801\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695802\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695803\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695804\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695805\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695806\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695807\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695810\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695811\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695812\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695817\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695818\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695819\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695820\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695821\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695822\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695828\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695829\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695830\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695831\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695833\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695834\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695835\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695836\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695837\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695838\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695839\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695840\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695841\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695842\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695844\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695845\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695846\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695865\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695867\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695868\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695869\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695870\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695876\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695877\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695878\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695883\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695884\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695886\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695887\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695888\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695889\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695890\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695891\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695892\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695893\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695896\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695899\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695900\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695901\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695902\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695903\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695904\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695905\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695906\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695907\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695908\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695909\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695913\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695914\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695915\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695916\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695933\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695934\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695935\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695936\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695938\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695940\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695941\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695942\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695944\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695945\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695946\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695947\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695948\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695950\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695951\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695953\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695954\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695955\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695956\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695957\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695958\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695959\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695960\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695961\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695962\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695963\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695964\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695966\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695967\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695968\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695969\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695971\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695972\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695973\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695975\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695978\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695979\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695980\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695981\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695982\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695984\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695985\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695986\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695987\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695988\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695990\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695993\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695995\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695997\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"695999\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696002\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696003\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696004\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696005\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696007\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696009\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696010\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696011\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696012\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696013\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696014\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696015\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696016\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696017\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696018\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696019\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696020\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696021\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696022\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696023\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696024\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696025\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696027\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696028\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696029\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696030\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696031\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696032\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696033\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696034\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696035\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696036\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696037\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696038\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696039\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696040\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696041\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696042\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696043\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696044\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696045\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696046\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696048\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696049\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696660\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"696661\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"744163\":{\"viewBox\":\"0 0 1024 1024\",\"fill\":\"currentColor\",\"content\":\"\"},\"744173\":{\"viewBox\":\"0 0 128 128\",\"fill\":\"none\",\"content\":\"\"},\"744175\":{\"viewBox\":\"0 0 128 128\",\"fill\":\"none\",\"content\":\"\"},\"750656\":{\"viewBox\":\"0 0 61 61\",\"fill\":\"none\",\"content\":\"\"},\"752737\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"756392\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757321\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757499\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757504\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757518\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757519\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757520\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757521\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757616\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"757650\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"767277\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"767278\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"775549\":{\"viewBox\":\"0 0 18 14\",\"fill\":\"none\",\"content\":\"\"},\"779333\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"},\"779418\":{\"viewBox\":\"0 0 1024 1024\",\"content\":\"\"},\"779705\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"779706\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"},\"787702\":{\"viewBox\":\"0 0 1024 1024\",\"content\":\"\"},\"788577\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"802334\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"804269\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"804612\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"804614\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"806103\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"813707\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"815901\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"820089\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"826687\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"854318\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"855246\":{\"viewBox\":\"0 0 16 16\",\"fill\":\"none\",\"content\":\"\"},\"855247\":{\"viewBox\":\"0 0 16 16\",\"fill\":\"none\",\"content\":\"\"},\"855248\":{\"viewBox\":\"0 0 16 16\",\"fill\":\"none\",\"content\":\"\"},\"855927\":{\"viewBox\":\"0 0 83 20\",\"fill\":\"none\",\"content\":\"\"},\"855928\":{\"viewBox\":\"0 0 68 24\",\"fill\":\"none\",\"content\":\"\"},\"855929\":{\"viewBox\":\"0 0 66 24\",\"fill\":\"none\",\"content\":\"\"},\"855938\":{\"viewBox\":\"0 0 198 72\",\"fill\":\"none\",\"content\":\"\"},\"857931\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"857985\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"861388\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"876705\":{\"viewBox\":\"0 0 16 16\",\"fill\":\"none\",\"content\":\"\"},\"884011\":{\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"content\":\"\"},\"885387\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"897026\":{\"viewBox\":\"0 0 250 250\",\"fill\":\"none\",\"content\":\"\"},\"915485\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"929257\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"932197\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"949128\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"970590\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"973801\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"985435\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1002903\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"content\":\"\"},\"1021623\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1021686\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1035721\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1035737\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1037074\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1037815\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1037816\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1037817\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1039918\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1042170\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"},\"1042171\":{\"viewBox\":\"0 0 48 48\",\"fill\":\"none\",\"content\":\"\"}}");for(var _k in obj){window.__iconpark__[_k] = obj[_k]};var nm={"round-fill":647367,"apinto-pro-icon":684408,"apinto-icon":684409,"apinto-pro":684411,"apinto":684412,"check-circle":684413,"apispace":684414,"auto-generate-api":686740,"compare-api":686741,"multi-protocal":686742,"read-good":686743,"richdoc":686744,"mockapi":686745,"script-support":686746,"diy-test":686747,"send":686748,"stereo-perspective":686749,"automatic-robot":686750,"switch-env":686751,"flash":686752,"chart-pie":686753,"date-drive":686754,"apistudio":686993,"postcat-icon":687741,"postcat":687742,"apistudio-icon":691262,"update-rotation":691537,"page":691538,"apispace-icon":691806,"avatar":695738,"people":695739,"people-minus":695740,"people-plus":695741,"peoples":695742,"user-business":695743,"folder-close-fill":695746,"windows":695747,"github":695748,"qq":695750,"browser-chrome":695751,"linux":695752,"edge":695754,"wechat":695755,"browser":695756,"gitlab":695758,"apple":695759,"alipay":695760,"facebook":695761,"twitter":695762,"paypal":695763,"new-lark":695764,"delete":695801,"return":695802,"search":695803,"import":695804,"export":695805,"add":695806,"add-child":695807,"file-addition":695810,"add-circle":695811,"minus":695812,"close":695817,"close-small":695818,"check-small":695819,"check":695820,"code-terminal":695821,"code":695822,"preview-open":695828,"preview-close":695829,"folder-close":695830,"folder-open":695831,"upload":695833,"download":695834,"copy":695835,"upload-file":695836,"compare":695837,"edit":695838,"share":695839,"share-all":695840,"share-url-fill":695841,"share-url":695842,"back":695844,"back-fill":695845,"share-fill":695846,"sort":695865,"filter":695867,"reduce":695868,"done-all":695869,"full-selection":695870,"right-bar":695876,"left-bar":695877,"direction-adjustment":695878,"down-small":695883,"left-small":695884,"right-small":695886,"right-one":695887,"right":695888,"up":695889,"up-one":695890,"up-small":695891,"up-two":695892,"down-two":695893,"enter":695896,"down":695899,"left":695900,"down-one":695901,"left-two":695902,"right-two":695903,"left-one":695904,"more":695905,"expand-left":695906,"expand-right":695907,"column":695908,"center-alignment":695909,"list-add":695913,"sort-amount-down":695914,"sort-amount-up":695915,"list":695916,"remind":695933,"close-remind":695934,"api":695935,"rocket":695936,"monitor":695938,"robot":695940,"plan":695941,"application":695942,"chart-proportion":695944,"data":695945,"chart-line":695946,"pie-10":695947,"pie":695948,"chart-bubble":695950,"cube":695951,"application-menu":695953,"crown":695954,"crown-fill":695955,"market":695956,"file-word":695957,"file-excel":695958,"hashtag-key":695959,"file-hash":695960,"refresh":695961,"order":695962,"command":695963,"branch":695964,"page-template":695966,"smart-optimization":695967,"assembly-line":695968,"stopwatch":695969,"checklist":695971,"menu-fold":695972,"menu-unfold":695973,"alarm":695975,"protection":695978,"caution":695979,"openapi":695980,"webhook":695981,"holding-hands":695982,"support":695984,"agreement":695985,"community":695986,"roadmap":695987,"family-7knl2ae1":695988,"smiling-face":695990,"play-fill":695993,"play":695995,"pause":695997,"magic":695999,"whole-site-accelerator":696002,"link-cloud-faild":696003,"link-cloud-sucess":696004,"translate":696005,"funds":696007,"unhappy-face":696009,"message":696010,"connection-arrow":696011,"loading":696012,"fork":696013,"quote":696014,"headset":696015,"attention":696016,"theme":696017,"keyboard":696018,"briefcase":696019,"star":696020,"star-7knmka28":696021,"protect":696022,"finance":696023,"setting":696024,"link":696025,"undo":696027,"inbox-success":696028,"home":696029,"local":696030,"laptop":696031,"view-list":696032,"lock":696033,"unlock":696034,"lightning":696035,"file-text":696036,"cooperative-handshake":696037,"navigation":696038,"view-grid-detail":696039,"help":696040,"history":696041,"logout-7knnioon":696042,"chinese":696043,"calendar":696044,"play-cycle":696045,"world":696046,"plugins":696048,"link-cloud":696049,"book":696660,"table-report":696661,"qiyeweixin":744163,"Oauth":744173,"dingding":744175,"eolink":750656,"tool":752737,"category-management":756392,"folder-code-one":757321,"link-three-8ah7lifn":757499,"download-two-8ah85008":757504,"quanjusuoxiao1":757518,"quanjufangda21":757519,"quanjusuoxiao211":757520,"quanjufangda1":757521,"wenjianshezhi":757616,"key":757650,"zidingyijiaoben":767277,"tiqubianliang":767278,"mock":775549,"tongzhishezhi":779333,"csdn":779418,"ceshibaogao":779705,"biangengtongzhi":779706,"icon-api":787702,"youjian":788577,"pushpin":802334,"announcement":804269,"collapse-text-input":804612,"zhankai":804614,"replay-music":806103,"download-web":813707,"permissions":815901,"file-editing":820089,"wallet":826687,"file-focus":854318,"pingpu-9a913n0n":855246,"zuoyoufenping-9a913n1f":855247,"shangxiafenping-9a913n1i":855248,"Paypal11":855927,"zhifubaozhifu1":855928,"weixinzhifu11":855929,"weixinzhifu":855938,"update-rotation-9and40f5":857931,"terminal":857985,"switch":861388,"zhinengrucan":876705,"biaoqian-banbenleixinzeng":884011,"book-open":885387,"morentouxiang-2":897026,"xiajia":915485,"drag":929257,"new-up":932197,"rss":949128,"yewuchangjing":970590,"newlybuild":973801,"bianji":985435,"jiekoushouquan":1002903,"interfacefenzutubiao":1021623,"yidong":1021686,"link-one":1035721,"canshugouzaoqi":1035737,"bianliang":1037074,"tars":1037815,"if":1037816,"tars-2":1037817,"yingyongguanxi":1039918,"save-one":1042170,"save":1042171};for(var _i in nm){window.__iconpark__[_i] = obj[nm[_i]]}})();"object"!=typeof globalThis&&(Object.prototype.__defineGetter__("__magic__",function(){return this}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__);(()=>{"use strict";var t={816:(t,e,i)=>{var s,r,o,n;i.d(e,{Vm:()=>z,dy:()=>P,Jb:()=>x,Ld:()=>$,sY:()=>T,YP:()=>A});const l=globalThis.trustedTypes,a=l?l.createPolicy("lit-html",{createHTML:t=>t}):void 0,h=`lit$${(Math.random()+"").slice(9)}$`,c="?"+h,d=`<${c}>`,u=document,p=(t="")=>u.createComment(t),v=t=>null===t||"object"!=typeof t&&"function"!=typeof t,f=Array.isArray,y=t=>{var e;return f(t)||"function"==typeof(null===(e=t)||void 0===e?void 0:e[Symbol.iterator])},m=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,g=/-->/g,b=/>/g,S=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,w=/'/g,k=/"/g,E=/^(?:script|style|textarea)$/i,C=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),P=C(1),A=C(2),x=Symbol.for("lit-noChange"),$=Symbol.for("lit-nothing"),O=new WeakMap,T=(t,e,i)=>{var s,r;const o=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:e;let n=o._$litPart$;if(void 0===n){const t=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;o._$litPart$=n=new H(e.insertBefore(p(),t),t,void 0,i)}return n.I(t),n},R=u.createTreeWalker(u,129,null,!1),_=(t,e)=>{const i=t.length-1,s=[];let r,o=2===e?"":"",n=m;for(let e=0;e"===a[0]?(n=null!=r?r:m,c=-1):void 0===a[1]?c=-2:(c=n.lastIndex-a[2].length,l=a[1],n=void 0===a[3]?S:'"'===a[3]?k:w):n===k||n===w?n=S:n===g||n===b?n=m:(n=S,r=void 0);const p=n===S&&t[e+1].startsWith("/>")?" ":"";o+=n===m?i+d:c>=0?(s.push(l),i.slice(0,c)+"$lit$"+i.slice(c)+h+p):i+h+(-2===c?(s.push(void 0),e):p)}const l=o+(t[i]||"")+(2===e?"":"");return[void 0!==a?a.createHTML(l):l,s]};class N{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let r=0,o=0;const n=t.length-1,a=this.parts,[d,u]=_(t,e);if(this.el=N.createElement(d,i),R.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(s=R.nextNode())&&a.length0){s.textContent=l?l.emptyScript:"";for(let i=0;i2||""!==i[0]||""!==i[1]?(this.H=Array(i.length-1).fill($),this.strings=i):this.H=$}get tagName(){return this.element.tagName}I(t,e=this,i,s){const r=this.strings;let o=!1;if(void 0===r)t=U(this,t,e,0),o=!v(t)||t!==this.H&&t!==x,o&&(this.H=t);else{const s=t;let n,l;for(t=r[0],n=0;n{i.r(e),i.d(e,{customElement:()=>s,eventOptions:()=>a,property:()=>o,query:()=>h,queryAll:()=>c,queryAssignedNodes:()=>v,queryAsync:()=>d,state:()=>n});const s=t=>e=>"function"==typeof e?((t,e)=>(window.customElements.define(t,e),e))(t,e):((t,e)=>{const{kind:i,elements:s}=e;return{kind:i,elements:s,finisher(e){window.customElements.define(t,e)}}})(t,e),r=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function o(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):r(t,e)}function n(t){return o({...t,state:!0,attribute:!1})}const l=({finisher:t,descriptor:e})=>(i,s)=>{var r;if(void 0===s){const s=null!==(r=i.originalKey)&&void 0!==r?r:i.key,o=null!=e?{kind:"method",placement:"prototype",key:s,descriptor:e(i.key)}:{...i,key:s};return null!=t&&(o.finisher=function(e){t(e,s)}),o}{const r=i.constructor;void 0!==e&&Object.defineProperty(i,s,e(s)),null==t||t(r,s)}};function a(t){return l({finisher:(e,i)=>{Object.assign(e.prototype[i],t)}})}function h(t,e){return l({descriptor:i=>{const s={get(){var e;return null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof i?Symbol():"__"+i;s.get=function(){var i;return void 0===this[e]&&(this[e]=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t)),this[e]}}return s}})}function c(t){return l({descriptor:e=>({get(){var e;return null===(e=this.renderRoot)||void 0===e?void 0:e.querySelectorAll(t)},enumerable:!0,configurable:!0})})}function d(t){return l({descriptor:e=>({async get(){var e;return await this.updateComplete,null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t)},enumerable:!0,configurable:!0})})}const u=Element.prototype,p=u.msMatchesSelector||u.webkitMatchesSelector;function v(t="",e=!1,i=""){return l({descriptor:s=>({get(){var s,r;const o="slot"+(t?`[name=${t}]`:":not([name])");let n=null===(r=null===(s=this.renderRoot)||void 0===s?void 0:s.querySelector(o))||void 0===r?void 0:r.assignedNodes({flatten:e});return n&&i&&(n=n.filter((t=>t.nodeType===Node.ELEMENT_NODE&&(t.matches?t.matches(i):p.call(t,i))))),n},enumerable:!0,configurable:!0})})}},23:(t,e,i)=>{i.r(e),i.d(e,{unsafeSVG:()=>l});const s=t=>(...e)=>({_$litDirective$:t,values:e});var r=i(816);class o extends class{constructor(t){}T(t,e,i){this.Σdt=t,this.M=e,this.Σct=i}S(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}{constructor(t){if(super(t),this.vt=r.Ld,2!==t.type)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===r.Ld)return this.Vt=void 0,this.vt=t;if(t===r.Jb)return t;if("string"!=typeof t)throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.vt)return this.Vt;this.vt=t;const e=[t];return e.raw=e,this.Vt={_$litType$:this.constructor.resultType,strings:e,values:[]}}}o.directiveName="unsafeHTML",o.resultType=1,s(o);class n extends o{}n.directiveName="unsafeSVG",n.resultType=2;const l=s(n)},249:(t,e,i)=>{i.r(e),i.d(e,{CSSResult:()=>n,LitElement:()=>x,ReactiveElement:()=>b,UpdatingElement:()=>A,_Σ:()=>s.Vm,_Φ:()=>$,adoptStyles:()=>c,css:()=>h,defaultConverter:()=>y,getCompatibleStyle:()=>d,html:()=>s.dy,noChange:()=>s.Jb,notEqual:()=>m,nothing:()=>s.Ld,render:()=>s.sY,supportsAdoptingStyleSheets:()=>r,svg:()=>s.YP,unsafeCSS:()=>l});var s=i(816);const r=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol();class n{constructor(t,e){if(e!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return r&&void 0===this.t&&(this.t=new CSSStyleSheet,this.t.replaceSync(this.cssText)),this.t}toString(){return this.cssText}}const l=t=>new n(t+"",o),a=new Map,h=(t,...e)=>{const i=e.reduce(((e,i,s)=>e+(t=>{if(t instanceof n)return t.cssText;if("number"==typeof t)return t;throw Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(i)+t[s+1]),t[0]);let s=a.get(i);return void 0===s&&a.set(i,s=new n(i,o)),s},c=(t,e)=>{r?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const i=document.createElement("style");i.textContent=e.cssText,t.appendChild(i)}))},d=r?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return l(e)})(t):t;var u,p,v,f;const y={toAttribute(t,e){switch(e){case Boolean:t=t?"":null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},m=(t,e)=>e!==t&&(e==e||t==t),g={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:m};class b extends HTMLElement{constructor(){super(),this.Πi=new Map,this.Πo=void 0,this.Πl=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this.Πh=null,this.u()}static addInitializer(t){var e;null!==(e=this.v)&&void 0!==e||(this.v=[]),this.v.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const s=this.Πp(i,e);void 0!==s&&(this.Πm.set(s,i),t.push(s))})),t}static createProperty(t,e=g){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,s=this.getPropertyDescriptor(t,i,e);void 0!==s&&Object.defineProperty(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(s){const r=this[t];this[e]=s,this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||g}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this.Πm=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(d(t))}else void 0!==t&&e.push(d(t));return e}static Πp(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this.Πg=new Promise((t=>this.enableUpdating=t)),this.L=new Map,this.Π_(),this.requestUpdate(),null===(t=this.constructor.v)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this.ΠU)&&void 0!==e?e:this.ΠU=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this.ΠU)||void 0===e||e.splice(this.ΠU.indexOf(t)>>>0,1)}Π_(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this.Πi.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return c(e,this.constructor.elementStyles),e}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)})),this.Πl&&(this.Πl(),this.Πo=this.Πl=void 0)}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)})),this.Πo=new Promise((t=>this.Πl=t))}attributeChangedCallback(t,e,i){this.K(t,i)}Πj(t,e,i=g){var s,r;const o=this.constructor.Πp(t,i);if(void 0!==o&&!0===i.reflect){const n=(null!==(r=null===(s=i.converter)||void 0===s?void 0:s.toAttribute)&&void 0!==r?r:y.toAttribute)(e,i.type);this.Πh=t,null==n?this.removeAttribute(o):this.setAttribute(o,n),this.Πh=null}}K(t,e){var i,s,r;const o=this.constructor,n=o.Πm.get(t);if(void 0!==n&&this.Πh!==n){const t=o.getPropertyOptions(n),l=t.converter,a=null!==(r=null!==(s=null===(i=l)||void 0===i?void 0:i.fromAttribute)&&void 0!==s?s:"function"==typeof l?l:null)&&void 0!==r?r:y.fromAttribute;this.Πh=n,this[n]=a(e,t.type),this.Πh=null}}requestUpdate(t,e,i){let s=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||m)(this[t],e)?(this.L.has(t)||this.L.set(t,e),!0===i.reflect&&this.Πh!==t&&(void 0===this.Πk&&(this.Πk=new Map),this.Πk.set(t,i))):s=!1),!this.isUpdatePending&&s&&(this.Πg=this.Πq())}async Πq(){this.isUpdatePending=!0;try{for(await this.Πg;this.Πo;)await this.Πo}catch(t){Promise.reject(t)}const t=this.performUpdate();return null!=t&&await t,!this.isUpdatePending}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this.Πi&&(this.Πi.forEach(((t,e)=>this[e]=t)),this.Πi=void 0);let e=!1;const i=this.L;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this.Π$()}catch(t){throw e=!1,this.Π$(),t}e&&this.E(i)}willUpdate(t){}E(t){var e;null===(e=this.ΠU)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}Π$(){this.L=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this.Πg}shouldUpdate(t){return!0}update(t){void 0!==this.Πk&&(this.Πk.forEach(((t,e)=>this.Πj(e,this[e],t))),this.Πk=void 0),this.Π$()}updated(t){}firstUpdated(t){}}var S,w,k,E,C,P;b.finalized=!0,b.shadowRootOptions={mode:"open"},null===(p=(u=globalThis).reactiveElementPlatformSupport)||void 0===p||p.call(u,{ReactiveElement:b}),(null!==(v=(f=globalThis).reactiveElementVersions)&&void 0!==v?v:f.reactiveElementVersions=[]).push("1.0.0-rc.1");const A=b;(null!==(S=(P=globalThis).litElementVersions)&&void 0!==S?S:P.litElementVersions=[]).push("3.0.0-rc.1");class x extends b{constructor(){super(...arguments),this.renderOptions={host:this},this.Φt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const e=this.render();super.update(t),this.Φt=(0,s.sY)(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!1)}render(){return s.Jb}}x.finalized=!0,x._$litElement$=!0,null===(k=(w=globalThis).litElementHydrateSupport)||void 0===k||k.call(w,{LitElement:x}),null===(C=(E=globalThis).litElementPlatformSupport)||void 0===C||C.call(E,{LitElement:x});const $={K:(t,e,i)=>{t.K(e,i)},L:t=>t.L}},409:function(t,e,i){var s=this&&this.__decorate||function(t,e,i,s){var r,o=arguments.length,n=o<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,s);else for(var l=t.length-1;l>=0;l--)(r=t[l])&&(n=(o<3?r(n):o>3?r(e,i,n):r(e,i))||n);return o>3&&n&&Object.defineProperty(e,i,n),n};Object.defineProperty(e,"__esModule",{value:!0}),e.IconparkIconElement=void 0;const r=i(249),o=i(26),n=i(23),l={color:1,fill:1,stroke:1},a={STROKE:{trackAttr:"data-follow-stroke",rawAttr:"stroke"},FILL:{trackAttr:"data-follow-fill",rawAttr:"fill"}};class h extends r.LitElement{constructor(){super(...arguments),this.name="",this.identifyer="",this.size="1em"}get _width(){return this.width||this.size}get _height(){return this.height||this.size}get _stroke(){return this.stroke||this.color}get _fill(){return this.fill||this.color}get SVGConfig(){return(window.__iconpark__||{})[this.identifyer]||(window.__iconpark__||{})[this.name]||{viewBox:"0 0 0 0",content:""}}connectedCallback(){super.connectedCallback(),setTimeout((()=>{this.monkeyPatch("STROKE",!0),this.monkeyPatch("FILL",!0)}))}monkeyPatch(t,e){switch(t){case"STROKE":this.updateDOMByHand(this.strokeAppliedNodes,"STROKE",this._stroke,!!e);break;case"FILL":this.updateDOMByHand(this.fillAppliedNodes,"FILL",this._fill,!!e)}}updateDOMByHand(t,e,i,s){!i&&s||t&&t.forEach((t=>{i&&i===t.getAttribute(a[e].rawAttr)||t.setAttribute(a[e].rawAttr,i||t.getAttribute(a[e].trackAttr))}))}attributeChangedCallback(t,e,i){super.attributeChangedCallback(t,e,i),"name"===t||"identifyer"===t?setTimeout((()=>{this.monkeyPatch("STROKE"),this.monkeyPatch("FILL")})):l[t]&&(this.monkeyPatch("STROKE"),this.monkeyPatch("FILL"))}render(){return r.svg`${n.unsafeSVG(this.SVGConfig.content)}`}}h.styles=r.css`:host {display: inline-flex; align-items: center; justify-content: center;} :host([spin]) svg {animation: iconpark-spin 1s infinite linear;} :host([spin][rtl]) svg {animation: iconpark-spin-rtl 1s infinite linear;} :host([rtl]) svg {transform: scaleX(-1);} @keyframes iconpark-spin {0% { -webkit-transform: rotate(0); transform: rotate(0);} 100% {-webkit-transform: rotate(360deg); transform: rotate(360deg);}} @keyframes iconpark-spin-rtl {0% {-webkit-transform: scaleX(-1) rotate(0); transform: scaleX(-1) rotate(0);} 100% {-webkit-transform: scaleX(-1) rotate(360deg); transform: scaleX(-1) rotate(360deg);}}`,s([o.property({reflect:!0})],h.prototype,"name",void 0),s([o.property({reflect:!0,attribute:"icon-id"})],h.prototype,"identifyer",void 0),s([o.property({reflect:!0})],h.prototype,"color",void 0),s([o.property({reflect:!0})],h.prototype,"stroke",void 0),s([o.property({reflect:!0})],h.prototype,"fill",void 0),s([o.property({reflect:!0})],h.prototype,"size",void 0),s([o.property({reflect:!0})],h.prototype,"width",void 0),s([o.property({reflect:!0})],h.prototype,"height",void 0),s([o.queryAll(`[${a.STROKE.trackAttr}]`)],h.prototype,"strokeAppliedNodes",void 0),s([o.queryAll(`[${a.FILL.trackAttr}]`)],h.prototype,"fillAppliedNodes",void 0),e.IconparkIconElement=h,customElements.get("iconpark-icon")||customElements.define("iconpark-icon",h)}},e={};function i(s){var r=e[s];if(void 0!==r)return r.exports;var o=e[s]={exports:{}};return t[s].call(o.exports,o,o.exports,i),o.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(409)})(); \ No newline at end of file diff --git a/frontend/packages/businessEntry/public/vite.svg b/frontend/packages/businessEntry/public/vite.svg deleted file mode 100644 index e7b8dfb1..00000000 --- a/frontend/packages/businessEntry/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/packages/businessEntry/src/App.tsx b/frontend/packages/businessEntry/src/App.tsx deleted file mode 100644 index 52dac839..00000000 --- a/frontend/packages/businessEntry/src/App.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import '@core/App.css' -import { ConfigProvider } from 'antd'; -import RenderRoutes from '@businessEntry/components/aoplatform/RenderRoutes'; -import {BreadcrumbProvider} from "@common/contexts/BreadcrumbContext.tsx"; -import { StyleProvider } from '@ant-design/cssinjs'; -import zhCN from 'antd/locale/zh_CN'; -import useInitializeMonaco from "@common/hooks/useInitializeMonaco"; -import ThemeSwitcher from '@common/components/aoplatform/ThemeSwitcher' - -const antdComponentThemeToken = { - token: { - // Seed Token,影响范围大 - colorPrimary: '#3D46F2', - colorLink:'#3D46F2', - colorBorder:'#ededed', - colorText:'#333', - borderRadius: 4, - // 派生变量,影响范围小 - colorBgContainer: '#fff', - colorPrimaryBg:'#EBEEF2', - colorTextQuaternary:'#BBB', - colorTextTertiary:'#999' - }, - components:{ - // 派生变量,影响范围小 - Input:{ - activeShadow:'none' - }, - Select:{ - activeShadow:'none' - }, - Checkbox:{ - activeShadow:'none' - }, - Cascader:{ - activeShadow:'none', - optionSelectedBg:'#EBEEF2', - optionHoverBg:'#EBEEF2' - }, - Layout: { - bodyBg: '#17163E', - headerBg: 'transparent', - headerColor: '#333', - headerPadding: '10 20px', - lightSiderBg: 'transparent', - siderBg: 'transparent', - }, - Breadcrumb:{ - itemColor:'#666', - linkColor:'#666', - lastItemColor:'#333', - }, - Table:{ - headerBorderRadius:0, - headerSplitColor:'#ededed', - borderColor:'#ededed', - cellPaddingBlockMD:'10px', - cellPaddingInlineMD:'12px', - cellPaddingBlockSM:'8px', - cellPaddingInlineSM:'12px', - headerFilterHoverBg:'#EBEEF2', - headerSortActiveBg:'#F7F8FA', - headerSortHoverBg:'#F7F8FA', - fixedHeaderSortActiveBg:'#F7F8FA', - headerBg:'#F7F8FA', - rowHoverBg:'#EBEEF2' - - }, - Segmented:{ - itemColor:'#333', - itemSelectedColor:'#333', - trackBg:'#f7f8fa', - trackPadding:0, - // itemHoverColor:'#EBEEF2', - itemActiveBg:'#EBEEF2', - itemHoverBg:'#EBEEF2', - itemSelectedBg:'#EBEEF2', - }, - Tree:{ - // titleHeight:30, - // fontSize:12, - directoryNodeSelectedBg:'#EBEEF2', - directoryNodeSelectedColor:'#333', - nodeSelectedBg:'#EBEEF2', - nodeHoverBg:'#EBEEF2' - }, - Collapse:{ - headerBg:'#f7f8fa', - headerPadding:"12px", - contentPadding:"0 10px 12px 10px" - }, - Button:{ - // paddingInline:8, - dangerShadow:'none', - defaultShadow:'none', - primaryShadow:'none' - }, - Tabs:{ - cardBg:'#EBEEF2', - cardHeight:42, - horizontalItemGutter:8, - horizontalItemPaddingSM:'12px 8px 8px 8px', - horizontalItemPadding:'12px 8px 8px 8px', - }, - Menu:{ - // itemBg:'#F7F8FA', - // subMenuItemBg:'#F7F8FA', - // itemMarginBlock:0, - // activeBarBorderWidth:0, - // itemSelectedColor:'#333', - // itemSelectedBg:'#EBEEF2', - // itemHoverBg:'#EBEEF2' - // itemHeight:'72px', - // darkItemBg:'transparent', - // itemBg:'transparent', - // itemSelectedBg:'transparent', - // darkItemSelectedBg:'transparent', - // subMenuItemBg:'transparent', - // itemActiveBg:'transparent', - // darkSubMenuItemBg:'transparent', - // activeBarHeight:'2px', - // activeBarBorderWidth:2 - }, - List:{ - itemPadding:'8px 0' - }, - Form:{ - itemMarginBottom:10, - - }, - Alert:{ - defaultPadding:'12px 16px' - }, - Tag:{ - defaultBg:"#f7f8fa" - }, - } -} - -function App() { - useInitializeMonaco() - - return ( - - - - - - - - - ); -} - -export default App diff --git a/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx b/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx deleted file mode 100644 index 709fd1b2..00000000 --- a/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx +++ /dev/null @@ -1,568 +0,0 @@ -import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; -import BasicLayout from '@common/components/aoplatform/BasicLayout'; -import {createElement, ReactElement,ReactNode,Suspense, useEffect, useState} from 'react'; -import {App, Skeleton} from "antd"; -import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx"; -import {FC} from 'react';import React from 'react'; -import usePluginLoader from '@common/hooks/pluginLoader.ts'; - -export type RouteConfig = { - path:string - component?:ReactElement - children?:(RouteConfig|false)[] - key:string - provider?:FC<{ children: ReactNode; }> - lazy?:unknown -} -export type RouterParams = { - teamId:string - apiId:string - serviceId:string - clusterId:string; - memberGroupId:string - userGroupId:string - pluginName:string - moduleId:string - accessType:'project'|'team'|'service' - categoryId:string - tagId:string - dashboardType:string - dashboardDetailId:string - topologyId:string - appId:string - roleType:string - roleId:string -} - -// const PUBLIC_ROUTES:RouteConfig[] = [ -// { -// path:'/', -// component:, -// key: 'root', -// }, -// { -// path:'/login', -// component:, -// key: 'login' -// }, -// { -// path:'/', -// component:, -// key: 'layout', -// children:[ -// { -// path:'guide/*', -// component:, -// key:'guide' -// }, -// { -// path:'team', -// component:, -// key: 'team', -// provider: TeamProvider, -// children:[ -// { -// path:'', -// key: 'teamList', -// component: -// }, -// { -// path:'list', -// key: 'teamList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamList.tsx')) -// }, -// { -// path:'inside/:teamId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamInsidePage.tsx')), -// key: 'teamInside', -// children:[ -// { -// path:'member', -// key: 'teamMember', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamInsideMember.tsx')), -// }, -// { -// path:'setting', -// key: 'teamSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamConfig.tsx')), -// }, -// ] -// } -// ] -// }, -// { -// path:'service', -// component:, -// key: 'restService', -// provider: SystemProvider, -// children:[ -// { -// path:'', -// key:'restServiceList', -// component: -// }, -// { -// path:'list', -// key: 'restServiceList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemList.tsx')), -// }, -// { -// path:'list/:teamId', -// key: 'restServiceList3', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemList.tsx')), -// }, -// { -// path:':teamId', -// component:, -// key: 'restServiceInside', -// children:[ -// { -// path:'inside/:serviceId', -// key: 'restServiceInside2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsidePage.tsx')), -// children:[ -// { -// path:'api', -// key: 'restServiceInsideApi', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideApiDocument.tsx')), -// }, -// { - -// path:'route/create', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterCreate')), -// }, -// { - -// path:'route/:routeId', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterCreate')), -// }, -// { -// path:'route', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterList')), -// }, -// { -// path:'upstream', -// key: 'restServiceInsideUpstream', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/upstream/SystemInsideUpstreamContent.tsx')), -// }, -// { -// path:'document', -// key: 'restServiceInsideDocument', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsideDocument.tsx')), -// }, -// { -// path:'subscriber', -// key: 'restServiceInsideSubscriber', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsideSubscriber.tsx')), -// children:[ - -// ] -// }, -// { -// path:'approval', -// key: 'restServiceInsideApproval', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApproval.tsx')), -// children:[ -// { -// path:'', -// key: 'restServiceInsideApprovalList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApprovalList.tsx')), -// }, -// { -// path:'*', -// key: 'restServiceInsideApprovalList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApprovalList.tsx')), -// } -// ] -// }, -// { -// path:'topology', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemTopology.tsx')), -// key: 'systemTopology', -// children:[ -// ] -// }, -// { -// path:'publish', -// key: 'systemPublish', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublish.tsx')), -// children:[ -// { -// path:'', -// key: 'systemPublishList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublishList.tsx')), -// }, -// { -// path:'*', -// key: 'systemPublishList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublishList.tsx')), -// } -// ] -// }, -// { -// path:'setting', -// key: 'systemConfig', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemConfig.tsx')), -// children:[ -// ] -// }, -// ] -// }, -// { -// path:'aiInside/:serviceId', -// component:, -// provider: AiServiceProvider, -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsidePage.tsx')), -// children:[ -// { -// path:'api', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideApiDocument')), -// }, -// { - -// path:'route/create', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterCreate')), -// }, -// { - -// path:'route/:routeId', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterCreate')), -// }, -// { -// path:'route', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterList')), -// }, -// { -// path:'document', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsideDocument.tsx')), -// }, -// { -// path:'subscriber', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsideSubscriber.tsx')), -// children:[ - -// ] -// }, -// { -// path:'approval', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApproval')), -// children:[ -// { -// path:'', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApprovalList')), -// }, -// { -// path:'*', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApprovalList')), -// } -// ] -// }, -// { -// path:'publish', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublish')), -// children:[ -// { -// path:'', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublishList')), -// }, -// { -// path:'*', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublishList')), -// } -// ] -// }, -// { -// path:'setting', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemConfig.tsx')), -// children:[ - -// ] -// }, -// ] -// } -// ] -// } -// ] -// }, -// { -// path:'datasourcing', -// key: 'dataSourcing', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideDashboardSetting.tsx')), -// }, -// { -// path:'cluster', -// key: 'cluster', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideCluster.tsx')), -// }, -// { -// path:'aisetting', -// key: 'aiSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiSetting/AiSettingList.tsx')), -// }, -// { -// path:'cert', -// key: 'cert', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideCert.tsx')), -// }, -// { -// path:'serviceHub', -// component:, -// key:'serviceHub', -// children:[ -// { -// path:'', -// key: 'serviceHubList', -// component: -// }, -// { -// path:'list', -// key:'serviceHubList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/ServiceHubList.tsx')), -// }, -// { -// path:'detail/:serviceId', -// key:'serviceHubDetail', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/ServiceHubDetail.tsx')), -// }] -// }, -// { -// path:'commonsetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/common/CommonPage.tsx')), -// key:uuidv4(), -// }, -// { -// path:'consumer', -// component:, -// provider:TenantManagementProvider, -// key:'tenantManagement', -// children:[ -// { -// path:'', -// key:'tenantManagementList', -// component: -// }, -// { -// path:':teamId/inside/:appId', -// key:'tenantManagementInside', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsidePage.tsx')), -// children:[ -// { -// path:'service', -// key:'tenantManagementInsideService', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsideService.tsx')), -// }, -// { -// path:'authorization', -// key:'tenantManagementInsideAuthorization', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsideAuth.tsx')), -// }, -// { -// path:'setting', -// key:'tenantManagementSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementAppSetting.tsx')), -// }, -// ] -// }, -// { -// path:'list', -// key:'serviceHubManagementList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ServiceHubManagement.tsx')), -// }, -// { -// path:'list/:teamId', -// key:'serviceHubManagementList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ServiceHubManagement.tsx')), -// }, -// ] -// }, -// { -// path:'member', -// key:'member', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberPage.tsx')), -// children:[ -// { -// path:'', -// key:'memberList', -// component: -// }, -// { -// path:'list', -// key:'memberList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberList.tsx')), -// }, -// { -// path:'list/:memberGroupId', -// key:'memberList3', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberList.tsx')), -// } -// ] -// }, -// { -// path:'role', -// key:'role', -// component:, -// children:[ -// { -// path: '', -// key: 'roleList', -// component: -// }, -// { -// path:'list', -// key:'roleList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleList.tsx')), -// },{ -// path:':roleType/config/:roleId', -// key:'roleConfig', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleConfig.tsx')), -// },{ -// path:':roleType/config', -// key:'roleConfig2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleConfig.tsx')), -// } -// ] -// }, -// { -// path:'analytics', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/Dashboard.tsx')), -// key:'analytics', -// children:[ -// { -// path:'total', -// key:'analytics2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/DashboardTotal.tsx')), -// }, -// ] -// }, -// { -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'intelligentPlugin' -// }, -// { -// path:'logsettings/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/logsettings/LogSettings.tsx')), -// key: 'logSettings', -// children:[{ -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'logSettings2' -// }] - -// }, -// APP_MODE ==='pro' && { -// path:'resourcesettings/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/resourcesettings/ResourceSettings.tsx')), -// key: 'resourceSettings', -// children:[{ -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'resourceSettings2' -// }] - -// }, -// { -// path:'userProfile/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/UserProfile.tsx')), -// key:'userProfile', -// children:[{ -// path:'changepsw', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/ChangePsw.tsx')), -// key:'changePsw' -// }] -// }, -// APP_MODE === 'pro' &&{ -// path:'openapi', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@openApi/pages/OpenApiList.tsx')), -// key:'openApi', -// }, -// { -// path:'systemrunning', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@systemRunning/pages/SystemRunning.tsx')), -// key:'systemRunning' -// }, -// ] -// } -// ] - -const RenderRoutes = ()=> { - const { loadPlugins } = usePluginLoader() - const [routeConfig , setRouteConfig] = useState([]) - useEffect(()=>{ - loadPlugins().then((res)=>{ - console.log('newRouteConfig',res) - setRouteConfig(res as RouteConfig[]) - }) - },[]) - - return ( - - - - {generateRoutes(routeConfig)} - - - - ) -} - -const generateRoutes = (routerConfig: RouteConfig[]) => { - return routerConfig?.map((route: RouteConfig) => { - let routeElement; - if (route.lazy) { - const LazyComponent = route.lazy as React.ExoticComponent; - - routeElement = ( - }> - {route.provider ? ( - createElement(route.provider, {}, ) - ) : ( - - )} - - ); - } else { - routeElement = route.provider ? ( - createElement(route.provider, {}, route.component) - ) : ( - route.component - ); - } - - return ( - - {route.children && generateRoutes(route.children as RouteConfig[])} - - ); - } - ) -} - -// 保护的路由组件 -export function ProtectedRoute() { - const {state} = useGlobalContext() - return state.isAuthenticated? : ; - } - -export default RenderRoutes \ No newline at end of file diff --git a/frontend/packages/businessEntry/src/consts/type.ts b/frontend/packages/businessEntry/src/consts/type.ts deleted file mode 100644 index 8282e1ca..00000000 --- a/frontend/packages/businessEntry/src/consts/type.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ReactElement,ReactNode,FC } from 'react'; - -export type RouteConfig = { - path:string - component?:ReactElement - children?:(RouteConfig|false)[] - key:string - provider?:FC<{ children: ReactNode; }> - lazy?:unknown -} - -export type RouterParams = { - teamId:string - apiId:string - serviceId:string - clusterId:string; - memberGroupId:string - userGroupId:string - pluginName:string - moduleId:string - accessType:'project'|'team'|'service' - categoryId:string - tagId:string - dashboardType:string - dashboardDetailId:string - topologyId:string - appId:string - roleType:string - roleId:string - routeId:string -} diff --git a/frontend/packages/businessEntry/src/main.tsx b/frontend/packages/businessEntry/src/main.tsx deleted file mode 100644 index cfb7d8ef..00000000 --- a/frontend/packages/businessEntry/src/main.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import {StrictMode} from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import '@core/index.css' -import {GlobalProvider} from "@common/contexts/GlobalStateContext.tsx"; - -async function initializeApp() { - try { - // 初始化行为 - // await fetchInitialConfig(); // 示例:获取初始配置 - - // 异步操作完成后,渲染React应用 - ReactDOM.createRoot(document.getElementById('root')!).render( - - - - - , - ); - } catch (error) { - console.error('Initialization failed:', error); - // 处理初始化失败的情况,比如渲染一个错误界面 - } -} - -// 执行初始化 -initializeApp(); \ No newline at end of file diff --git a/frontend/packages/businessEntry/src/utils/plugin.ts b/frontend/packages/businessEntry/src/utils/plugin.ts deleted file mode 100644 index 2988e6b8..00000000 --- a/frontend/packages/businessEntry/src/utils/plugin.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { RouteConfig } from '@businessEntry/components/aoplatform/RenderRoutes'; -import { routerMap } from '@businessEntry/consts/const'; -import { isFunction } from 'lodash-es' -// @ts-expect-error module cannot find -import { __federation_method_setRemote,__federation_method_getRemote,__federation_method_unwrapDefault } from 'virtual:__federation__'; - -interface RemoteModuleConfig{ - type:string - remoteEntry:string - exposedModule:string - remoteName:string -} - -export async function loadRemoteModule(remoteModuleConfig:RemoteModuleConfig){ - __federation_method_setRemote(remoteModuleConfig.remoteName, { - url: () => Promise.resolve(remoteModuleConfig.remoteEntry), - format: 'esm', - from: 'vite', - }); - - return await __federation_method_getRemote( - remoteModuleConfig.remoteName, - `./${remoteModuleConfig.exposedModule}` - ) -} - -export function generateRemoteModuleTemplate( - pluginName: string, - exposedModule: string, - pluginPath: string -):RemoteModuleConfig { - return { - type: 'module', - remoteEntry: pluginPath, - exposedModule: `./${exposedModule}`, - remoteName: pluginName - } -} - -/** 校验子应用导出的 生命周期 对象是否正确 */ -export function validateExportLifecycle(exports: unknown) { - const { bootstrap, mount, unmount } = exports ?? {} - return isFunction(bootstrap) && isFunction(mount) && isFunction(unmount) -} - - - -export const DEFAULT_LOCAL_PLUGIN_PATH = '/plugin-frontend/' -interface PluginRouterConfig { - path:string; - type:string; - expose?:string -} -interface PluginConfig { - name: string; - router: Array; - path?: string; - driver:string -} - -export interface CoreObj { - routerConfig: RouteConfig[]; - setExecuteList: (param:unknown[])=>void; - pluginLoader: PluginLoaderService; - pluginLifecycleGuard: PluginLifecycleGuard; - pluginProvider: PluginProviderService; - builtInPluginLoader: (name: string) => any; -} - -const defaultBuiltInPlugin:Array<{path:string, pathMatch?:'full' | 'prefix', componentName?:string, type?:string}> = [ - { path: '/', pathMatch: 'full', componentName: 'login' }, - { path: '/login', componentName: 'login' }, - { path: '/', componentName: 'basicLayout' }, - // { path: '**', componentName: 'redirectPage' } - -] - - -export const ApiparkPluginDriver:{[key:string]:{[key:string]:(coreObj?:CoreObj, pluginConfig?:PluginConfig)=>(CoreObj|undefined)}} = { - builtIn: { - // apinto主项目驱动,在core中自动调,不根据插件配置表 - default: (coreObj?:CoreObj) => { - if(!coreObj) return coreObj - const url = new URL(window.location.href) - const navHidden = url.searchParams.get('nav_hidden') || sessionStorage.getItem('nav_hidden') - if (navHidden === 'true') sessionStorage.setItem('nav_hidden', navHidden) - const routes = defaultBuiltInPlugin.filter(plugin =>navHidden === 'true' && plugin.componentName === 'basicLayout' ? routerMap.get('navHidden')!.component : routerMap.get(plugin.componentName || plugin.path) ).map(plugin => ( - { - path: plugin.path, - component: navHidden === 'true' && plugin.componentName === 'basicLayout' ? routerMap.get('navHidden')!.component : routerMap.get(plugin.componentName || plugin.path)?.component, - children: [], - key:plugin.componentName, - data: { - type: plugin.type || plugin.componentName || plugin.path - }, - pathMatch: plugin.pathMatch || 'prefix' - }) - ) - console.log(routes) - coreObj.routerConfig.push(...routes) - return coreObj - }, - component: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - for (const pluginRouter of pluginConfig.router) { - const routerToChanged:RouteConfig[] = pluginRouter.type === 'root' ? coreObj.routerConfig : coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] - routerMap.get(pluginConfig.name) && routerToChanged.unshift({...routerMap.get(pluginConfig.name)!, key:pluginConfig.name, path:pluginRouter.path}) - } - return coreObj - }, - module: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - for (const pluginRouter of pluginConfig.router) { - const routerToChanged:RouteConfig[] = pluginRouter.type === 'root' ? coreObj.routerConfig : coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] - routerMap.get(pluginRouter.name) && routerToChanged.unshift({...routerMap.get(pluginRouter.name)!, key:pluginRouter.name, path:pluginRouter.path}) - } - return coreObj - }, - httpApi: () => { - return undefined - } - }, - remote: { - normal: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - const routerToChanged:RouteConfig[] = coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] - const remoteRouter:RouteConfig[] = routerToChanged.find((item:RouteConfig) => item?.data?.['type'] === 'remotePlugin') as RouteConfig[] - if (!remoteRouter) { - routerMap.get('remote') && routerToChanged.unshift({ - ...routerMap.get('remote')!, key:'remote', path:'remote',type:'remotePlugin',children:[{ - path:':moduleName', - component: routerMap.get('remote')!.component} - ] - }) - } - return coreObj - } - }, - intelligent: { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - normal: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - if(['logsettings','resourcesettings'].indexOf(pluginConfig.name) !== -1){ - const routerToChanged:RouteConfig[] = coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] - const remoteRouter:RouteConfig[] = routerToChanged.find((item:RouteConfig) => item?.data?.['key'] === pluginConfig.name) as RouteConfig[] - if(!remoteRouter){ - routerMap.get(pluginConfig.name) && routerToChanged.unshift({...routerMap.get(pluginConfig.name)!, key:pluginConfig.name, path:pluginConfig.path}) - } - return - } - const remoteRouter = coreObj.routerConfig.find((item:RouteConfig) => item?.data?.['type'] === 'intelligentPlugin') - if (!remoteRouter) { - // coreObj.pluginProvider.setRouterConfig(false, { - // path: 'template', - // loadChildren: coreObj.builtInPluginLoader('intelligent'), - // data: { - // type: 'intelligentPlugin' - // } - // }, coreObj.routerConfig) - } - return coreObj - } - }, - local: { - router: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - for (const pluginRouter of pluginConfig.router) { - if (pluginRouter.type === 'sub') { - continue - } - updateRouterConfigWithPlugin(coreObj, pluginRouter, pluginConfig) - } - return coreObj - }, - preload: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => { - if(!coreObj || !pluginConfig) return coreObj - coreObj.setExecuteList(prev=>[...prev,{ ...pluginConfig, expose: 'Bootstrap', bootstrap: 'BootstrapModule.bootstrap' }]) - for (const pluginRouter of pluginConfig.router) { - updateRouterConfigWithPlugin(coreObj, pluginRouter, pluginConfig) - } - return coreObj - } - // extender: (coreObj?:CoreObj, pluginConfig?:PluginConfig) => {} - } -} -function updateRouterConfigWithPlugin (coreObj: CoreObj, pluginRouter: PluginRouterConfig, pluginConfig: PluginConfig) { - if (!pluginRouter.expose) { - throw new Error('pluginRouter.expose is required') - } else { - for (const pluginRouter of pluginConfig.router) { - const routerToChanged:RouteConfig[] = pluginRouter.type === 'root' ? coreObj.routerConfig : coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] - routerMap.get(pluginConfig.name) && routerToChanged.unshift({...routerMap.get(pluginConfig.name)!, key:pluginConfig.name, path:pluginRouter.path}) - } - - // coreObj.pluginProvider.setRouterConfig(pluginRouter.type === 'root', { - // path: pluginRouter.path, - // loadChildren: () => coreObj.pluginLoader.loadModule( - // pluginRouter.path, - // pluginConfig.name, - // pluginRouter.expose!, - // pluginConfig.path || `${DEFAULT_LOCAL_PLUGIN_PATH}${pluginConfig.name}/ApiparkPluginDriver.js` - // ), - // canActivate: [coreObj.pluginLifecycleGuard], - // canActivateChild: [coreObj.pluginLifecycleGuard], - // canDeactivate: [coreObj.pluginLifecycleGuard], - // canLoad: [coreObj.pluginLifecycleGuard] - // }, coreObj.routerConfig) - } -} diff --git a/frontend/packages/businessEntry/src/vite-env.d.ts b/frontend/packages/businessEntry/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2..00000000 --- a/frontend/packages/businessEntry/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/frontend/packages/businessEntry/start-vite.js b/frontend/packages/businessEntry/start-vite.js deleted file mode 100644 index 224115dc..00000000 --- a/frontend/packages/businessEntry/start-vite.js +++ /dev/null @@ -1,17 +0,0 @@ - -// start-vite.js// start-vite.js -import { exec } from 'child_process'; - -const viteProcess = exec('pnpm run build'); - -viteProcess.stdout.on('data', (data) => { - console.log(data.toString()); -}); - -viteProcess.stderr.on('data', (data) => { - console.error(data.toString()); -}); - -viteProcess.on('close', (code) => { - console.log(`Vite process exited with code ${code}`); -}); diff --git a/frontend/packages/businessEntry/tsconfig.json b/frontend/packages/businessEntry/tsconfig.json deleted file mode 100644 index 51ab8cd8..00000000 --- a/frontend/packages/businessEntry/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - /* Linting */ - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true, - "paths": { - "@core/*": ["../core/src/*"], - "@common/*": ["../common/src/*"], - "@market/*": ["../market/src/*"], - "@dashboard/*": ["../dashboard/src/*"], - "@openApi/*": ["../openApi/src/*"], - "@systemRunning/*": ["../systemRunning/src/*"], - "@businessEntry/*": ["./src/*"], - }, - }, - "include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/Navigation.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../common/src/components/aoplatform/ScrollableSection.tsx", "../common/src/utils/postcat.tsx", "../common/src/utils/curl.ts", "../common/src/components/aoplatform/ResetPsw.tsx", "../common/src/components/aoplatform/SubscribeApprovalModalContent.tsx", "src/components/aoplatform/RenderRoutes.tsx", "../common/src/components/aoplatform/PublishApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePage.tsx", "../common/src/const/type.ts", "../common/src/components/aoplatform/intelligent-plugin", "../common/src/const/domain", "../common/src/hooks/pluginLoader.ts"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/frontend/packages/businessEntry/tsconfig.node.json b/frontend/packages/businessEntry/tsconfig.node.json deleted file mode 100644 index 42872c59..00000000 --- a/frontend/packages/businessEntry/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/frontend/packages/businessEntry/vite.config.ts b/frontend/packages/businessEntry/vite.config.ts deleted file mode 100644 index 81624f0d..00000000 --- a/frontend/packages/businessEntry/vite.config.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { defineConfig, Plugin } from 'vite' -import react from '@vitejs/plugin-react' -import path from 'path' -import dynamicImportVars from '@rollup/plugin-dynamic-import-vars'; -import tailwindcss from 'tailwindcss'; -import autoprefixer from 'autoprefixer'; -import federation from "@originjs/vite-plugin-federation"; - -export default defineConfig({ - cacheDir: './node_modules/.vite', - build:{ - outDir:'../../dist', - sourcemap: false, - chunkSizeWarningLimit: 50000, - rollupOptions: { - output: { - chunkFileNames: 'assets/eo-[name]-[hash].js', - }, - }, - }, - css: { - postcss: { - plugins: [ - tailwindcss(path.resolve(__dirname, '../common/tailwind.config.js')), - autoprefixer, - ], - }, - preprocessorOptions: { - less: { - javascriptEnabled: true, - }, - }, - modules:{ - localsConvention:"camelCase", - generateScopedName:"[local]_[hash:base64:2]" - } - }, - plugins: [react(), - dynamicImportVars({ - include:["src"], - exclude:[], - warnOnError:false - }), - federation({ - name:"container", - remotes:{ - remoteApp: 'http://localhost:5001/assets/remoteEntry.js' // 远程项目的URL - }, - shared:[ - "react", - "react-dom", - ] - }) - ], - resolve: { - alias: [ - { find: /^~/, replacement: '' }, - { find: '@common', replacement: path.resolve(__dirname, '../common/src') }, - { find: '@market', replacement: path.resolve(__dirname, '../market/src') }, - { find: '@core', replacement: path.resolve(__dirname, '../core/src') }, - { find: '@dashboard', replacement: path.resolve(__dirname, '../dashboard/src') }, - { find: '@openApi', replacement: path.resolve(__dirname, '../openApi/src') }, - { find: '@systemRunning', replacement: path.resolve(__dirname, '../systemRunning/src') }, - { find: '@businessEntry', replacement: path.resolve(__dirname, './src') }, - ] - }, - server: { - proxy: { - '/api/v1': { - // target: 'http://uat.apikit.com:11204/mockApi/aoplatform/', - target: 'http://172.18.166.219:8288/', - changeOrigin: true, - }, - '/api2/v1': { - // target: 'http://uat.apikit.com:11204/mockApi/aoplatform/', - target: 'http://172.18.166.219:8288/', - changeOrigin: true, - } - } - }, - logLevel:'info' -}) diff --git a/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx b/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx index 1c1904a6..d9b6ef45 100644 --- a/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx +++ b/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx @@ -19,6 +19,7 @@ import { Icon } from '@iconify/react'; import { $t } from '@common/locales'; import { ProConfigProvider, ProLayout } from '@ant-design/pro-components'; import LanguageSetting from './LanguageSetting'; +import { usePluginSlotHub } from '@common/contexts/PluginSlotHubContext'; const APP_MODE = import.meta.env.VITE_APP_MODE; export type MenuItem = Required['items'][number]; @@ -43,6 +44,7 @@ const themeToken = { const [pathname, setPathname] = useState(currentUrl); const mainPage = project === 'core' ?'/service/list':'/serviceHub/list' const [menuItems, setMenuItems] = useState(); + const pluginSlotHub = usePluginSlotHub() useEffect(()=>{ const newMenu = transformMenuData(menuList) @@ -145,6 +147,16 @@ const themeToken = { ].filter(Boolean), [userInfo]); + const actionRender =useMemo( ()=>{ + return [ + , + , + ...((pluginSlotHub.getSlot('basicLayoutAfterBtns') as unknown[] )||[] ) + ] + },[pluginSlotHub.getSlot('basicLayoutAfterBtns') ]) + return(
{ if (props.isMobile) return []; if (typeof window === 'undefined') return []; - return [ - , - - ]; + return actionRender; }} headerTitleRender={() => (
diff --git a/frontend/packages/common/src/components/aoplatform/NotFound.tsx b/frontend/packages/common/src/components/aoplatform/NotFound.tsx new file mode 100644 index 00000000..fc30bb0d --- /dev/null +++ b/frontend/packages/common/src/components/aoplatform/NotFound.tsx @@ -0,0 +1,22 @@ +import React, { useEffect, useState } from 'react'; +import { Result, Skeleton } from 'antd'; + +const NotFound: React.FC = () => { + const [showPage, setShowPage] = useState(false) + + useEffect(()=>{ + setTimeout(()=>setShowPage(true), 1000) + },[]) + + return ( +
+ { showPage ? : } +
+)} + +export default NotFound; \ No newline at end of file diff --git a/frontend/packages/common/src/components/aoplatform/WithRouteGuard.tsx b/frontend/packages/common/src/components/aoplatform/WithRouteGuard.tsx new file mode 100644 index 00000000..760ec558 --- /dev/null +++ b/frontend/packages/common/src/components/aoplatform/WithRouteGuard.tsx @@ -0,0 +1,80 @@ +import { set } from 'lodash-es'; +import { ExoticComponent, JSXElementConstructor, ReactElement, useEffect, useState } from 'react'; +import { useBlocker, useLocation, useNavigate } from 'react-router-dom'; +import { JSX } from 'react/jsx-runtime'; + +const withRouteGuard = (WrappedComponent: ExoticComponent | JSXElementConstructor, { + canActivate, + canLoad , + canDeactivate, + deactivated, + pathPrefix +}: { pathPrefix?:string, canActivate?: () => Promise; canLoad?: () => Promise; canDeactivate?: () => Promise; deactivated?: () => Promise; } = {}) => { + return function RouteGuard(props: JSX.IntrinsicAttributes) { + const [isActivated, setIsActivated] = useState(false); + const location = useLocation(); + + // check canActivate + const startLifecycle = async ()=>{ + if(canActivate){ + const activateRes = await canActivate(); + setIsActivated(activateRes); + }else{ + setIsActivated(true); + } + } + + // check canDeactivate + const handleBeforeUnload =async (event: { preventDefault: () => void; returnValue: string; }) => { + const deactivateRes = canDeactivate? await canDeactivate():true; + if (!deactivateRes) { + event.preventDefault(); + event.returnValue = ''; + } + }; + + // 激活组件时的检查 + useEffect(() => { + startLifecycle(); + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload); + deactivated?.(); + }; + }, []); + + + const blocker = useBlocker((tx) => { + const currentPath = location.pathname; + const targetPath = tx.nextLocation.pathname; + + if (pathPrefix && currentPath.startsWith(pathPrefix) && !targetPath.startsWith(pathPrefix) && canDeactivate) { + canDeactivate().then((res) => { + if(res){ + return false; + }else{ + return true; + } + }) + } else { + return false + } + }); + + + const checkCanLoad = async()=>{ + const loadRes = await canLoad!(); + !loadRes && setIsActivated(false); + } + useEffect(() => { + if (isActivated && canLoad) { + checkCanLoad() + } + }, [isActivated]); + + return isActivated ? : null; + }; +} + +export default withRouteGuard; \ No newline at end of file diff --git a/frontend/packages/common/src/components/aoplatform/prompt-editor/PromptEditor.tsx b/frontend/packages/common/src/components/aoplatform/prompt-editor/PromptEditor.tsx index 20320bb3..fcf85646 100644 --- a/frontend/packages/common/src/components/aoplatform/prompt-editor/PromptEditor.tsx +++ b/frontend/packages/common/src/components/aoplatform/prompt-editor/PromptEditor.tsx @@ -58,7 +58,7 @@ import { UPDATE_DATASETS_EVENT_EMITTER, UPDATE_HISTORY_EVENT_EMITTER, } from './constants' -import { useEventEmitterContextContext } from '@common/contexts/event-emitter' +import { useEventEmitterContextContext } from '@common/contexts/EventEmitterContext' export type PromptEditorProps = { instanceId?: string diff --git a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/component-picker-block/index.tsx b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/component-picker-block/index.tsx index bfece5ba..8b137349 100644 --- a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/component-picker-block/index.tsx +++ b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/component-picker-block/index.tsx @@ -30,7 +30,7 @@ import { $splitNodeContainingQuery } from '../../utils' import { useOptions } from './hooks' import type { PickerBlockMenuOption } from './menu' // import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars' -import { useEventEmitterContextContext } from '@common/contexts/event-emitter' +import { useEventEmitterContextContext } from '@common/contexts/EventEmitterContext' type ComponentPickerProps = { triggerString: string diff --git a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/context-block/component.tsx b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/context-block/component.tsx index 60346493..7a8db454 100644 --- a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/context-block/component.tsx +++ b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/context-block/component.tsx @@ -14,7 +14,7 @@ import { DELETE_CONTEXT_BLOCK_COMMAND } from './index' // PortalToFollowElemContent, // PortalToFollowElemTrigger, // } from '@/app/components/base/portal-to-follow-elem' -import { useEventEmitterContextContext } from '@common/contexts/event-emitter' +import { useEventEmitterContextContext } from '@common/contexts/EventEmitterContext' import { $t } from '@common/locales' type ContextBlockComponentProps = { diff --git a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/history-block/component.tsx b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/history-block/component.tsx index 54e0cc5a..d333b712 100644 --- a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/history-block/component.tsx +++ b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/history-block/component.tsx @@ -14,7 +14,7 @@ import { DELETE_HISTORY_BLOCK_COMMAND } from './index' // PortalToFollowElemContent, // PortalToFollowElemTrigger, // } from '@/app/components/base/portal-to-follow-elem' -import { useEventEmitterContextContext } from '@common/contexts/event-emitter' +import { useEventEmitterContextContext } from '@common/contexts/EventEmitterContext' import { $t } from '@common/locales' type HistoryBlockComponentProps = { diff --git a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/update-block.tsx b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/update-block.tsx index ad5c50dd..e17a493b 100644 --- a/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/update-block.tsx +++ b/frontend/packages/common/src/components/aoplatform/prompt-editor/plugins/update-block.tsx @@ -3,7 +3,7 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext import { textToEditorState } from '../utils' import { CustomTextNode } from './custom-text/node' import { CLEAR_HIDE_MENU_TIMEOUT } from './workflow-variable-block' -import { useEventEmitterContextContext } from '@common/contexts/event-emitter' +import { useEventEmitterContextContext } from '@common/contexts/EventEmitterContext' export const PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER = 'PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER' export const PROMPT_EDITOR_INSERT_QUICKLY = 'PROMPT_EDITOR_INSERT_QUICKLY' diff --git a/frontend/packages/common/src/const/const.tsx b/frontend/packages/common/src/const/const.tsx index 31cc0cf0..84b7481c 100644 --- a/frontend/packages/common/src/const/const.tsx +++ b/frontend/packages/common/src/const/const.tsx @@ -1,3 +1,11 @@ +import { ProtectedRoute } from '@core/components/aoplatform/RenderRoutes' +import { AiServiceProvider } from '@core/contexts/AiServiceContext' +import { SystemProvider } from '@core/contexts/SystemContext' +import { TeamProvider } from '@core/contexts/TeamContext' +import { TenantManagementProvider } from '@market/contexts/TenantManagementContext' +import { lazy } from 'react' +import { Outlet, Navigate } from 'react-router-dom' + export type BasicResponse = { code:number data:T @@ -72,4 +80,4 @@ export const routerKeyMap = new Map([ export const DATA_SHOW_TYPE_OPTIONS = [ {label:'列表', value:'list'}, {label:'块', value:'block'}, - ] \ No newline at end of file + ] diff --git a/frontend/packages/common/src/const/type.ts b/frontend/packages/common/src/const/type.ts index 094d858e..7a890724 100644 --- a/frontend/packages/common/src/const/type.ts +++ b/frontend/packages/common/src/const/type.ts @@ -1,5 +1,8 @@ +import { FC, ReactElement, ReactNode } from "react" import { PERMISSION_DEFINITION } from "./permissions" import { MatchPositionEnum, MatchTypeEnum } from "@core/const/system/const" +import usePluginLoader from "@common/hooks/pluginLoader" +import { useGlobalContext } from "@common/contexts/GlobalStateContext" export type UserInfoType = { username: string @@ -8,7 +11,6 @@ export type UserInfoType = { phone: string avatar: string type:string - } export type UserProfileProps = { @@ -100,4 +102,87 @@ export type SimpleMemberItem = { email:string department:string avatar:string -} \ No newline at end of file +} + + +export type RouteConfig = { + path:string + pathPrefix?:string + component?:ReactElement + children?:(RouteConfig|false)[] + key:string + provider?:FC<{ children: ReactNode; }> + lazy?:unknown + data?:Record + lifecycle?:{ + canActivate?:()=>Promise + canLoad?:()=>Promise + canDeactivate?:()=>Promise + deactivated?:()=>Promise + } +} + +export type RouterParams = { + teamId:string + apiId:string + serviceId:string + clusterId:string; + memberGroupId:string + userGroupId:string + pluginName:string + moduleId:string + accessType:'project'|'team'|'service' + categoryId:string + tagId:string + dashboardType:string + dashboardDetailId:string + topologyId:string + appId:string + roleType:string + roleId:string + routeId:string +} + + +export type PluginRouterConfig = { + name:string + path:string; + type:string; + expose?:string + } + +export type CoreObj = { +routerConfig: RouteConfig[]; +setExecuteList: (param:unknown[])=>void; +pluginLoader: { + loadModule: (path: string, name: string, expose: string, pluginPath: string) => Promise; +}; +pluginProvider: ReturnType +// pluginLifecycleGuard: PluginLifecycleGuard; +builtInPluginLoader: (name: string) => any; +} + +export type PluginConfigType = { + name: string; + router: Array; + path?: string; + driver:string + } + + +export type ApiparkPluginDriverType = { + [key:string]:{[key:string]:(coreObj?:CoreObj, pluginConfig?:PluginConfigType)=>(CoreObj|undefined)} + } + + +export type RouterMapConfig = { + type: 'component' | 'module', + component: ReactElement, + provider?: FC, + lazy?: FC + key?: string + children?: RouteConfig[] + data?:Record + pathMatch?:string +} + \ No newline at end of file diff --git a/frontend/packages/common/src/contexts/event-emitter.tsx b/frontend/packages/common/src/contexts/EventEmitterContext.tsx similarity index 100% rename from frontend/packages/common/src/contexts/event-emitter.tsx rename to frontend/packages/common/src/contexts/EventEmitterContext.tsx diff --git a/frontend/packages/common/src/contexts/GlobalStateContext.tsx b/frontend/packages/common/src/contexts/GlobalStateContext.tsx index a8225662..3e843d55 100644 --- a/frontend/packages/common/src/contexts/GlobalStateContext.tsx +++ b/frontend/packages/common/src/contexts/GlobalStateContext.tsx @@ -1,4 +1,4 @@ -import {createContext, Dispatch, FC, ReactNode, useContext, useReducer, useState} from "react"; +import {createContext, Dispatch, FC, ReactNode, useContext, useEffect, useReducer, useState} from "react"; import { useFetch } from "@common/hooks/http"; import { App } from "antd"; import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const"; @@ -6,6 +6,13 @@ import { checkAccess } from "@common/utils/permission"; import { PERMISSION_DEFINITION } from "@common/const/permissions"; import { $t } from "@common/locales"; import { MenuItem } from "@common/utils/navigation"; +import { usePluginEventHub } from "./PluginEventHubContext"; +import { ErrorBoundary } from "@ant-design/pro-components"; +import NotFound from "@common/components/aoplatform/NotFound"; +import { RouteConfig } from "@common/const/type"; +import { ProtectedRoute } from "@core/components/aoplatform/RenderRoutes"; +import Login from "@core/pages/Login"; +import { useLocaleContext } from "./LocaleContext"; interface GlobalState { isAuthenticated: boolean; @@ -31,59 +38,6 @@ export type GlobalAction = | { type: 'UPDATE_MAIN_PAGE'; mainPage: string } | { type: 'UPDATE_LANGUAGE'; language: string } -class EventEmitter { - // 用来存放注册的事件与回调 - _events:any - constructor () { - this._events = {} - } - - on (eventName:string, callback:Function) { - // 由于一个事件可能注册多个回调函数,所以使用数组来存储事件队列 - const callbacks = this._events[eventName] || [] - callbacks.push(callback) - this._events[eventName] = callbacks - } - - // 此处需要处理,emit时需要按顺序执行监听的函数,每个函数都会返回是否中止的参数,如果中止则不执行后续的函数 - // emit传入eventName 和 event, 返回 event - emit (eventName:string, event:any) { - return new Promise((resolve) => { - const callbacks = this._events[eventName] || [] - for (const cb of callbacks) { - const cbRes = cb(event.data) - if (cbRes.continue === false) { - resolve(cbRes) - break - } else { - event = cbRes - } - } - resolve(event.data) - }) - } - - // 取消订阅 - off (eventName:string, callback:Function) { - const callbacks = this._events[eventName] || [] - const newCallbacks = callbacks.filter((fn:any) => fn !== callback && fn.initialCallback !== callback /* 用于once的取消订阅 */) - this._events[eventName] = newCallbacks - } - - // 单次订阅,后台插件可以自行决定取消对事件的订阅 - once (eventName:string, callback:Function) { - // 由于需要在回调函数执行后,取消订阅当前事件,所以需要对传入的回调函数做一层包装,然后绑定包装后的函数 - const one = (...args:any) => { - callback(...args) - this.off(eventName, one) - } - - // 由于:我们订阅事件的时候,修改了原回调函数的引用,所以,用户触发 off 的时候不能找到对应的回调函数 - // 所以,我们需要在当前函数与用户传入的回调函数做一个绑定,我们通过自定义属性来实现 - one.initialCallback = callback - this.on(eventName, one) - } - } const mockData = [ { @@ -119,7 +73,14 @@ class EventEmitter { "path": "/team", "icon": "ic:baseline-people-alt", "access": "all" - } + }, + // { + // "name": "路由组件", + // "key": "router", + // "path": "/router1", + // "icon": "ic:baseline-people-alt", + // "access": "all" + // } ] }, { @@ -251,16 +212,13 @@ export const GlobalContext = createContext<{ checkPermission:(access:keyof typeof PERMISSION_DEFINITION[0] | Array)=>boolean teamDataFlushed:boolean accessInit:boolean - // 插件系统 - pluginEventHub:EventEmitter - pluginSlotHubService:{ - addSlot:(name:string, content:unknown)=>void - addSlotArr:(name:string, content:unknown[])=>void - removeSlot:(name:string)=>void - getSlot:(name:string)=>unknown - } aiConfigFlushed:boolean setAiConfigFlushed:(flush:boolean)=>void + routeConfig: RouteConfig[]; + setRouterConfig: (isRoot: boolean, config: RouteConfig) => void; + addRouteConfig: (parentRoute: RouteConfig, config: RouteConfig) => void; + fetchData: ReturnType['fetchData']; + $t: typeof $t; } | undefined>(undefined); const globalReducer = (state: GlobalState, action: GlobalAction): GlobalState => { @@ -311,10 +269,18 @@ const globalReducer = (state: GlobalState, action: GlobalAction): GlobalState => } }; + +export const DefaultRouteConfig = [ + { path: '/', pathMatch: 'full', component: ,key:'root',}, + { path: '/login', component: ,key:'login'}, + { path: '/', pathMatch:'prefix',component: ,key:'basciLayout',children:[ + { path: '*', component: , key: 'errorBoundary' } + ]} +] // Create a context provider component export const GlobalProvider: FC<{children:ReactNode}> = ({ children }) => { - const {fetchData} = useFetch() const { message } = App.useApp() + const { setLocale } = useLocaleContext(); const [state, dispatch] = useReducer(globalReducer, { isAuthenticated: true, //mock用 userData: null, @@ -330,10 +296,43 @@ export const GlobalProvider: FC<{children:ReactNode}> = ({ children }) => { const [accessInit, setAccessInit] = useState(false) const [aiConfigFlushed, setAiConfigFlushed] = useState(false) let getGlobalAccessPromise: Promise> | null = null - const [pluginEventHub] = useState(new EventEmitter()) - const [pluginSlotHub] = useState>(new Map()) const [menuList, setMenuList] = useState(mockData); + const [routeConfig, setRouteConfigState] = useState(DefaultRouteConfig) + useEffect(() => { + setLocale(state.language); + }, [state.language, setLocale]); + + const { fetchData } = useFetch(); + + const setRouterConfig = (isRoot: boolean, config: RouteConfig) => { + setRouteConfigState(prevConfig => { + if (isRoot) { + return [config,...prevConfig]; + } else { + const rootRoute = prevConfig.find(route => route.path === '/' && route?.pathMatch === 'prefix') ; + if (rootRoute ) { + rootRoute.children = rootRoute.children ? [config, ...rootRoute.children] : [config]; + } + return [...prevConfig]; + } + }); + }; + + const addRouteConfig = (parentRoute: RouteConfig, config: RouteConfig) => { + const addConfigToParent = (routes: RouteConfig[]): RouteConfig[] => { + return routes.map(route => { + if (route.key === parentRoute.key) { + route.children = route.children ? [...route.children, config] : [config]; + } else if (route.children) { + route.children = addConfigToParent(route.children); + } + return route; + }); + }; + + setRouteConfigState(prevConfig => addConfigToParent(prevConfig)); + }; const getGlobalAccessData = ()=>{ if(getGlobalAccessPromise){ @@ -404,23 +403,26 @@ export const GlobalProvider: FC<{children:ReactNode}> = ({ children }) => { return revs } - const pluginSlotHubService = { - addSlot:(name:string, content:any) => {pluginSlotHub.set(name, content)}, - addSlotArr : (name:string, content:any[]) => {pluginSlotHub.get(name) ? pluginSlotHub.set(name, (pluginSlotHub.get(name) as Array).push(content)) : pluginSlotHub.set(name, content)}, - removeSlot:(name:string) => {pluginSlotHub.delete(name)}, - getSlot:(name:string) => {pluginSlotHub.get(name)} - } return ( + resetAccess ,checkPermission, + accessInit, + aiConfigFlushed, + setAiConfigFlushed, + routeConfig, + setRouterConfig, + addRouteConfig, + fetchData, + $t:$t,}}> {children} ); diff --git a/frontend/packages/common/src/contexts/LocaleContext.tsx b/frontend/packages/common/src/contexts/LocaleContext.tsx new file mode 100644 index 00000000..4f5aa7b8 --- /dev/null +++ b/frontend/packages/common/src/contexts/LocaleContext.tsx @@ -0,0 +1,44 @@ +import React, { createContext, useContext, useState, useEffect, useMemo } from 'react'; +import { ConfigProviderProps } from 'antd'; +import zhCN from 'antd/locale/zh_CN'; +import enUS from 'antd/locale/en_US'; +import zhTW from 'antd/locale/zh_TW'; +import jaJP from 'antd/locale/ja_JP'; +import dayjs from 'dayjs'; +import 'dayjs/locale/zh-cn'; +import 'dayjs/locale/zh-tw'; +import 'dayjs/locale/ja'; + +type Locale = ConfigProviderProps['locale']; + +const languageMap: Record = { + 'zh-CN': zhCN, + 'en-US': enUS, + 'zh-TW': zhTW, + 'ja-JP': jaJP, +}; + +const LocaleContext = createContext<{ + locale: Locale; + setLocale: (locale: string) => void; +}>({ + locale: zhCN, + setLocale: () => {}, +}); + +export const LocaleProvider: React.FC = ({ children }) => { + const [locale, setLocaleState] = useState(zhCN); + + const setLocale = (language: string) => { + dayjs.locale(language); + setLocaleState(languageMap[language]); + }; + + return ( + + {children} + + ); +}; + +export const useLocaleContext = () => useContext(LocaleContext); \ No newline at end of file diff --git a/frontend/packages/common/src/contexts/PluginEventHubContext.tsx b/frontend/packages/common/src/contexts/PluginEventHubContext.tsx new file mode 100644 index 00000000..407b5993 --- /dev/null +++ b/frontend/packages/common/src/contexts/PluginEventHubContext.tsx @@ -0,0 +1,76 @@ +import { createContext, FC, ReactNode, useContext, useState } from "react"; + + +class EventEmitter { + // 用来存放注册的事件与回调 + _events:any + constructor () { + this._events = {} + } + + on (eventName:string, callback:Function) { + // 由于一个事件可能注册多个回调函数,所以使用数组来存储事件队列 + const callbacks = this._events[eventName] || [] + callbacks.push(callback) + this._events[eventName] = callbacks + } + + // 此处需要处理,emit时需要按顺序执行监听的函数,每个函数都会返回是否中止的参数,如果中止则不执行后续的函数 + // emit传入eventName 和 event, 返回 event + emit (eventName:string, event:any) { + return new Promise((resolve) => { + const callbacks = this._events[eventName] || [] + for (const cb of callbacks) { + const cbRes = cb(event.data) + if (cbRes.continue === false) { + resolve(cbRes) + break + } else { + event = cbRes + } + } + resolve(event.data) + }) + } + + // 取消订阅 + off (eventName:string, callback:Function) { + const callbacks = this._events[eventName] || [] + const newCallbacks = callbacks.filter((fn:any) => fn !== callback && fn.initialCallback !== callback /* 用于once的取消订阅 */) + this._events[eventName] = newCallbacks + } + + // 单次订阅,后台插件可以自行决定取消对事件的订阅 + once (eventName:string, callback:Function) { + // 由于需要在回调函数执行后,取消订阅当前事件,所以需要对传入的回调函数做一层包装,然后绑定包装后的函数 + const one = (...args:any) => { + callback(...args) + this.off(eventName, one) + } + + // 由于:我们订阅事件的时候,修改了原回调函数的引用,所以,用户触发 off 的时候不能找到对应的回调函数 + // 所以,我们需要在当前函数与用户传入的回调函数做一个绑定,我们通过自定义属性来实现 + one.initialCallback = callback + this.on(eventName, one) + } + } + +export const PluginEventHubContext = createContext(undefined); + +export const PluginEventHubProvider: FC<{ children: ReactNode }> = ({ children }) => { + const [pluginEventHub] = useState(new EventEmitter()); + + return ( + + {children} + + ); +}; + +export const usePluginEventHub = () => { + const context = useContext(PluginEventHubContext); + if (!context) { + throw new Error('usePluginEventHub must be used within a PluginEventHubProvider'); + } + return context; +}; \ No newline at end of file diff --git a/frontend/packages/common/src/contexts/PluginSlotHubContext.tsx b/frontend/packages/common/src/contexts/PluginSlotHubContext.tsx new file mode 100644 index 00000000..7cdd47ac --- /dev/null +++ b/frontend/packages/common/src/contexts/PluginSlotHubContext.tsx @@ -0,0 +1,36 @@ +import { createContext, FC, ReactNode, useContext, useState } from "react"; + +export const PluginSlotHubContext = createContext<{ + addSlot: (name: string, content: unknown) => void; + addSlotArr: (name: string, content: unknown[]) => void; + removeSlot: (name: string) => void; + getSlot: (name: string) => unknown; +} | undefined>(undefined); + +export const PluginSlotHubProvider: FC<{ children: ReactNode }> = ({ children }) => { + const [pluginSlotHub] = useState>(new Map()); + + const pluginSlotHubService = { + addSlot: (name: string, content: any) => { + pluginSlotHub.set(name, pluginSlotHub.get(name) ? [...(pluginSlotHub.get(name) as Array), content] : [content] ); }, + addSlotArr: (name: string, content: any[]) => { pluginSlotHub.get(name) ? pluginSlotHub.set(name, (pluginSlotHub.get(name) as Array).push(content)) : pluginSlotHub.set(name, content); }, + removeSlot: (name: string) => { pluginSlotHub.delete(name); }, + getSlot: (name: string) => { + + return pluginSlotHub.get(name) ; } + }; + + return ( + + {children} + + ); +}; + +export const usePluginSlotHub = () => { + const context = useContext(PluginSlotHubContext); + if (!context) { + throw new Error('usePluginSlotHub must be used within a PluginSlotHubProvider'); + } + return context; +}; \ No newline at end of file diff --git a/frontend/packages/common/src/hooks/http.ts b/frontend/packages/common/src/hooks/http.ts index 13886e0e..05fe42cf 100644 --- a/frontend/packages/common/src/hooks/http.ts +++ b/frontend/packages/common/src/hooks/http.ts @@ -1,4 +1,6 @@ -import { STATUS_CODE } from "@common/const/const"; +import { BasicResponse, STATUS_CODE } from "@common/const/const"; +import { usePluginEventHub } from "@common/contexts/PluginEventHubContext"; +import EventEmitter from "events"; const urlWhiteList = [/api.example.com\/users/, /api.example2.com\/products/]; // 正则白名单 @@ -137,7 +139,10 @@ type EoRequest = RequestInit & {eoParams?:{[k:string]:unknown},eoTransformKeys?: type EoHeaders = Headers | {[k:string]:string} -export function useFetch(){ +export function useFetch() { + // plugin cannot use usePluginEventHub directly, so we need to pass it as a parameter + const pluginEventHub = usePluginEventHub() + function fetchData(url:string, options: EoRequest ) { // 合并传入的headers与默认headers const headers = { ...(options.body ? {}:DEFAULT_HEADERS), ...options.headers }; @@ -184,9 +189,11 @@ export function useFetch(){ // 如果响应体为JSON且指定了转换键,则转换响应数据 if ( isJsonHttp(response.headers)) { const data = await response.json(); - return shouldTransformKeys ? keysToCamel(data,options.eoTransformKeys as string[]) as T:data + const newData = await pluginEventHub.emit('httpResponse', {data,continue:true}) as Response; + return shouldTransformKeys ? keysToCamel(newData,options.eoTransformKeys as string[]) as T:data } + return response; }) .catch(error => { diff --git a/frontend/packages/common/src/hooks/pluginLoader.ts b/frontend/packages/common/src/hooks/pluginLoader.ts index 0145d192..355133d2 100644 --- a/frontend/packages/common/src/hooks/pluginLoader.ts +++ b/frontend/packages/common/src/hooks/pluginLoader.ts @@ -1,10 +1,12 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import { useGlobalContext } from "@common/contexts/GlobalStateContext"; -import { App } from "antd"; -import { ApiparkPluginDriver as apipark, CoreObj, generateRemoteModuleTemplate, loadRemoteModule, validateExportLifecycle } from "@businessEntry/utils/plugin"; +import { DEFAULT_LOCAL_PLUGIN_PATH, generateRemoteModuleTemplate, loadRemoteModule, validateExportLifecycle } from "@common/utils/plugin.tsx"; import { useFetch } from "@common/hooks/http"; -import { RouteConfig } from "@businessEntry/components/aoplatform/RenderRoutes"; -import { routerMap } from "@businessEntry/consts/const"; +import { PluginConfigType, RouteConfig } from "@common/const/type.ts"; +import { ApiparkPluginDriverType ,RouterMapConfig} from "@common/const/type"; +import { usePluginEventHub } from "@common/contexts/PluginEventHubContext"; +import { usePluginSlotHub } from "@common/contexts/PluginSlotHubContext"; +import { App } from "antd"; const mockData = { buildAt:'2024-09-13T03:51:25Z', @@ -182,7 +184,7 @@ const mockData = { type:'normal' } ] - } + }, // { // "driver": "apipark.remote.normal", // "name": "remote", @@ -230,12 +232,12 @@ const mockData = { // ] // }, // { - // "driver": "apipark.local.router", - // "name": "monitor", + // "driver": "apipark.local.preload", + // "name": "remote", // "router": [ // { - // "expose": "AppModule", - // "path": "monitor", + // "expose": "App", + // "path": "router1/*", // "type": "normal" // } // ] @@ -256,17 +258,34 @@ const mockData = { version:'6438d5aa' } -const usePluginLoader = () => { +export type ExecutePluginType = PluginConfigType & { + expose:string, + bootstrap:string +} + +const usePluginLoader = (apipark:ApiparkPluginDriverType,routerMap:Map) => { const [modules, setModules] = useState(new Map()); - const [executeList, setExecuteList] = useState([]); + const [executeList, setExecuteList] = useState([]); const [baseHref, setBaseHref] = useState(''); - const [redirectUrl, setRedirectUrl] = useState(''); + const [pendingTasks, setPendingTasks] = useState(0); const {fetchData} = useFetch(); const pluginProvider = useGlobalContext(); - const {state, dispatch,getMenuList,pluginEventHub,pluginSlotHubService:pluginSlotHub} = pluginProvider - const { finalRouterConfig, setFinalRouterConfig} = useState([]) - const {message:messageService, modal:modalService} = App.useApp(); - + const pluginEventHub = usePluginEventHub(); + const pluginSlotHub = usePluginSlotHub(); + const { getMenuList,dispatch} = pluginProvider + const { modal,message } = App.useApp() + const [startLoadExecutePlugin, setStartLoadExecutePlugin] = useState(false) + const messageService = message; + const modalService = modal; + let startInstallPlugin = false + + useEffect(()=>{ + if (startLoadExecutePlugin && pendingTasks === 0 && executeList.length > 0) { + loadExecutedPlugin(); + } + },[pendingTasks, executeList]) + + const getModule = (routerPrefix:string, specific = false) => { if (routerPrefix.startsWith('/')) { routerPrefix = routerPrefix.substring(1); @@ -289,26 +308,34 @@ const usePluginLoader = () => { const loadModule = async (routerPrefix: string, pluginName: any, exposedModule: string , pluginPath: any) => { if (!modules.get(routerPrefix)) { try { - const Module = await loadRemoteModule(generateRemoteModuleTemplate(pluginName, exposedModule, pluginPath)); - setModules(prevModules => new Map(prevModules).set(routerPrefix, Module)); + const loadedModule = await loadRemoteModule(generateRemoteModuleTemplate(pluginName, exposedModule, pluginPath)); + const Module = loadedModule.default ?? loadedModule + let ModuleBootstrap; + try { + ModuleBootstrap = await loadRemoteModule(generateRemoteModuleTemplate(pluginName, 'Bootstrap', pluginPath)); + } catch (error) { + console.warn('Bootstrap module not found:', error); + } + setModules(prevModules => new Map(prevModules).set(routerPrefix,Module[exposedModule] )); if (!validateExportLifecycle(Module)) { console.error('需要导出插件生命周期函数'); return; } await Module.bootstrap?.({ pluginProvider, - pluginEventHub: pluginEventHub, + pluginEventHub, pluginSlotHub }); - return Module[exposedModule]; + return Module; } catch (error) { console.error('导入插件失败:', error); } } - return getModule(routerPrefix, true)[exposedModule]; + return getModule(routerPrefix, true); }; const loadExecutedPlugin = async () => { + setStartLoadExecutePlugin(true) for (const plugin of executeList) { try { const Module = await loadRemoteModule(generateRemoteModuleTemplate(plugin.name, plugin?.expose || 'Bootstrap', plugin.path || `${DEFAULT_LOCAL_PLUGIN_PATH}${plugin.name}/apipark.js`)); @@ -321,10 +348,8 @@ const usePluginLoader = () => { pluginSlotHub, pluginProvider, platformProvider:null, - closeModal, messageService, modalService, - apiService:fetchData }); } } catch (error) { @@ -333,24 +358,22 @@ const usePluginLoader = () => { } }; - // TODO 暂未找到关闭弹窗的全局方法 - const closeModal = () => { - }; const loadPlugins = () => { return new Promise((resolve) => { - const routerConfig: RouteConfig[] = []; - apipark['builtIn'].default({ routerConfig } as CoreObj); - installPlugin(routerConfig).then(async (res)=>{ + if(startInstallPlugin) { + return resolve(true) + } + startInstallPlugin = true + installPlugin().then(async (res)=>{ // reset route after loading executed plugins - // TODO 需要测试次式executeList是否已经更新,如果没有更新的话要修改executeList 更新的写法 await loadExecutedPlugin(); - resolve(res) + return resolve(res) }) }); }; - const installPlugin = (routerConfig: any[]) => { + const installPlugin = () => { return new Promise((resolve, reject) => { // fetchData('system/plugins',{method:'GET'}).then((resp) => { // if (resp.code === 0){ @@ -374,12 +397,18 @@ const usePluginLoader = () => { continue; } const driver = driverName.split('.').reduce((driverMethod: { [x: string]: any; }, driverName: string | number) => driverMethod[driverName], driverMethod); - driver({ routerConfig, setExecuteList, pluginLoader, pluginProvider, pluginLifecycleGuard, builtInPluginLoader }, plugin); + if(driverName.split('.')[2] === 'preload'){ + setPendingTasks(prev => prev + 1); + } + ;(driver as Function )?.({ setExecuteList:(callback:ExecutePluginType[]) => { + setExecuteList(callback); + setPendingTasks(prev => prev - 1); + }, pluginLoader, pluginProvider, pluginLifecycleGuard, builtInPluginLoader }, plugin); } catch (err) { console.warn('安装插件出错:', err); } } - resolve(routerConfig); + resolve(true); // } else { // messageService.error(resp.msg || '获取插件配置列表失败,请重试!'); // reject(new Error(resp.msg || '获取插件配置列表失败')); @@ -391,7 +420,7 @@ const usePluginLoader = () => { const loadBuiltInModule = (pluginName: any) => { try { - const { module } = routerMap.get(pluginName); + const { module } = routerMap.get(pluginName)!; return module; } catch (err) { console.warn(`安装内置插件[${pluginName}]出错:`, err); @@ -402,7 +431,6 @@ const usePluginLoader = () => { loadPlugins, loadModule, loadExecutedPlugin, - closeModal, setBaseHref, getModule }; diff --git a/frontend/packages/common/src/utils/plugin.tsx b/frontend/packages/common/src/utils/plugin.tsx new file mode 100644 index 00000000..db23aafc --- /dev/null +++ b/frontend/packages/common/src/utils/plugin.tsx @@ -0,0 +1,154 @@ +import { CoreObj, PluginConfigType, PluginRouterConfig, RouteConfig, RouterMapConfig } from '@common/const/type'; +import { isFunction } from 'lodash-es' +// @ts-expect-error module cannot find +import { __federation_method_setRemote,__federation_method_getRemote,__federation_method_unwrapDefault } from 'virtual:__federation__'; +import { ApiparkPluginDriverType } from '@common/const/type'; +import React from 'react'; + +interface RemoteModuleConfig{ + type:string + remoteEntry:string + exposedModule:string + remoteName:string +} + +export async function loadRemoteModule(remoteModuleConfig:RemoteModuleConfig){ + __federation_method_setRemote(remoteModuleConfig.remoteName, { + url: () => Promise.resolve(remoteModuleConfig.remoteEntry), + format: 'esm', + from: 'vite', + }); + return await __federation_method_getRemote( + remoteModuleConfig.remoteName, + `./${remoteModuleConfig.exposedModule}` + ) +} + +export function generateRemoteModuleTemplate( + pluginName: string, + exposedModule: string, + pluginPath: string +):RemoteModuleConfig { + return { + type: 'module', + remoteEntry: pluginPath, + exposedModule, + remoteName: pluginName + } +} + +/** check the lifecycle method of plugin */ +export function validateExportLifecycle(exports: unknown) { + const { bootstrap, mount, unmount } = exports ?? {} + return isFunction(bootstrap) && isFunction(mount) && isFunction(unmount) +} + +export const DEFAULT_LOCAL_PLUGIN_PATH = '/plugin-frontend/' + +export const ApiparkPluginDriver = (routerMap: Map): ApiparkPluginDriverType => { return { + builtIn: { + component: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => { + if(!coreObj || !pluginConfig) return coreObj + for (const pluginRouter of pluginConfig.router) { + routerMap.get(pluginConfig.name) && coreObj.pluginProvider.setRouterConfig(pluginRouter.type === 'root' , { + ...routerMap.get(pluginConfig.name)!, + key:pluginConfig.name, + path:pluginRouter.path}) + } + return coreObj + } + }, + remote: { + normal: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => { + if(!coreObj || !pluginConfig) return coreObj + const routerToChanged:RouteConfig[] = coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] + const remoteRouter:RouteConfig[] = routerToChanged.find((item:RouteConfig) => item?.data?.['type'] === 'remotePlugin') as RouteConfig[] + if (!remoteRouter) { + routerMap.get('remote') && coreObj.pluginProvider.setRouterConfig(false,{ + ...routerMap.get('remote')!, key:'remote', path:'remote',type:'remotePlugin',children:[{ + path:':moduleName', + component: routerMap.get('remote')!.component} + ] + }) + } + return coreObj + } + }, + intelligent: { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + normal: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => { + if(!coreObj || !pluginConfig) return coreObj + if(['logsettings','resourcesettings'].indexOf(pluginConfig.name) !== -1){ + const routerToChanged:RouteConfig[] = coreObj.routerConfig.find((router: RouteConfig) => router.path === '/' && router?.pathMatch !== 'full')!.children as RouteConfig[] + const remoteRouter:RouteConfig[] = routerToChanged.find((item:RouteConfig) => item?.data?.['key'] === pluginConfig.name) as RouteConfig[] + if(!remoteRouter){ + routerMap.get(pluginConfig.name) && routerToChanged.unshift({...routerMap.get(pluginConfig.name)!, key:pluginConfig.name, path:pluginConfig.path}) + } + return + } + const remoteRouter = coreObj.routerConfig.find((item:RouteConfig) => item?.data?.['type'] === 'intelligentPlugin') + if (!remoteRouter) { + // coreObj.pluginProvider.setRouterConfig(false, { + // path: 'template', + // loadChildren: coreObj.builtInPluginLoader('intelligent'), + // data: { + // type: 'intelligentPlugin' + // } + // }, coreObj.routerConfig) + } + return coreObj + } + }, + local: { + router: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => { + if(!coreObj || !pluginConfig) return coreObj + for (const pluginRouter of pluginConfig.router) { + if (pluginRouter.type === 'sub') { + continue + } + updateRouterConfigWithPlugin(coreObj, pluginRouter, pluginConfig) + } + return coreObj + }, + preload: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => { + if(!coreObj || !pluginConfig) return coreObj + coreObj.setExecuteList(prev=>[...prev,{ ...pluginConfig, expose: 'Bootstrap', bootstrap: 'BootstrapModule.bootstrap' }]) + for (const pluginRouter of pluginConfig.router) { + updateRouterConfigWithPlugin(coreObj, pluginRouter, pluginConfig) + } + return coreObj + } + // extender: (coreObj?:CoreObj, pluginConfig?:PluginConfigType) => {} + } +} +} +async function updateRouterConfigWithPlugin (coreObj: CoreObj, pluginRouter: PluginRouterConfig, pluginConfig: PluginConfigType) { + if (!pluginRouter.expose) { + throw new Error('pluginRouter.expose is required') + } else { + for (const pluginRouter of pluginConfig.router) { + const loadedModule = await coreObj.pluginLoader.loadModule( + pluginRouter.path, + pluginConfig.name, + pluginRouter.expose!, + pluginConfig.path || `${DEFAULT_LOCAL_PLUGIN_PATH}${pluginConfig.name}/apipark.js` + ) + const loadedModulePage = loadedModule[pluginRouter.expose!] + const LazyComponent = React.lazy(() => Promise.resolve({ default: loadedModulePage?.default || loadedModulePage })); + + const newRouter: RouteConfig = { + path: pluginRouter.path, + key: pluginConfig.name, + lazy: () => Promise.resolve({ default: (props: any) => }), + pathPrefix: pluginRouter.path.endsWith('/*') ? pluginRouter.path.slice(0, -2) : pluginRouter.path, + lifecycle:{ + canActivate: loadedModule?.beforeMount, + canLoad: loadedModule?.mount, + canDeactivate: loadedModule?.beforeUnmount, + deactivated: loadedModule?.unmount + } + }; + coreObj.pluginProvider.setRouterConfig(pluginRouter.type === 'root' , newRouter) + } + } +} diff --git a/frontend/packages/core/src/App.tsx b/frontend/packages/core/src/App.tsx index 9e5f751b..34f176a8 100644 --- a/frontend/packages/core/src/App.tsx +++ b/frontend/packages/core/src/App.tsx @@ -1,30 +1,16 @@ import './App.css' -import { ConfigProvider, ConfigProviderProps, Radio, RadioChangeEvent } from 'antd'; +import { ConfigProvider, App as AppAntd } from 'antd'; import RenderRoutes from '@core/components/aoplatform/RenderRoutes'; import {BreadcrumbProvider} from "@common/contexts/BreadcrumbContext.tsx"; -import { StyleProvider } from '@ant-design/cssinjs'; -import zhCN from 'antd/locale/zh_CN'; -import enUS from 'antd/locale/en_US'; -import zhTW from 'antd/locale/zh_TW'; -import jaJP from 'antd/locale/ja_JP'; import useInitializeMonaco from "@common/hooks/useInitializeMonaco"; -import { useEffect, useMemo, useState } from 'react'; -import 'dayjs/locale/zh-cn'; -import 'dayjs/locale/zh-tw'; -import 'dayjs/locale/ja'; -import dayjs from 'dayjs'; -import { useGlobalContext } from '@common/contexts/GlobalStateContext'; +import { useMemo } from 'react'; +import { GlobalProvider } from '@common/contexts/GlobalStateContext'; import { $t } from '@common/locales'; - -type Locale = ConfigProviderProps['locale']; - -const languageMap: Record = { - 'zh-CN':zhCN, - 'en-US':enUS, - 'zh-TW':zhTW, - 'ja-JP':jaJP -} +import { PluginEventHubProvider } from '@common/contexts/PluginEventHubContext'; +import { PluginSlotHubProvider } from '@common/contexts/PluginSlotHubContext'; +import { useLocaleContext } from '@common/contexts/LocaleContext'; +import { StyleProvider } from '@ant-design/cssinjs'; const antdComponentThemeToken = { @@ -150,33 +136,35 @@ const antdComponentThemeToken = { function App() { - const [locale, setLocal] = useState(); + const { locale } = useLocaleContext(); useInitializeMonaco() - const { state} = useGlobalContext() - - useEffect(() => { - dayjs.locale(state.language); - setLocal(languageMap[state.language]); - },[state.language]) const validateMessages = useMemo(()=>({ required: $t('必填项'), email:$t('不是有效邮箱地址')} - ),[state.language]) + ),[locale]) return ( - - - - - - - + + + + + + + + + + + + + + + ); } diff --git a/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx b/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx index 060bfe2e..a547b9a7 100644 --- a/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx +++ b/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx @@ -1,532 +1,90 @@ -import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; +import { Navigate, RouterProvider, createBrowserRouter, RouteObject } from 'react-router-dom'; import BasicLayout from '@common/components/aoplatform/BasicLayout'; import {createElement,Suspense, useEffect, useState} from 'react'; -import {App, Skeleton} from "antd"; +import {Skeleton, Spin} from "antd"; import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx"; import usePluginLoader from '@common/hooks/pluginLoader.ts'; import { RouteConfig } from '@common/const/type.ts'; - -// // const PUBLIC_ROUTES:RouteConfig[] = [ -// { -// path:'/', -// component:, -// key: 'root', -// }, -// { -// path:'/login', -// component:, -// key: 'login' -// }, -// { -// path:'/', -// component:, -// key: 'layout', -// children:[ -// { -// path:'guide/*', -// component:, -// key:'guide' -// }, -// { -// path:'team', -// component:, -// key: 'team', -// provider: TeamProvider, -// children:[ -// { -// path:'', -// key: 'teamList', -// component: -// }, -// { -// path:'list', -// key: 'teamList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamList.tsx')) -// }, -// { -// path:'inside/:teamId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamInsidePage.tsx')), -// key: 'teamInside', -// children:[ -// { -// path:'member', -// key: 'teamMember', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamInsideMember.tsx')), -// }, -// { -// path:'setting', -// key: 'teamSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/team/TeamConfig.tsx')), -// }, -// ] -// } -// ] -// }, -// { -// path:'service', -// key: uuidv4(), -// component:, -// key: 'restService', -// provider: SystemProvider, -// children:[ -// { -// path:'', -// key:'restServiceList', -// component: -// }, -// { -// path:'list', -// key: 'restServiceList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemList.tsx')), -// }, -// { -// path:'list/:teamId', -// key: 'restServiceList3', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemList.tsx')), -// }, -// { -// path:':teamId', -// component:, -// key: 'restServiceInside', -// children:[ -// { -// path:'inside/:serviceId', -// key: 'restServiceInside2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsidePage.tsx')), -// children:[ -// { -// path:'api', -// key: 'restServiceInsideApi', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideApiDocument.tsx')), -// }, -// { - -// path:'route/create', -// key: 'restServiceInsideRouteCreate', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterCreate')), -// }, -// { - -// path:'route/:routeId', -// key: 'restServiceInsideRouteEdit', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterCreate')), -// }, -// { -// path:'route', -// key: 'restServiceInsideRoute', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterList')), -// }, -// { -// path:'upstream', -// key: 'restServiceInsideUpstream', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/upstream/SystemInsideUpstreamContent.tsx')), -// }, -// { -// path:'document', -// key: 'restServiceInsideDocument', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsideDocument.tsx')), -// }, -// { -// path:'subscriber', -// key: 'restServiceInsideSubscriber', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemInsideSubscriber.tsx')), -// children:[ - -// ] -// }, -// { -// path:'approval', -// key: 'restServiceInsideApproval', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApproval.tsx')), -// children:[ -// { -// path:'', -// key: 'restServiceInsideApprovalList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApprovalList.tsx')), -// }, -// { -// path:'*', -// key: 'restServiceInsideApprovalList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/approval/SystemInsideApprovalList.tsx')), -// } -// ] -// }, -// { -// path:'topology', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemTopology.tsx')), -// key: 'systemTopology', -// children:[ -// ] -// }, -// { -// path:'publish', -// key: 'systemPublish', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublish.tsx')), -// children:[ -// { -// path:'', -// key: 'systemPublishList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublishList.tsx')), -// }, -// { -// path:'*', -// key: 'systemPublishList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublishList.tsx')), -// } -// ] -// }, -// { -// path:'setting', -// key: 'systemConfig', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemConfig.tsx')), -// children:[ - -// ] -// }, -// ] -// }, -// { -// path:'aiInside/:serviceId', -// component:, -// provider: AiServiceProvider, -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsidePage.tsx')), -// children:[ -// { -// path:'api', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideApiDocument')), -// }, -// { - -// path:'route/create', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterCreate')), -// }, -// { - -// path:'route/:routeId', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterCreate')), -// }, -// { -// path:'route', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/api/AiServiceInsideRouterList')), -// }, -// { -// path:'document', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsideDocument.tsx')), -// }, -// { -// path:'subscriber', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/AiServiceInsideSubscriber.tsx')), -// children:[ - -// ] -// }, -// { -// path:'approval', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApproval')), -// children:[ -// { -// path:'', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApprovalList')), -// }, -// { -// path:'*', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/approval/AiServiceInsideApprovalList')), -// } -// ] -// }, -// { -// path:'publish', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublish')), -// children:[ -// { -// path:'', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublishList')), -// }, -// { -// path:'*', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiService/publish/AiServiceInsidePublishList')), -// } -// ] -// }, -// { -// path:'setting', -// key: uuidv4(), -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/SystemConfig.tsx')), -// children:[ - -// ] -// }, -// ] -// } -// ] -// } -// ] -// }, -// { -// path:'datasourcing', -// key: 'dataSourcing', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideDashboardSetting.tsx')), -// }, -// { -// path:'cluster', -// key: 'cluster', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideCluster.tsx')), -// }, -// { -// path:'aisetting', -// key: 'aiSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/aiSetting/AiSettingList.tsx')), -// }, -// { -// path:'cert', -// key: 'cert', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideCert.tsx')), -// }, -// { -// path:'serviceHub', -// component:, -// key:'serviceHub', -// children:[ -// { -// path:'', -// key: 'serviceHubList', -// component: -// }, -// { -// path:'list', -// key:'serviceHubList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/ServiceHubList.tsx')), -// }, -// { -// path:'detail/:serviceId', -// key:'serviceHubDetail', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/ServiceHubDetail.tsx')), -// }] -// }, -// { -// path:'commonsetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/common/CommonPage.tsx')), -// key:uuidv4(), -// }, -// { -// path:'consumer', -// component:, -// provider:TenantManagementProvider, -// key:'tenantManagement', -// children:[ -// { -// path:'', -// key:'tenantManagementList', -// component: -// }, -// { -// path:':teamId/inside/:appId', -// key:'tenantManagementInside', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsidePage.tsx')), -// children:[ -// { -// path:'service', -// key:'tenantManagementInsideService', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsideService.tsx')), -// }, -// { -// path:'authorization', -// key:'tenantManagementInsideAuthorization', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementInsideAuth.tsx')), -// }, -// { -// path:'setting', -// key:'tenantManagementSetting', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ManagementAppSetting.tsx')), -// }, -// ] -// }, -// { -// path:'list', -// key:'serviceHubManagementList', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ServiceHubManagement.tsx')), -// }, -// { -// path:'list/:teamId', -// key:'serviceHubManagementList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@market/pages/serviceHub/management/ServiceHubManagement.tsx')), -// }, -// ] -// }, -// { -// path:'member', -// key:'member', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberPage.tsx')), -// children:[ -// { -// path:'', -// key:'memberList', -// component: -// }, -// { -// path:'list', -// key:'memberList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberList.tsx')), -// }, -// { -// path:'list/:memberGroupId', -// key:'memberList3', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/member/MemberList.tsx')), -// } -// ] -// }, -// { -// path:'role', -// key:'role', -// component:, -// children:[ -// { -// path: '', -// key: 'roleList', -// component: -// }, -// { -// path:'list', -// key:'roleList2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleList.tsx')), -// },{ -// path:':roleType/config/:roleId', -// key:'roleConfig', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleConfig.tsx')), -// },{ -// path:':roleType/config', -// key:'roleConfig2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/role/RoleConfig.tsx')), -// } -// ] -// }, -// { -// path:'analytics', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/Dashboard.tsx')), -// key:'analytics', -// children:[ -// { -// path:'total', -// key:'analytics2', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/DashboardTotal.tsx')), -// }, -// ] -// }, -// { -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'intelligentPlugin' -// }, -// { -// path:'logsettings/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/logsettings/LogSettings.tsx')), -// key: 'logSettings', -// children:[{ -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'logSettings2' -// }] - -// }, -// APP_MODE ==='pro' && { -// path:'resourcesettings/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/resourcesettings/ResourceSettings.tsx')), -// key: 'resourceSettings', -// children:[{ -// path:'template/:moduleId', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')), -// key:'resourceSettings2' -// }] - -// }, -// { -// path:'userProfile/*', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/UserProfile.tsx')), -// key:'userProfile', -// children:[{ -// path:'changepsw', -// lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/ChangePsw.tsx')), -// key:'changePsw' -// }] -// } -// ] -// }, -// // ] +import { ApiparkPluginDriver } from '@common/utils/plugin.tsx'; +import { routerMap } from '@core/const/const'; +import withRouteGuard from "@common/components/aoplatform/WithRouteGuard.tsx"; +import ErrorBoundary from "@common/components/aoplatform/ErrorBoundary"; +import React from 'react'; +import { LoadingOutlined } from '@ant-design/icons'; const RenderRoutes = ()=> { - const { loadPlugins } = usePluginLoader() - const [routeConfig , setRouteConfig] = useState([]) + const { loadPlugins,loadExecutedPlugin } = usePluginLoader(ApiparkPluginDriver(routerMap), routerMap) + const { routeConfig } = useGlobalContext(); + const [router, setRouter] = useState(null); useEffect(()=>{ - loadPlugins().then((res)=>{ - console.log('newRouteConfig',res) - setRouteConfig(res as RouteConfig[]) + loadPlugins().then(()=>{ + loadExecutedPlugin() }) },[]) + useEffect(() => { + if (routeConfig && routeConfig.length > 0) { + const routerInstance = createBrowserRouter(generateRoutes(routeConfig)); + setRouter(routerInstance); + } + }, [routeConfig]); + + if (!router) { + return } spinning={true} className='w-full h-full flex items-center justify-center'>; + } + return ( - - - - { generateRoutes(routeConfig)} - - - - ) + + ); } -const generateRoutes = (routerConfig: RouteConfig[]) => { +const generateRoutes = (routerConfig: RouteConfig[]):RouteObject[] => { return routerConfig?.map((route: RouteConfig) => { let routeElement; if (route.lazy) { - const LazyComponent = route.lazy as React.ExoticComponent; - + let LazyComponent; + if (typeof route.lazy === 'function') { + const result = route.lazy(); + if (result instanceof Promise) { + LazyComponent = React.lazy(() => result.then(module => ({ default: module.default || module }))); + } else { + LazyComponent = result; + } + } else { + LazyComponent = route.lazy; + } + const GuardedComponent = withRouteGuard(LazyComponent, {pathPrefix:`/${route.pathPrefix ?? route.path}`, ...route.lifecycle}); routeElement = (
}> {route.provider ? ( - createElement(route.provider, {}, ) + createElement(route.provider, {}, ) ) : ( - + )} ); } else { routeElement = route.provider ? ( - createElement(route.provider, {}, route.component) + createElement(route.provider, {}, route.component) ) : ( route.component ); } return ( - - {route.children && generateRoutes(route.children as RouteConfig[])} - + { + path: route.path, + element: {routeElement} , + children: route.children ? generateRoutes(route.children as RouteConfig[]) : undefined,} ); } ) } // 保护的路由组件 -function ProtectedRoute() { +export function ProtectedRoute() { const {state} = useGlobalContext() return state.isAuthenticated? : ; } diff --git a/frontend/packages/businessEntry/src/consts/const.tsx b/frontend/packages/core/src/const/const.tsx similarity index 98% rename from frontend/packages/businessEntry/src/consts/const.tsx rename to frontend/packages/core/src/const/const.tsx index 1eb3ee10..63fea529 100644 --- a/frontend/packages/businessEntry/src/consts/const.tsx +++ b/frontend/packages/core/src/const/const.tsx @@ -1,18 +1,19 @@ +import { RouterMapConfig } from '@common/const/type'; +import { ProtectedRoute } from '@core/components/aoplatform/RenderRoutes'; +import { AiServiceProvider } from '@core/contexts/AiServiceContext'; import { SystemProvider } from '@core/contexts/SystemContext'; import { TeamProvider } from '@core/contexts/TeamContext'; +import AiServiceOutlet from '@core/pages/aiService/AiServiceOutlet'; +import Guide from '@core/pages/guide/Guide'; import Login from '@core/pages/Login'; import SystemOutlet from '@core/pages/system/SystemOutlet'; import { TenantManagementProvider } from '@market/contexts/TenantManagementContext'; import { lazy } from 'react'; import { Outlet, Navigate } from 'react-router-dom'; -import {ProtectedRoute} from '@businessEntry/components/aoplatform/RenderRoutes'; -import Guide from '@core/pages/guide/Guide'; -import { AiServiceProvider } from '@core/contexts/AiServiceContext'; -import AiServiceOutlet from '@core/pages/aiService/AiServiceOutlet'; -import React from 'react'; + // 内置插件与对应组件/模块 - export const routerMap:Map = new Map([ + export const routerMap:Map = new Map([ ['basicLayout', { type: 'component', component: }], ['navHidden', { type: 'component', component: }], ['login', { type: 'component', component: }], @@ -104,7 +105,7 @@ import React from 'react'; lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterCreate')), }, { - path:'router', + path:'route', key: 'restServiceInsideRoute', lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/api/SystemInsideRouterList')), }, diff --git a/frontend/packages/core/src/contexts/PartitionContext.tsx b/frontend/packages/core/src/contexts/PartitionContext.tsx deleted file mode 100644 index 2782ae2b..00000000 --- a/frontend/packages/core/src/contexts/PartitionContext.tsx +++ /dev/null @@ -1,23 +0,0 @@ - -import {FC, createContext, useContext, useState, ReactNode } from 'react'; -import { PartitionConfigFieldType } from '../const/partitions/types.ts'; - -interface PartitionContextProps { - partitionInfo:PartitionConfigFieldType|undefined - setPartitionInfo:React.Dispatch>; -} - -const PartitionContext = createContext(undefined); - -export const usePartitionContext = () => { - const context = useContext(PartitionContext); - if (!context) { - throw new Error('useArray must be used within a ArrayProvider'); - } - return context; -}; - -export const PartitionProvider: FC<{ children: ReactNode }> = ({ children }) => { - const [partitionInfo, setPartitionInfo] = useState() - return {children}; -}; \ No newline at end of file diff --git a/frontend/packages/core/src/contexts/SystemMyServiceContext.tsx b/frontend/packages/core/src/contexts/SystemMyServiceContext.tsx deleted file mode 100644 index ffc4b34e..00000000 --- a/frontend/packages/core/src/contexts/SystemMyServiceContext.tsx +++ /dev/null @@ -1,23 +0,0 @@ - -import { createContext, useContext, useState, ReactNode, FC } from 'react'; -import { MyServiceFieldType } from '../const/system/type.ts'; - -interface SystemMyServiceContextProps { - serviceInfo:MyServiceFieldType|undefined - setServiceInfo:React.Dispatch>; -} - -const SystemMyServiceContext = createContext(undefined); - -export const useSystemMyServiceContext = () => { - const context = useContext(SystemMyServiceContext); - if (!context) { - throw new Error('useArray must be used within a ArrayProvider'); - } - return context; -}; - -export const SystemMyServiceProvider: FC<{ children: ReactNode }> = ({ children }) => { - const [serviceInfo, setServiceInfo] = useState() - return {children}; -}; \ No newline at end of file diff --git a/frontend/packages/core/src/main.tsx b/frontend/packages/core/src/main.tsx index 7d71bc81..c8bd43ec 100644 --- a/frontend/packages/core/src/main.tsx +++ b/frontend/packages/core/src/main.tsx @@ -3,8 +3,6 @@ import {StrictMode} from 'react' import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' -import {GlobalProvider} from "@common/contexts/GlobalStateContext.tsx"; - async function initializeApp() { try { // 初始化行为 @@ -13,9 +11,7 @@ async function initializeApp() { // 异步操作完成后,渲染React消费者 ReactDOM.createRoot(document.getElementById('root')!).render( - - , ); } catch (error) { diff --git a/frontend/packages/core/src/pages/Login.tsx b/frontend/packages/core/src/pages/Login.tsx index dc59c5d8..120b28f2 100644 --- a/frontend/packages/core/src/pages/Login.tsx +++ b/frontend/packages/core/src/pages/Login.tsx @@ -206,7 +206,7 @@ const Login:FC = ()=> {

- {$t('Version (0)-(1)',[state.version,state.updateDate])}, {$t(state.powered)} + {$t('Version (0)-(1)',[state?.version,state?.updateDate])}, {$t(state?.powered || '-')}

diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx index e0eaad83..303ecadc 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx @@ -42,7 +42,6 @@ const AiServiceInsidePage:FC = ()=> { const getApiDefine = ()=>{ - console.log('@@@@@@@') setApiPrefix('') setPrefixForce(false) fetchData>('service/router/define',{method:'GET',eoParams:{service:serviceId,team:teamId}}).then(response=>{ diff --git a/frontend/packages/core/src/pages/system/upstream/SystemInsideUpstreamContent.tsx b/frontend/packages/core/src/pages/system/upstream/SystemInsideUpstreamContent.tsx index bec5c1d6..550bdbfd 100644 --- a/frontend/packages/core/src/pages/system/upstream/SystemInsideUpstreamContent.tsx +++ b/frontend/packages/core/src/pages/system/upstream/SystemInsideUpstreamContent.tsx @@ -79,7 +79,7 @@ const SystemInsideUpstreamContent= forwardRef if(code === STATUS_CODE.SUCCESS){ setTimeout(()=>{ form.setFieldsValue({...DEFAULT_FORM_VALUE,...data.upstream}) - setFormShowHost(data.upstream.passHost === 'rewrite') + setFormShowHost(data.upstream?.passHost === 'rewrite') },0) }else{ message.error(msg || $t(RESPONSE_TIPS.error)) diff --git a/frontend/packages/core/src/pages/team/TeamList.tsx b/frontend/packages/core/src/pages/team/TeamList.tsx index 075d753d..4efbf9f7 100644 --- a/frontend/packages/core/src/pages/team/TeamList.tsx +++ b/frontend/packages/core/src/pages/team/TeamList.tsx @@ -31,7 +31,6 @@ const TeamList:FC = ()=>{ const [curTeam, setCurTeam] = useState({} as TeamConfigFieldType) const [modalVisible, setModalVisible] = useState(false) const [modalType, setModalType] = useState<'add'|'edit'>('add') - const getTeamList = ()=>{ if(!accessInit){ getGlobalAccessData()?.then?.(()=>{getTeamList()}) diff --git a/frontend/packages/core/vite.config.ts b/frontend/packages/core/vite.config.ts index 7dc973e7..918a68a7 100644 --- a/frontend/packages/core/vite.config.ts +++ b/frontend/packages/core/vite.config.ts @@ -5,6 +5,7 @@ import path from 'path' import dynamicImportVars from '@rollup/plugin-dynamic-import-vars'; import tailwindcss from 'tailwindcss'; import autoprefixer from 'autoprefixer'; +import federation from "@originjs/vite-plugin-federation"; export default defineConfig({ cacheDir: './node_modules/.vite', @@ -42,6 +43,17 @@ export default defineConfig({ exclude:[], warnOnError:false }), + federation({ + name:"container", + remotes:{ + remoteApp: 'http://localhost:5001/assets/remoteEntry.js' // 远程项目的URL + }, + shared:[ + "react", + "react-dom", + ] + }) + ], resolve: { alias: [ diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx index 29202f45..48aadf61 100644 --- a/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx +++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx @@ -78,7 +78,6 @@ export const ManagementAuthorityConfig = forwardRef { - //console.log(data) if(type === 'edit' && data){ form.setFieldsValue({...data,expireTime:data.expireTime === 0 ? '' : dayjs(data.expireTime * 1000)}) forceUpdate({}) diff --git a/frontend/packages/market/src/pages/serviceHub/management/ServiceHubManagement.tsx b/frontend/packages/market/src/pages/serviceHub/management/ServiceHubManagement.tsx index 97473e64..59e99221 100644 --- a/frontend/packages/market/src/pages/serviceHub/management/ServiceHubManagement.tsx +++ b/frontend/packages/market/src/pages/serviceHub/management/ServiceHubManagement.tsx @@ -110,7 +110,7 @@ export default function ServiceHubManagement() { })) ); if (!teamId && data.teams?.[0]?.id) { - navigateTo(data.teams[0].id); + navigateTo(`/consumer/list/${data.teams[0].id}`); } } else { message.error(msg || $t(RESPONSE_TIPS.error));