@microi.net/cli 5.1.4 → 5.1.6
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/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +84 -84
- package/scripts/microi-cli.js +21 -21
- package/scripts/microi-skills.meta.json +191 -191
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +3 -3
- package/skills/app-store/SKILL.md +3 -1
- package/skills/job-engine/SKILL.md +1 -1
- package/skills/microi-form-engine/SKILL.md +7 -0
- package/skills/microi-form-engine/references/component-catalog.md +31 -1
- package/skills/microi-left-right-layout/SKILL.md +5 -0
- package/skills/microi-microservice/SKILL.md +5 -4
- package/skills/ui-design/SKILL.md +1 -0
- package/skills/v8-api-config/SKILL.md +2 -2
- package/skills/v8-debugging/SKILL.md +5 -6
- package/skills/v8-export-import/SKILL.md +17 -5
- package/skills/v8-menu-buttons/SKILL.md +4 -0
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +1 -1
- package/skills/workspace-conventions/SKILL.md +3 -3
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
| `TableChild` | 主表内嵌 0..N 条明细列表 | 独立子表、子表真实外键、隐藏子菜单、回查索引 |
|
|
65
65
|
| `Map` | 点位 | `varchar(200)`/`mediumtext`,明确坐标格式 |
|
|
66
66
|
| `MapArea` | 区域 | `mediumtext`,限制点数/体积 |
|
|
67
|
-
| `Qrcode` |
|
|
67
|
+
| `Qrcode` | 二维码卡片展示 | 优先 `IsVirtual=1`;扫码原文另存普通 `varchar` 字段 |
|
|
68
68
|
| `FontAwesome` | 图标选择 | `varchar(200)` |
|
|
69
69
|
| `DevComponent` | 主前端定制 Vue 控件 | 仅用于长期复用且标准控件无法满足的场景 |
|
|
70
70
|
|
|
@@ -80,6 +80,35 @@
|
|
|
80
80
|
- 生成前先问“一个父记录最多有几条目标记录”:答案可能大于 1 就选 `TableChild`;只有
|
|
81
81
|
明确恰好一个目标 Id 且需要嵌入完整目标表单时才选 `JoinForm`。不确定时先询问,不写入。
|
|
82
82
|
|
|
83
|
+
### `Qrcode` 的数据契约
|
|
84
|
+
|
|
85
|
+
- 字段 `Config.Qrcode` 只保存 `DisplayWidth`、`ShowDownload`、`DownloadText` 等外观项,
|
|
86
|
+
不指定扫码内容。表单运行态必须通过
|
|
87
|
+
`V8.FieldSet('<字段名>', 'DataAppend', payload)` 提供数据。
|
|
88
|
+
- `payload.Code` 为必填扫码原文,兼容小写 `code`;可选 `title`、`titleValue`、
|
|
89
|
+
`fields:[{Label,Value}]`(或旧版 `DataConfig:[{label,key}]`)、`Color`、
|
|
90
|
+
`CardColor`、`FileName/fileName`、`createTime`。
|
|
91
|
+
- 在 `InFormV8` 中设置时必须跳过 `V8.LoadMode === 'Design'`,否则设计器保存可能把
|
|
92
|
+
运行态 `DataAppend` 固化到字段模型。
|
|
93
|
+
- 表单控件会生成 PNG Data URL 并回写控件值以兼容旧页面。纯展示字段优先设
|
|
94
|
+
`IsVirtual=1`;若历史表已有物理字段,则通过 `V8.NotSaveField` 排除保存。不要把 Base64
|
|
95
|
+
图片写入短 `varchar`。需要持久化时保存原始 URL/编号,再把它传给 `Code`。
|
|
96
|
+
- 列表二维码列直接渲染原始字段值;表单二维码卡片读取 `DataAppend.Code`,两种场景不得
|
|
97
|
+
混为同一输入协议。
|
|
98
|
+
- 二维码中的 URL 仍需服务端鉴权,不得嵌入 DiyToken、访问密钥或长期业务秘密。
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
if (V8.LoadMode !== 'Design') {
|
|
102
|
+
V8.FieldSet('Qrcode116', 'DataAppend', {
|
|
103
|
+
Code: V8.Form.OrderNo || V8.Form.Id || 'https://microi.net',
|
|
104
|
+
title: '订单二维码',
|
|
105
|
+
titleValue: V8.Form.OrderNo || '',
|
|
106
|
+
fields: [{ Label: '客户:', Value: V8.Form.CustomerName || '' }],
|
|
107
|
+
FileName: '订单-' + (V8.Form.OrderNo || '二维码')
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
83
112
|
## 官网历史名称
|
|
84
113
|
|
|
85
114
|
中文官网可能仍展示 `PhoneSMS`、`Timeline` 等历史/业务扩展控件。生成新字段前
|
|
@@ -104,6 +133,7 @@
|
|
|
104
133
|
| JoinForm | `JoinForm.TableId`、`JoinForm.TableName`、`JoinForm.JoinFieldName`、`JoinForm.FormMode`、`JoinForm.Id`、`JoinForm._SearchEqual` |
|
|
105
134
|
| TableChild | Config 根节点的 `TableChildTableId`、`TableChildSysMenuId`、`TableChildFkFieldName`;`TableChild.PrimaryTableFieldName`(默认 `Id`)及分页/导入选项 |
|
|
106
135
|
| ImgUpload | `ImgUpload.Multiple`;导出时会按最大图片数展开列 |
|
|
136
|
+
| Qrcode | `Qrcode.DisplayWidth`、`Qrcode.ShowDownload`、`Qrcode.DownloadText`;扫码内容使用运行态 `DataAppend.Code` |
|
|
107
137
|
|
|
108
138
|
其余选择、树、上传、关联和布局选项以当前字段设计器和
|
|
109
139
|
`microi-db-schema/references/form-component-options.md` 为事实源;不要凭旧截图
|
|
@@ -59,6 +59,8 @@ description: Microi 吾码模块引擎“树形+表格/表单”左右结构配
|
|
|
59
59
|
|
|
60
60
|
左树按数据表对待,默认每页 20 条,允许 10/20/50/100 条切换。无论当前只有多少数据,都不能用 `_PageSize:500` 一次拉完整主表。搜索时把页码重置为 1,并在服务端按关键字过滤后返回真实总数。
|
|
61
61
|
|
|
62
|
+
当初始化 V8 使用 `V8.FormEngine.GetTableTree/GetTableDataTree` 时,左侧来源 `diy_table.IsTree` 必须为 `1`,并显式配置真实存在的 `TreeParentField`(通常是 `ParentId`);否则接口会成功返回 `Code=0`,页面只显示“暂无数据”。应用包必须同时携带这两项表元数据,并在发布前通过真实树接口回读,不能只验收 `diy_LeftJoinRightView` 配置行。
|
|
63
|
+
|
|
62
64
|
```js
|
|
63
65
|
var form = V8.Form || {};
|
|
64
66
|
var pageIndex = Math.max(1, parseInt(form._PageIndex || 1, 10));
|
|
@@ -126,8 +128,11 @@ V8.Result = {
|
|
|
126
128
|
## 验收清单
|
|
127
129
|
|
|
128
130
|
- 当前菜单只匹配一条配置,模块路径正确。
|
|
131
|
+
- 使用树接口的左表已启用 `IsTree=1`,`TreeParentField` 与物理父级字段一致。
|
|
129
132
|
- 左树标题无 `undefined`、`{}`、空白重复项。
|
|
130
133
|
- 点击“全部”清空右侧外键条件;点击节点只显示该节点数据。
|
|
134
|
+
- 后端 `_HasChild=true` 表示可展开,Element Plus 的 `isLeaf` 必须映射为独立 `_IsLeaf=!_HasChild`,不得把 `_HasChild` 直接当叶子标记。
|
|
135
|
+
- 页面初始已处于“全部”时,再次点击“全部”不得先清空已加载列表;只清除树节点外键条件并避免重复请求。
|
|
131
136
|
- 右侧新增数据自动写入正确外键,切换节点后不会串数据。
|
|
132
137
|
- 普通用户不出现仅管理员可用的“页面配置”。
|
|
133
138
|
- 桌面左树每页默认 20 条,可翻页并切换 10/20/50/100;加载时不出现错误的空状态。
|
|
@@ -67,7 +67,7 @@ src/
|
|
|
67
67
|
AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,删除/新增路由后由
|
|
68
68
|
发布流程同步 `sys_microiservice_page`,不要从 Vue 源码猜路由。
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
普通本地项目必须位于当前连接对应的 `Microi-V8-Engine/{系统名称} ({ApiBase域名})/{OsClient}.{OsClientType}.{OsClientNetwork}/AI应用/{appKey}`。该应用目录同时承载 MicroService 源码、Manifest、接口引擎、资源策略、测试和应用商城上传素材,是唯一事实源。受审计的官方内置应用若由独立 Git 仓库维护,必须有版本管理的发布契约唯一指向该源码根,所有构建、跨工程测试和发行包都读取契约;同名租户同步目录只能是只读镜像。禁止自动在多份副本中择新、创建平行 `microi.apps/` 发行根,或在应用内嵌套第二份可编辑 `microservice/` 工程。
|
|
71
71
|
|
|
72
72
|
构建前遵守本地 OOM 保护;已有 dev server 可复用时不重复启动。新脚手架必须支持独立
|
|
73
73
|
访问时的平台帐号登录,但独立 Vite 预览仍没有菜单/弹窗等完整宿主上下文,不能替代宿主验收。
|
|
@@ -109,11 +109,12 @@ AppKey 稳定且只含安全字符。`microi.routes.json` 是页面事实源,
|
|
|
109
109
|
- `mci_ai_app_file` 同时存在私有源码和公有编译产物。源码拉取/差异比较必须优先按 `StorageScope=PublicBuildStream|PublicBuildStreamArchived|PublicBuildOnly` 排除公有产物,并保留旧数据中 `HdfsPath == PublishHdfsPath` 的兼容判断;不能仅靠两个路径相等识别,否则版本路径与稳定别名不同的流式产物会被误读成私有源码。
|
|
110
110
|
- 只有服务器不支持流式端点且产物很小时,才兼容 `microi_publish_microservice`。
|
|
111
111
|
- 正常发布支持最多 20,000 个文件、总计 20GB;逐文件从磁盘流入 HDFS,不生成整包 Buffer/Base64。几百 MB、1GB 级项目不得自动降级到旧 Base64 发布器。
|
|
112
|
-
- `StorageMode=db` 仅是显式的小型应急恢复模式,不是正常发布容量;当前最多 256 文件/5MB。超过该边界必须修复租户 HDFS/网关并恢复流式文件模式,不能调大数据库内联上限来承载大项目。
|
|
113
|
-
-
|
|
112
|
+
- 普通应用的 `StorageMode=db` 仅是显式的小型应急恢复模式,不是正常发布容量;当前最多 256 文件/5MB。超过该边界必须修复租户 HDFS/网关并恢复流式文件模式,不能调大数据库内联上限来承载大项目。
|
|
113
|
+
- 受信任的平台启动应用可把 `Source=NotIncluded + Build=DatabaseOnly + StorageMode=db` 作为长期启动/恢复介质,但只能携带已校验编译产物,仍受 256 文件/5MB 限制,不得携带可编辑源码或租户秘密。其数据库产物是离线权威;HDFS/CDN 只能作为逐文件回读哈希一致后的镜像,镜像故障或漂移时继续使用数据库产物。
|
|
114
|
+
- 每次交付使用同一 `DeliveryBatchId`,并保存 `SourceManifestHash` 与 `RuntimeManifestHash`;源码同步、运行清单、页面切换和入口探测必须能关联到同一批次。官方内置应用还必须在发布前核对唯一源码版本、源码清单、`dist`、路由与所有内置包,任何一处哈希漂移都失败关闭。
|
|
114
115
|
- 发布后用 `microi_get_application_context`、`microi_get_microservice` 回读。
|
|
115
116
|
- 回读成功还不等于页面可用:必须直接请求稳定入口、版本入口和清单内的 JS/CSS;入口 `502` 且运行时/清单存在时,优先检查 API 节点是否能通过租户 MinIO 内网端点读取公有桶对象。不要反复发布同一份产物掩盖存储读取故障。
|
|
116
|
-
-
|
|
117
|
+
- 服务器暂未部署修复且普通应用产物很小时,可把 `StorageMode=db` 与内联 `ContentBase64` 作为短期恢复手段;必须明确记录为临时方案。修复部署后重新流式发布到公有 HDFS,并恢复 `StorageMode=file`。只有上一条满足严格资源策略的受信任平台启动应用允许长期保留小型数据库产物;禁止借此把普通或大体积 JS/CSS 长期放进数据库 JSON。
|
|
117
118
|
- 子租户发布时,源码、版本资产、回读验签、页面与缓存全部绑定当前 Token 的 `OsClient`;禁止回退到主租户或宿主服务器默认租户。切换前必须由当前 API 节点通过该子租户 HDFS 配置读回每个版本文件并校验大小/SHA-256。
|
|
118
119
|
|
|
119
120
|
## 菜单、弹窗与表单嵌入
|
|
@@ -196,6 +196,7 @@ Microi 项目必须支持用户或项目级形态偏好:`data-mci-shape="round
|
|
|
196
196
|
- **Label 与紧凑控件共用中心线**:左右标签布局下,普通字段 Label、输入控件、日期文字与日期前缀图标必须共用同一控件高度和垂直中心线;不得保留会把 Label 单独上抬/下压的底部外边距。多行文本、上传、子表等高控件才切换为顶部对齐。
|
|
197
197
|
- **弹窗与抽屉边界有区别**:表单对话框采用中性细边界、柔和遮罩与模糊背景,标题顶部不加装饰色线;抽屉必须贴边且无圆角,可在顶部保留克制的 2–3px 主题色识别线。两者都使用连续的柔和表单画布和紧凑操作区;设计器双击字段弹窗必须可拖动,并继续提供控件专项配置入口。
|
|
198
198
|
- **平台 Dialog 统一壳**:除 Drawer 外,框架弹层、微应用弹层、系统设置、商城、通知与业务表单默认使用 20–24px 大圆角、上下左右居中、标题栏可拖动的 Dialog;禁止页面自行恢复方角壳或顶部主题色粗线。标题栏左侧依次提供语义图标、英文眉题、大字标题和可选小字副标题;右上关闭按钮与标题区垂直居中并必须有可辨识的按钮底色。内容区使用连续、固定的柔和背景和整齐栅格;底部操作区右对齐大号关闭/保存按钮,两者都带语义图标。拖动与窗口缩放必须按弹层真实宽高重新约束,四边至少保留 8–18px 可视余量,不得把内容拖出视口。Teleport 到 `body` 的微应用弹层必须在弹层根同步 `data-mci-ui-root`、主题与必要 token,不能只依赖原祖先 CSS 变量。遮罩默认毛玻璃,只有 `sys_config.DisableFormMaskBlur=1/true` 才全局关闭;`prefers-reduced-motion` 只能停止动画与过渡,不得关闭静态毛玻璃。
|
|
199
|
+
- **Dialog 关闭按钮可见性**:右上关闭按钮固定使用 40×40px(移动端不低于 40px)中性灰底、细边框和 10–12px 圆角,不能只显示悬空的细线 X;亮色和暗色主题都必须保持可辨识背景。hover/focus-visible 时使用更深一级灰底、主题色图标和清晰焦点环。底部关闭/取消/保存按钮高度不低于 42px、最小宽度 96px,并保持右对齐与 12px 间距。
|
|
199
200
|
- **Tabs 统一视觉**:顶部工作区、数据列表 PageTabs、表单 Tabs 与右侧关联数据 Tabs 使用同一套清爽、独立标签视觉。横向 Tabs 禁止铺设贯穿整行的有色轨道、边框底板、下划线或其它装饰线;未选项保持透明,悬停与选中只使用克制的文字色、浅色独立表面和轻阴影。纵向 Tabs 可使用截图式中性浅色分组容器,选中项是独立浅色卡片。数字角标放在标签文本之后且不得挤压标题;过渡只用于交互,并尊重 `prefers-reduced-motion`。
|
|
200
201
|
- **表格与卡片行为完整**:桌面数据卡片采用连续白色表面、弱边界和轻阴影,操作区不得再叠加有色底板或硬分割线;表格模块门头的标题/副标题卡片与每个动态统计卡片必须彼此独立,父布局保持透明,禁止用一个大卡片或外框把标题和全部统计项包在一起。表格默认取消无意义的纵向网格,只保留浅表头与轻量横向行节奏,工具栏和分页不得层层套框。`PageBtns`、`BatchSelect`、行内/行外 V8 按钮均不可因改版丢失;需多选而当前未选中时,应先把当前记录纳入选中集再执行。
|
|
201
202
|
- **启动状态可理解、可恢复**:Vue 挂载和业务就绪是两个状态。进度到 100% 后若仍在初始化,应显示“正在连接/后端响应较慢/仍在等待”等阶段文字;明确失败时提供原因摘要与刷新重试,禁止撤掉启动层后留下空白页。
|
|
@@ -35,7 +35,7 @@ description: Microi V8 接口引擎配置指南。用于设置 ApiEngineKey、Ap
|
|
|
35
35
|
- 嵌套调用不重复占用全局/租户并发名额,同一调用树重入同 Key 也不会自锁;不同子接口 Key 仍受自己的 Key 并发门保护。
|
|
36
36
|
- `V8.Limits` 可读取本片有效预算和当前深度。异常优先检查 `DataAppend.V8Limit.Code`,不要看到“2GB”就判断服务器真实吃满 2GB。
|
|
37
37
|
- 后台任务使用同一执行引擎。总任务可以运行数小时,但单片仍受 `Timeout/MaxStatements/LimitMemory` 约束;超过 10 分钟必须返回 `HasMore + Checkpoint` 分片续跑,不能只把 `Timeout` 调到 1800/3600。
|
|
38
|
-
-
|
|
38
|
+
- 接口引擎使用正向 `V8Limit`:默认 `0/false`,不设置当前 Jint Engine 的单次超时、语句、函数递归、累计分配和 Promise 固定等待预算;只有 `1/true` 才应用 `Timeout/MaxStatements/LimitMemory/LimitRecursion`。常驻内存保护、取消令牌、并发、接口嵌套深度、权限沙箱及数据库限制在两种状态下都保留。老 `V8Unlimited` 只作协议兼容;MCP/Manifest 新配置统一写 `v8Limit`。
|
|
39
39
|
|
|
40
40
|
### 通用实时事件(SignalR)
|
|
41
41
|
|
|
@@ -264,7 +264,7 @@ return { Code: 1, Data: { Upstream: resp.Content, Summary: summary.Data } };
|
|
|
264
264
|
- [ ] 是否没有使用 `setTimeout` / `Task.Run` 承担请求外后台任务?
|
|
265
265
|
- [ ] 大任务是否按阈值主动使用后台任务,超过 10 分钟是否有 `HasMore + Checkpoint`?
|
|
266
266
|
- [ ] 是否区分累计分配、调用树预算、JS递归与接口嵌套,而不是盲目抬高全部限制?
|
|
267
|
-
- [ ]
|
|
267
|
+
- [ ] 是否确认 `V8Limit=false` 表示接口不限 Jint 单次预算、`true` 才启用限制,并避免继续写入旧 `V8Unlimited` 字段?
|
|
268
268
|
- [ ] 保存后是否通过稳定路径 `/apiengine/{key}` + `osclient` Header 做过 HTTP 复测?特殊 GET/HEAD 路径是否仅用于无法设置 Header/Form/Query 的场景?
|
|
269
269
|
|
|
270
270
|
## 常见错误
|
|
@@ -87,12 +87,11 @@ return {
|
|
|
87
87
|
`V8_NESTED_DEPTH_LIMIT` 和 `V8_EXECUTION_QUEUE_TIMEOUT` 必须分别处理。
|
|
88
88
|
- 后台任务总时长可以超过 10/30 分钟,但单片仍受上述预算;使用
|
|
89
89
|
`HasMore + Checkpoint` 续跑,不要只提高单次超时或内存。
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
长事务锁、日志和回滚风险,下游接口/表事件需分别开启,不能从请求参数启用。
|
|
90
|
+
- 接口引擎的正向开关是 `sys_apiengine.V8Limit`:默认关闭时
|
|
91
|
+
`V8.Limits.UnlimitedRuntime=true`,打开后才应用超时、语句、函数递归、
|
|
92
|
+
累计分配和 Promise 等待限制。表后端事件仍用 `diy_table.V8Unlimited`。
|
|
93
|
+
常驻内存保护、外部取消、并发、接口嵌套深度、权限沙箱与数据库限制始终
|
|
94
|
+
生效;两类开关都只能来自持久化可信元数据,不能从请求参数启用。
|
|
96
95
|
- 服务端另有一个内置受信任特例:主租户中由持久队列恢复的
|
|
97
96
|
`import-microi-store-package`:必须同时具备可信用户快照、`Level >= 9999`
|
|
98
97
|
和 TaskId,才允许 `V8.Limits.MemoryAccounting=ResidentMemoryGuardOnly`。
|
|
@@ -151,7 +151,7 @@ return {
|
|
|
151
151
|
|
|
152
152
|
<!-- /microi-progressive:chunk -->
|
|
153
153
|
<!-- microi-progressive:chunk id=v8-export-import-003 sha256=8c2868406d663d51bbd479c12b052b70ffa1014cc4ec4186b8dcecd0e5a3105b -->
|
|
154
|
-
## 解析上传的 Excel(导入)
|
|
154
|
+
## 解析上传的 Excel(导入)
|
|
155
155
|
|
|
156
156
|
```javascript
|
|
157
157
|
// 接口引擎接收 V8.FilesByteBase64
|
|
@@ -168,10 +168,22 @@ var parsed = V8.Office.ExcelToList({
|
|
|
168
168
|
if (parsed.Code !== 1) return parsed;
|
|
169
169
|
|
|
170
170
|
var dataList = parsed.Data; // [{ 列标题: 值, ... }, ...]
|
|
171
|
-
return { Code: 1, Data: dataList, DataCount: dataList.length };
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
|
|
171
|
+
return { Code: 1, Data: dataList, DataCount: dataList.length };
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 固定版式模板与后台自定义导入
|
|
175
|
+
|
|
176
|
+
默认导入适合首行即字段标题的标准表格。多行表头、合并单元格、项目名称位于固定单元格、或需按规格/材质查询存货等模板,页面按钮使用 `V8.OpenImportDialog({...})` 声明工作表、单元格和列映射;平台弹层负责浏览器解析、后台任务提交、真实进度轮询与结果呈现。
|
|
177
|
+
|
|
178
|
+
- 页面 V8 只声明 `ApiEngineKey`、`Workbook.Cells/Columns/DataStartRow/DataEndRow/KeyField`,不得拼上传 DOM、传完整工作簿 Base64 或自行轮询。
|
|
179
|
+
- 后台接口引擎从 `V8.Param._ImportRowsJson` 和 `_ImportMetaJson` 取值,必须重做模板、权限、字段、唯一性和状态校验。
|
|
180
|
+
- 先校验全部行再写入;接口引擎返回 `Code != 1` 时依靠平台事务整体回滚,禁止手动 Commit/Rollback。
|
|
181
|
+
- 用 `V8.Method.UpdateBackgroundTask({Current,Total,Msg,Log})` 上报真实校验/写入工作量;未知总量保持不确定进度,不伪造百分比。
|
|
182
|
+
- 业务幂等键使用后台任务 Id 或明确的导入操作 Id;重试前回读批次,避免重复写入。
|
|
183
|
+
|
|
184
|
+
完整前端参数见 `microi.doc/docs/doc/v8-engine/v8-client.md#v8openimportdialog`。
|
|
185
|
+
|
|
186
|
+
<!-- /microi-progressive:chunk -->
|
|
175
187
|
## 详细参考路由(渐进披露)
|
|
176
188
|
|
|
177
189
|
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
@@ -167,6 +167,10 @@ V8.OpenDialog({
|
|
|
167
167
|
|
|
168
168
|
按钮应设置稳定 `Id`、`ShowRow:true`、`Icon:"fas fa-key"`。前端显隐只改善体验,创建、查询、吊销等接口仍必须在服务端重新校验普通登录会话以及本人/平台管理员权限。
|
|
169
169
|
|
|
170
|
+
复杂策略编辑器(例如角色 AI 数据权限)应把行按钮持久化到菜单 `MoreBtns`,按钮只通过
|
|
171
|
+
`V8.OpenDialog({ ComponentName, DataAppend })` 打开已注册的 Vue 组件。验收需同时回读菜单按钮 JSON、
|
|
172
|
+
确认组件进入生产构建,并在真实列表行打开弹层;只保留旧定制页面里的按钮不算低代码菜单已迁移。
|
|
173
|
+
|
|
170
174
|
<!-- /microi-progressive:chunk -->
|
|
171
175
|
## 详细参考路由(渐进披露)
|
|
172
176
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
- `_InvokeType:'Server'` 只表达事件调用语义,不是客户端授权开关;浏览器伪造它不会获得受信任权限
|
|
36
36
|
- `V8.FormSubmitAction` 的值是 `'Insert'`/`'Update'`/`'Delete'`(非 Add/Upt/Del)
|
|
37
37
|
- 在 DataFilterV8 中使用 `V8.CacheData` 缓存查询结果,避免每行执行 N+1 查询
|
|
38
|
-
- 表事件调用下游接口时,`diy_table.V8Unlimited`
|
|
38
|
+
- 表事件调用下游接口时,`diy_table.V8Unlimited` 不会改变下游接口;下游接口独立读取正向 `sys_apiengine.V8Limit`(默认 0 表示不限 Jint 单次预算,1 表示启用限制)
|
|
39
39
|
|
|
40
40
|
### 复盘:提交后事件误把增量表单当作完整记录
|
|
41
41
|
|
|
@@ -104,7 +104,7 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
104
104
|
**2026-06 强制补充**:AI 不得在任何子项目目录下放置一次性日志、自动化截图、接口回收文件或调试脚本。像 `Microi.Server/Microi.net.Api/.tmp-*.log`、`Microi.Client/*.png` 这类文件一律视为规范失败,必须移到 `<workspace-root>/.tmp/` 或 `<workspace-root>/.tmp/screenshots/`。正式 Playwright 工程由 Microi.VSCode 插件生成时可以继续使用 `.microi-e2e/`,但 AI 为某个任务手写的一次性 Playwright 脚本、报告和截图仍然必须放在 `.tmp/`。
|
|
105
105
|
|
|
106
106
|
<!-- /microi-progressive:chunk -->
|
|
107
|
-
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=
|
|
107
|
+
<!-- microi-progressive:chunk id=workspace-conventions-005 sha256=fff5f355bea04077c15039b668f0a02b1ed018f5e76aaee47113b6be777fef4a -->
|
|
108
108
|
## Microi 源码路径速查(工作区根相对路径)
|
|
109
109
|
|
|
110
110
|
当用户提到“吾码后端源码”“吾码前端源码”“表单引擎源码”“官网源码”等简称时,默认按下列路径定位;如果当前工作区缺少对应目录,再用 `rg --files` 或目录搜索确认实际位置。
|
|
@@ -124,11 +124,11 @@ AI 在工作区任意任务中生成的**一次性临时脚本、诊断文件、
|
|
|
124
124
|
| 吾码 App 源码 | `microi.app/` |
|
|
125
125
|
| 吾码 UniApp 源码 | `microi.uniapp/` |
|
|
126
126
|
| 吾码官方网站 / 文档源码 | `microi.doc/` |
|
|
127
|
-
| 吾码 AI 应用及应用商城发行源码 | `Microi-V8-Engine/{系统名称} ({ApiBase域名})/{OsClient}.{OsClientType}.{OsClientNetwork}/AI应用/{appKey}
|
|
127
|
+
| 吾码 AI 应用及应用商城发行源码 | 默认位于 `Microi-V8-Engine/{系统名称} ({ApiBase域名})/{OsClient}.{OsClientType}.{OsClientNetwork}/AI应用/{appKey}/`;受审计的独立源码仓库必须由发布契约显式指定 |
|
|
128
128
|
|
|
129
129
|
以上路径只作为通用工作区相对路径规范,不写入具体本机盘符。跨仓库、空工作区或普通用户项目中,如果路径不存在,以插件生成的 `AGENTS.md`、MCP 配置和实际文件树为准。
|
|
130
130
|
|
|
131
|
-
每个 `AI应用/{appKey}`
|
|
131
|
+
每个 `AI应用/{appKey}` 必须只有一个可编辑事实源,统一承载界面、微服务、Manifest、接口引擎、资源策略、测试、构建脚本与商城上传素材。普通应用默认使用当前连接下的 `Microi-V8-Engine` 目录;受审计的官方内置应用若由独立 Git 仓库维护,必须由版本管理的发布契约唯一指向该源码根,并让构建、跨工程测试和发行包共同读取契约。此时同名 `Microi-V8-Engine` 目录只是远端同步镜像,不得回退为构建源。禁止靠目录探测在多份副本之间自动择新,也禁止另建无契约的 `microi.apps/` 平行发行根。
|
|
132
132
|
|
|
133
133
|
<!-- /microi-progressive:chunk -->
|
|
134
134
|
<!-- microi-progressive:chunk id=workspace-conventions-006 sha256=2e2b93098fa72390e148e305ed6cc8cfb154d9a64028cdecb10b39a016e41f41 -->
|