{"id":50714950,"url":"https://github.com/iotames/adminwebui","last_synced_at":"2026-06-09T18:30:40.630Z","repository":{"id":361734903,"uuid":"1255268363","full_name":"iotames/adminwebui","owner":"iotames","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-01T02:14:06.000Z","size":54,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T04:13:01.756Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iotames.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T16:09:28.000Z","updated_at":"2026-06-01T02:14:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iotames/adminwebui","commit_stats":null,"previous_names":["iotames/adminwebui"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/iotames/adminwebui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotames%2Fadminwebui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotames%2Fadminwebui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotames%2Fadminwebui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotames%2Fadminwebui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iotames","download_url":"https://codeload.github.com/iotames/adminwebui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iotames%2Fadminwebui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34121020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-09T18:30:38.998Z","updated_at":"2026-06-09T18:30:40.625Z","avatar_url":"https://github.com/iotames.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Admerp WebUI · 企业应用中台前端\n\nAdmerp 是一个**面向领域驱动设计（DDD）**的极简企业中台前端框架。核心理念是**技术栈无关、高内聚低耦合、组件化、高扩展**，让新业务域能以最低成本接入。\n\n## 核心理念\n\n- **极简框架** — 基于 Web Components 原生标准，不锁定任何前端框架。骨架层脱离具体技术栈，接入模块无限制\n- **DDD 友好** — 每个业务领域可独立为 package，独立开发、独立部署、独立演进\n- **低代码渲染** — 集成百度 AMIS 低代码引擎，页面可按需在「代码编程」与「Schema 配置」间切换\n- **Mock 驱动开发** — MSW（Mock Service Worker）在浏览器端拦截请求，开发阶段完全脱离后端 API\n- **逻辑与 UI 分离** — 支持无头组件设计，业务逻辑可跨 UI 层复用\n\n## 架构概览\n\n```\n┌────────────────────────────────────────────────┐\n│                  index.html                     │\n│  \u003capp-shell /\u003e ← 根组件（无框架 Shadow DOM）    │\n├────────────────────────────────────────────────┤\n│                                                    │\n│  ┌──────────┐  ┌──────────────────────────────┐  │\n│  │ app-menu │  │         app-router            │  │\n│  │ (Shadow  │  │  ┌─────────────────────────┐  │  │\n│  │  DOM)    │  │  │ amis-schema（AMIS渲染）  │  │  │\n│  │          │  │  │ wc://xxx（原生组件）     │  │  │\n│  │ 动态菜单 │  │  └─────────────────────────┘  │  │\n│  └──────────┘  └──────────────────────────────┘  │\n│                                                    │\n│  packages/shell  ← 骨架层                          │\n│  packages/shared ← 共享层（类型/API/Store）        │\n│  packages/amis-renderer ← AMIS 渲染适配器          │\n├────────────────────────────────────────────────┤\n│           MSW Mock 服务（开发环境）              │\n│  /api/system/*   /api/auth/*   /api/dept/*     │\n│  /api/user/*     （浏览器端拦截，无需后端）       │\n└────────────────────────────────────────────────┘\n```\n\n### 数据流\n\n```\n统一 API 接口 → MSW Mock 拦截 → JSON 响应 → 前端动态渲染\n     ↑                    ↑\n  真实后端             开发环境\n（部署时切换）       （无需后端）\n```\n\n## 快速开始\n\n```bash\n# 环境要求\n# Node.js \u003e= 18、pnpm \u003e= 9\n\n# 安装依赖\npnpm install\n\n# 启动开发服务器（自动启用 MSW Mock）\npnpm dev\n# → http://localhost:3000\n\n# 登录（任意用户名密码即可）\n# 演示环境无需真实后端\n```\n\n## 项目结构\n\n```\nadmerp-webui/\n├── index.html                  # 入口 HTML\n├── vite.config.ts              # Vite 构建配置\n├── tsconfig.json               # TypeScript 配置\n├── pnpm-workspace.yaml         # Monorepo 工作区\n├── package.json                # 根 package\n│\n├── packages/\n│   ├── shell/                  # 骨架层\n│   │   └── src/\n│   │       ├── index.ts\n│   │       └── components/\n│   │           ├── app-shell.ts      # 根组件（登录/主界面切换）\n│   │           ├── app-layout.ts     # 主布局（侧栏+顶栏+内容区）\n│   │           ├── app-menu.ts       # 动态菜单\n│   │           ├── app-router.ts     # 动态路由\n│   │           └── login-page.ts     # 登录页面（原生组件）\n│   │\n│   ├── shared/                 # 共享层\n│   │   └── src/\n│   │       ├── index.ts\n│   │       ├── types/          # 类型定义\n│   │       ├── api/            # API 客户端（fetch 封装）\n│   │       └── store/          # 状态管理（Zustand）\n│   │\n│   └── amis-renderer/          # AMIS 低代码渲染器\n│       └── src/\n│           ├── index.ts\n│           └── amis-schema.ts  # \u003camis-schema\u003e 自定义元素\n│\n├── mock/                       # MSW Mock 服务\n│   ├── browser.ts              # Service Worker 入口\n│   ├── data/                   # 模拟数据\n│   └── handlers/               # 请求处理器\n│       ├── auth.ts             # 认证\n│       ├── dept.ts             # 部门 CRUD\n│       ├── user.ts             # 用户 CRUD\n│       └── system.ts           # 菜单/路由/Schema\n│\n├── public/\n│   └── amis/                   # AMIS SDK（6.13.0）\n│\n└── scripts/\n    └── verify.mjs              # Puppeteer 端到端验证\n```\n\n## 快速导航\n\n| 目的 | 文档 |\n|------|------|\n| 理解各包职责、组件关系、Shadow DOM 策略 | [架构详解](dev.md#项目架构) |\n| 本地开发（启动、Mock、HMR） | [开发流程](dev.md#开发流程) |\n| 接入新业务域（AMIS / WC / 独立包） | [接入新业务域](dev.md#接入新业务域) |\n| 编写 AMIS Schema（CRUD 模板、数据格式） | [AMIS Schema 开发](dev.md#amis-schema-开发) |\n| 新增 Mock API（MSW handler 写法） | [Mock API 开发](dev.md#mock-api-开发) |\n| 组件开发规范（生命周期、命名、事件通信） | [组件开发规范](dev.md#组件开发规范) |\n| 运行 Puppeteer 端到端验证 | [验证与测试](dev.md#验证与测试) |\n| 构建部署、切换真实后端 | [构建与部署](dev.md#构建与部署) |\n| 常见问题（样式、路由、MSW 不拦截等） | [常见问题](dev.md#常见问题) |\n\n详细开发指南请参阅 **[dev.md](dev.md)**。\n\n## 核心技术点\n\n### Web Components 原生架构\n\n所有界面组件均为标准 Custom Elements，不依赖任何框架。主骨架 `app-shell` 不使用 Shadow DOM（以保证 AMIS CSS 正常穿透），子组件如 `app-menu`、`login-page` 使用 Shadow DOM 实现样式隔离。\n\n### 动态路由与菜单\n\n登录后通过统一 API 一次性获取菜单和路由配置：\n\n```\nGET /api/system/menu   → 多级菜单树\nGET /api/system/route  → 路由表（path ↔ component 映射）\nGET /api/system/component?name=xxx → 组件 Schema\n```\n\n路由组件格式：\n- `amis://dept-manage` → AMIS Schema 渲染\n- `wc://login-page` → 原生 Web Component 渲染\n\n### AMIS 低代码渲染\n\n`\u003camis-schema\u003e` 自定义元素从 API 加载 AMIS JSON Schema 并渲染。支持 CRUD、表单、弹窗、数据联动等丰富组件，详情参考 [AMIS 文档](https://aisuda.bce.baidu.com/amis/zh-CN/docs/index)。\n\n- amis-jssdk: https://github.com/baidu/amis/releases/download/6.13.0/jssdk.tar.gz\n\n### MSW Mock 服务\n\n开发环境下使用 MSW（Mock Service Worker）在浏览器端拦截 HTTP 请求，无需启动后端服务器。所有 API 遵循统一的数据格式：\n\n```json\n{\n  \"status\": 0,\n  \"msg\": \"ok\",\n  \"data\": { ... }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiotames%2Fadminwebui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiotames%2Fadminwebui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiotames%2Fadminwebui/lists"}