Wujies 无界平台
多端前端后台管理

工程结构

后台前端是标准的 Vue 3 + Vite 工程,外加一个平台特有的 plugins/appmarket/ 和 app-market-dist/。读这一页的目标是:知道新页面、新接口、新远程应用分别该放哪。

目录

plus-ui/
├── index.html                  ★ import map(裸模块 → /app-runtime/*.js)
├── vite.config.ts              端口、/dev-api 代理、插件
├── .env.development            开发环境变量
├── app-market-dist/            ★ 远程应用产物(构建期复制进 dist)
│   ├── remote-apps/<appCode>/  index.js / index.css
│   └── app-runtime/            vue.js、element-plus.js、dromara-*.js
├── scripts/
│   ├── gen-runtime-shims.mjs   生成运行时垫片
│   ├── check-runtime-shims.mjs 校验垫片
│   ├── check-remote-apps.mjs   校验远程应用产物
│   └── check-remote-globals.mjs 校验 AutoImport 清单
└── src/
    ├── api/                    接口函数,按业务域分文件
    ├── assets/                 静态资源
    ├── components/             通用组件
    ├── layout/                 顶栏 / 侧边栏 / 标签页
    ├── plugins/
    │   ├── appmarket/          ★ 远程应用宿主(loader / runtime / bootstrap)
    │   └── ...                 全局插件
    ├── router/                 静态路由 + 动态菜单路由
    ├── store/                  Pinia(用户、权限、应用、设置)
    ├── utils/                  request / auth / 加密 / 下载
    └── views/                  页面
        ├── appstore/           应用市场、我的应用、应用上架
        ├── dashboard/          工作台
        ├── system/             系统管理
        ├── monitor/            系统监控
        ├── workflow/           工作流
        └── ...

请求链路

页面组件
  → src/api/xxx.ts
    → src/utils/request.ts(axios 实例)
      → /dev-api/...(开发)或 /prod-api/...(生产)
        → Vite / Nginx 代理
          → 后端 8086
  • 开发:vite.config.ts 把 VITE_APP_BASE_API(默认 /dev-api)代理到 http://127.0.0.1:8086,并去掉前缀。
  • 生产:由 Nginx 把 /prod-api 转发到后端;前端代码里不写死后端域名。
  • 加密:VITE_APP_ENCRYPT 打开时,请求与响应走 RSA;必须和后端同时开/关。

新增一个页面

  1. 在 src/views/<业务>/ 下新建 .vue;
  2. 在 src/api/ 下补接口函数;
  3. 菜单由后端 sys_menu 下发,component 填页面路径(宿主页面)或 remote:<appCode>/<viewKey>(远程应用页面);
  4. 权限按钮由后端菜单的 perms 控制,页面里用 v-hasPermi / hasPermi 判断。
远程应用页面不是文件路径

菜单里写 remote:exam/exam/settings 时,exam/exam/settings 只是视图键,不是 src/views 下的路径。真实代码在应用仓库的 frontend/exam-app/src/views/ 里,由运行时 import() 加载。

新增一个远程应用(宿主侧)

宿主侧通常不需要改代码,只要产物到位:

  1. 应用打包时把前端产物放到 app-market-dist/remote-apps/<appCode>/;
  2. 后端返回的 GET /app/runtime/remote-apps 里带上 { appCode, entry };
  3. 菜单的 component 使用 remote:<appCode>/<viewKey>;
  4. 刷新页面,loader.ts 会注册视图与路由。

如果产物是本地开发目录,可以用 WUJIES_FRONTEND_DIST 指过去,避免手工复制:

$env:WUJIES_FRONTEND_DIST = '<宿主根>\app-market-dist\remote-apps'

哪些文件不要动

文件原因
index.html 的 import map与运行时垫片、gen-runtime-shims.mjs 三方一致,改错会双 Vue
app-market-dist/app-runtime/*.js生成物;改源文件后重跑 gen:runtime
src/plugins/appmarket/loader.ts 的加载契约影响所有远程应用,改前先读 远程应用接入
check-* 脚本它们是硬约定的守门人,不要为了让检查通过而放宽

目录