@agile-team/wl-skills-kit 2.5.0 → 2.5.1
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.5.1] - 2026-05-09
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- `prototype-scan` Skill 补齐 Axure 原型文件访问前置说明:`index.html` 永久不可用(VS Code 内嵌 Chromium 不加载用户 Chrome 扩展);只能用 `open_browser_page(具体页.html)` 或 `read_file`;`(not visible)` 不等于不可访问。
|
|
8
|
+
- `page-codegen` Skill 将隐藏页导航方案统一为 `navigateHidden` 主路(`src/util/navigate-hidden.ts`):懒注册 + `router.push` 无整页刷新,内部自动 `location.href` 兜底防白屏;禁止外部调用侧直接使用 `location.href`;生成摘要后续步骤新增"维护 `HIDDEN_ROUTE_MAP`"强提醒。
|
|
9
|
+
|
|
3
10
|
## [2.5.0] - 2026-05-07
|
|
4
11
|
|
|
5
12
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @agile-team/wl-skills-kit
|
|
2
2
|
|
|
3
|
-
**AI Skill 模板包 v2.5.
|
|
3
|
+
**AI Skill 模板包 v2.5.1** — 一键将 13 条规范、9 个 AI Skill、17 个 MCP Tool、编辑器 MCP 配置、文档导入 Vue 3 项目。
|
|
4
4
|
|
|
5
5
|
让 AI 编辑器(Copilot / Cursor / Windsurf / Claude Code / Cline / Kiro / Trae / Qoder / 通用 Agents)**真正理解项目规范**,从原型/详设到完整页面代码全流程自动化。
|
|
6
6
|
|
|
@@ -23,11 +23,13 @@ npm run standards:init # 本包维护/业务项目均可复用
|
|
|
23
23
|
|
|
24
24
|
## 版本亮点
|
|
25
25
|
|
|
26
|
-
当前 2.
|
|
26
|
+
当前 2.5.x 版本重点完善 Skill 规范精度和隐藏页导航体系:
|
|
27
27
|
|
|
28
28
|
- `init/update/diff/clean/check/validate/export` 覆盖安装、升级、对比、清理、体检、页面完整性检查和基线导出
|
|
29
29
|
- 页面模板升级为 `BaseTable + render-type="agGrid" + cid + defineColumns + renderOps` 最终标准,融合 `wk-skills-ui` runtime,但保留 `common-core` 平台骨架
|
|
30
30
|
- 新增 `doctor-ui` / `validate-page`:检查 `wk-skills-ui` 接入、AGGrid/cid、操作列、mock-first、api.md 等关键偏差
|
|
31
|
+
- **`prototype-scan` Skill 补齐 Axure 访问前置说明**:明确 `index.html` 永久不可用(VS Code 内嵌 Chromium 不加载用户 Chrome 扩展),只能用 `open_browser_page(具体页.html)` 或 `read_file`;`(not visible)` 不等于不可访问
|
|
32
|
+
- **`page-codegen` Skill 统一隐藏页导航为 `navigateHidden` 主路**:懒注册 + router.push 无整页刷新,内部自动兜底防白屏;外部调用禁止直接 `location.href`,新增页面生成摘要步骤强提醒维护 `HIDDEN_ROUTE_MAP`
|
|
31
33
|
- 增强 Intent Router:用户只需说“做个页面 / 先 mock / 菜单同步 / 风格不生效”,AI 自动识别触发 Skill/MCP
|
|
32
34
|
- manifest 记录安装文件哈希,`reports/`、`src/components/`、`src/types/` 等关键资产受到保护
|
|
33
35
|
- 自动生成 Copilot、Claude Code、Cursor、Windsurf、Cline、Kiro、Trae、Qoder、通用 Agents 规则文件
|
|
@@ -46,8 +46,9 @@ description: "Use when: generating complete Vue 3 page code (index.vue + data.ts
|
|
|
46
46
|
────────────────────────────────────────────────
|
|
47
47
|
📌 后续步骤:
|
|
48
48
|
1. 在 router/pages.ts 注册路由
|
|
49
|
-
2.
|
|
50
|
-
3.
|
|
49
|
+
2. 若本页 hiddenMenu=true → 在 src/util/navigate-hidden.ts 的 HIDDEN_ROUTE_MAP 追加一行
|
|
50
|
+
3. 提交:git cz(禁止直接 git commit)
|
|
51
|
+
4. 可选:触发 convention-audit 扫描本次生成文件
|
|
51
52
|
────────────────────────────────────────────────
|
|
52
53
|
```
|
|
53
54
|
|
|
@@ -259,9 +260,10 @@ function handleCodeClick(row: any) {
|
|
|
259
260
|
>
|
|
260
261
|
> | 场景 | 方式 | 原因 |
|
|
261
262
|
> |---|---|---|
|
|
262
|
-
> | **菜单页 →
|
|
263
|
-
> | **隐藏页 → 隐藏页**(如表单→变更历史) | `envConfig()?.router` + `location.href` | `router.push()` 跳过 shell 的 `generateCurrentRoute`,导致 "Invalid route component" 报错 |
|
|
263
|
+
> | **菜单页 → 隐藏页 / 隐藏页 → 隐藏页** | `navigateHidden(path, query?)` from `src/util/navigate-hidden.ts` | 懒注册 + router.push,无整页刷新;内部自动兜底 location.href 防白屏 |
|
|
264
264
|
> | **返回上一页** | `useRouter().back()` | 任何页面均可用 |
|
|
265
|
+
>
|
|
266
|
+
> ⚠️ `navigateHidden` 依赖 `src/util/navigate-hidden.ts` 的 `HIDDEN_ROUTE_MAP`。**每新增一个隐藏页,必须在该 Map 里追加一行**,否则兜底会退化为整页刷新。
|
|
265
267
|
|
|
266
268
|
#### 路由路径命名规则
|
|
267
269
|
|
|
@@ -274,36 +276,60 @@ function handleCodeClick(row: any) {
|
|
|
274
276
|
- 子模块名取 pages.ts 的 key,如 `aiflow`
|
|
275
277
|
- 页面目录名整体转 PascalCase(含 `mmwr` 前缀),如 `mmwr-customer-apply-add-form` → `mmwrCustomerApplyAddForm`
|
|
276
278
|
|
|
277
|
-
####
|
|
279
|
+
#### navigate-hidden.ts 标准实现(首次使用时创建,后续只追加 Map 条目)
|
|
278
280
|
|
|
279
281
|
```typescript
|
|
280
|
-
//
|
|
282
|
+
// src/util/navigate-hidden.ts
|
|
281
283
|
import envConfig from "@jhlc/common-core/src/store/env-config";
|
|
284
|
+
import { ElMessage } from "element-plus";
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* 隐藏页路由懒注册表
|
|
288
|
+
* 每新增一个 hiddenMenu=true 的页面,在此追加一行
|
|
289
|
+
*/
|
|
290
|
+
const HIDDEN_ROUTE_MAP: Record<string, () => Promise<any>> = {
|
|
291
|
+
// "/aiflow/mmwrCustomerApplyAddForm": () => import("@/views/produce/aiflow/mmwr-customer-apply-add-form/index.vue"),
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export async function navigateHidden(path: string, query?: Record<string, string>) {
|
|
295
|
+
const router = envConfig()?.router;
|
|
296
|
+
if (!router) { ElMessage.error("路由未初始化,请刷新页面重试"); return; }
|
|
297
|
+
|
|
298
|
+
const matched = router.resolve({ path }).matched;
|
|
299
|
+
if (!matched.length || matched[0].path === "/:pathMatch(.*)*") {
|
|
300
|
+
const loader = HIDDEN_ROUTE_MAP[path];
|
|
301
|
+
if (!loader) {
|
|
302
|
+
// 降级兜底:路由 Map 未配置时整页跳转,不白屏
|
|
303
|
+
location.href = router.resolve({ path, query } as any).href;
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
router.addRoute({ path, component: loader });
|
|
307
|
+
}
|
|
308
|
+
await router.push({ path, query } as any);
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### 调用侧标准实现(data.ts)
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
// ✅ 正确:用 navigateHidden
|
|
316
|
+
import { navigateHidden } from "@/util/navigate-hidden";
|
|
282
317
|
|
|
283
318
|
// 在 createPage() 外部定义,避免每次调用都重新创建
|
|
284
319
|
const FORM_ROUTE = "/aiflow/mmwrCustomerApplyAddForm";
|
|
285
320
|
|
|
286
321
|
function navigateToForm(query?: Record<string, string>) {
|
|
287
|
-
|
|
288
|
-
if (!router) {
|
|
289
|
-
ElMessage.error("路由未初始化,请刷新页面重试");
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
const target: any = { path: FORM_ROUTE };
|
|
293
|
-
if (query) target.query = query;
|
|
294
|
-
location.href = router.resolve(target).href;
|
|
322
|
+
navigateHidden(FORM_ROUTE, query);
|
|
295
323
|
}
|
|
296
324
|
|
|
297
325
|
export function createPage() {
|
|
298
|
-
// ... 不在 createPage 内部声明 router
|
|
299
326
|
const Page = new (class extends AbstractPageQueryHook {
|
|
300
|
-
// ...
|
|
301
327
|
toolbarDef(): ActionButtonDesc[] {
|
|
302
328
|
return [
|
|
303
329
|
{
|
|
304
330
|
name: "primary",
|
|
305
331
|
label: "新增申请",
|
|
306
|
-
onClick: () => navigateToForm()
|
|
332
|
+
onClick: () => navigateToForm() // 无参:新增
|
|
307
333
|
}
|
|
308
334
|
];
|
|
309
335
|
}
|
|
@@ -328,14 +354,16 @@ export function createPage() {
|
|
|
328
354
|
}
|
|
329
355
|
```
|
|
330
356
|
|
|
331
|
-
>
|
|
332
|
-
> - `
|
|
333
|
-
> -
|
|
357
|
+
> **✅ 正确做法**:
|
|
358
|
+
> - 跳转隐藏页 → `navigateHidden(path, query?)`(懒注册 + router.push,无刷新,内部兜底防白屏)
|
|
359
|
+
> - 返回上一页 → `useRouter().back()`
|
|
334
360
|
>
|
|
335
|
-
>
|
|
336
|
-
> - `
|
|
361
|
+
> **❌ 禁止**:
|
|
362
|
+
> - 直接 `router.push({ path: "..." })` — 主应用过滤了 hidden 路由,路由未注册直接 push 会白屏或报 "Invalid route component"
|
|
363
|
+
> - 直接 `location.href = router.resolve(...).href` — 触发整页重载,有加载动画刷新感;`navigateHidden` 内部已兜底,**外部调用侧禁止直接使用**
|
|
364
|
+
> - kebab-case 路径(`/mmwr-xxx-form`)— 路由路径必须是 camelCase
|
|
337
365
|
>
|
|
338
|
-
> ⚠️
|
|
366
|
+
> ⚠️ **新增隐藏页时必须同步维护 `src/util/navigate-hidden.ts` 的 `HIDDEN_ROUTE_MAP`**,否则 `navigateHidden` 降级为整页刷新,失去无刷新优势。
|
|
339
367
|
|
|
340
368
|
---
|
|
341
369
|
|
|
@@ -108,6 +108,22 @@ AI 根据提取的信息,内部构建 page-spec JSON(**不输出给用户**
|
|
|
108
108
|
|
|
109
109
|
## 步骤
|
|
110
110
|
|
|
111
|
+
> ### ⚠️ Axure 原型文件访问前置说明
|
|
112
|
+
>
|
|
113
|
+
> Axure 导出的 HTML 包含一个 `index.html` 入口,但**不能直接用 `open_browser_page(index.html)` 访问**:
|
|
114
|
+
>
|
|
115
|
+
> | 访问方式 | 结果 | 推荐 |
|
|
116
|
+
> |---------|------|------|
|
|
117
|
+
> | `open_browser_page(index.html)` | 被重定向到 `resources/chrome/chrome.html`(扩展安装引导页),侧边栏不渲染 | ❌ 永久不可用 |
|
|
118
|
+
> | `open_browser_page(具体功能页.html)` | 页面内容正常,`read_page` 可读完整 DOM 快照 | ✅ **首选** |
|
|
119
|
+
> | `read_file(xxx.html)` | 直接读 HTML 源码,用正则提取文本/label | ✅ 推荐(补细节用)|
|
|
120
|
+
>
|
|
121
|
+
> **根本原因**:VS Code 集成浏览器是独立 Playwright/Chromium 进程,**不加载用户 Chrome 的任何扩展**,即使用户本地已安装 Axure RP 扩展也无效。此行为不随环境变化。
|
|
122
|
+
>
|
|
123
|
+
> **补充**:浏览器面板显示 `(not visible)` 仅表示该标签不在前台,不代表无法访问,`screenshot_page`/`read_page` 照样可用。
|
|
124
|
+
>
|
|
125
|
+
> **菜单树**应从 `系统整体框架.html`(或类似全局框架页)的 DOM 文本节点提取,不依赖侧边栏渲染。
|
|
126
|
+
|
|
111
127
|
### 1. 全量扫描 HTML
|
|
112
128
|
|
|
113
129
|
遍历所有 `.html` 文件,提取:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agile-team/wl-skills-kit",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "AI Skill 模板包 v2.5.0 — 13 条编码规范 + 9 个 AI Skill + 17 个 MCP Tool,一条命令导入 Vue 3 项目",
|
|
5
5
|
"main": "./bin/wl-skills.js",
|
|
6
6
|
"bin": {
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
],
|
|
29
29
|
"author": "JHLC Frontend Team",
|
|
30
30
|
"license": "UNLICENSED",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
31
34
|
"repository": {
|
|
32
35
|
"type": "git",
|
|
33
36
|
"url": "git+https://github.com/ChenyCHENYU/wl-skills-kit.git"
|