@vthst/page-manual 1.0.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/README.md +65 -0
- package/cli.js +52 -0
- package/install.js +68 -0
- package/package.json +35 -0
- package/skill/SKILL.md +167 -0
- package/skill/docs/page-guide-template.md +190 -0
- package/skill/src/components/PageGuide.antd.vue +534 -0
- package/skill/src/components/PageGuide.element-plus.vue +530 -0
- package/skill/src/components/PageGuide.naive-ui.vue +526 -0
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# @vthst/page-manual
|
|
2
|
+
|
|
3
|
+
Claude Code skill:给 Vue 页面生成 PageGuide 帮助文档。
|
|
4
|
+
|
|
5
|
+
> 按 [docs/page-guide-template.md 八章模板](./skill/docs/page-guide-template.md) 自动产出「功能说明 / 前置条件 / 页面入口 / 操作指南 / 状态说明 / 注意事项 / 常见问题 / 版本记录」八章内容,并附带「操作步骤」tab 静态步骤列表。
|
|
6
|
+
|
|
7
|
+
## 支持范围
|
|
8
|
+
|
|
9
|
+
- Vue 3 + vue-router 项目
|
|
10
|
+
- UI 库:ant-design-vue / element-plus / naive-ui(按优先级自动检测)
|
|
11
|
+
- 输入形态:
|
|
12
|
+
- `.vue` 文件相对路径(`src/views/Foo.vue`)
|
|
13
|
+
- 路由 path(`/user/profile`)
|
|
14
|
+
- 完整 URL(`http://localhost:5173/user/profile`)
|
|
15
|
+
- pageKey(`user-profile`)
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm i -g @vthst/page-manual
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
安装脚本会自动把 skill 复制到 `~/.claude/skills/page-manual/`。
|
|
24
|
+
|
|
25
|
+
> ⚠️ **安装后请重启 Claude Code**,重启后才能识别新 skill。
|
|
26
|
+
|
|
27
|
+
## 使用
|
|
28
|
+
|
|
29
|
+
在任意 Vue 项目根目录运行:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
/page-manual src/views/UserProfile.vue
|
|
33
|
+
/page-manual /user/profile
|
|
34
|
+
/page-manual http://localhost:5173/user/profile
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
多个目标用空格分隔:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
/page-manual src/views/Foo.vue src/views/Bar.vue
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 卸载
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm uninstall -g @vthst/page-manual
|
|
47
|
+
# 或直接调 CLI(无需走 npm)
|
|
48
|
+
page-manual uninstall
|
|
49
|
+
# 手动删也可以
|
|
50
|
+
rm -rf ~/.claude/skills/page-manual
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 要求
|
|
54
|
+
|
|
55
|
+
- Node.js ≥ 16.7(需要 `fs.cpSync` 原生支持)
|
|
56
|
+
- Claude Code(最新稳定版)
|
|
57
|
+
- 目标 Vue 项目已安装 `vue-router` + `ant-design-vue` / `element-plus` / `naive-ui` 之一
|
|
58
|
+
|
|
59
|
+
## 工作流程
|
|
60
|
+
|
|
61
|
+
参见 [SKILL.md](./skill/SKILL.md)。
|
|
62
|
+
|
|
63
|
+
## License
|
|
64
|
+
|
|
65
|
+
MIT
|
package/cli.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* page-manual CLI 入口
|
|
4
|
+
* 提供 install / uninstall / check / update 子命令
|
|
5
|
+
*/
|
|
6
|
+
const { install, uninstall, check } = require('./install')
|
|
7
|
+
|
|
8
|
+
const [, , cmd = 'help'] = process.argv
|
|
9
|
+
|
|
10
|
+
if (cmd === 'help' || cmd === '-h' || cmd === '--help') {
|
|
11
|
+
console.log(`
|
|
12
|
+
page-manual - Claude Code skill 安装管理工具
|
|
13
|
+
|
|
14
|
+
用法:
|
|
15
|
+
page-manual [命令]
|
|
16
|
+
|
|
17
|
+
命令:
|
|
18
|
+
install 安装/重新安装 skill 到 ~/.claude/skills/page-manual/
|
|
19
|
+
uninstall 卸载(删除 skill 目录)
|
|
20
|
+
check 检查是否已安装
|
|
21
|
+
update 卸载后重新安装(用于升级)
|
|
22
|
+
help 显示此帮助(默认)
|
|
23
|
+
|
|
24
|
+
示例:
|
|
25
|
+
page-manual install
|
|
26
|
+
page-manual uninstall
|
|
27
|
+
page-manual check
|
|
28
|
+
|
|
29
|
+
安装完成后重启 Claude Code 即可使用 /page-manual 命令。
|
|
30
|
+
`)
|
|
31
|
+
process.exit(0)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
switch (cmd) {
|
|
35
|
+
case 'install':
|
|
36
|
+
install()
|
|
37
|
+
break
|
|
38
|
+
case 'uninstall':
|
|
39
|
+
uninstall()
|
|
40
|
+
break
|
|
41
|
+
case 'check':
|
|
42
|
+
process.exit(check() ? 0 : 1)
|
|
43
|
+
break
|
|
44
|
+
case 'update':
|
|
45
|
+
uninstall()
|
|
46
|
+
install()
|
|
47
|
+
break
|
|
48
|
+
default:
|
|
49
|
+
console.error(`❌ 未知命令: ${cmd}`)
|
|
50
|
+
console.error(`运行 'page-manual help' 查看用法`)
|
|
51
|
+
process.exit(1)
|
|
52
|
+
}
|
package/install.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* page-manual skill 安装/卸载核心逻辑
|
|
3
|
+
* - 既可被 cli.js 调用
|
|
4
|
+
* - 也可被 postinstall 直接调用(node install.js install)
|
|
5
|
+
*/
|
|
6
|
+
const fs = require('fs')
|
|
7
|
+
const path = require('path')
|
|
8
|
+
const os = require('os')
|
|
9
|
+
|
|
10
|
+
const SKILL_NAME = 'page-manual'
|
|
11
|
+
const SRC = path.join(__dirname, 'skill')
|
|
12
|
+
const DEST_DIR = path.join(os.homedir(), '.claude', 'skills')
|
|
13
|
+
const DEST = path.join(DEST_DIR, SKILL_NAME)
|
|
14
|
+
|
|
15
|
+
function install() {
|
|
16
|
+
if (!fs.existsSync(path.join(SRC, 'SKILL.md'))) {
|
|
17
|
+
console.error(`❌ 源目录缺失 SKILL.md,npm 包可能损坏`)
|
|
18
|
+
process.exit(1)
|
|
19
|
+
}
|
|
20
|
+
fs.mkdirSync(DEST_DIR, { recursive: true })
|
|
21
|
+
fs.rmSync(DEST, { recursive: true, force: true })
|
|
22
|
+
fs.cpSync(SRC, DEST, { recursive: true })
|
|
23
|
+
console.log(``)
|
|
24
|
+
console.log(`✅ ${SKILL_NAME} skill 已安装到:${DEST}`)
|
|
25
|
+
console.log(``)
|
|
26
|
+
console.log(` 👉 重启 Claude Code 后即可使用 /page-manual 命令`)
|
|
27
|
+
console.log(``)
|
|
28
|
+
console.log(` 用法示例:`)
|
|
29
|
+
console.log(` /page-manual src/views/UserProfile.vue`)
|
|
30
|
+
console.log(` /page-manual /user/profile`)
|
|
31
|
+
console.log(` /page-manual http://localhost:5173/user/profile`)
|
|
32
|
+
console.log(``)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function uninstall() {
|
|
36
|
+
if (fs.existsSync(DEST)) {
|
|
37
|
+
fs.rmSync(DEST, { recursive: true, force: true })
|
|
38
|
+
console.log(`✅ ${SKILL_NAME} 已卸载`)
|
|
39
|
+
} else {
|
|
40
|
+
console.log(`⚠ ${SKILL_NAME} 未安装,无需卸载`)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function check() {
|
|
45
|
+
return fs.existsSync(path.join(DEST, 'SKILL.md'))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = { install, uninstall, check, DEST, SKILL_NAME }
|
|
49
|
+
|
|
50
|
+
// 被直接执行时(postinstall 或手动 node install.js)按 argv 分发
|
|
51
|
+
if (require.main === module) {
|
|
52
|
+
const [, , cmd = 'install'] = process.argv
|
|
53
|
+
if (cmd === 'install') install()
|
|
54
|
+
else if (cmd === 'uninstall') uninstall()
|
|
55
|
+
else if (cmd === 'check') {
|
|
56
|
+
if (check()) {
|
|
57
|
+
console.log(`✅ ${SKILL_NAME} 已安装:${DEST}`)
|
|
58
|
+
process.exit(0)
|
|
59
|
+
} else {
|
|
60
|
+
console.log(`❌ ${SKILL_NAME} 未安装`)
|
|
61
|
+
process.exit(1)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (cmd === 'update') { uninstall(); install() }
|
|
65
|
+
else {
|
|
66
|
+
console.log(`用法:node install.js [install|uninstall|check|update]`)
|
|
67
|
+
}
|
|
68
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vthst/page-manual",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Claude Code skill: 给 Vue 页面生成 PageGuide 帮助文档(支持 ant-design-vue / element-plus / naive-ui)",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=16.7"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"page-manual": "./cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"skill/",
|
|
14
|
+
"cli.js",
|
|
15
|
+
"install.js",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"postinstall": "node cli.js install",
|
|
20
|
+
"prepublishOnly": "node cli.js check",
|
|
21
|
+
"test": "node cli.js check"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"claude-code",
|
|
25
|
+
"skill",
|
|
26
|
+
"vue",
|
|
27
|
+
"page-guide",
|
|
28
|
+
"documentation"
|
|
29
|
+
],
|
|
30
|
+
"author": "",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": ""
|
|
34
|
+
}
|
|
35
|
+
}
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: page-manual
|
|
3
|
+
description: Use when generating a page help document (PageGuide 帮助文档) for a specified Vue page. Triggers on requests like "给 XX 写帮助文档", "/page-manual <文件路径>", "按八章模板给这个页面做 manual 文档". 仅支持含 vue-router + 三大 UI 库(ant-design-vue / element-plus / naive-ui)之一的 Vue 项目。
|
|
4
|
+
argument-hint: <页面 .vue 文件的相对路径 / 路由路径 / 完整 URL>
|
|
5
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, Bash
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 任务:给 Vue 页面「$ARGUMENTS」生成页面操作手册(PageGuide 帮助文档)
|
|
9
|
+
|
|
10
|
+
## 第 0 步:参数校验
|
|
11
|
+
|
|
12
|
+
**$ARGUMENTS 为空时直接终止**,回复:
|
|
13
|
+
|
|
14
|
+
> 请指定目标页面:`/page-manual <页面 .vue 文件的相对路径>`
|
|
15
|
+
> 例:`/page-manual src/views/Home.vue` 或 `/page-manual src/views/UserProfile.vue`
|
|
16
|
+
|
|
17
|
+
禁止:拿空参数瞎猜页面开工、列页面清单引导挑选、静默继续后续步骤。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 第一步:探测项目环境(按顺序检查,任一不通过即终止)
|
|
22
|
+
|
|
23
|
+
### 1.1 路由检查
|
|
24
|
+
|
|
25
|
+
读取 `<cwd>/package.json` 的 `dependencies` + `devDependencies`,**必须含 `vue-router`**。
|
|
26
|
+
|
|
27
|
+
**未通过时终止**:
|
|
28
|
+
|
|
29
|
+
> ❌ 未检测到 `vue-router`。page-manual skill 需要路由型 Vue 项目(依赖 vue-router 定位目标页面)。
|
|
30
|
+
|
|
31
|
+
### 1.2 UI 库检测(按优先级,第一个匹配就用)
|
|
32
|
+
|
|
33
|
+
读取同一 `package.json`,**按以下顺序匹配**,第一个命中的就是目标 UI 库:
|
|
34
|
+
|
|
35
|
+
| 优先级 | 检测依赖 | 使用组件文件 | 配套图标库 |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| 1 | `ant-design-vue` | `src/components/PageGuide.antd.vue` | `@ant-design/icons-vue` |
|
|
38
|
+
| 2 | `element-plus` | `src/components/PageGuide.element-plus.vue` | `@element-plus/icons-vue` |
|
|
39
|
+
| 3 | `naive-ui` | `src/components/PageGuide.naive-ui.vue` | `@vicons/ionicons5`(或项目已有的 xicons) |
|
|
40
|
+
|
|
41
|
+
**全部未通过时终止**:
|
|
42
|
+
|
|
43
|
+
> ❌ 未检测到支持的 UI 库(ant-design-vue / element-plus / naive-ui)。page-manual skill 当前仅支持这三种。如需扩展请编辑本 SKILL.md 的「1.2 UI 库检测」段。
|
|
44
|
+
|
|
45
|
+
**全部通过时记录到上下文**(后续步骤用):
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
已检测 UI 库:<ant-design-vue | element-plus | naive-ui>
|
|
49
|
+
将使用组件:src/components/PageGuide.<antd|element-plus|naive-ui>.vue
|
|
50
|
+
组件引用名:<PageGuide>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 1.3 图标库检查(按 1.2 命中结果,检查配套图标库)
|
|
54
|
+
|
|
55
|
+
缺失时**警告但不停**:
|
|
56
|
+
|
|
57
|
+
> ⚠ 检测到 `<UI 库>` 但缺配套图标库 `<icon 库>`。PageGuide 组件内的图标无法渲染,请 `npm i <icon 库>` 补装后重新执行。
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 第二步:读模板(必读,不读不准动笔)
|
|
62
|
+
|
|
63
|
+
完整 Read 桌面 SKILL 同目录下的 `docs/page-guide-template.md` —— 八章结构、gd-* 类库、写作约定的唯一权威来源。
|
|
64
|
+
|
|
65
|
+
**没找到时终止**:
|
|
66
|
+
|
|
67
|
+
> ❌ 找不到模板文件 `<skill 目录>/docs/page-guide-template.md`。请确认本 skill 目录结构完整。
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 第三步:定位并通读目标页面(内容必须来自真实代码,禁止编造)
|
|
72
|
+
|
|
73
|
+
### 3.0 输入形态识别(决定走 3.1 还是 3.2)
|
|
74
|
+
|
|
75
|
+
按以下规则分流 `$ARGUMENTS`:
|
|
76
|
+
|
|
77
|
+
| 形态 | 判定 | 后续步骤 |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| **文件路径** | 以 `.vue` 结尾(如 `src/views/Foo.vue`) | 走 3.2 文件路径模式 |
|
|
80
|
+
| **完整 URL** | 以 `http://` 或 `https://` 开头 | 提取 pathname → 走 3.1 路由模式 |
|
|
81
|
+
| **路由 path / pageKey** | 其他(以 `/` 开头 / 不含扩展名的字符串) | 走 3.1 路由模式 |
|
|
82
|
+
|
|
83
|
+
### 3.1 路由模式(完整 URL / 路由 path / pageKey)
|
|
84
|
+
|
|
85
|
+
**目标**:从项目 router 配置里反查 `path → component → .vue 文件路径`,找到后跳回 3.2 文件模式。
|
|
86
|
+
|
|
87
|
+
1. **规范化输入**:
|
|
88
|
+
- 完整 URL(如 `http://localhost:3600/app-page/foo?x=1`)→ 提取 `pathname`(`/app-page/foo`)+ 去掉查询参数 / 锚点
|
|
89
|
+
- 以 `/` 开头(如 `/app-page/foo`)→ 去掉首尾 `/`
|
|
90
|
+
- 不含 `/`(如 `aps-foo`,pageKey 形态)→ 整段作为查找 key
|
|
91
|
+
|
|
92
|
+
2. **找路由配置文件**(按顺序 Glob,任一命中即停):
|
|
93
|
+
```
|
|
94
|
+
src/router/index.{js,ts}
|
|
95
|
+
src/router/{router,routes}.{js,ts}
|
|
96
|
+
src/router/routes/**/*.{js,ts}
|
|
97
|
+
src/**/router/index.{js,ts} # 兜底
|
|
98
|
+
```
|
|
99
|
+
全部未命中 → 反问用户要 .vue 路径,**不要猜测**
|
|
100
|
+
|
|
101
|
+
3. **Read 路由文件,匹配 path**:
|
|
102
|
+
- 递归展开嵌套 `children`
|
|
103
|
+
- 匹配优先级:精确匹配 → 去首尾 `/` 全等 → 路径段数相同 + 末段相等
|
|
104
|
+
- 动态路由参数 `:id` 段转正则通配后再匹配
|
|
105
|
+
|
|
106
|
+
4. **提取 component**(按以下形态识别):
|
|
107
|
+
```js
|
|
108
|
+
// 字符串形式
|
|
109
|
+
{ path: '/foo', component: 'Foo' }
|
|
110
|
+
{ path: '/foo', component: '@/views/Foo.vue' }
|
|
111
|
+
|
|
112
|
+
// 动态 import
|
|
113
|
+
{ path: '/foo', component: () => import('@/views/Foo.vue') }
|
|
114
|
+
|
|
115
|
+
// 普通 import(需在 routes 文件上方找 import 块)
|
|
116
|
+
import Foo from '@/views/Foo.vue'
|
|
117
|
+
{ path: '/foo', component: Foo }
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
5. **拼 .vue 路径**(处理 `@/` 别名):
|
|
121
|
+
- Read `vite.config.{js,ts}` 找 `resolve.alias['@']`(通常 `src/`)
|
|
122
|
+
- `@/views/Foo.vue` → `src/views/Foo.vue`
|
|
123
|
+
- 没有 `@` 别名 → 按 `src/views/<PascalCase>.vue` 推断 + Glob 确认
|
|
124
|
+
|
|
125
|
+
6. **找不到时兜底**:
|
|
126
|
+
- Grep `<pageKey>` 在 `src/` 搜(匹配文件名 / 注释 / 字符串)
|
|
127
|
+
- 仍找不到 → 反问用户要 .vue 路径
|
|
128
|
+
|
|
129
|
+
7. **拿到 .vue 路径后**:把 `$ARGUMENTS` 替换为该路径,跳回 3.2 文件模式继续
|
|
130
|
+
|
|
131
|
+
### 3.2 文件路径模式($ARGUMENTS 以 .vue 结尾 / 3.1 路由解析后)
|
|
132
|
+
|
|
133
|
+
1. `$ARGUMENTS` 即 .vue 文件相对路径(如 `src/views/UserProfile.vue`),Glob 确认存在
|
|
134
|
+
2. 找不到时 Glob 同名模糊匹配(同名 .vue 不分大小写、子目录遍历),仍无则反问用户
|
|
135
|
+
3. **多目标拆分**:若用户提供的是多个目标(空格分隔),每个目标独立走完第三~六步全流程后再开始下一个
|
|
136
|
+
4. 通读该页面代码,提取真实信息:
|
|
137
|
+
- 搜索区字段、按钮行按钮、表格列、弹窗表单字段(含必填项)
|
|
138
|
+
- Tab / 子表 / 展开行等页面结构
|
|
139
|
+
- 状态枚举(select options / 字典映射)、行内编辑等特殊交互
|
|
140
|
+
- 导入 / 导出 / 删除 / 审批等操作的真实行为
|
|
141
|
+
5. 涉及上下游依赖的(如物料主数据联想),从代码注释或接口调用推断并在前置条件中说明
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 第四步:接入 PageGuide 组件
|
|
146
|
+
|
|
147
|
+
1. **复制组件文件**:把 `src/components/PageGuide.<antd|element-plus|naive-ui>.vue` 整文件复制到目标项目 `src/components/PageGuide.vue`(或项目约定的组件子目录)
|
|
148
|
+
2. **挂组件**:button-bar 末尾(其他操作按钮之后)挂 `<PageGuide>`;页面没有按钮行(纯查询/看板页)时,补一个只含 PageGuide 的空壳 `<div class="button-bar">`
|
|
149
|
+
3. **截图规划**:截图按 `<项目 public 目录>/guide-images/<模块>/<子模块>/<页面key>/` 规划,文档内先写 `<a-image>` / `<el-image>` / `<n-image>`(按 1.2 命中 UI 库)+ `gd-fig-cap` 占位
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 第五步:写八章内容(结构照抄模板,逐章替换为本页真实内容)
|
|
154
|
+
|
|
155
|
+
八章固定顺序固定标题,不得增删改名;本页没有的章保留标题 + 一句说明。
|
|
156
|
+
版本记录起版 v1.0,日期用今天,编写人固定「管理员」。
|
|
157
|
+
提示框统一 `<div class="gd-callout">`,没有 info/warn/success/danger 变体类,语义靠标题文案区分。
|
|
158
|
+
行内标签用 `gd-tag-must` / `gd-tag-opt` / `gd-tag-role`(红/蓝/黄语义色)。
|
|
159
|
+
图注「图 N 说明」全篇连续编号。
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 第六步:自检
|
|
164
|
+
|
|
165
|
+
1. 对照模板「写作约定」逐条过一遍(编号、加粗、图注连续编号等)
|
|
166
|
+
2. **没有自动化截图脚本**:本 skill 不附带项目截图脚本(不绑死具体项目)。截图由用户在 dev 环境手动 / 各自项目的截图工具完成;如本项目已有截图工具,提示用户接入;如没有,提醒用户人工补图
|
|
167
|
+
3. 提醒用户:刷新页面点「帮助文档」验收(左侧目录 + 全文搜索 + 操作步骤列表 + 截图显示)
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# 页面帮助文档标准模板(照抄骨架,只换内容)
|
|
2
|
+
|
|
3
|
+
> **用途**:给任何页面写帮助文档时,直接复制本模板的骨架到该页面的 `<PageGuide>` `#doc` 插槽里,替换成该页面的内容。
|
|
4
|
+
> **结构要求**:八章**固定顺序、固定标题、不得增删改名**;某章确实没有内容时保留标题 + 一句说明(如「本页无状态枚举字段」),保证所有页面的左侧目录长得一样。
|
|
5
|
+
> **样板页**:`src/views/aps-pages/basic-data/ToolingInfo.vue`(工装信息)——第一份按本模板落地的完整文档,拿不准就翻它。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、接入三步(页面侧)
|
|
10
|
+
|
|
11
|
+
### 1. 挂组件(button-bar 末尾,SettingsPopover 之后)
|
|
12
|
+
|
|
13
|
+
```vue
|
|
14
|
+
<SettingsPopover ... />
|
|
15
|
+
<!-- 页面帮助:左侧抽屉(左侧目录 + 全文搜索 + 八章正文) -->
|
|
16
|
+
<PageGuide>
|
|
17
|
+
<template #doc>
|
|
18
|
+
<!-- ===== 一、功能说明 ===== -->
|
|
19
|
+
<div class="gd-sec-title" data-toc>一、功能说明</div>
|
|
20
|
+
...(八章内容,见下方骨架)...
|
|
21
|
+
</template>
|
|
22
|
+
</PageGuide>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**页面没有按钮行时**(纯查询 / 看板页,没有新增导入导出):补一个只含 PageGuide 的空壳 button-bar,
|
|
26
|
+
按钮靠右靠组件内 `margin-left:auto`,视觉与有按钮行的页面一致(表格卡右上角):
|
|
27
|
+
|
|
28
|
+
```vue
|
|
29
|
+
<div class="button-bar">
|
|
30
|
+
<PageGuide>
|
|
31
|
+
<template #doc> ... </template>
|
|
32
|
+
</PageGuide>
|
|
33
|
+
</div>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. 截图放公共目录
|
|
37
|
+
|
|
38
|
+
`public/guide-images/<模块>/<子模块>/<页面key>/xxx.png`,
|
|
39
|
+
如 `/guide-images/aps/basic-data/tooling-info/search-area.png`。
|
|
40
|
+
图注紧跟图片,全篇「图 1、图 2…」连续编号。
|
|
41
|
+
|
|
42
|
+
**截图用脚本自动截,不人工补**:文档写完占位后,在 `scripts/capture-guide-images.mjs`
|
|
43
|
+
的 `PAGES` 数组追加该页配置(url + outDir + waitSelector + shots),跑
|
|
44
|
+
`node scripts/capture-guide-images.mjs` 自动登录 dev 环境逐状态截图。
|
|
45
|
+
动作库已备好:`searchArea`(展开搜索栏)/ `settings`(设置面板) / `addModal`(新增弹窗)/
|
|
46
|
+
`importModal`(导入弹窗)。前提:本地 dev server 跑在 `localhost:3600`(或用
|
|
47
|
+
`GUIDE_BASE_URL` 指定);依赖 `puppeteer-core` 已在 devDependencies,用系统 Edge 无需下载浏览器。
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 二、八章骨架(复制后逐章替换内容)
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<!-- ===== 一、功能说明 ===== -->
|
|
55
|
+
<div class="gd-sec-title" data-toc>一、功能说明</div>
|
|
56
|
+
<p>本页是 xx 模块中的<b>yy 模块</b>,集中维护/管理 <b>…</b>,为 … 提供基础数据。</p>
|
|
57
|
+
<table>
|
|
58
|
+
<thead>
|
|
59
|
+
<tr><th>操作</th><th>说明</th><th>使用频率</th></tr>
|
|
60
|
+
</thead>
|
|
61
|
+
<tbody>
|
|
62
|
+
<tr><td>查询筛选</td><td>…</td><td>高 / 中 / 低</td></tr>
|
|
63
|
+
<tr><td>新增 / 编辑</td><td>…</td><td>…</td></tr>
|
|
64
|
+
<!-- 该页全部主要操作,每行一条 -->
|
|
65
|
+
</tbody>
|
|
66
|
+
</table>
|
|
67
|
+
|
|
68
|
+
<!-- ===== 二、前置条件 ===== -->
|
|
69
|
+
<div class="gd-sec-title" data-toc>二、前置条件</div>
|
|
70
|
+
<ul>
|
|
71
|
+
<li>已登录平台,并拥有<b>xx</b>菜单的访问权限</li>
|
|
72
|
+
<li>依赖的上下游数据(如物料主数据)需已维护</li>
|
|
73
|
+
</ul>
|
|
74
|
+
<div class="gd-callout">
|
|
75
|
+
<div class="gd-callout-title">权限说明</div>
|
|
76
|
+
<p>若应用中心看不到「xx」菜单,请联系系统管理员开通对应角色权限。</p>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<!-- ===== 三、页面入口 ===== -->
|
|
80
|
+
<div class="gd-sec-title" data-toc>三、页面入口</div>
|
|
81
|
+
<div class="gd-breadcrumb">一级应用 / 二级菜单 / 页面名</div>
|
|
82
|
+
<p>登录后进入<b>应用中心 → … → …</b>。页面结构说明(Tab / 主表 / 展开子表等):</p>
|
|
83
|
+
<ul>
|
|
84
|
+
<li><b>xx</b>:…</li>
|
|
85
|
+
</ul>
|
|
86
|
+
<p><b>搜索栏</b>:…(展开/收起行为、字段联动等)</p>
|
|
87
|
+
<a-image width="100%" src="/guide-images/<模块>/<子模块>/<页面>/search-area.png" />
|
|
88
|
+
<div class="gd-fig-cap">图 1 搜索栏</div>
|
|
89
|
+
<p><b>设置</b>:按钮行末尾的齿轮按钮,可切行高 / 列显隐 / 列顺序,配置自动记忆。</p>
|
|
90
|
+
<p><b>帮助文档</b>:按钮行最右侧的「帮助文档」按钮即本文档。</p>
|
|
91
|
+
|
|
92
|
+
<!-- ===== 四、操作指南 ===== -->
|
|
93
|
+
<div class="gd-sec-title" data-toc>四、操作指南</div>
|
|
94
|
+
<!-- 每个操作一张 gd-op 卡片;操作少的页面 2 张,多的 6-8 张,按使用频率排序 -->
|
|
95
|
+
<div class="gd-op">
|
|
96
|
+
<div class="gd-op-title" data-toc data-toc-sub>操作 1:查询筛选</div>
|
|
97
|
+
<div class="gd-op-goal">目标:…</div>
|
|
98
|
+
<div class="gd-step">
|
|
99
|
+
<span class="gd-step-num">1</span>
|
|
100
|
+
<div class="gd-step-body">
|
|
101
|
+
<div class="gd-step-title">步骤名</div>
|
|
102
|
+
<p>步骤说明,字段名用 <b>加粗</b>。</p>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
<!-- 更多步骤…(1 步也行,3-4 步常见) -->
|
|
106
|
+
<!-- 可选:截图 + 图注 -->
|
|
107
|
+
<a-image width="100%" src="/guide-images/.../add-modal.png" />
|
|
108
|
+
<div class="gd-fig-cap">图 2 新增弹窗</div>
|
|
109
|
+
<!-- 可选:提示框(统一主题色,语义靠标题文案区分:操作结果 / 注意 / 危险操作等) -->
|
|
110
|
+
<div class="gd-callout">
|
|
111
|
+
<div class="gd-callout-title">操作结果</div>
|
|
112
|
+
<p>…</p>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<!-- 操作 2:新增 / 编辑;操作 3:批量导入(有才写);操作 4:导出;操作 5:删除;
|
|
116
|
+
操作 6+:该页特有操作(如穴明细维护)。无导入/导出的页面跳过对应卡片,编号顺延 -->
|
|
117
|
+
|
|
118
|
+
<!-- ===== 五、状态说明 ===== -->
|
|
119
|
+
<div class="gd-sec-title" data-toc>五、状态说明</div>
|
|
120
|
+
<p><b>xx 状态</b>(弹窗「状态」下拉项):</p>
|
|
121
|
+
<table>
|
|
122
|
+
<thead>
|
|
123
|
+
<tr><th>状态</th><th>含义</th></tr>
|
|
124
|
+
</thead>
|
|
125
|
+
<tbody>
|
|
126
|
+
<tr><td>…</td><td>…</td></tr>
|
|
127
|
+
</tbody>
|
|
128
|
+
</table>
|
|
129
|
+
<!-- 有几组枚举写几组(每组一张表);页面无状态枚举时写:本页无状态枚举字段 -->
|
|
130
|
+
|
|
131
|
+
<!-- ===== 六、注意事项 ===== -->
|
|
132
|
+
<div class="gd-sec-title" data-toc>六、注意事项</div>
|
|
133
|
+
<ul>
|
|
134
|
+
<li>排序 / 筛选 / 列设置等通用交互提示</li>
|
|
135
|
+
<li>默认值 / 联动行为等易踩坑点</li>
|
|
136
|
+
<li>数据依赖提醒(联想为空 → 主数据未维护等)</li>
|
|
137
|
+
</ul>
|
|
138
|
+
|
|
139
|
+
<!-- ===== 七、常见问题 ===== -->
|
|
140
|
+
<div class="gd-sec-title" data-toc>七、常见问题</div>
|
|
141
|
+
<table>
|
|
142
|
+
<thead>
|
|
143
|
+
<tr><th style="width: 40%">问题</th><th>解决方式</th></tr>
|
|
144
|
+
</thead>
|
|
145
|
+
<tbody>
|
|
146
|
+
<tr><td>…现象…</td><td>…原因 + 解决办法…</td></tr>
|
|
147
|
+
</tbody>
|
|
148
|
+
</table>
|
|
149
|
+
|
|
150
|
+
<!-- ===== 八、版本记录 ===== -->
|
|
151
|
+
<div class="gd-sec-title" data-toc>八、版本记录</div>
|
|
152
|
+
<table>
|
|
153
|
+
<thead>
|
|
154
|
+
<tr><th>版本</th><th>日期</th><th>变更内容</th><th>编写人</th></tr>
|
|
155
|
+
</thead>
|
|
156
|
+
<tbody>
|
|
157
|
+
<tr><td>v1.0</td><td>2026-XX-XX</td><td>初版:xx操作文档</td><td>管理员</td></tr>
|
|
158
|
+
</tbody>
|
|
159
|
+
</table>
|
|
160
|
+
<!-- 后续文档有实质变更时加行:v1.1 / 日期 / 变更点 / 管理员;编写人固定写「管理员」 -->
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 三、gd-* 类库速查(样式都在 PageGuide.vue,页面直接用类名)
|
|
166
|
+
|
|
167
|
+
| 类名 | 用在 | 说明 |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| `gd-sec-title` + `data-toc` | 八章标题 | 一级目录(左侧 TOC 自动收集) |
|
|
170
|
+
| `gd-op` | 操作卡片容器 | 一张卡片 = 一个操作 |
|
|
171
|
+
| `gd-op-title` + `data-toc data-toc-sub` | 卡片标题 | 二级目录,命名格式固定「操作 N:xxx」 |
|
|
172
|
+
| `gd-op-goal` | 卡片目标行 | 固定格式「目标:…」 |
|
|
173
|
+
| `gd-step` / `gd-step-num` / `gd-step-title` | 步骤行 | 圆号自动编号数字手写 1/2/3 |
|
|
174
|
+
| `gd-callout` | 提示框 | 统一主题色;语义靠 `gd-callout-title` 文案区分(权限说明 / 操作结果 / 注意 / 危险操作等) |
|
|
175
|
+
| `gd-callout-title` | 提示框标题 | 常用文案:说明 / 注意 / 操作结果 / 危险操作 / 权限说明 |
|
|
176
|
+
| `gd-tag-must` / `gd-tag-opt` / `gd-tag-role` | 行内标签 | 必填(红)/ 选填(蓝)/ 角色(黄),用在字段表格里 |
|
|
177
|
+
| `gd-fig-cap` | 图注 | 紧跟 a-image,格式「图 N 说明」,全篇连续编号 |
|
|
178
|
+
| `gd-breadcrumb` | 菜单路径 | 第三章开头,格式「应用 / 菜单 / 页面」 |
|
|
179
|
+
| `<table>`(原生) | 各类表格 | 自带边框 / 灰表头 / 斑马纹,直接写 thead/tbody |
|
|
180
|
+
| `<code>`(原生) | 行内代码 | 编码 / 路径片段 |
|
|
181
|
+
|
|
182
|
+
## 四、写作约定(保持全站一致)
|
|
183
|
+
|
|
184
|
+
1. **章节编号用中文数字**(一、二、…八、),标题格式「N、名称」,八章不得改名
|
|
185
|
+
2. **操作卡片编号**「操作 1:…」从 1 连续编号;该页没有的操作(如无导入)直接跳过,后面的编号顺延
|
|
186
|
+
3. **字段名、按钮名用 `<b>` 加粗**,与正文区分;按钮文案带「」引号,如点「查询」
|
|
187
|
+
4. **截图先写完文档再截**:先留 a-image + 图注占位,再在 `scripts/capture-guide-images.mjs` 的 `PAGES` 加配置跑脚本,产物落 `public/guide-images/<模块>/<子模块>/<页面key>/`
|
|
188
|
+
5. **版本记录起版 v1.0**,日期写实际发布日,编写人固定「管理员」
|
|
189
|
+
6. **使用频率三档**:高(每天用)/ 中(每周用)/ 低(偶尔用)
|
|
190
|
+
7. 常见问题表问题列固定 `width: 40%`,两列表头固定「问题 / 解决方式」
|