Skip to content

Commit 676b805

Browse files
committed
feat: 增加 skills
1 parent bf365be commit 676b805

26 files changed

Lines changed: 1506 additions & 0 deletions
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
name: fm-framework-settings
3+
description: 管理和配置 Fantastic-mobile 框架设置。当用户提到以下任何需求时必须使用此技能:开启/关闭权限功能、哀悼模式;切换暗色/亮色/跟随系统颜色方案、调整圆角、启用色弱模式;配置顶部导航栏(navbar)启用状态;配置底部标签栏(tabbar)启用状态和导航菜单列表;调整进度条、返回顶部;设置底部版权信息;以及任何涉及 apps/*/src/settings/index.ts 的修改。
4+
---
5+
6+
# 框架设置
7+
8+
## 第一步:确认工作区
9+
10+
本项目是 monorepo 架构,`apps/` 目录下存放各应用。**在开始任何操作前,先执行 `ls apps/` 查看当前有哪些应用,然后询问用户要修改的是哪个**,除非用户已在对话中明确说明。
11+
12+
确认后,后续所有文件路径均以该应用目录为根,例如 `apps/core/src/settings/index.ts`
13+
14+
## 核心文件
15+
16+
以下路径中的 `<app>` 替换为实际应用名:
17+
18+
- `apps/<app>/src/types/global.d.ts` - TypeScript 类型定义(只读参考)
19+
- `apps/<app>/src/settings/index.ts` - 当前配置文件(修改此文件)
20+
- `apps/<app>/src/settings/default.ts` - 默认完整配置(禁止修改,仅供参考)
21+
22+
## 工作流程
23+
24+
1. **确认应用**:参见上方"确认工作区",得到 `<app>` 后再继续
25+
2. 读取 `apps/<app>/src/settings/index.ts` 了解当前配置
26+
3. 查阅 `apps/<app>/src/types/global.d.ts` 中的类型定义了解可用选项
27+
4. 查阅 `apps/<app>/src/settings/default.ts` 了解默认值
28+
5. 仅修改 `apps/<app>/src/settings/index.ts`
29+
6. 修改后检查:与默认值相同的配置项直接移除——`index.ts` 只需保留真正自定义的内容,框架会自动继承默认配置,这样维护时一眼就能看出哪些是项目定制的
30+
31+
## 配置领域
32+
33+
详细配置选项请参考:
34+
- **应用设置**: [references/app-settings.md](references/app-settings.md) - 权限、水印、错误日志、哀悼模式、默认语言等
35+
- **主题设置**: [references/theme-settings.md](references/theme-settings.md) - 颜色方案、主题同步、圆角、色弱模式等
36+
- **顶部导航栏**: [references/navbar-settings.md](references/navbar-settings.md) - 启用状态、显示模式等
37+
- **底部标签栏**: [references/tabbar-settings.md](references/tabbar-settings.md) - 启用状态、显示模式、导航菜单列表等
38+
- **页面设置**: [references/page-settings.md](references/page-settings.md) - 切换动画、进度条、返回顶部等
39+
- **版权设置**: [references/copyright-settings.md](references/copyright-settings.md) - 版权开关、日期、公司、网站等
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# 应用设置 (app)
2+
3+
## auth
4+
5+
- **类型**: `boolean`
6+
- **默认值**: `false`
7+
- **说明**: 是否开启权限功能
8+
9+
## dynamicTitle
10+
11+
- **类型**: `boolean`
12+
- **默认值**: `false`
13+
- **说明**: 是否启用动态页面标题(根据当前路由自动更新 document.title)
14+
15+
## rip
16+
17+
- **类型**: `boolean`
18+
- **默认值**: `false`
19+
- **说明**: 哀悼模式,开启后网站将整体变灰
20+
21+
## 完整示例
22+
23+
```typescript
24+
app: {
25+
auth: true,
26+
dynamicTitle: true,
27+
rip: false,
28+
}
29+
```
30+
31+
## 常见配置
32+
33+
**开启权限功能:**
34+
```typescript
35+
app: {
36+
auth: true,
37+
}
38+
```
39+
40+
**开启哀悼模式:**
41+
```typescript
42+
app: {
43+
rip: true,
44+
}
45+
```
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 版权设置 (copyright)
2+
3+
底部版权信息配置。
4+
5+
## enable
6+
7+
- **类型**: `boolean`
8+
- **默认值**: `false`
9+
- **说明**: 是否开启底部版权信息显示。也可在路由 meta 中单独控制某个页面是否显示版权信息
10+
11+
## dates
12+
13+
- **类型**: `string`
14+
- **默认值**: `''`
15+
- **说明**: 网站运行日期,例如 `'2024-present'`
16+
17+
## company
18+
19+
- **类型**: `string`
20+
- **默认值**: `''`
21+
- **说明**: 版权信息中显示的公司/项目名称
22+
23+
## website
24+
25+
- **类型**: `string`
26+
- **默认值**: `''`
27+
- **说明**: 版权信息中显示的网站地址
28+
29+
## 完整示例
30+
31+
```typescript
32+
copyright: {
33+
enable: true,
34+
dates: '2024-present',
35+
company: 'My Company',
36+
website: 'https://example.com',
37+
}
38+
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# 顶部导航栏设置 (navbar)
2+
3+
移动端顶部导航栏配置。
4+
5+
## enable
6+
7+
- **类型**: `boolean`
8+
- **默认值**: `false`
9+
- **说明**: 是否启用顶部导航栏
10+
11+
## 完整示例
12+
13+
```typescript
14+
navbar: {
15+
enable: true,
16+
}
17+
```
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 页面设置 (page)
2+
3+
## progress
4+
5+
- **类型**: `boolean`
6+
- **默认值**: `true`
7+
- **说明**: 是否显示页面载入进度条
8+
9+
## backTop
10+
11+
- **类型**: `boolean`
12+
- **默认值**: `true`
13+
- **说明**: 是否显示返回顶部按钮
14+
15+
## 完整示例
16+
17+
```typescript
18+
page: {
19+
progress: true,
20+
backTop: true,
21+
}
22+
```
23+
24+
## 常见配置
25+
26+
**禁用进度条和返回顶部:**
27+
```typescript
28+
page: {
29+
progress: false,
30+
backTop: false,
31+
}
32+
```
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# 底部标签栏设置 (tabbar)
2+
3+
移动端底部导航栏配置。
4+
5+
## enable
6+
7+
- **类型**: `boolean`
8+
- **默认值**: `false`
9+
- **说明**: 是否启用底部标签栏
10+
11+
## list
12+
13+
- **类型**: `tabbarListItem[]`
14+
- **默认值**: `[]`
15+
- **说明**: 底部导航菜单项列表
16+
17+
### tabbarListItem 字段
18+
19+
| 字段 | 类型 | 必填 | 说明 |
20+
|------|------|------|------|
21+
| `path` | `string` || 路由路径(来自 vue-router auto-routes) |
22+
| `icon` | `string` || 未激活时的图标 |
23+
| `activeIcon` | `string` || 激活时的图标 |
24+
| `text` | `string` || 显示文字,支持 i18n key |
25+
26+
## 完整示例
27+
28+
```typescript
29+
import { $t } from '@/locales'
30+
31+
tabbar: {
32+
enable: true,
33+
list: [
34+
{
35+
path: '/',
36+
icon: 'i-ic:sharp-home',
37+
activeIcon: 'i-ic:twotone-home',
38+
text: $t('tabbar.index'),
39+
},
40+
{
41+
path: '/user/',
42+
icon: 'i-ic:baseline-person',
43+
activeIcon: 'i-ic:twotone-person',
44+
text: $t('tabbar.user'),
45+
},
46+
],
47+
}
48+
```
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# 主题设置 (theme)
2+
3+
## colorScheme
4+
5+
- **类型**: `'' | 'light' | 'dark'`
6+
- **默认值**: `'light'`
7+
- **说明**: 颜色方案
8+
- `'light'` - 明亮模式
9+
- `'dark'` - 暗黑模式
10+
- `''` - 跟随系统
11+
12+
## radius
13+
14+
- **类型**: `number`
15+
- **默认值**: `0.5`
16+
- **说明**: 圆角系数,取值范围 0 到 1
17+
- `0` - 无圆角(方形)
18+
- `0.5` - 中等圆角
19+
- `1` - 最大圆角
20+
21+
## colorAmblyopia
22+
23+
- **类型**: `boolean`
24+
- **默认值**: `false`
25+
- **说明**: 色弱模式,启用后使用色弱友好的颜色方案
26+
27+
## 完整示例
28+
29+
```typescript
30+
theme: {
31+
colorScheme: 'light',
32+
radius: 0.5,
33+
colorAmblyopia: false,
34+
}
35+
```
36+
37+
## 常见配置
38+
39+
**跟随系统颜色方案:**
40+
```typescript
41+
theme: {
42+
colorScheme: '',
43+
}
44+
```
45+
46+
**强制暗色模式:**
47+
```typescript
48+
theme: {
49+
colorScheme: 'dark',
50+
}
51+
```
52+
53+
**调大圆角:**
54+
```typescript
55+
theme: {
56+
radius: 0.8,
57+
}
58+
```
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
name: fm-page-optimizer
3+
description: "优化 Vue 页面,用 Fantastic-mobile 框架内建组件(src/ui/components/)替换自定义实现和原生 HTML。当用户说:'帮我优化这个页面'、'把这些原生 HTML 换成框架组件'、'用 FmCard/FmModal/FmButton 重构一下'、'这个页面太乱了'、'统一一下 UI 风格'、'用内建组件替换自定义弹窗/加载',即使用户只是说'看看这个页面能不能改进'也应触发此技能。"
4+
---
5+
6+
# 页面优化器
7+
8+
利用 Fantastic-mobile 的内建组件优化 Vue 页面,用框架组件替换自定义实现,减少重复代码,保持 UI 一致性。
9+
10+
## 第一步:确认工作区
11+
12+
本项目是 monorepo 架构,执行 `ls apps/` 查看可用应用,然后询问用户要修改哪个,除非对话中已明确说明。后续所有文件路径以 `apps/<app>/` 为根。
13+
14+
## 优化工作流
15+
16+
### 步骤 1: 分析页面,识别替换机会
17+
18+
读取目标页面,找出三类可优化点:
19+
20+
- **原生 HTML 元素**`<button>``<input>``<select>`、自定义卡片 div 等
21+
- **重复造轮子的自定义组件**:自定义弹窗、加载状态、提示消息等
22+
- **可简化的内联逻辑**:手动标签页切换、手动状态管理等
23+
24+
### 步骤 2: 查找合适的框架组件
25+
26+
先查组件目录确认有哪些可用组件:
27+
28+
```
29+
Read: references/components-catalog.md
30+
```
31+
32+
确定组件后,读取对应 README 了解完整 API(props、slots、events):
33+
34+
```
35+
Read: apps/<app>/src/ui/components/Fm[ComponentName]/README.md
36+
```
37+
38+
README 是最权威的用法来源,不确定时优先看文档而不是猜。
39+
40+
### 步骤 3: 参考优化模式(可选)
41+
42+
如果不确定如何替换,查看前后对比示例:
43+
44+
```
45+
Read: references/optimization-patterns.md
46+
```
47+
48+
### 步骤 4: 实施替换
49+
50+
替换时保留所有原始功能,不要改变业务逻辑。框架组件提供组合式函数用于编程式控制,优先使用:
51+
52+
- `useFmModal()` — 编程式打开/关闭弹窗、confirm 确认框
53+
- `fmToast` — 显示成功/错误提示(从 `@/ui/components/FmToast` 导入)
54+
- `useFmLoading()` — 控制加载遮罩
55+
56+
组件可以组合使用,例如:
57+
58+
```vue
59+
<FmCard title="用户列表">
60+
<FmButton @click="handleAdd">新增</FmButton>
61+
</FmCard>
62+
```
63+
64+
### 步骤 5: 验证
65+
66+
替换后确认导入路径正确(`@/ui/components/Fm[ComponentName]`),props 和 v-model 绑定符合组件 API。如有问题,回到组件 README 核对。

0 commit comments

Comments
 (0)