跳转至

应用前置规划(plan-application)

目标:在**从零新建**业务软件时,先产出一份可执行的 PLAN.md,再按清单调用各 generate-* 技能落盘。本技能**只写规划,不生成业务 XML**。

规划写法(强制)

  • 只描述业务逻辑:值怎么算、选项从哪来、字段如何联动、何时隐藏/只读、操作前后做什么、视图查什么数据。用自然语言写清业务意图与规则。
  • **禁止**在 PLAN.md 中写具体 iScript / JavaScript / SQL / 伪代码实现;实施落盘时再由对应 generate-* + iscript-usage 补脚本。
  • 规划表中的「逻辑 / 条件」列:写**业务规则**(例:「部门变更后清空并重算岗位选项」),不写代码。

产出物

部分 落盘 形态
应用规划 + 实施清单 {软件名}.application/PLAN.md Markdown
storage/workspace/{软件名}.application/PLAN.md

约定:先创建 {软件名}.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.mddesign-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_tabletype=65536 不投递(目标表须已存在)。大批量落盘后先 verify-workspacerebuild-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 默认约定」。

建议访谈顺序(可合并提问):

  1. 软件英文 name、显示名、业务目标(一段话)
  2. 数据源:默认库(数据库类型、数据库名;schema 若需要;host/port/username/password 可默认);是否有非默认库及用途
  3. 模块划分
  4. 核心表单与字段:对照 SCHEMA——事务表→普通表单 type=1主数据表/需界面维护的手工 SQL 表→映射表单 type=65536(并问清物理表名、主键列、字段↔列映射);每个存值字段:**必须**字段名 + 类型/控件;**按需**值计算、选项计算、联动、隐藏、只读;可编辑表单须定工具栏 activity(默认保存;挂流程再加流程类操作);跨表取数则问清来源与回写
  5. 手工库表:SCHEMA 中主数据/统计表的建表与 DDL(由 design-database-schema 写入 DATABASE_SCHEMA.md);需界面维护的主数据在上一步已归入映射表单;仅脚本/ETL 读写、无表单的表写入「非表单库表」
  6. 角色与菜单入口
  7. 按需:视图(类型、数据来源/查询表单/过滤、列、工具栏操作逻辑)、流程(功能+节点关系)、统计图、Excel 导入、定时任务、Widget、函数库、API 等
  8. 报表:无则写「无」;有则一句说明即可(不展开设计)

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
选项计算逻辑 固定枚举或按条件动态选项 optionsscriptoptionseditmode=01
联动关系 改 A 时如何影响 B/C(清空、重算值、刷新选项、显示/隐藏等);写清触发字段与受影响字段 refreshonchanged / refreshfields / 受影响字段的值·选项·显隐逻辑
隐藏条件 何时不显示该字段(含打印场景可在备注区分) hiddenscript(打印另见 hiddenprintscript
只读条件 固定只读或条件只读 texttype=readonly / readonlyscript
必填 是/否或条件必填说明 校验规则或控件必填属性
备注 视图选择框:来源视图 name、映射回写 viewdialogFielddialogview/mapping

实施时按 generate-form-file + iscript-usage 将「逻辑/条件」列落成脚本;规划表可不出现「脚本」字样。

控件选型(字段规划时写清 scope)

业务场景 控件 scope 规划要点
简单选择(固定少量选项、单选) selectField(下拉)或 radioField(平铺) 按展示习惯二选一;填**选项计算逻辑**
多选(固定选项) checkboxField 按业务规则;多值 ; 分隔;填**选项计算逻辑**
数据从**其它业务表单**选取 viewdialogField(视图选择框) 不用 select/radio/checkbox 硬编码对方表数据;见下节

文本/数字/日期等仍用 inputField / dataField / textareaField 等(见 generate-form-file)。

视图选择框(跨表取数 → 回写本表)

当字段值需从**另一张业务表单的数据**中挑选时,规划并实施按下列顺序:

  1. **先**有来源业务表单(被选数据所在 .form:事务表多为 type=1,主数据多为 type=65536
  2. 再**规划/创建一张**选择用视图relatedForm=来源表单;列覆盖需展示与需回写的字段;用途注明「供 xxx 表单视图选择框」)
  3. **再**在目标表单规划 viewdialogField:绑定 module + dialogview(=上一步选择视图)
  4. 规划 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

查询表单绑定(按需)

列表视图需要「按条件查询」时,在规划中同时完成:

  1. §5 增加一张 type=256 查询表单(字段=可筛条件;不建动态表
  2. 本视图数据来源填写 searchFormId = 该查询表单(规划写 name,实施换 id)
  3. 查询表单字段与过滤条件的对应关系写在「数据来源逻辑及过滤条件」或「查询字段」列

无列表筛选需求时: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,再写 .widgetwidgetGroupId=parentId=分组 id)。

默认规则(规划时自动纳入,除非用户明确不要):

条件 必须规划的 Widget type 依赖
§7 有流程(非「无」) 至少一个**流程摘要**(流程处理) system_workflow 无;actionContent 可空;按需 showAll
§8 有统计图 chart 每个需上首页的图对应一个**统计图 Widget** chart **先**有对应 .chartmoduleid=图表所在模块;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]

  1. application — 软件目录 + .application + 空 pid.index/url.index
  2. datasource — 按 §2:默认库必落盘;非默认库按清单落盘;投递 *.init_default_datasource 并确认 .sync/.done/
  3. role — 至少一个 status=1
  4. module — 规划中的模块
  5. (若有)手工库表 DDL — 按 DATABASE_SCHEMA.md / PLAN 在目标库创建主数据表、统计表等(部署侧或运维;须在对应映射表单落盘之前
  6. form — 业务表单;普通表单(事务表)与可编辑映射表单(主数据)必须同时落盘工具栏 .activity(至少保存 type=34);按字段/操作规划把业务逻辑落成脚本;type∈{1,3,16} 投递 .create_form_tabletype=65536mappingStr、**不**投递 create_form_table;含 type=256 查询表单(若视图要绑搜索)
  7. view — 视图(类型正确)+ .column + 视图操作;数据来源/过滤按规划;列表按需 searchFormId;含「选择用视图」
  8. (若有跨表选择)补全依赖 viewdialogField 的目标表单,或回写其 dialogview/mapping
  9. flow + statelabel — 若有审批
  10. chart — 若有统计图(须在 chart 类 Widget 之前
  11. menu / mobilemenu — 按 §6 菜单规划挂接
  12. widget / widgetgroup — 先分组;有流程则 system_workflow;有统计图首页则 type=chart;另按需
  13. 按需:task / api / excelconfig;公用函数在相关脚本中落地
  14. verify-workspace — 校验引用与 templatecontext(须在 rebuild-index 之前)
  15. rebuild-index — 同步索引并投递 *.clear_cache
  16. (部署侧,非文件)企业域绑定软件;用户-部门-角色绑定

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
  • 小改动或用户声明跳过规划时,可不走本技能 ```