应用前置规划(plan-application)¶
目标:在**从零新建**业务软件时,先产出一份可执行的 PLAN.md,再按清单调用各 generate-* 技能落盘。本技能**只写规划,不生成业务 XML**。
规划写法(强制)¶
- 只描述业务逻辑:值怎么算、选项从哪来、字段如何联动、何时隐藏/只读、操作前后做什么、视图查什么数据。用自然语言写清业务意图与规则。
- **禁止**在
PLAN.md中写具体 iScript / JavaScript / SQL / 伪代码实现;实施落盘时再由对应generate-*+ iscript-usage 补脚本。 - 规划表中的「逻辑 / 条件」列:写**业务规则**(例:「部门变更后清空并重算岗位选项」),不写代码。
产出物¶
| 部分 | 落盘 | 形态 |
|---|---|---|
| 应用规划 + 实施清单 | {软件名}.application/PLAN.md |
Markdown |
约定:先创建 {软件名}.application/ 目录(可为空,尚无 .application XML),再写入 PLAN.md,避免路径悬空。PLAN.md 不进平台索引、不被 Runtime 监视。
何时触发(强建议门禁)¶
在以下情况**必须先走本技能**,在用户确认 PLAN.md 之前**禁止**批量调用 generate-* 写业务 XML:
- 用户要「新建应用 / 从零搭业务软件 / 做一套 OA/CRM…」
- 目标软件目录下**没有**可用的、用户已确认过的
PLAN.md
可跳过访谈、直接实施的情况:
- 用户明确说「跳过规划直接生成」
- 已有完整且用户确认过的
PLAN.md(按清单执行即可) - 小改动(只改一张表单、一个菜单等)——本技能不强制介入
工作流¶
与库表设计的流水线(必须遵守):
SCHEMA 定库表 → PLAN 定蓝图
→ 事务表:普通表单 type=1/3/16 + .create_form_table → TLK_*
→ 主数据表 / 手工 SQL 表(需界面维护):映射表单 type=65536(先 DDL 建表,不投递 create_form_table)
有需求且需定库表时:先确认 DATABASE_SCHEMA.md(design-database-schema),再写本技能的 PLAN.md。用户明确跳过库表设计时可直接规划。
表类型 → 表单 type(与 SCHEMA 对齐,硬规则):
| SCHEMA 表类型 / 创建方式 | 表单 type |
建表方式 | .create_form_table |
|---|---|---|---|
| 事务表(动态表单) | 1(或 3/16) |
平台 TLK_* |
必须 |
| 主数据表(手工 SQL) | 65536 映射表单 |
部署侧/SQL 先建物理表 | 禁止 |
| **统计表**等仅脚本/ETL 读写、无界面维护 | 无表单(见「非表单库表」) | 手工 SQL | 否 |
| 统计表等手工表**需要**界面增删改 | 65536 映射表单 |
同上先 DDL | 禁止 |
禁止:把主数据建成 type=1 普通表单(会误建 TLK_);禁止对映射表单投递 .create_form_table。
用户要新建应用
→ 已有确认过的 PLAN.md?
是 → 按 §9 实施清单分步调用 generate-* / verify-workspace / rebuild-index
否 → 宜先有确认过的 DATABASE_SCHEMA.md(复杂数据模型 / 主数据 / 统计表时)
→ 访谈(依据 SCHEMA + 需求)→ 写 PLAN.md → 请用户确认
→ 要改:改规划再确认
→ 确认:再按清单实施
表单落盘后:type∈{1,3,16} 须投递 .create_form_table;type=65536 不投递(目标表须已存在)。大批量落盘后先 verify-workspace 再 rebuild-index(见对应 skill)。
访谈规则¶
- 一次只问 1~2 个关键问题;信息够即可写初稿,未定事项写入「开放问题」
- 软件 / 模块 / 表单等资源
name用**英文标识**;中文放显示名或描述 - 优先澄清:数据源参数(见下)、业务目标、模块边界、核心表单与字段(按 SCHEMA:事务表→普通表单、主数据→映射表单;类型 + 值/选项/联动/隐藏/只读等**业务逻辑**)、可编辑表单工具栏 activity(至少保存;含动作前/后与显隐只读逻辑)、是否审批流、角色、PC/移动入口
- 数据源参数必须写入 PLAN.md;缺「数据库类型」或「数据库名」时**不得**请用户确认规划,也**不得**进入
generate-datasource-file - 有**非默认数据源**、手工库表(主数据/统计)、**公用函数库**时须在对应节写清用途;**报表**无对应 generate skill,规划中仅可一句带过,不必展开
- 未获用户确认前,不调用任何
generate-*写业务 XML
数据源参数(规划必填)¶
| 参数 | 是否必填 | 说明 |
|---|---|---|
| 数据库类型(dbType) | 必填 | 整数;4=MySQL(最常见);见 generate-datasource-file dbType 表 |
| 数据库名 | 必填 | 业务库名;写入 JDBC URL |
| schema | 按需必填 | Oracle / PostgreSQL / 达梦 / KingBase / OceanBase 等需要时必须写清;MySQL 通常不需要,写「无」 |
| host | 可默认 | 未指定时用库类型默认(MySQL:localhost / ${DB_HOST:localhost}) |
| port | 可默认 | 未指定时用库类型默认(MySQL:3307 / ${DB_PORT:3307}) |
| username | 可默认 | 未指定时用库类型默认(MySQL:root) |
| password | 可默认 | 未指定时用库类型默认(MySQL:${DB_PASSWORD:Teemlink2010}) |
访谈策略:先问 数据库类型 + 数据库名(及需要时的 schema);host/port/username/password 可直接采用默认值,仅当用户声明非默认环境时再追问。MySQL 默认值与落盘细则见 generate-datasource-file「MySQL 默认约定」。
建议访谈顺序(可合并提问):
- 软件英文
name、显示名、业务目标(一段话) - 数据源:默认库(数据库类型、数据库名;schema 若需要;host/port/username/password 可默认);是否有非默认库及用途
- 模块划分
- 核心表单与字段:对照 SCHEMA——事务表→普通表单 type=1;主数据表/需界面维护的手工 SQL 表→映射表单 type=65536(并问清物理表名、主键列、字段↔列映射);每个存值字段:**必须**字段名 + 类型/控件;**按需**值计算、选项计算、联动、隐藏、只读;可编辑表单须定工具栏 activity(默认保存;挂流程再加流程类操作);跨表取数则问清来源与回写
- 手工库表:SCHEMA 中主数据/统计表的建表与 DDL(由
design-database-schema写入DATABASE_SCHEMA.md);需界面维护的主数据在上一步已归入映射表单;仅脚本/ETL 读写、无表单的表写入「非表单库表」 - 角色与菜单入口
- 按需:视图(类型、数据来源/查询表单/过滤、列、工具栏操作逻辑)、流程(功能+节点关系)、统计图、Excel 导入、定时任务、Widget、函数库、API 等
- 报表:无则写「无」;有则一句说明即可(不展开设计)
PLAN.md 模板(必须按此结构落盘)¶
将下列模板填实后写入 {软件名}.application/PLAN.md。实施清单按实际范围增删行,但**顺序**与推荐搭建顺序一致;每项标注对应 skill 名。
# {软件显示名} — 应用规划
## 1. 概述
- 软件 name:`{EnglishName}`
- 显示名:
- type:`0`(常规业务)/ 其他
- activated:`true` / `false`
- 业务目标:(1 段)
- 范围:
- 不做事项:
## 2. 数据源(必填)
### 默认数据源(必有)
默认业务库;实施 `generate-datasource-file` 时按本表落盘,并投递 `*.init_default_datasource`。
| 参数 | 值 | 必填/默认可空 | 说明 |
|------|-----|---------------|------|
| 数据库类型 dbType | `4`(例:MySQL) | **必填** | 整数;与真实库一致 |
| 数据库名 | | **必填** | 写入 JDBC URL |
| schema | 无 / `{schema}` | **按需必填** | Oracle/PG/DM/KingBase/OceanBase 等需要时必填;MySQL 写「无」 |
| host | `localhost` | 可默认 | MySQL 默认可写 `${DB_HOST:localhost}` |
| port | `3307` | 可默认 | MySQL 默认 `3307`;其它库用常见端口 |
| username | `root` | 可默认 | MySQL 默认 `root` |
| password | `${DB_PASSWORD:Teemlink2010}` | 可默认 | MySQL 默认见 `generate-datasource-file` |
| 数据源 name | `main` | 建议 | `.datasource` 文件名;脚本 `dsName` |
| defaultDataSource | `true` | **必填语义** | 默认库须 true |
| 用途 | 本软件主业务库 | **必填语义** | 一句话说明 |
> **硬约束**:缺「数据库类型」或「数据库名」则 PLAN.md 不完整,禁止请用户确认、禁止实施 datasource。host/port/username/password 未写时,实施阶段按 `generate-datasource-file` 库类型默认值补全(MySQL 见「MySQL 默认约定」)。
### 非默认数据源(无则写「无」)
外系统库、只读报表库、历史库等;`defaultDataSource=false`。规划须讲清**用途**与谁会读写(视图 SQL、定时任务、导入等)。
| 数据源 name | 数据库类型 | 数据库名 | schema | 用途说明 | 读写方(视图/任务/…) |
|-------------|------------|----------|--------|----------|----------------------|
| | | | | | |
连接参数可另附小表或与默认库同列结构;未指定的 host/port/账号仍可走库类型默认。
## 3. 角色规划
| 角色 name | 显示名/职责说明 | status=1 前台可见 | 权限要点(菜单/视图级) |
|-----------|-----------------|-------------------|-------------------------|
| admin | | 是 | |
> permissions JSON 细节在实施 `generate-role-file` 时再写;此处只定角色与授权范围。
## 4. 模块划分
| 模块 name | 显示名/职责 | 依赖其他模块 |
|-----------|-------------|--------------|
| | | |
## 5. 表单规划(含动态表、映射表单与非表单库表)
### 表单清单
| 表单 name | 所属模块 | type | SCHEMA 表/创建方式 | 映射物理表(65536) | 是否挂流程 | 关联视图 | 工具栏 activity(必填/无) |
|-----------|----------|------|-------------------|---------------------|------------|----------|---------------------------|
| | | 1 / 65536 / 256 | 事务表 / 主数据表 / — | 无 / `MD_…` | | | 必填(见操作规划) |
- **事务表** → `type=1`(或 `3`/`16`):落库后投递 `*.create_form_table` → `TLK_*`
- **主数据表 / 需维护的手工 SQL 表** → **`type=65536` 映射表单**:先手工 DDL 建表;**不**投递 `.create_form_table`;须规划 `mappingStr`(见下)
- 查询/片段/模板等:规划中注明「不建动态表」
- 视图需要列表上方条件筛选时:另规划 `type=256` **查询表单**,并在 §6 视图的 `searchFormId` 绑定(见下)
### 映射表单规划(每个 type=65536 一张;无则写「无」)
对应 SCHEMA **主数据表**(及需界面维护的其它手工 SQL 表)。实施见 `generate-form-file`「创建映射表单」。
| 表单 name | 物理表 tableName | 主键列(MAPPINGID→) | 字段 name → 物理列 columnName(摘要) |
|-----------|------------------|----------------------|----------------------------------------|
| | MD_… | ID | name→NAME;…(必含 MAPPINGID→主键列) |
硬约束:
- `formName` = 表单 `name`;`tableName` = SCHEMA 物理表名(已存在或实施清单先 DDL)
- `columnMappings`:业务字段 `fieldName`=表单字段 name,`columnName`=真实列名(**无 `ITEM_`**)
- **必须**含 `MAPPINGID` → 主键列;`MAPPINGID` **不**出现在字段规划的控件行里
- 可编辑映射表单须规划保存类 activity(同普通表单,至少 `34`)
### Activity 定义(表单工具栏)
**Activity** = 表单打开后顶部/工具栏上的操作按钮,与字段模板分离,落盘为:
```text
{表单名}.form/{操作名}.activity
实施时由 generate-form-file 写入;规划阶段须在 PLAN.md 中写清每个**可编辑**表单要哪些操作(name + type),不可只写字段。
| 表单类别 | type 示例 | 是否必须规划 activity | 默认最低配置 |
|---|---|---|---|
| 普通表单(normal form) | 1(及需可编辑落库的 3/16) |
必须 | 至少一个保存类:type=34(保存);按需再加返回 10、关闭 8、保存并返回 11 等 |
| 映射表单(主数据/手工 SQL) | 65536 |
必须(可编辑时) | 同普通:至少保存 34;按需返回等 |
| 挂流程的普通表单 | 同上 + §7 有 flow | 必须 | 保存 34 + 流程处理 5(或保存并启动 4 / 流程启动 33,按业务选) |
| 查询表单 | 256 |
通常无 | 可不规划工具栏 |
| 片段/模板等 | 其它 | 按需 | 无编辑保存需求时可写「无」 |
硬约束:凡
type=1的普通业务表单与可编辑的type=65536映射表单,§5 必须附「操作规划」表且至少一行;实施清单勾选form时须同时落盘对应.activity。禁止只生成.form而无工具栏 activity。
常用 type(规划填整数即可;完整表见 generate-form-file):
| type | 含义 | 规划何时用 |
|---|---|---|
| 34 | 保存 | 普通表单默认必备 |
| 11 | 保存并返回 | 从视图进入编辑后需回列表 |
| 42 | 保存并新建 | 连续录入 |
| 4 | 保存并启动流程 | 保存后立刻启流程 |
| 5 | 流程处理 | 审批节点提交(预设流程时注明关联 flow name) |
| 33 | 流程启动 | 单独「启动流程」按钮 |
| 10 | 返回 | 不保存返回 |
| 8 | 关闭窗口 | 弹层/新窗关闭 |
| 13 | 自定义 | 需脚本或关联表单时 |
操作规划(每个可编辑表单一张表;工具栏 .activity)¶
每个 normal form(type=1,以及同样需要可编辑保存的 3/16) 与 可编辑映射表单(type=65536) 必须有下表;查询等无工具栏时写「无」并在表单清单注明。
| 操作 name | type | 动作前执行逻辑 | 动作后执行逻辑 | 隐藏条件逻辑 | 只读条件逻辑 | 说明(关联流程 name 等) |
|---|---|---|---|---|---|---|
| 保存 | 34 | 普通/映射表单默认必备 | ||||
必须(可编辑表单每行不可空):
| 规划项 | 说明 | 对应 .activity |
|---|---|---|
| 操作 name | 按钮显示名 | name |
| type | 整数;可编辑表单至少含 34 |
type |
按需(有业务规则才填;写**业务逻辑**,不写脚本代码):
| 规划项 | 说明 | 对应 .activity |
|---|---|---|
| 动作前执行逻辑 | 点击后、默认动作前:校验、提示、是否中断等 | beforeActionScript |
| 动作后执行逻辑 | 默认动作成功后:回写、跳转、消息等 | afterActionScript |
| 隐藏条件逻辑 | 何时不显示该按钮 | hiddenScript |
| 只读条件逻辑 | 何时按钮不可点 | readonlyScript |
| 关联流程 | 流程类按钮注明 flow name | onActionFlow 等 |
实施时按 generate-form-file + iscript-usage 将上列业务逻辑落成脚本。
字段规划(每个表单一张表;字段 name 用英文标识)¶
实施 generate-form-file 时依此填写 JsonTemplate;未列「按需」项视为空/默认。布局默认用两栏容器(见 generate-form-file「布局约定」);规划中无需逐字段写布局,除非用户要求单列/三栏/四栏或全宽控件。
规划阶段只写业务逻辑(值怎么算、选项从哪来、改谁影响谁、何时隐藏/只读),**不要**写 iScript。
| 字段名 name | 显示名 | 类型/控件 scope | 值计算逻辑 | 选项计算逻辑 | 联动关系 | 隐藏条件 | 只读条件 | 必填 | 备注(视图选择/映射等) |
|---|---|---|---|---|---|---|---|---|---|
必须(每行不可空):
| 规划项 | 说明 | 对应 JsonTemplate |
|---|---|---|
| 字段名 | 英文标识;事务表动态列 ITEM_+大写 name;映射表单列名见 mappingStr,无 ITEM_ |
name |
| 类型/控件 | 存值字段写 fieldtype;控件写 scope(如 selectField) |
fieldtype + 节点 scope |
按需(有业务规则才填;无则留空;均写业务意图):
| 规划项 | 说明 | 对应 JsonTemplate / 机制 |
|---|---|---|
| 值计算逻辑 | 默认值、根据他字段计算、取当前用户等 | valuescript |
| 选项计算逻辑 | 固定枚举或按条件动态选项 | optionsscript(optionseditmode=01) |
| 联动关系 | 改 A 时如何影响 B/C(清空、重算值、刷新选项、显示/隐藏等);写清触发字段与受影响字段 | refreshonchanged / refreshfields / 受影响字段的值·选项·显隐逻辑 |
| 隐藏条件 | 何时不显示该字段(含打印场景可在备注区分) | hiddenscript(打印另见 hiddenprintscript) |
| 只读条件 | 固定只读或条件只读 | texttype=readonly / readonlyscript |
| 必填 | 是/否或条件必填说明 | 校验规则或控件必填属性 |
| 备注 | 视图选择框:来源视图 name、映射回写 | viewdialogField 的 dialogview/mapping |
实施时按 generate-form-file + iscript-usage 将「逻辑/条件」列落成脚本;规划表可不出现「脚本」字样。
控件选型(字段规划时写清 scope)¶
| 业务场景 | 控件 scope | 规划要点 |
|---|---|---|
| 简单选择(固定少量选项、单选) | selectField(下拉)或 radioField(平铺) |
按展示习惯二选一;填**选项计算逻辑** |
| 多选(固定选项) | checkboxField |
按业务规则;多值 ; 分隔;填**选项计算逻辑** |
| 数据从**其它业务表单**选取 | viewdialogField(视图选择框) |
不用 select/radio/checkbox 硬编码对方表数据;见下节 |
文本/数字/日期等仍用 inputField / dataField / textareaField 等(见 generate-form-file)。
视图选择框(跨表取数 → 回写本表)¶
当字段值需从**另一张业务表单的数据**中挑选时,规划并实施按下列顺序:
- **先**有来源业务表单(被选数据所在
.form:事务表多为type=1,主数据多为type=65536) - 再**规划/创建一张**选择用视图(
relatedForm=来源表单;列覆盖需展示与需回写的字段;用途注明「供 xxx 表单视图选择框」) - **再**在目标表单规划
viewdialogField:绑定module+dialogview(=上一步选择视图) - 规划 mapping 映射:选中行后,视图列 → 本表字段回写
每个视图选择框附一张映射表(可放在字段备注或附录):
| 目标表单字段 formField | 选择视图列 viewColumn | 说明 |
|---|---|---|
实施对应:viewdialogField.mapping = [{ "formField":"本表字段name", "viewColumn":"视图列name" }, …](见 generate-form-file)。
依赖顺序:来源表单 → 选择视图 → 目标表单(含
viewdialogField)。实施清单中若目标表单早于选择视图,须拆步或调序,禁止先写dialogview指向尚不存在的视图。
非表单数据库表(仅无界面表单时;无则写「无」)¶
指**没有**对应业务表单、由脚本/SQL/ETL 直接读写**的库表(典型:仅聚合刷新的**统计表、对接中间表等)。
- 主数据表**若需界面维护:归入上文 **映射表单 type=65536,**不要**只写在本节而不建表单
- 事务表(
TLK_*)字段规划已在「字段规划」;此处**不要**重复罗列 - 本节写清:表名、作用、主要字段、谁读写;细结构对齐
DATABASE_SCHEMA.md
| 表名 | 类型(统计/其它) | 作用说明 | 主要字段摘要 | 读写方 |
|---|---|---|---|---|
6. 视图与菜单¶
视图清单¶
先定**视图类型**(根标签),再定数据来源与列/操作。
| 根标签 | 类型 | 规划何时用 |
|---|---|---|
ListView |
列表(默认) | 常规列表、网格、选择框数据源 |
TreeView |
树形 | 层级数据(须规划上级/本级/名称等映射列) |
CalendarView |
日历 | 按日期展示(须规划日期映射列) |
GanttView |
甘特 | 计划/进度(须规划名称/开始/结束/完成等映射) |
MapView |
地图 | 按地址/坐标展示 |
| 视图 name | 所属模块 | 类型(根标签) | relatedForm | 用途(列表/选择框/树/…) |
|---|---|---|---|---|
| ListView |
用途含「供某表单视图选择框」时:须在 §5 对应 viewdialogField 中引用本视图 name。
数据来源规划(每个视图一块;决定查什么数据)¶
实施时写入 {视图名}.view 元数据。editMode 与「数据来源逻辑 / 过滤」必须配对,缺一不可。
规划写**业务语义**:绑定哪张表单、是否要查询表单筛选项、过滤规则是什么(谁可见、默认只看未完成等)。**不要**在规划里写完整 SQL/DQL/iScript;实施时再按 editMode 落盘。
| 视图 name | 视图类型 | editMode | relatedForm | 数据源 dataSourceId | 查询表单 searchFormId | 查询字段(若有查询表单) | 数据来源逻辑及过滤条件 | 设计代码摘要(实施用,可后补) |
|---|---|---|---|---|---|---|---|---|
| ListView | 00 | (默认库可空) |
必须:
| 规划项 | 说明 | 对应 .view |
|---|---|---|
| 视图类型 | 上表根标签 | 根元素名 |
| editMode | 00 设计 / 01 DQL / 02 SQL / 03 存储过程 |
editMode |
| relatedForm | 设计模式(00)必填:数据来源表单(规划写 name) |
relatedForm |
| 数据来源逻辑及过滤条件 | 业务描述:查哪些单据、默认过滤、权限范围 | 见下表落盘位置 |
editMode → 落盘对照(实施用;规划「数据来源逻辑」列只写业务规则):
| editMode | 含义 | 实施时设计代码形态 | 对应元素 |
|---|---|---|---|
00 |
设计 | relatedForm + 过滤条件 JSON 数组(无条件 []) |
filterCondition 等 |
01 |
DQL | iScript return DQL 串 | filterScript |
02 |
SQL | iScript return SQL 串 | sqlFilterScript |
03 |
存储过程 | iScript return 过程调用串 | procedureFilterScript |
按需:
| 规划项 | 说明 | 对应 .view |
|---|---|---|
| dataSourceId | 非默认库时指定 §2 非默认数据源 | dataSourceId |
| searchFormId | 列表需条件筛选 UI 时绑定 type=256 查询表单 |
searchFormId |
| 查询字段 | 查询表单上有哪些筛选项、与过滤逻辑如何对应 | 查询表单字段规划 + 过滤说明 |
| 默认排序 | 排序字段与升降 | orderField / orderType |
| 只读 | 只读视图去掉写操作 | readonly |
查询表单绑定(按需)¶
列表视图需要「按条件查询」时,在规划中同时完成:
- §5 增加一张
type=256查询表单(字段=可筛条件;不建动态表) - 本视图数据来源填写
searchFormId= 该查询表单(规划写 name,实施换 id) - 查询表单字段与过滤条件的对应关系写在「数据来源逻辑及过滤条件」或「查询字段」列
无列表筛选需求时:searchFormId 留空,不必造查询表单。
设计模式业务表约定:TLK_ + 表单 name;业务列 ITEM_ + 字段名大写。
列规划(每个视图一张表)¶
实施 generate-view-file 时落盘为 {视图}.view/{列名}.column。列表视图至少一列。写清**有哪些列、数据从哪来**(表单字段 / 脚本计算列 / 行号等)。
| 列 name | 列类型 type | 数据来源(绑定字段 fieldName / 计算说明) | 宽度/顺序 | 备注(树/日历/甘特映射等) |
|---|---|---|---|---|
| COLUMN_TYPE_FIELD |
必须:
| 规划项 | 说明 | 对应 .column |
|---|---|---|
| 列 name | 表头显示名 | name |
| 列类型 | COLUMN_TYPE_FIELD / SCRIPT / OPERATE / LOGO / ROWNUM |
type |
| 数据来源 | 字段列:表单字段英文 name;脚本列:计算业务含义(不写代码) | fieldName / valueScript |
按需:宽度/顺序;树/日历/甘特 mappingField;行内按钮等(见 generate-view-file)。
操作规划(每个视图一张表;工具栏 .activity)¶
实施时落盘为 {视图}.view/{操作名}.activity。常用:新建 type=2、删除 type=3;只读列表可无写操作。逻辑列写**业务规则**,不写脚本。
| 操作 name | type | 动作前执行逻辑 | 动作后执行逻辑 | 隐藏条件逻辑 | 只读条件逻辑 | 说明 |
|---|---|---|---|---|---|---|
| 新建 | 2 | |||||
| 删除 | 3 |
必须(有工具栏时每行不可空):操作 name、type。
按需:动作前/后、隐藏、只读(对应 beforeActionScript / afterActionScript / hiddenScript / readonlyScript);打开方式、关联流程等。实施时按 generate-view-file + iscript-usage 落盘。
菜单规划¶
描述有哪些菜单、PC/移动、挂到哪张表单/视图/图表。
| 菜单 name | 显示名 | PC/移动 | 挂接目标(表单/视图/图表 name) | 说明 |
|---|---|---|---|---|
| PC |
7. 流程规划(若有;无则写「无」)¶
写清**实现什么业务审批/流转**,以及**节点与关系**(谁审批、流转条件、回退等)。不写流程图 XML / 脚本实现。
| 流程 name | 关联表单 | 功能描述 | 节点概要(含角色/处理人规则) | 节点关系与流转条件 | 表单操作要点 |
|---|---|---|---|---|---|
可按需附录节点明细表(列:节点 name、类型、处理人规则、进入/离开条件、说明)。
有流程时:§5 对应表单操作须含流程处理/启动类;§8 Widget 默认含流程摘要。
8. 按需能力(无则各条写「无」)¶
图表(chart)¶
| chart name | 所属模块 | 图表类型(如折线/柱/饼) | 功能描述 | 数据来源逻辑(查什么、如何聚合) | 是否挂菜单/Widget |
|---|---|---|---|---|---|
规划写业务意图与数据口径;**不要**写 ECharts option / scripttext 代码。实施 generate-chart-file。有首页展示则 §8 Widget 增加 type=chart。
Excel 导入(excelconfig)¶
| 配置 name | 功能描述 | 目标表单/表 | 导入逻辑(列映射、校验、去重/更新策略) |
|---|---|---|---|
实施 generate-excelconfig-file;规划只写映射与业务规则,不写 jsonTemplate 代码。
定时任务(task)¶
| 任务 name | 功能描述 | 触发周期/启动方式 | 执行逻辑(做什么、读写哪些表/接口) |
|---|---|---|---|
实施 generate-task-file;规划只写业务步骤,不写 taskScript。
函数库规划¶
描述应用内**公用函数**(多处表单/视图/任务复用的计算、校验、取数封装)。无则写「无」。
| 函数名 | 用途说明 | 入参(业务含义) | 返回(业务含义) | 主要调用方 |
|---|---|---|---|---|
规划只写契约与业务含义;实现脚本在实施阶段编写。
API / apigroup / statelabel¶
有则各列一行说明用途;无则写「无」。
报表¶
当前无独立报表 generate skill:**不必**在 PLAN 中展开报表设计。若需求提到报表,写一句「报表:…(实施时另行处理)」即可。
Widget / WidgetGroup¶
首页门户砖块;落盘在应用级 widget/(**不是**模块下)。实施 generate-widget-file。须先有分组 .widgetgroup,再写 .widget(widgetGroupId=parentId=分组 id)。
默认规则(规划时自动纳入,除非用户明确不要):
| 条件 | 必须规划的 Widget | type | 依赖 |
|---|---|---|---|
| §7 有流程(非「无」) | 至少一个**流程摘要**(流程处理) | system_workflow |
无;actionContent 可空;按需 showAll |
| §8 有统计图 chart | 每个需上首页的图对应一个**统计图 Widget** | chart |
**先**有对应 .chart;moduleid=图表所在模块;actionContent=图表 id |
Widget 清单¶
| Widget name | 分组 widgetgroup | type | 功能描述 | 挂接目标(图表/视图 name 等) |
|---|---|---|---|---|
| 流程摘要 | 默认分组 | system_workflow | 待办/流程处理入口 | — |
| chart | {图表 name} |
type 速查(规划常用):
| type | 含义 | 规划要点 |
|---|---|---|
system_workflow |
流程摘要 / 流程处理 | 有审批流时默认建;showAll 是否跨全部软件 |
chart |
统计图 | 依赖已存在的 chart;写清模块 + 图表 name |
view |
挂接视图 | moduleid + 视图 name |
summary |
表单摘要(待办/分享等) | actionContent=SummaryCfg id(实施时解析) |
| 其他 | page / iscript / carousel… | 有明确需求再写 |
9. 实施清单(可勾选)¶
按顺序执行;完成后把 [ ] 改为 [x]。
-
application— 软件目录 +.application+ 空pid.index/url.index -
datasource— 按 §2:默认库必落盘;非默认库按清单落盘;投递*.init_default_datasource并确认.sync/.done/ -
role— 至少一个status=1 -
module— 规划中的模块 - (若有)手工库表 DDL — 按
DATABASE_SCHEMA.md/ PLAN 在目标库创建主数据表、统计表等(部署侧或运维;须在对应映射表单落盘之前) -
form— 业务表单;普通表单(事务表)与可编辑映射表单(主数据)必须同时落盘工具栏.activity(至少保存 type=34);按字段/操作规划把业务逻辑落成脚本;type∈{1,3,16} 投递.create_form_table;type=65536写mappingStr、**不**投递 create_form_table;含type=256查询表单(若视图要绑搜索) -
view— 视图(类型正确)+.column+ 视图操作;数据来源/过滤按规划;列表按需searchFormId;含「选择用视图」 - (若有跨表选择)补全依赖
viewdialogField的目标表单,或回写其dialogview/mapping -
flow+statelabel— 若有审批 -
chart— 若有统计图(须在 chart 类 Widget 之前) -
menu/mobilemenu— 按 §6 菜单规划挂接 -
widget/widgetgroup— 先分组;有流程则system_workflow;有统计图首页则type=chart;另按需 - 按需:
task/api/excelconfig;公用函数在相关脚本中落地 -
verify-workspace— 校验引用与 templatecontext(须在 rebuild-index 之前) -
rebuild-index— 同步索引并投递*.clear_cache - (部署侧,非文件)企业域绑定软件;用户-部门-角色绑定
10. 开放问题¶
- (确认前尽量清空;留下的必须标明谁拍板)
## 确认与实施 1. 写出 `PLAN.md` 后,向用户展示路径,并明确询问:「请确认规划;确认后按实施清单分步落盘。」确认前须已填 §2「数据库类型」「数据库名」(及需要时的 schema)。 2. 用户要求修改 → 更新 `PLAN.md` → 再次确认。 3. 用户确认后:严格按 §9 顺序,**一次推进一小步或一批明确范围**,调用对应 skill(如 `generate-application-file`、`generate-form-file`)。实施 datasource 时严格按 §2 参数 + `generate-datasource-file`。 4. 每完成清单项,把对应 `[ ]` 勾成 `[x]` 并保存 `PLAN.md`。 5. 实施中若发现规划缺口,先改 `PLAN.md` 再继续生成,避免 silent drift。 ## 硬规则清单 - 新建整应用且无已确认 PLAN.md 时,先本技能;确认前不批量 generate-*
- 先建 {软件名}.application/ 目录,再写 PLAN.md
- PLAN.md 结构含 §1–§10;§9 顺序与推荐搭建顺序一致
- 规划只写业务逻辑,禁止在 PLAN.md 写具体 iScript/JS/SQL/伪代码实现
- §2 默认数据源必填:数据库类型、数据库名;schema 按需;host/port/username/password 可默认;须写用途
- §2 非默认数据源:有则写清 name、连接要点、用途与读写方;无则写「无」
- 缺 §2 默认库数据库类型或数据库名时,禁止请用户确认、禁止 generate-datasource-file
- 资源 name 英文;中文仅显示名/描述
- type∈{1,3,16} 在清单中标注需 .create_form_table;type=65536 标注不投递且 mappingStr 已规划
- §5 字段规划:必须含字段名+类型/控件;按需含值计算、选项计算、联动关系、隐藏条件、只读条件(业务描述)
- §5 表单操作规划:必须含 name+type(普通表单与可编辑映射表单至少保存 34);按需含动作前/后、隐藏、只读逻辑
- §5 主数据表 / 需维护的手工 SQL 表 → type=65536 映射表单(禁止用 type=1);规划 mappingStr(tableName、列映射、MAPPINGID→主键);DDL 先于映射表单
- §5 非表单库表:仅无界面表单的手工表(如纯统计/中间表);主数据有界面则走映射表单,勿只列在非表单节
- 简单单选:selectField 或 radioField;多选:checkboxField;跨表取数:viewdialogField(先规划选择视图 + mapping)
- §6 视图:定类型(List/Tree/Calendar/Gantt/Map);数据来源(查询表单/过滤业务逻辑);列(含数据来源);操作(含动作前/后与显隐只读逻辑)
- §6 菜单规划:列出菜单与挂接目标
- §7 流程:功能描述 + 节点 + 关系;无则「无」
- §8:图表/Excel导入/定时任务/函数库/Widget 等按有无填写;报表不展开
- §3 角色规划:角色说明与权限要点
- §7 有流程时:Widget 须含 system_workflow(用户明确不要除外)
- 统计图 Widget(type=chart):先规划并落盘对应 .chart,再写 Widget
- 小改动或用户声明跳过规划时,可不走本技能 ```