--- name: uniapp-ui-template-builder-skill description: "UI页面模板构建器 - 固化常见页面模板,多套风格可选,支持mock数据。从个人中心到商品页,从登录页到大屏,一键生成风格统一、质量稳定的页面代码。" argument-hint: "[页面类型] [风格] [--mock]" user-invocable: true triggers: - "生成页面" - "做个.*页面" - "页面模板" - "个人中心" - "商品页" - "登录页" - "底部tab" - "顶部tab" - "列表页" - "详情页" - "大屏" - "管理后台" - "PC端" - "表格" - "table" - "form" - "表单" - "主题切换" - "色阶" --- # UI Template Builder 页面模板固化技能:把常见页面固化下来,每次生成基于模板,确保效果稳定。 ## 核心设计 ``` 用户:帮我做个个人中心页面 AI: 1. 确认技术栈(uniapp Vue3) 2. 确认页面类型(个人中心) 3. 确认风格(简约现代) 4. 确认是否mock(是) 5. 基于模板生成代码 ``` **三个必须确认的配置(有默认值):** 1. **做什么页面** → 从模板库选择 2. **什么风格** → 风格库选择,每种页面3-5套风格 3. **是否mock数据** → 开启则生成配套mock数据 ## 交互流程 ### 步骤1:确认技术栈 ``` AI:请问您使用的技术栈是? - uniapp (Vue2) - uniapp (Vue3) - React + Vite - Vue3 + Vite - Taro (React) - Taro (Vue3) - 移动端 H5 - PC 端 H5 默认值:uniapp (Vue3) ``` ### 步骤2:确认页面类型 ``` AI:请选择要生成的页面类型: 【移动端 - uniapp/Taro】 ┌─────────────────────────────────────┐ │ 📱 个人中心 │ 商品详情页 │ │ 🛒 商品列表页 │ 分类页面 │ │ 🏠 首页 │ 购物车页面 │ │ 💬 聊天列表页 │ 订单列表页 │ │ 📋 表单页面 │ 设置页面 │ │ 🎁 活动页面 │ 搜索结果页 │ └─────────────────────────────────────┘ 【PC 端】 ┌─────────────────────────────────────┐ │ 🔐 登录页 │ 注册页 │ │ 📊 数据大屏 │ 管理后台首页 │ │ 📋 表格列表页 │ 表单填写页 │ │ 📰 文章详情页 │ 门户网站首页 │ │ 💼 企业官网 │ 文档页面 │ └─────────────────────────────────────┘ 输入页面名称或序号,或直接描述(如"做一个个人中心") ``` ### 步骤3:确认风格(核心!) 每种页面都提供 **3-5 套风格** 供选择: ``` AI:请选择风格(共 X 套可选): ┌─────────────────────────────────────────────────────────────┐ │ 风格1: 简约现代 │ 白色为主,文字为主,少装饰 │ │ 风格2: 活力炫彩 │ 渐变色,圆形图标,活跃氛围 │ │ 风格3: 高端商务 │ 深色系,金色点缀,精致感 │ │ 风格4: 清新自然 │ 绿色/蓝色系,圆角卡片,亲和力 │ │ 风格5: 暗黑科技 │ 深色背景,霓虹点缀,赛博朋克 │ └─────────────────────────────────────────────────────────────┘ 默认值:简约现代 ``` ### 步骤4:确认Mock数据 ``` AI:是否需要生成Mock数据? - ✅ 是,生成配套的mock数据文件(推荐) - ❌ 否,只需要页面模板 默认值:是 ``` **Mock数据说明**: - 使用 JSON Server / Mock.js 兼容格式 - 字段命名符合业务语义 - 数据量适中(5-20条典型数据) - 包含边界状态(空数据、加载中、错误态) ## 页面模板库 ### 移动端模板(uniapp/Taro) #### 1. 个人中心页面 | 风格 | 特点 | 适用场景 | |------|------|----------| | 简约现代 | 白色背景,头像+昵称+统计,列表式入口 | 工具类App | | 活力炫彩 | 渐变头部,卡片式布局,图标丰富 | 电商/社交 | | 高端商务 | 深色头部,金色/品牌色点缀,会员感 | 金融/高端 | | 清新自然 | 浅绿/浅蓝背景,卡片圆润,亲和力 | 健康/母婴 | **模板结构**: ``` 个人中心/ ├── header.vue # 头部区域(头像/昵称/背景) ├── stats.vue # 统计数据(订单/积分/优惠券) ├── menu-grid.vue # 功能菜单(网格布局) ├── menu-list.vue # 功能菜单(列表布局) ├── footer.vue # 底部(退出/设置) └── mock.json # Mock数据 ``` #### 2. 商品详情页 | 风格 | 特点 | |------|------| | 简约现代 | 轮播图+基本信息,纯色按钮 | | 活力炫彩 | 大幅轮播,标签化属性,促销氛围 | | 高端商务 | 沉浸式深色,细节图多,规格严谨 | | 清新自然 | 柔和色调,场景图,卡片式评价 | **模板结构**: ``` 商品详情/ ├── gallery.vue # 图片轮播 ├── info.vue # 基本信息(标题/价格/评分) ├── specs.vue # 规格选择 ├── detail.vue # 详情区(富文本/Tabs) ├── bottom-bar.vue # 底部操作栏 └── mock.json ``` #### 3. 底部TabBar | 风格 | 特点 | 关键约束 | |------|------|----------| | 简约线条 | 线性图标,文字在图标下方 | **禁止scroll-view,使用view+overflow** | | 活力填充 | 填充图标,图标+文字,渐变选中 | 胶囊按钮适配 | | 高级暗金 | 深色底,金色图标,质感 | 安全区域适配 | | 清新圆角 | 浅色,圆角容器,柔和动画 | uniapp xstyle 兼容 | **⚠️ 重要约束(AI必须遵守)**: - **禁止使用 scroll-view** 实现整页滚动 - 胶囊按钮区域必须 safe-area 适配 - tab切换使用 view 切换,禁止滑动动画延迟 - 底部安全距离必须使用 `safe-area-inset-bottom` #### 4. 商品列表页 | 风格 | 特点 | |------|------| | 瀑布流 | 双列瀑布,图片为主 | | 网格 | 九宫格,图标+文字 | | 列表 | 单列,图片左+信息右 | | 横向滑动 | 横向类目+纵向商品 | #### 5. 分类页面 | 风格 | 特点 | |------|------| | 左右结构 | 左侧类目+右侧商品 | | 顶部tab | 顶部类目切换+商品列表 | | 搜索+分类 | 顶部搜索+分类列表 | #### 6. 购物车页面 | 风格 | 特点 | |------|------| | 简约编辑 | 单选+编辑数量+删除 | | 活动氛围 | 多选+优惠券+推荐 | #### 7. 订单列表页 | 风格 | 特点 | |------|------| | 标签筛选 | 顶部tabs+订单卡片 | | 时间线 | 纵向时间轴展示 | #### 8. 表单页面 | 风格 | 特点 | |------|------| | 简洁输入 | 行内表单,标签在上 | | 卡片分组 | 卡片包裹,分组标题 | | 步骤表单 | 分步骤填写,进度指示 | ### PC端模板 #### 1. 登录页 | 风格 | 特点 | |------|------| | 极简登录 | 纯表单,居中,背景纯净 | | 左侧表单 | 左侧表单+右侧大图 | | 卡片式 | 浮层卡片,背景虚化 | | 深色科技 | 深色背景,霓虹边框 | #### 2. 数据大屏 | 风格 | 特点 | |------|------| | 科技深蓝 | 深蓝背景,发光图表 | | 商务蓝 | 浅蓝背景,卡片式布局 | | 赛博朋克 | 黑色背景,霓虹色块 | | 山水国风 | 深色背景,云雾水墨元素 | **大屏组件库**: - 数字滚动卡片 - 折线/面积/柱状图 - 环形/饼图 - 地图可视化 - 实时数据流 #### 3. 管理后台 | 侧边菜单 | 头部 | 内容区 | |----------|------|--------| | 固定宽 | 固定高 | 独立滚动 | | 可折叠 | 面包屑 | 表格/表单 | **组件**: - 侧边导航 - 顶部Header - 面包屑 - 表格(分页/筛选/排序) - 表单(栅格布局) - 标签页 #### 4. 表格列表页 | 风格 | 特点 | |------|------| | 紧凑高效 | 行高32-36,密集信息 | | 宽敞舒适 | 行高48+,操作明显 | | 卡片表格 | 卡片式行,展开详情 | #### 5. 文章详情页 | 风格 | 特点 | |------|------| | 博客风格 | 居中,封面图,目录 | | 文档风格 | 左侧目录,右侧内容 | | 门户风格 | 大封面,相关信息 | ## 组件模板库 组件模板与页面模板**相互独立**,但页面模板可以直接引用组件模板。 **重要**:这里的组件不是 Element Plus / Ant Design / uView 等第三方 UI 库,而是**纯模板代码**: - 无 npm 依赖 - 无额外编译配置 - 即拷即用 - 可直接修改源码 ### uniapp 组件 | 组件 | 用途 | |------|------| | button | 按钮:主/次/幽灵/危险,多尺寸,加载态 | | modal | 弹框 / Dialog:确认/提示,支持遮罩关闭 | | drawer | 抽屉 / Sidebar:从右/下/左滑出 | | toast | 轻提示:成功/错误/加载,多位置 | | picker | 底部选择器:单列选项 | | calendar | 日历:月份视图、选日期 | | moments | 朋友圈 / 动态列表:封面、头像、图片网格、点赞评论 | | **table** | **表格:列配置、排序、筛选、分页、斑马纹** | | **form** | **表单容器、表单项、输入框、选择器、校验规则** | ### PC React 组件 | 组件 | 用途 | |------|------| | button | 按钮:多风格、多尺寸、加载态 | | modal | 弹框:确认/提示 | | drawer | 抽屉:从右/左滑出 | | toast | 轻提示:通知消息 | | **table** | **表格:列配置、排序、筛选、分页、自定义渲染** | | **form** | **表单:受控模式、验证规则、动态表单** | ### 引用方式 ```vue ``` ## Mock数据规范 ### 文件位置 ``` 项目根目录/ ├── mock/ │ ├── index.js # Mock Server 入口 │ ├── user.json # 用户相关 │ ├── product.json # 商品相关 │ ├── order.json # 订单相关 │ └── common.json # 通用(字典/配置) └── pages/(业务代码) ``` ### 数据规范 ```json { "products": [ { "id": "p001", "name": "商品名称", "price": 99.00, "originalPrice": 199.00, "sales": 1000, "image": "https://via.placeholder.com/200", "tags": ["热销", "新品"], "stock": 99, "rating": 4.5 } ] } ``` ### 状态覆盖 每份Mock数据必须包含: - **正常态**:5-20条典型数据 - **空状态**:空数组 - **加载态**:延迟响应 - **错误态**:模拟网络错误 ### 模板级 Mock 数据 每个页面模板目录下都提供 `mock.json`,与模板代码配套: ``` templates/uniapp-vue3/profile/ ├── style-1-simple.vue ├── style-2-vibrant.vue ├── ... └── mock.json # 配套 mock 数据 ``` **数据格式统一为**: ```json { "code": 200, "message": "success", "data": { "title": "页面标题", "user": { ... }, "list": [ ... ] } } ``` **组件通过 props 接收数据**,不是硬编码: ```tsx import TableList from './templates/pc-react/table-list/style-1-default' import mock from './templates/pc-react/table-list/mock.json' function Page() { return ( ) } ``` 这样 **mock.json 可直接替换为后端 API 返回**,实现快速对接。 ## 风格系统 ### 颜色定义 每个风格对应一组设计Token: ```json { "styles": { "简约现代": { "primary": "#333333", "background": "#FFFFFF", "surface": "#F5F5F5", "border": "#E5E5E5", "radius": "8px" }, "活力炫彩": { "primary": "#FF6B6B", "background": "#FFFFFF", "surface": "#FFF5F5", "gradient": "linear-gradient(135deg, #FF6B6B, #FFB347)", "radius": "12px" }, "高端商务": { "primary": "#1A1A2E", "background": "#0F0F1A", "surface": "#16162A", "accent": "#D4AF37", "radius": "4px" } } } ``` ### 组件映射 ``` 风格选择 → 加载对应 tokens.json → 渲染时替换变量 ``` ### 动态主题生成器 提供 `references/theme-generator.js` 脚本,支持**自定义主题色**一键生成完整色阶: ```bash # 生成主题色阶(默认 modern 风格) node references/theme-generator.js modern # 指定自定义颜色 node references/theme-generator.js custom #FF6B6B # 预设主题 node references/theme-generator.js vibrant node references/theme-generator.js premium node references/theme-generator.js nature node references/theme-generator.js dark-tech ``` **输出**:自动生成 50-900 色阶的 CSS 变量,替换 `--color-primary-500` 等变量即可全局换肤。 ### 一键换肤 & 换尺寸 **交互演示**:[templates/theme-preview.html](templates/theme-preview.html) 直接在浏览器打开预览,支持: - **5 套主题**:现代灰 / 活力橙 / 暗金 / 清新绿 / 科技蓝 - **3 档尺寸**:小号 / 中号 / 大号 - **实时预览**:点击即切换,所见即所得 **在代码中使用**: ```js import { generateTokens, generateCSSVariables } from './references/theme-generator' // 用户说"换成红色主题" const tokens = generateTokens({ primaryColor: '#FF4444' }) const css = generateCSSVariables(tokens) // 将 css 注入到页面即可全局换肤 document.head.insertAdjacentHTML('beforeend', ``) ``` **换尺寸同理**: ```css /* 小号 */ :root { --font-size-base: 12px; --space-base: 12px; } /* 大号 */ :root { --font-size-base: 16px; --space-base: 20px; } ``` ## 技术栈适配 ### uniapp Vue3 ```vue ``` ### uniapp Vue2 ```vue ``` ### React + Vite ```tsx import { useState } from 'react' export default function Page() { return (
{/* 页面内容 */}
) } ``` ## 输出结构 生成的文件结构: ``` 项目/ ├── pages/ │ ├── profile/ # 个人中心 │ │ ├── index.vue │ │ └── index.scss │ ├── product-detail/ # 商品详情 │ │ ├── index.vue │ │ └── index.scss │ └── ... ├── components/ # 页面级组件 ├── mock/ # Mock数据 │ ├── index.js │ ├── user.json │ └── product.json └── styles/ └── tokens.scss # 风格变量 ``` ## 与其他技能协作 | 技能 | 协作方式 | |------|----------| | frontend-ui-foundry | 场景/品牌风格由此提供,本技能使用其风格系统 | | ui-component-commands-skill | 组件级沉淀,页面由组件组合而成 | | impeccable | 生成后可通过impeccable优化 | ## 目录结构 ``` ui-template-builder/ ├── SKILL.md # 本文件 ├── README.md # 使用文档 ├── references/ │ ├── scenarios/ # 场景定义 │ │ ├── mobile/ # 移动端场景 │ │ │ ├── profile.md │ │ │ ├── product-detail.md │ │ │ ├── product-list.md │ │ │ ├── category.md │ │ │ ├── cart.md │ │ │ ├── order.md │ │ │ └── ... │ │ └── pc/ # PC端场景 │ │ ├── login.md │ │ ├── dashboard.md │ │ ├── table.md │ │ └── ... │ ├── styles/ # 风格定义 │ │ ├── modern.json │ │ ├── vibrant.json │ │ ├── premium.json │ │ ├── nature.json │ │ └── dark-tech.json │ └── mock-templates/ # Mock模板 │ ├── user.json │ ├── product.json │ └── order.json └── templates/ # 页面代码模板 ├── uniapp-vue3/ ├── uniapp-vue2/ ├── react/ └── vue3/ ``` 实际仓库结构还包含: ``` ui-template-builder/ ├── components/ # 组件模板(与页面模板独立,可被引用) │ ├── uniapp-vue3/ # uniapp 组件:button/modal/drawer/toast/picker/calendar/moments │ └── pc-react/ # PC React 组件:button/modal/drawer/toast └── templates/ # 页面代码模板 ├── uniapp-vue3/ ├── pc-react/ └── ... ``` ## 默认值总结 | 配置项 | 默认值 | 可选值 | |--------|--------|--------| | 技术栈 | uniapp Vue3 | 见上方技术栈列表 | | 页面类型 | 用户输入 | 页面名称 | | 风格 | 简约现代 | 简约现代/活力炫彩/高端商务/清新自然/暗黑科技 | | Mock数据 | 是 | 是/否 | --- **一句话**:选页面 → 选风格 → 确认Mock → 一键生成 ✓