diff --git a/.agents/skills/ulthon-card-template/SKILL.md b/.agents/skills/ulthon-card-template/SKILL.md new file mode 100644 index 0000000..faac817 --- /dev/null +++ b/.agents/skills/ulthon-card-template/SKILL.md @@ -0,0 +1,287 @@ +--- +name: "ulthon-card-template" +description: "自定义卡片/模板形态动手配方:面向用自己的列表页定制专属卡片形态的下游开发者。涵盖适用判断、layoutList 五级模板协议选型(tplFunction/tplLay/tplVue/tplLayId/tplVueId)、渲染上下文契约(_cells/_operatHtml/_checked/_disabled 与上下文冻结)、以商品卡为蓝本的 step-by-step 配方、设计模式库(头部三件套/图面悬浮开关/价格层级/状态徽标/底部分隔/图片降级/响应式/统一设计语言)、取值通道三规则、坑与红线、验收 checklist。需要定制卡片/自定义卡片模板/卡片模板/商品卡/名片/多形态模板/layoutList 自定义条目/tplVueId,或排查自定义模板不渲染、点卡片误勾选、模板数据被改无效时调用。机制原理(受控数据流、五级协议引擎、双端注入、layoutDefault 三层链)见 ulthon-admin-table 技能第十一章,本技能定位是动手配方,不复述机制。" +--- + +# 自定义卡片模板定制指南(ulthon-card-template) + +本技能教下游开发者为自己的列表页定制卡片/模板形态。全部配方来自两个实战模板:用户管理名片(`extend/base/admin/view/system/admin/index.html` 的 usercardTpl)与商品列表商品卡(`extend/base/admin/view/mall/goods/index.html` 的 goodscardTpl),两者都是框架分发、可直接对照的官方范例。 + +机制原理(受控数据流为什么零请求、五级协议引擎如何回退、layoutDefault 三层解析链)不在本技能展开,统一见 [ulthon-admin-table](../ulthon-admin-table/SKILL.md) 技能第十一章。本技能回答的是"怎么动手写"。 + +## 一、适用判断:先想清楚要不要定制 + +**不定制就够用的情况(多数页面属于这类)**:`ua.table.render` 不配 `layoutList` 时,框架自动注入"表格 + 内置 card"双形态,工具栏自动出现"视图"按钮,字段按 label:value 紧凑网格渲染,零配置零模板。内置 card 的信息密度对管理后台的字段列表场景通常已经足够,**够用就别写模板**。 + +**值得定制的情况**: + +- 需要语义化排版:头部大图 + 价格层级 + 状态徽标这类商品/内容展示形态,内置 card 的 label:value 网格表达不了 +- 需要品牌感:自定义配色、圆角、卡片结构(头部三件套、悬浮开关等) +- 需要字段编排控制:哪些字段大字强调、哪些弱化、哪些组合进徽标,与表格列语义不同 + +**锁定纯表格的出口**:如果页面明确不需要任何卡片形态(例如纯运维日志类页面),配单条目清单即可,工具栏不会出现视图按钮: + +```js +// 场景出处:本轮 QA 实证(table-card-global-enabled 计划 Task9 场景 2,host 页临时配置验证) +layoutList: ['table'], +``` + +**一个例外提醒**:显式传 `controlled: false` 逃生口的页面(依赖引擎 url 模式行为的深度定制页,如自定义 parseData)整条多形态链路都不可用,配了 `layoutList` 也不会有视图按钮。判断自己是否属于这类页面见 ulthon-admin-table 第十一章 11.1。 + +## 二、五级协议选型速查 + +`layoutList` 自定义条目提供五级模板钩子,按优先级取第一个命中的: + +| 优先级 | 钩子 | 类型 | 引擎 | 适用场景 | +|--------|------|------|------|---------| +| 1 | `tplFunction` | function | 框架行循环 | 纯 JS 拼 HTML,逻辑重、不想引模板引擎 | +| 2 | `tplLay` | string | laytpl | laytpl 模板字符串,行级作用域 | +| 3 | `tplVue` | string | Vue 模板字符串 | Vue 模板,列表级单实例 | +| 4 | `tplLayId` | string | laytpl | ` +``` + +同文件追加页面级 `