@lmy54321/design-system 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{rules → .codebuddy/rules}/design-system.mdc +28 -0
- package/.codebuddy/rules/init-project.mdc +127 -0
- package/package.json +6 -3
- package/template/index.html +18 -0
- package/template/public/manifest.json +9 -0
- package/template/src/App.tsx +55 -0
- package/template/src/index.css +4 -0
- package/template/src/main.tsx +28 -0
- package/template/src/pages/CommuteFoodPage.tsx +547 -0
- package/template/src/pages/ComponentLibrary.tsx +1049 -0
- package/template/src/pages/DeployPage.tsx +290 -0
- package/template/src/pages/DevPortal.tsx +161 -0
- package/template/src/pages/ExplorePage.tsx +1013 -0
- package/template/src/pages/MapHome.tsx +388 -0
- package/template/src/pages/MapSearchPage.tsx +529 -0
- package/template/src/pages/MePage.tsx +196 -0
- package/template/src/pages/POIRecommendPage.tsx +676 -0
- package/template/src/pages/PlanDetailPage.tsx +345 -0
- package/template/src/pages/PlanPage.tsx +602 -0
- package/template/src/pages/RouteDetailPage.tsx +276 -0
- package/template/src/pages/SearchFlowDemo.tsx +954 -0
- package/template/src/pages/SyncTool.tsx +688 -0
- package/template/src/pages/TeamTripPage.tsx +697 -0
- package/template/src/pages/TemplateDetailPage.tsx +287 -0
- package/template/tsconfig.json +23 -0
- package/template/vite.config.ts +18 -0
|
@@ -10,6 +10,34 @@ provider:
|
|
|
10
10
|
|
|
11
11
|
本项目使用团队设计系统 `@lmy54321/design-system`,所有 UI 开发必须优先使用该组件库。
|
|
12
12
|
|
|
13
|
+
## 用户画像与交互原则
|
|
14
|
+
|
|
15
|
+
> **核心原则:本设计系统的目标用户是纯设计师,没有编程背景。**
|
|
16
|
+
|
|
17
|
+
### 必须遵守的交互规范
|
|
18
|
+
|
|
19
|
+
1. **完全可视化操作** — 所有功能必须通过界面点击完成,禁止要求用户输入命令行指令
|
|
20
|
+
2. **零代码门槛** — 不要让用户手动编辑代码文件、配置文件或 JSON
|
|
21
|
+
3. **直观的交互方式** — 优先使用拖拽、点击、下拉选择等图形化操作
|
|
22
|
+
4. **友好的文案** — 避免技术术语(如 "npm"、"diff"、"merge"),使用设计师能理解的语言
|
|
23
|
+
|
|
24
|
+
### AI 生成代码时的注意事项
|
|
25
|
+
|
|
26
|
+
- 当需要文件操作时,**自动完成**,不要告诉用户去执行命令
|
|
27
|
+
- 当遇到冲突或选择时,**提供可视化界面**让用户点击选择,而非要求手动操作
|
|
28
|
+
- 当解释功能时,**用界面截图或示意图**而非代码片段
|
|
29
|
+
- 错误提示要**友好清晰**,告诉用户如何通过界面解决,而非给出技术排查步骤
|
|
30
|
+
|
|
31
|
+
### 禁止的交互方式
|
|
32
|
+
|
|
33
|
+
| 禁止 | 替代方案 |
|
|
34
|
+
|------|----------|
|
|
35
|
+
| 要求用户运行命令行指令 | AI 自动执行,或提供一键操作按钮 |
|
|
36
|
+
| 要求用户手动对比代码差异 | 提供可视化对比界面 |
|
|
37
|
+
| 要求用户手动编辑配置文件 | 提供设置面板,点击切换选项 |
|
|
38
|
+
| 输出大段代码让用户复制粘贴 | AI 直接写入文件,用户只需确认 |
|
|
39
|
+
| 使用技术术语解释问题 | 用通俗语言 + 图示说明 |
|
|
40
|
+
|
|
13
41
|
## 可用组件清单
|
|
14
42
|
|
|
15
43
|
生成 UI 代码时,**必须优先**从以下组件中选用,禁止重复造轮子:
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 当用户说"初始化项目"、"新建项目"、"搭建项目"、"项目初始化"时触发,自动完成 React + Vite + 团队设计系统的完整初始化。
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
enabled: true
|
|
5
|
+
updatedAt: 2026-03-02T10:03:20.525Z
|
|
6
|
+
provider:
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 项目一键初始化流程
|
|
10
|
+
|
|
11
|
+
当用户说「初始化项目」「新建项目」「搭建项目」时,按以下步骤自动执行,**无需用户确认每一步**:
|
|
12
|
+
|
|
13
|
+
## 环境要求
|
|
14
|
+
|
|
15
|
+
- **Node.js >= 18**(Vite 5+ 和 Tailwind CSS 4 均要求 Node 18 以上)
|
|
16
|
+
|
|
17
|
+
## 自动执行步骤
|
|
18
|
+
|
|
19
|
+
### 0. 环境检测(新电脑必须先过这一关)
|
|
20
|
+
|
|
21
|
+
在执行任何操作前,**自动检测**以下依赖,缺什么装什么,全程自动,不要让用户手动操作:
|
|
22
|
+
|
|
23
|
+
#### 检测 Node.js
|
|
24
|
+
```bash
|
|
25
|
+
node -v
|
|
26
|
+
```
|
|
27
|
+
- 如果命令不存在或版本 < 18:
|
|
28
|
+
- **macOS**:先检查 `brew -v`,如果没有 Homebrew,先安装:
|
|
29
|
+
```bash
|
|
30
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
31
|
+
```
|
|
32
|
+
然后安装 Node.js:
|
|
33
|
+
```bash
|
|
34
|
+
brew install node
|
|
35
|
+
```
|
|
36
|
+
- **Windows**:通过 winget 安装(Windows 10/11 自带):
|
|
37
|
+
```bash
|
|
38
|
+
winget install OpenJS.NodeJS.LTS --accept-source-agreements --accept-package-agreements
|
|
39
|
+
```
|
|
40
|
+
如果 winget 不可用,提示用户前往 https://nodejs.org 下载 LTS 版本安装包,安装后重启 CodeBuddy。
|
|
41
|
+
- **Linux**:
|
|
42
|
+
```bash
|
|
43
|
+
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
|
|
44
|
+
sudo apt-get install -y nodejs
|
|
45
|
+
```
|
|
46
|
+
- 安装完成后**再次验证** `node -v` 和 `npm -v`,确认可用后才继续。
|
|
47
|
+
|
|
48
|
+
#### 检测 npm
|
|
49
|
+
```bash
|
|
50
|
+
npm -v
|
|
51
|
+
```
|
|
52
|
+
npm 随 Node.js 一起安装,正常情况下不需要单独处理。如果 Node 装好了但 npm 异常,运行:
|
|
53
|
+
```bash
|
|
54
|
+
node -e "console.log('node ok')" && npm -v
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> **原则:** 环境检测和安装全程自动执行,用户只需等待。如果某步安装需要管理员权限,告诉用户「需要输入电脑密码来安装 XXX」即可,不要让用户去搜教程或手动下载。
|
|
58
|
+
|
|
59
|
+
### 1. 创建 React + Vite 项目
|
|
60
|
+
```bash
|
|
61
|
+
npm create vite@latest . -- --template react-ts
|
|
62
|
+
```
|
|
63
|
+
如果当前目录已有 package.json,则跳过此步。
|
|
64
|
+
|
|
65
|
+
### 2. 安装依赖
|
|
66
|
+
```bash
|
|
67
|
+
npm install
|
|
68
|
+
npm install @lmy54321/design-system
|
|
69
|
+
npm install tailwindcss @tailwindcss/vite
|
|
70
|
+
npm install react-router-dom motion
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. 同步设计系统 AI 规则
|
|
74
|
+
将 npm 包中附带的 CodeBuddy 规则文件复制到项目的 `.codebuddy/rules/` 目录,确保 AI 辅助开发时能识别组件库规范:
|
|
75
|
+
```bash
|
|
76
|
+
mkdir -p .codebuddy/rules
|
|
77
|
+
cp node_modules/@lmy54321/design-system/.codebuddy/rules/design-system.mdc .codebuddy/rules/design-system.mdc
|
|
78
|
+
cp node_modules/@lmy54321/design-system/.codebuddy/rules/init-project.mdc .codebuddy/rules/init-project.mdc
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> **说明:** 规则文件随 npm 包版本同步发布,每次升级设计系统版本后应重新执行此复制命令以获取最新规范。`init-project.mdc` 也会被复制,这样项目后续可以再次执行初始化或帮助其他同事同步规则。
|
|
82
|
+
|
|
83
|
+
### 4. 复制完整 Demo 模板
|
|
84
|
+
|
|
85
|
+
设计系统 npm 包中内置了完整的 Demo 项目模板(地图首页、探索页、行程规划、个人中心、开发者入口、组件库展示等),直接复制即可运行。
|
|
86
|
+
|
|
87
|
+
**模板会覆盖 Vite 默认文件**(`vite.config.ts`、`tsconfig.json`、`index.html`、`src/` 下的所有文件),已包含正确的 Tailwind + 设计系统样式配置,无需手动修改:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# 复制 Demo 模板文件(覆盖 Vite 默认生成的文件)
|
|
91
|
+
cp -r node_modules/@lmy54321/design-system/template/src/* src/
|
|
92
|
+
cp node_modules/@lmy54321/design-system/template/index.html index.html
|
|
93
|
+
cp node_modules/@lmy54321/design-system/template/vite.config.ts vite.config.ts
|
|
94
|
+
cp node_modules/@lmy54321/design-system/template/tsconfig.json tsconfig.json
|
|
95
|
+
|
|
96
|
+
# 复制 public 资源(manifest 等)
|
|
97
|
+
cp -r node_modules/@lmy54321/design-system/template/public/* public/ 2>/dev/null || true
|
|
98
|
+
|
|
99
|
+
# 删除 Vite 默认生成的无用文件
|
|
100
|
+
rm -f src/App.css src/assets/react.svg public/vite.svg
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> **说明:** 模板包含以下路由页面,启动后可通过浏览器访问:
|
|
104
|
+
> - `/` — Demo 首页(手机预览效果,含地图首页、探索、行程、我的四个 Tab)
|
|
105
|
+
> - `/dev` — 开发者入口(四个功能卡片导航)
|
|
106
|
+
> - `/components` — 组件库交互式展示
|
|
107
|
+
> - `/sync` — 规范同步工具
|
|
108
|
+
> - `/deploy` — 部署预览
|
|
109
|
+
>
|
|
110
|
+
> **注意:** 模板中的 `src/index.css` 已配置好样式导入,不需要手动修改。不要在其中单独写 `@import "tailwindcss"`,设计系统样式内部已包含 Tailwind 初始化。
|
|
111
|
+
|
|
112
|
+
### 7. 启动开发服务器
|
|
113
|
+
```bash
|
|
114
|
+
npm run dev
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 6. 完成后告诉用户
|
|
118
|
+
告诉用户:
|
|
119
|
+
|
|
120
|
+
「项目已初始化完成!已加载完整的 Demo 项目,包含多个示例页面。
|
|
121
|
+
|
|
122
|
+
**访问地址:**
|
|
123
|
+
- 首页(手机预览):http://localhost:5173/
|
|
124
|
+
- 开发者入口:http://localhost:5173/dev
|
|
125
|
+
- 组件库:http://localhost:5173/components
|
|
126
|
+
|
|
127
|
+
你可以在这些 Demo 的基础上修改,或者描述你想要的新页面。」
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmy54321/design-system",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A comprehensive React component library and design system based on Tailwind CSS and Motion.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -12,13 +12,15 @@
|
|
|
12
12
|
"require": "./dist/index.js"
|
|
13
13
|
},
|
|
14
14
|
"./styles": "./styles/globals.css",
|
|
15
|
-
"./rules/*": "
|
|
15
|
+
"./rules/*": "./.codebuddy/rules/*"
|
|
16
16
|
},
|
|
17
17
|
"sideEffects": false,
|
|
18
18
|
"files": [
|
|
19
19
|
"dist",
|
|
20
20
|
"styles",
|
|
21
|
-
"
|
|
21
|
+
"template",
|
|
22
|
+
".codebuddy/rules/design-system.mdc",
|
|
23
|
+
".codebuddy/rules/init-project.mdc"
|
|
22
24
|
],
|
|
23
25
|
"scripts": {
|
|
24
26
|
"dev": "vite",
|
|
@@ -38,6 +40,7 @@
|
|
|
38
40
|
"clsx": "^2.1.0",
|
|
39
41
|
"lucide-react": "^0.330.0",
|
|
40
42
|
"motion": "^12.0.0",
|
|
43
|
+
"react-router-dom": "^7.13.1",
|
|
41
44
|
"tailwind-merge": "^2.2.1",
|
|
42
45
|
"tdesign-icons-react": "^0.6.2"
|
|
43
46
|
},
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
|
6
|
+
<!-- PWA 全屏模式,添加到主屏幕后无地址栏 -->
|
|
7
|
+
<meta name="mobile-web-app-capable" content="yes">
|
|
8
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
9
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
10
|
+
<meta name="theme-color" content="#4B526B">
|
|
11
|
+
<link rel="manifest" href="/manifest.json">
|
|
12
|
+
<title>Design Demo</title>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div id="root"></div>
|
|
16
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { useState, useCallback } from "react";
|
|
2
|
+
import type { TabId } from "@lmy54321/design-system";
|
|
3
|
+
import { MapHome } from "./pages/MapHome";
|
|
4
|
+
import { ExplorePage } from "./pages/ExplorePage";
|
|
5
|
+
import { PlanPage } from "./pages/PlanPage";
|
|
6
|
+
import { MePage } from "./pages/MePage";
|
|
7
|
+
|
|
8
|
+
export interface NewPlanPayload {
|
|
9
|
+
title: string;
|
|
10
|
+
spots: number;
|
|
11
|
+
image: string;
|
|
12
|
+
stops: { name: string; icon: string; dur: string }[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default function App() {
|
|
16
|
+
const [activeTab, setActiveTab] = useState<TabId>("home");
|
|
17
|
+
const [newPlan, setNewPlan] = useState<NewPlanPayload | null>(null);
|
|
18
|
+
|
|
19
|
+
const handleCreatePlan = useCallback((plan: NewPlanPayload) => {
|
|
20
|
+
setNewPlan(plan);
|
|
21
|
+
setActiveTab("plan");
|
|
22
|
+
}, []);
|
|
23
|
+
|
|
24
|
+
const handlePlanConsumed = useCallback(() => {
|
|
25
|
+
setNewPlan(null);
|
|
26
|
+
}, []);
|
|
27
|
+
|
|
28
|
+
const renderPage = () => {
|
|
29
|
+
switch (activeTab) {
|
|
30
|
+
case "home":
|
|
31
|
+
return <MapHome activeTab={activeTab} onTabChange={setActiveTab} />;
|
|
32
|
+
case "explore":
|
|
33
|
+
return <ExplorePage activeTab={activeTab} onTabChange={setActiveTab} onCreatePlan={handleCreatePlan} />;
|
|
34
|
+
case "plan":
|
|
35
|
+
return (
|
|
36
|
+
<PlanPage
|
|
37
|
+
activeTab={activeTab}
|
|
38
|
+
onTabChange={setActiveTab}
|
|
39
|
+
newPlan={newPlan}
|
|
40
|
+
onNewPlanConsumed={handlePlanConsumed}
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
case "me":
|
|
44
|
+
return <MePage activeTab={activeTab} onTabChange={setActiveTab} />;
|
|
45
|
+
default:
|
|
46
|
+
return <MapHome activeTab={activeTab} onTabChange={setActiveTab} />;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<div className="w-full max-w-[100vw] h-[100dvh] overflow-hidden relative">
|
|
52
|
+
{renderPage()}
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import ReactDOM from "react-dom/client";
|
|
3
|
+
import { BrowserRouter, Routes, Route } from "react-router-dom";
|
|
4
|
+
import App from "./App";
|
|
5
|
+
import { DevPortal } from "./pages/DevPortal";
|
|
6
|
+
import { ComponentLibrary } from "./pages/ComponentLibrary";
|
|
7
|
+
import { SyncTool } from "./pages/SyncTool";
|
|
8
|
+
import { DeployPage } from "./pages/DeployPage";
|
|
9
|
+
import "./index.css";
|
|
10
|
+
|
|
11
|
+
ReactDOM.createRoot(document.getElementById("root")!).render(
|
|
12
|
+
<React.StrictMode>
|
|
13
|
+
<BrowserRouter>
|
|
14
|
+
<Routes>
|
|
15
|
+
{/* Demo 首页 — 手机预览的内容 */}
|
|
16
|
+
<Route path="/*" element={<App />} />
|
|
17
|
+
{/* 开发者入口 */}
|
|
18
|
+
<Route path="/dev" element={<DevPortal />} />
|
|
19
|
+
{/* 组件库展示 */}
|
|
20
|
+
<Route path="/components" element={<ComponentLibrary />} />
|
|
21
|
+
{/* 规范同步 */}
|
|
22
|
+
<Route path="/sync" element={<SyncTool />} />
|
|
23
|
+
{/* 部署预览 */}
|
|
24
|
+
<Route path="/deploy" element={<DeployPage />} />
|
|
25
|
+
</Routes>
|
|
26
|
+
</BrowserRouter>
|
|
27
|
+
</React.StrictMode>
|
|
28
|
+
);
|