skill-chef 0.3.2 → 0.3.12
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/SKILL.md +42 -29
- package/dist/add/commands.js +1 -1
- package/dist/add/index.d.ts +1 -0
- package/dist/add/index.d.ts.map +1 -1
- package/dist/add/index.js +1 -0
- package/dist/add/index.js.map +1 -1
- package/dist/add/pages.d.ts +62 -0
- package/dist/add/pages.d.ts.map +1 -0
- package/dist/add/pages.js +362 -0
- package/dist/add/pages.js.map +1 -0
- package/dist/add/routes.d.ts +4 -4
- package/dist/add/routes.d.ts.map +1 -1
- package/dist/add/routes.js +12 -6
- package/dist/add/routes.js.map +1 -1
- package/dist/add/run-write.d.ts.map +1 -1
- package/dist/add/run-write.js +39 -0
- package/dist/add/run-write.js.map +1 -1
- package/dist/cli/cmd_read.js +17 -1
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/keys.d.ts +1 -1
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +16 -4
- package/dist/cli/keys.js.map +1 -1
- package/dist/cook/commands.js +1 -1
- package/dist/cook/index.d.ts +2 -1
- package/dist/cook/index.d.ts.map +1 -1
- package/dist/cook/index.js +1 -1
- package/dist/cook/index.js.map +1 -1
- package/dist/cook/page-art.d.ts +18 -0
- package/dist/cook/page-art.d.ts.map +1 -0
- package/dist/cook/page-art.js +30 -0
- package/dist/cook/page-art.js.map +1 -0
- package/dist/cook/page-css.d.ts +9 -0
- package/dist/cook/page-css.d.ts.map +1 -0
- package/dist/cook/page-css.js +206 -0
- package/dist/cook/page-css.js.map +1 -0
- package/dist/cook/page-text.d.ts +28 -0
- package/dist/cook/page-text.d.ts.map +1 -0
- package/dist/cook/page-text.js +65 -0
- package/dist/cook/page-text.js.map +1 -0
- package/dist/cook/routes.js +4 -4
- package/dist/cook/run.d.ts +56 -1
- package/dist/cook/run.d.ts.map +1 -1
- package/dist/cook/run.js +252 -22
- package/dist/cook/run.js.map +1 -1
- package/dist/data/commands.d.ts +6 -7
- package/dist/data/commands.d.ts.map +1 -1
- package/dist/data/commands.js +15 -8
- package/dist/data/commands.js.map +1 -1
- package/dist/data/index.d.ts +2 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +2 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/pages.d.ts +50 -0
- package/dist/data/pages.d.ts.map +1 -0
- package/dist/data/pages.js +226 -0
- package/dist/data/pages.js.map +1 -0
- package/dist/data/routes.d.ts +4 -5
- package/dist/data/routes.d.ts.map +1 -1
- package/dist/data/routes.js +8 -10
- package/dist/data/routes.js.map +1 -1
- package/dist/data/run-batch.d.ts +21 -0
- package/dist/data/run-batch.d.ts.map +1 -0
- package/dist/data/run-batch.js +123 -0
- package/dist/data/run-batch.js.map +1 -0
- package/dist/data/run-query.d.ts +5 -6
- package/dist/data/run-query.d.ts.map +1 -1
- package/dist/data/run-query.js +113 -28
- package/dist/data/run-query.js.map +1 -1
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +20 -4
- package/dist/help/lookup.js.map +1 -1
- package/dist/help/sceneData.d.ts +8 -7
- package/dist/help/sceneData.d.ts.map +1 -1
- package/dist/help/sceneData.js +22 -21
- package/dist/help/sceneData.js.map +1 -1
- package/dist/history/commands.js +1 -1
- package/dist/history/page-css.d.ts +12 -0
- package/dist/history/page-css.d.ts.map +1 -0
- package/dist/history/page-css.js +208 -0
- package/dist/history/page-css.js.map +1 -0
- package/dist/history/pages.d.ts +77 -0
- package/dist/history/pages.d.ts.map +1 -0
- package/dist/history/pages.js +282 -0
- package/dist/history/pages.js.map +1 -0
- package/dist/history/routes.d.ts +4 -6
- package/dist/history/routes.d.ts.map +1 -1
- package/dist/history/routes.js +22 -16
- package/dist/history/routes.js.map +1 -1
- package/dist/history/run-query.d.ts +48 -0
- package/dist/history/run-query.d.ts.map +1 -1
- package/dist/history/run-query.js +96 -10
- package/dist/history/run-query.js.map +1 -1
- package/dist/history/run-record.d.ts +12 -2
- package/dist/history/run-record.d.ts.map +1 -1
- package/dist/history/run-record.js +28 -14
- package/dist/history/run-record.js.map +1 -1
- package/dist/history/validate.d.ts +22 -0
- package/dist/history/validate.d.ts.map +1 -0
- package/dist/history/validate.js +69 -0
- package/dist/history/validate.js.map +1 -0
- package/dist/policy/wakewords.d.ts +1 -1
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +23 -2
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/relation/commands.d.ts +6 -5
- package/dist/relation/commands.d.ts.map +1 -1
- package/dist/relation/commands.js +23 -6
- package/dist/relation/commands.js.map +1 -1
- package/dist/relation/index.d.ts +3 -0
- package/dist/relation/index.d.ts.map +1 -1
- package/dist/relation/index.js +3 -0
- package/dist/relation/index.js.map +1 -1
- package/dist/relation/pages.d.ts +37 -0
- package/dist/relation/pages.d.ts.map +1 -0
- package/dist/relation/pages.js +224 -0
- package/dist/relation/pages.js.map +1 -0
- package/dist/relation/routes.d.ts +6 -5
- package/dist/relation/routes.d.ts.map +1 -1
- package/dist/relation/routes.js +17 -16
- package/dist/relation/routes.js.map +1 -1
- package/dist/relation/run-query.d.ts +10 -0
- package/dist/relation/run-query.d.ts.map +1 -0
- package/dist/relation/run-query.js +104 -0
- package/dist/relation/run-query.js.map +1 -0
- package/dist/relation/run-write.d.ts +13 -0
- package/dist/relation/run-write.d.ts.map +1 -0
- package/dist/relation/run-write.js +114 -0
- package/dist/relation/run-write.js.map +1 -0
- package/dist/relation/shapes.d.ts +8 -0
- package/dist/relation/shapes.d.ts.map +1 -0
- package/dist/relation/shapes.js +153 -0
- package/dist/relation/shapes.js.map +1 -0
- package/dist/relation/treeShapes.d.ts +23 -0
- package/dist/relation/treeShapes.d.ts.map +1 -0
- package/dist/relation/treeShapes.js +289 -0
- package/dist/relation/treeShapes.js.map +1 -0
- package/dist/render/copyArea.d.ts +67 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +146 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +4 -0
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/index.d.ts +7 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +7 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/sceneBand.d.ts +36 -0
- package/dist/render/sceneBand.d.ts.map +1 -0
- package/dist/render/sceneBand.js +166 -0
- package/dist/render/sceneBand.js.map +1 -0
- package/dist/render/sceneRhythm.d.ts +6 -0
- package/dist/render/sceneRhythm.d.ts.map +1 -0
- package/dist/render/sceneRhythm.js +149 -0
- package/dist/render/sceneRhythm.js.map +1 -0
- package/dist/render/sceneShell.d.ts +17 -0
- package/dist/render/sceneShell.d.ts.map +1 -0
- package/dist/render/sceneShell.js +46 -0
- package/dist/render/sceneShell.js.map +1 -0
- package/dist/render/skin.d.ts +13 -0
- package/dist/render/skin.d.ts.map +1 -0
- package/dist/render/skin.js +282 -0
- package/dist/render/skin.js.map +1 -0
- package/dist/search/routes.d.ts +12 -4
- package/dist/search/routes.d.ts.map +1 -1
- package/dist/search/routes.js +39 -7
- package/dist/search/routes.js.map +1 -1
- package/dist/search/run.d.ts +10 -2
- package/dist/search/run.d.ts.map +1 -1
- package/dist/search/run.js +61 -9
- package/dist/search/run.js.map +1 -1
- package/dist/setup/commands.d.ts +5 -5
- package/dist/setup/commands.d.ts.map +1 -1
- package/dist/setup/commands.js +14 -6
- package/dist/setup/commands.js.map +1 -1
- package/dist/setup/index.d.ts +3 -5
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +3 -5
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/pages.d.ts +19 -0
- package/dist/setup/pages.d.ts.map +1 -0
- package/dist/setup/pages.js +163 -0
- package/dist/setup/pages.js.map +1 -0
- package/dist/setup/routes.d.ts +4 -5
- package/dist/setup/routes.d.ts.map +1 -1
- package/dist/setup/routes.js +7 -8
- package/dist/setup/routes.js.map +1 -1
- package/dist/setup/run-init.d.ts +11 -0
- package/dist/setup/run-init.d.ts.map +1 -0
- package/dist/setup/run-init.js +19 -0
- package/dist/setup/run-init.js.map +1 -0
- package/dist/shared/command-spec.d.ts +5 -3
- package/dist/shared/command-spec.d.ts.map +1 -1
- package/dist/shopping/commands.js +1 -1
- package/dist/shopping/commands.js.map +1 -1
- package/dist/shopping/index.d.ts +1 -0
- package/dist/shopping/index.d.ts.map +1 -1
- package/dist/shopping/index.js +1 -0
- package/dist/shopping/index.js.map +1 -1
- package/dist/shopping/pages.d.ts +22 -0
- package/dist/shopping/pages.d.ts.map +1 -0
- package/dist/shopping/pages.js +170 -0
- package/dist/shopping/pages.js.map +1 -0
- package/dist/shopping/routes.js +4 -4
- package/dist/shopping/routes.js.map +1 -1
- package/dist/shopping/run.d.ts +9 -5
- package/dist/shopping/run.d.ts.map +1 -1
- package/dist/shopping/run.js +58 -10
- package/dist/shopping/run.js.map +1 -1
- package/dist/triggers/chef-scenes.d.ts +3 -2
- package/dist/triggers/chef-scenes.d.ts.map +1 -1
- package/dist/triggers/chef-scenes.js +16 -15
- package/dist/triggers/chef-scenes.js.map +1 -1
- package/dist/update/routes.d.ts +6 -4
- package/dist/update/routes.d.ts.map +1 -1
- package/dist/update/routes.js +20 -6
- package/dist/update/routes.js.map +1 -1
- package/dist/update/run-write.d.ts.map +1 -1
- package/dist/update/run-write.js +211 -1
- package/dist/update/run-write.js.map +1 -1
- package/dist/view/commands.js +1 -1
- package/dist/view/page.d.ts +25 -0
- package/dist/view/page.d.ts.map +1 -0
- package/dist/view/page.js +306 -0
- package/dist/view/page.js.map +1 -0
- package/dist/view/pageCss.d.ts +8 -0
- package/dist/view/pageCss.d.ts.map +1 -0
- package/dist/view/pageCss.js +327 -0
- package/dist/view/pageCss.js.map +1 -0
- package/dist/view/pageSection.d.ts +21 -0
- package/dist/view/pageSection.d.ts.map +1 -0
- package/dist/view/pageSection.js +59 -0
- package/dist/view/pageSection.js.map +1 -0
- package/dist/view/routes.js +7 -7
- package/dist/view/run.d.ts +5 -1
- package/dist/view/run.d.ts.map +1 -1
- package/dist/view/run.js +66 -7
- package/dist/view/run.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/** 数据管理能力的页面装配(三卡各一页,区块全走公共层,页内只追加本域自己的一段样式)。
|
|
2
|
+
*
|
|
3
|
+
* 配方来源:`docs/skills/skill-chef/t768-页面族配方.md`
|
|
4
|
+
* · 体检走结果型(结论条+事实条+完整度条+逐菜折叠);
|
|
5
|
+
* · 批量改走过程型目标形态(事实条+变更行+动作行+复制区);
|
|
6
|
+
* · 备份走回执型(结论条+事实条+动作行+复制区)。
|
|
7
|
+
* 老件对照:体检逐菜详情见 `data_quality_report.html`,批量三页见 `batch_edit.html`,
|
|
8
|
+
* 备份完成页见 `backup_receipt.html`(信息组织取老件,视觉走公共层)。
|
|
9
|
+
*
|
|
10
|
+
* 样式分两层(不许拆):公共层皮肤与**族级装饰带/族节奏**走 `renderSceneShell()` 一个入口,
|
|
11
|
+
* 页内专属的版式(逐菜卡里的完整度条、变更行的卡、复制按钮不铺满整行)由 `dataSeatCss()` 追加在它后面。
|
|
12
|
+
* **页内不再出第二条装饰带**(第三轮公共层席把「页头一条族带」定成共用标准;本席第二轮那条 720×120
|
|
13
|
+
* 满宽带与之重复,已撤)——体检页的完整度条是数据可视化,保留,色基与族带同取 `CHART_PALETTE`。
|
|
14
|
+
*
|
|
15
|
+
* #871 E 类裁定(2026-09-21):原体检页/备份页各有一组**读数卡**(`renderKpiGrid`,3 张),
|
|
16
|
+
* 读数与紧邻的事实条**同源重复**;公共层 `pageUi` ⑥ 在 ≤640 档把读数卡栅格写成两列 ⇒ 3 张卡必然
|
|
17
|
+
* 排成「两格 + 一张孤卡、右侧整格空着」(390 端实测,终审 68 分那一格)。本包不许改公共层,
|
|
18
|
+
* 故在页面侧收口:**读数只留事实条一份**(flex 按内容换行,无栅格空位),不再出读数卡网格。
|
|
19
|
+
* 若日后要恢复三格读数卡,须先给公共层补「奇数格在 ≤640 档」一条规则(另立票,见 #871 遗留出口)。
|
|
20
|
+
*/
|
|
21
|
+
import { CHART_PALETTE, renderActionBar, renderFactStrip } from 'base-paint';
|
|
22
|
+
import { renderCaliberLine, renderChangeRows, renderChipRow, renderConclusionBar, renderDisclosure, renderDistributionRows, renderPageShell, renderProseBlock, } from 'base-paint/blocks';
|
|
23
|
+
import { chefCopyArea } from '../render/copyArea.js';
|
|
24
|
+
import { renderSceneShell } from '../render/sceneShell.js';
|
|
25
|
+
/** 换行(仓库口径:不写字面换行转义,与 `blocks.ts`/`skin.ts` 同)。 */
|
|
26
|
+
const LF = String.fromCharCode(10);
|
|
27
|
+
/** 完整度条的填充色:达标取主色,未达标取品牌暖色(`CHART_PALETTE` 同族,不新造色值)。
|
|
28
|
+
* 只用两色:四档深浅都要另立语义,本页只有「够不够 80 分」这一个判断。 */
|
|
29
|
+
const BAR_DONE = '--blue';
|
|
30
|
+
const BAR_SHORT = CHART_PALETTE[2];
|
|
31
|
+
/** 本域三页共用的页内版式(追加在公共层皮肤之后,改的只是本页自己的排版)。 */
|
|
32
|
+
function dataSeatCss(page) {
|
|
33
|
+
const root = '.ilife-page-ui';
|
|
34
|
+
const rules = [
|
|
35
|
+
// 复制区里「只有一颗复制按钮」的那一行,公共层让它铺满整行(≤640 给 520px 上限、≥641 铺满内容列)
|
|
36
|
+
// ⇒ 桌面档会拖出一条 880px 的空胶囊,读起来像一个没写完的框。本域两页按内容宽收口。
|
|
37
|
+
root + ' .ilife-block-copy-block .ilife-action-row-ghost-single {',
|
|
38
|
+
' grid-template-columns: max-content;',
|
|
39
|
+
'}',
|
|
40
|
+
// 动作行里只剩一颗时让它占满整行(本域批量改页删掉那颗与复制区同义的「复制改动」之后,
|
|
41
|
+
// 半格宽的一颗按钮会读成「这里少了一件」)。
|
|
42
|
+
root + ' .ilife-action-row > .ilife-action-btn:only-child {',
|
|
43
|
+
' grid-column: 1 / -1;',
|
|
44
|
+
'}',
|
|
45
|
+
];
|
|
46
|
+
if (page === 'quality') {
|
|
47
|
+
rules.push(
|
|
48
|
+
// 完整度条落在逐菜卡里面:与下面那排五项读数胶囊拉开 10px(它是这张卡的抬头,不是读数的一部分)。
|
|
49
|
+
root + ' .ilife-block-disclosure-body .ilife-block-dist-row {', ' margin-bottom: 10px;', '}',
|
|
50
|
+
// 完整度条与族级装饰带**同一色基**:卡片的左缘取 `CHART_PALETTE` 下标 2(族带构图与底衬里那枚暖色),
|
|
51
|
+
// 条本身留在自己那张卡里——它是数据可视化,不随装饰带撤。
|
|
52
|
+
root + ' .ilife-block-disclosure {', ' border-left-color: ' + CHART_PALETTE[2] + ';', ' border-radius: 14px;', '}',
|
|
53
|
+
// 名称从 `--fg2` 提到 `--fg`:卡片里它才是主信息,条只是它的形状。
|
|
54
|
+
root + ' .ilife-block-dist-row-name {', ' color: var(--fg);', ' font-weight: 600;', '}',
|
|
55
|
+
// 复评点名「进度条与标签略显单薄」:条抬到 12px、分数抬到 15px。
|
|
56
|
+
root + ' .ilife-block-dist-row-bar {', ' height: 12px;', '}', root + ' .ilife-block-dist-row-val {', ' font-size: 15px;', '}',
|
|
57
|
+
// 窄档胶囊只补行距(复评「字宽紧贴边缘」);字号与内距回公共层缺省——
|
|
58
|
+
// 本轮实测把它们抬高后五项读数在 390 折成两行,复评反读成「视觉冗余」。
|
|
59
|
+
root + ' .ilife-block-disclosure-body .ilife-block-chip-row {', ' row-gap: 8px;', '}');
|
|
60
|
+
}
|
|
61
|
+
if (page === 'batch') {
|
|
62
|
+
rules.push(
|
|
63
|
+
// 变更行:改前是一条「上边框 + 一行字」,标签在左、新旧值被 `flex:1` 推到最右缘(1280 档两者
|
|
64
|
+
// 相隔 800px)。收成一张卡,标签按内容宽、新旧值紧随其后——改了什么一眼看完。
|
|
65
|
+
root + ' .ilife-block-change-row {', ' box-sizing: border-box;', ' align-items: center;', ' padding: 10px 14px;', ' border: 1px solid var(--line);', ' border-left: 3px solid var(--blue);', ' border-radius: 14px;', ' background: var(--card);', '}', root + ' .ilife-block-change-row + .ilife-block-change-row {', ' margin-top: 8px;', '}', root + ' .ilife-block-change-row-label {', ' flex: 0 1 auto;', '}');
|
|
66
|
+
}
|
|
67
|
+
if (page !== 'quality') {
|
|
68
|
+
rules.push(
|
|
69
|
+
// 宽档(≥1001):复制区收成一行——标题与说明在左、按钮贴右。改前它是一张满宽卡,
|
|
70
|
+
// 内容全堆在左上角(复评点名「说明卡片内容稀松、以小宽度居中」)。
|
|
71
|
+
'@media (min-width: 1001px) {', ' ' + root + ' .ilife-block-copy-block {', ' display: grid;', ' grid-template-columns: minmax(0, 1fr) auto;', ' column-gap: 16px;', ' align-items: center;', ' }', ' ' + root + ' .ilife-block-copy-block-title {', ' grid-column: 1;', ' margin: 0;', ' }', ' ' + root + ' .ilife-block-copy-block-hint {', ' grid-column: 1;', ' margin: 2px 0 0;', ' }', ' ' + root + ' .ilife-block-copy-block .ilife-action-bar {', ' grid-column: 2;', ' grid-row: 1 / span 2;', ' margin: 0;', ' }', '}');
|
|
72
|
+
}
|
|
73
|
+
return rules.join(LF);
|
|
74
|
+
}
|
|
75
|
+
/** 页壳:样式入口由公共层席收口成 `renderSceneShell()`(皮肤→族带→族节奏→页内四段合成)。
|
|
76
|
+
* 族名**在每一页的调用点上逐字给**(体检=结果型「查到了什么」;批量改与备份=回执型「写下了什么」),
|
|
77
|
+
* 与包内守门断言「这一处壳接线要带一个合法族名」同一形状。页内不再出第二条装饰带。 */
|
|
78
|
+
function shell(title, eyebrow, blocks, seat) {
|
|
79
|
+
return renderSceneShell({
|
|
80
|
+
family: seat.family,
|
|
81
|
+
docTitle: title,
|
|
82
|
+
bodyHtml: renderPageShell({ eyebrow, title, content: blocks.join('') }),
|
|
83
|
+
extraCss: dataSeatCss(seat.page),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** 体检页(结果型)。 */
|
|
87
|
+
export function dataQualityPage(input) {
|
|
88
|
+
const worst = input.items[0];
|
|
89
|
+
const full = input.items.filter((x) => x.score >= 80).length;
|
|
90
|
+
const todo = input.items.filter((x) => x.score < 80).length;
|
|
91
|
+
const blocks = [
|
|
92
|
+
// 结论条只说「先动哪儿」,不再复述第一张卡上已经写着的菜名与分数
|
|
93
|
+
// (判官两轮点名的「标语与缺失说明语义重复」:卡片标题+完整度条已经把名与分说全了)。
|
|
94
|
+
renderConclusionBar(worst ? '从下面第一道开始补。' : '还没有菜谱可以体检。'),
|
|
95
|
+
renderFactStrip({
|
|
96
|
+
items: [
|
|
97
|
+
{ label: '菜数', value: String(input.items.length) + '道' },
|
|
98
|
+
{ label: '达标', value: String(full) + '道', tone: full > 0 ? 'ok' : 'warn' },
|
|
99
|
+
// 达标=够 80 分,「待补」就是差在这一档上的菜数(与结论条点名的同一批)。
|
|
100
|
+
{ label: '待补', value: String(todo) + '道', tone: todo > 0 ? 'warn' : 'ok' },
|
|
101
|
+
{ label: '达标线', value: '80 分' },
|
|
102
|
+
],
|
|
103
|
+
}),
|
|
104
|
+
// 页头已有族级装饰带(结果族:碗/椒/放大镜/盘),页内不再摆第二条带。
|
|
105
|
+
// 逐菜一张卡(默认展开):抬头是完整度条(条长=得分,0–100 取数侧的五项公式),
|
|
106
|
+
// 下面接五项读数与缺口。一处读数只画一遍——不再另出与它同源的读数卡或第二名册。
|
|
107
|
+
// 默认全展开(#873 复评实测:只开最差那道时其余两张卡只剩一行菜名,两视口都被读成留白,总分反而低 5 分)。
|
|
108
|
+
...input.items.map((it) => renderDisclosure({
|
|
109
|
+
title: it.name,
|
|
110
|
+
open: true,
|
|
111
|
+
contentHtml: renderDistributionRows({
|
|
112
|
+
rows: [{
|
|
113
|
+
label: '完整度',
|
|
114
|
+
value: it.score + ' 分',
|
|
115
|
+
pct: it.score,
|
|
116
|
+
color: it.score >= 80 ? BAR_DONE : BAR_SHORT,
|
|
117
|
+
}],
|
|
118
|
+
}) +
|
|
119
|
+
// 五项读数并排成一串小胶囊:窄档下是「食材 0 味」这种一格一事(不用两列表——两列表在
|
|
120
|
+
// ≤640 会逐格折成「列名一行+值一行」,五行读数被摊成十行,正是「列名与正文同号」那一类病)。
|
|
121
|
+
renderChipRow({
|
|
122
|
+
items: [
|
|
123
|
+
{ text: '食材 ' + String(it.ingredients_count) + ' 味' },
|
|
124
|
+
{ text: '步骤 ' + String(it.steps_count) + ' 步' },
|
|
125
|
+
{ text: '贴士 ' + String(it.tips_count) + ' 条' },
|
|
126
|
+
{ text: '技法 ' + String(it.techniques_count) + ' 个' },
|
|
127
|
+
{ text: '背景 ' + (it.has_background ? '有' : '无') },
|
|
128
|
+
],
|
|
129
|
+
}) +
|
|
130
|
+
// 缺口逐条并成一行(各条原本各占一句、句首都挂同一菜名,读起来是同一个词重复五遍)。
|
|
131
|
+
// 菜名带着走:同一道菜的缺口句在页里唯一,不会与别的菜的同类句撞成重复行。
|
|
132
|
+
(it.missing.length
|
|
133
|
+
? renderProseBlock({ text: it.name + '还缺:' + it.missing.join('、') + '。' })
|
|
134
|
+
: renderProseBlock({ text: '五项齐全。' })),
|
|
135
|
+
})),
|
|
136
|
+
renderCaliberLine('评分只看完整度,口碑不计入。'),
|
|
137
|
+
renderActionBar({
|
|
138
|
+
buttons: [
|
|
139
|
+
{ label: '补最差那道菜', kind: 'primary', actionId: 'quality-fix' },
|
|
140
|
+
{ label: '导出一份备份', kind: 'ghost', actionId: 'quality-backup' },
|
|
141
|
+
],
|
|
142
|
+
}),
|
|
143
|
+
// 2026-09-22 用户口径「每张页都要有复制日志」:本页原**整块复制区都缺**
|
|
144
|
+
// (53 件产物里只有 51 件有按钮,缺的两件之一就是本页)。
|
|
145
|
+
chefCopyArea({
|
|
146
|
+
dataActionId: 'quality-copy',
|
|
147
|
+
data: {
|
|
148
|
+
key: 'chef.history.query', shape: 'list',
|
|
149
|
+
items: input.items.map((it) => ({ 菜名: it.name, 完整度: it.score, 缺口: it.missing.join('、') })),
|
|
150
|
+
total: input.items.length,
|
|
151
|
+
},
|
|
152
|
+
log: {
|
|
153
|
+
command: 'chef.history.query',
|
|
154
|
+
source: '体检(kind=quality)',
|
|
155
|
+
m5Line: '体检 ' + String(input.items.length) + ' 道(达标 ' + String(full) + ' 道/待补 ' + String(todo) + ' 道)',
|
|
156
|
+
},
|
|
157
|
+
}),
|
|
158
|
+
];
|
|
159
|
+
return shell('数据质量报告', '私家大厨 | 数据管理', blocks, { page: 'quality', family: 'result' });
|
|
160
|
+
}
|
|
161
|
+
/** 批量改页(过程型目标形态:改前对比+回执)。 */
|
|
162
|
+
export function dataBatchPage(input) {
|
|
163
|
+
const blocks = [
|
|
164
|
+
// 结论条一句话交代这一页的两件事(改的边界 + 已核对),不再另起一行说同一件事。
|
|
165
|
+
renderConclusionBar('只改已经有的食材与步骤,改前改后已对上。'),
|
|
166
|
+
renderFactStrip({
|
|
167
|
+
items: [
|
|
168
|
+
{ label: '菜名', value: input.name },
|
|
169
|
+
{ label: '改动', value: String(input.diffs.length) + '处' },
|
|
170
|
+
],
|
|
171
|
+
}),
|
|
172
|
+
renderChangeRows({
|
|
173
|
+
rows: input.diffs.map((d) => ({ label: d.field, before: d.before || '无', after: d.after || '无' })),
|
|
174
|
+
}),
|
|
175
|
+
// 删掉「用量与时长要写数字」那一行:它是**输入那一刻**的规矩,本页是改完之后的回执,
|
|
176
|
+
// 页上没有输入位 ⇒ 留着只让我方多说一句(判官三轮点名的「文案叠说」之一)。
|
|
177
|
+
renderActionBar({
|
|
178
|
+
buttons: [
|
|
179
|
+
// 只留这一颗:「复制改动」那颗主按钮在产物里**没有 `data-t`(点了不复制)**,
|
|
180
|
+
// 与复制区那颗真按钮同说一件事 ⇒ 删掉,复制入口只留复制区一处。
|
|
181
|
+
{ label: '再看一遍菜谱', kind: 'ghost', actionId: 'batch-view' },
|
|
182
|
+
],
|
|
183
|
+
}),
|
|
184
|
+
chefCopyArea({
|
|
185
|
+
dataActionId: 'batch-copy-data',
|
|
186
|
+
data: {
|
|
187
|
+
key: 'chef.data.batch', shape: 'receipt', ok: true,
|
|
188
|
+
message: input.name + '改' + input.diffs.length + '处:' + input.diffs.map((d) => d.field + d.before + '到' + d.after).join(';'),
|
|
189
|
+
},
|
|
190
|
+
}),
|
|
191
|
+
];
|
|
192
|
+
return shell('批量改回执', '私家大厨 | 数据管理', blocks, { page: 'batch', family: 'receipt' });
|
|
193
|
+
}
|
|
194
|
+
/** 备份回执页(回执型)。 */
|
|
195
|
+
export function dataBackupPage(input) {
|
|
196
|
+
const blocks = [
|
|
197
|
+
renderConclusionBar('备份已经落盘,一次导出全部数据。'),
|
|
198
|
+
renderFactStrip({
|
|
199
|
+
items: [
|
|
200
|
+
{ label: '菜数', value: String(input.recipeCount) + '道' },
|
|
201
|
+
{ label: '表数', value: String(input.tableCount) + '张' },
|
|
202
|
+
{ label: '大小', value: String(input.bytes) + '字节' },
|
|
203
|
+
],
|
|
204
|
+
}),
|
|
205
|
+
// 只留一句旁注,且改成一口读得懂的短句(原来那句「默认不含已废弃的菜」被复评读成病句)。
|
|
206
|
+
renderCaliberLine('已废弃的菜不在这一份里。'),
|
|
207
|
+
renderActionBar({
|
|
208
|
+
buttons: [
|
|
209
|
+
{ label: '看看全部菜谱', kind: 'primary', actionId: 'backup-list' },
|
|
210
|
+
{ label: '再备一份', kind: 'ghost', actionId: 'backup-again' },
|
|
211
|
+
],
|
|
212
|
+
}),
|
|
213
|
+
chefCopyArea({
|
|
214
|
+
// 删掉说明行:它与按钮「复制数据」说的是同一件事(判官点名的「文案叠说」)。
|
|
215
|
+
// (原注还提到标题「复制备份回执」——该标题随 **2026-09-22 用户裁定「乙」** 连同卡片一去去掉了。)
|
|
216
|
+
dataActionId: 'backup-copy-data',
|
|
217
|
+
// 备份走 `history.query` 的 kind=backup,信封 key 随 CLI 取 `chef.history.query`。
|
|
218
|
+
data: {
|
|
219
|
+
key: 'chef.history.query', shape: 'list',
|
|
220
|
+
items: [{ 菜数: input.recipeCount, 表数: input.tableCount, 大小: input.bytes }],
|
|
221
|
+
},
|
|
222
|
+
}),
|
|
223
|
+
];
|
|
224
|
+
return shell('备份回执', '私家大厨 | 数据管理', blocks, { page: 'backup', family: 'receipt' });
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/data/pages.ts"],"names":[],"mappings":"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"}
|
package/dist/data/routes.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/** 数据管理能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 命令行写法照同 key 同 kind 的既有行类比(`kind` 透传,空库可跑的那一行)。
|
|
3
|
+
* 一行:`批量改`走本域自有 `chef.data.batch`。#841 起该词已在 `WAKE_TABLE`(下标 49),
|
|
4
|
+
* `order` 照表序填实,不再有 `order: 0` 的待接入行。
|
|
5
|
+
* 本域另两句不行于此(一句事实一个落点):`体检`的短语→key 映射与 `备份`(同命令 `kind: 'backup'`)
|
|
6
|
+
* 都住 `src/history/routes.ts`,kind 级切分由入口做;备份的**页面装配**仍住本域(`src/data/pages.ts`)。
|
|
8
7
|
*/
|
|
9
8
|
import type { RouteDecl } from '../shared/command-spec.js';
|
|
10
9
|
/** 数据管理能力的路由声明表:恰好导出一个声明数组。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAO3C,CAAC"}
|
package/dist/data/routes.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/** 数据管理能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 命令行写法照同 key 同 kind 的既有行类比(`kind` 透传,空库可跑的那一行)。
|
|
3
|
+
* 一行:`批量改`走本域自有 `chef.data.batch`。#841 起该词已在 `WAKE_TABLE`(下标 49),
|
|
4
|
+
* `order` 照表序填实,不再有 `order: 0` 的待接入行。
|
|
5
|
+
* 本域另两句不行于此(一句事实一个落点):`体检`的短语→key 映射与 `备份`(同命令 `kind: 'backup'`)
|
|
6
|
+
* 都住 `src/history/routes.ts`,kind 级切分由入口做;备份的**页面装配**仍住本域(`src/data/pages.ts`)。
|
|
8
7
|
*/
|
|
9
8
|
/** 数据管理能力的路由声明表:恰好导出一个声明数组。 */
|
|
10
9
|
export const DATA_ROUTES = [
|
|
11
10
|
{
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
cli: 'chef-cmd-read chef.history.query --params \'{"kind":"backup"}\'',
|
|
11
|
+
order: 49,
|
|
12
|
+
wakeWord: '批量改',
|
|
13
|
+
key: 'chef.data.batch',
|
|
14
|
+
cli: 'chef-cmd-read chef.data.batch --params \'{"name":"辣椒炒肉","ingredients":[{"name":"螺丝椒","quantity":300}]}\'',
|
|
17
15
|
},
|
|
18
16
|
];
|
|
19
17
|
//# sourceMappingURL=routes.js.map
|
package/dist/data/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,iBAAiB;QACtB,GAAG,EAAE,0GAA0G;KAChH;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** 数据管理能力的写处理(`chef.data.batch` 的批量编辑)+ 本域独占的取数。
|
|
2
|
+
*
|
|
3
|
+
* 本期范围(t769 降级):只改既有行,不新增;关联步骤不开。
|
|
4
|
+
* · 食材:按名定位既有行,改数字用量(#818 甲:缺数字直接拦,不写半条);
|
|
5
|
+
* · 步骤:按序号定位既有行,改动作/时长/火候(时长改数字,缺数字直接拦);
|
|
6
|
+
* · 标签:饮食标签整组替换(先清后插同一事务,缺标签即清空)。
|
|
7
|
+
* 改动前对比由调用方按回执 `diff` 出页,回执即真相。
|
|
8
|
+
*/
|
|
9
|
+
import type { ChefDb } from '../fetch/db.js';
|
|
10
|
+
interface BatchDiff {
|
|
11
|
+
action: string;
|
|
12
|
+
field: string;
|
|
13
|
+
before: string;
|
|
14
|
+
after: string;
|
|
15
|
+
}
|
|
16
|
+
/** 跑 `chef.data.batch`:改前读+事务改+改后对比(receipt 形)。 */
|
|
17
|
+
export declare function runDataBatch(handle: ChefDb, params: Record<string, unknown>): unknown;
|
|
18
|
+
/** 批量改的差异明細(供页面装配,纯取数不写库)。 */
|
|
19
|
+
export declare function previewDataBatch(handle: ChefDb, params: Record<string, unknown>): BatchDiff[];
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=run-batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-batch.d.ts","sourceRoot":"","sources":["../../src/data/run-batch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CA2ErF;AAED,8BAA8B;AAC9B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAa7F"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/** 数据管理能力的写处理(`chef.data.batch` 的批量编辑)+ 本域独占的取数。
|
|
2
|
+
*
|
|
3
|
+
* 本期范围(t769 降级):只改既有行,不新增;关联步骤不开。
|
|
4
|
+
* · 食材:按名定位既有行,改数字用量(#818 甲:缺数字直接拦,不写半条);
|
|
5
|
+
* · 步骤:按序号定位既有行,改动作/时长/火候(时长改数字,缺数字直接拦);
|
|
6
|
+
* · 标签:饮食标签整组替换(先清后插同一事务,缺标签即清空)。
|
|
7
|
+
* 改动前对比由调用方按回执 `diff` 出页,回执即真相。
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { ChefFetchError, ChefPolicyError } from '../fetch/errors.js';
|
|
11
|
+
import { getRecipeDetail, mustRecipe, qAll, qRun } from '../fetch/db.js';
|
|
12
|
+
import { buildRecipeReceipt } from '../render/index.js';
|
|
13
|
+
function strOf(v) {
|
|
14
|
+
return v === null || v === undefined ? '' : String(v);
|
|
15
|
+
}
|
|
16
|
+
/** 跑 `chef.data.batch`:改前读+事务改+改后对比(receipt 形)。 */
|
|
17
|
+
export function runDataBatch(handle, params) {
|
|
18
|
+
const rawName = params.name;
|
|
19
|
+
if (typeof rawName !== 'string' || !rawName.trim()) {
|
|
20
|
+
throw new ChefPolicyError('POLICY_MISSING_SLOT', '缺槽位 name');
|
|
21
|
+
}
|
|
22
|
+
const detail = getRecipeDetail(handle, rawName.trim());
|
|
23
|
+
const recipe = mustRecipe(handle, detail.recipe.id);
|
|
24
|
+
const diffs = [];
|
|
25
|
+
const doIngredients = Array.isArray(params.ingredients) ? params.ingredients : [];
|
|
26
|
+
const doSteps = Array.isArray(params.steps) ? params.steps : [];
|
|
27
|
+
const hasTags = Array.isArray(params.diet_tags);
|
|
28
|
+
if (doIngredients.length === 0 && doSteps.length === 0 && !hasTags) {
|
|
29
|
+
throw new ChefPolicyError('POLICY_MISSING_SLOT', '批量改须给 ingredients/steps/diet_tags 其一');
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
handle.db.exec('BEGIN');
|
|
33
|
+
for (const g of doIngredients) {
|
|
34
|
+
const n = typeof g?.name === 'string' ? g.name.trim() : '';
|
|
35
|
+
if (!n)
|
|
36
|
+
throw new ChefPolicyError('POLICY_MISSING_SLOT', '食材须给名 name');
|
|
37
|
+
const cur = qAll(handle, 'SELECT * FROM ingredients WHERE recipe_id = ? AND name = ?', [recipe.id, n]);
|
|
38
|
+
if (!cur.length)
|
|
39
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '无此食材:' + n + '(批量改只改已有的食材,不新增)');
|
|
40
|
+
if (g.quantity === undefined)
|
|
41
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '改用量须给数字 quantity(老库 NOT NULL)');
|
|
42
|
+
const qn = typeof g.quantity === 'string' ? Number(g.quantity.trim()) : g.quantity;
|
|
43
|
+
if (typeof qn !== 'number' || !Number.isFinite(qn))
|
|
44
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '改用量须给数字 quantity');
|
|
45
|
+
const before = cur[0].quantity;
|
|
46
|
+
qRun(handle, 'UPDATE ingredients SET quantity = ? WHERE id = ?', [qn, String(cur[0].id)]);
|
|
47
|
+
diffs.push({ action: 'mod', field: '食材「' + n + '」用量', before: strOf(before), after: strOf(qn) });
|
|
48
|
+
}
|
|
49
|
+
for (const s of doSteps) {
|
|
50
|
+
const seqRaw = s?.sequence;
|
|
51
|
+
const seq = typeof seqRaw === 'string' ? Number(seqRaw.trim()) : seqRaw;
|
|
52
|
+
if (!Number.isInteger(seq) || seq <= 0)
|
|
53
|
+
throw new ChefPolicyError('POLICY_MISSING_SLOT', '步骤须给正整数 sequence');
|
|
54
|
+
const cur = qAll(handle, 'SELECT * FROM cooking_steps WHERE recipe_id = ? AND sequence = ?', [recipe.id, seq]);
|
|
55
|
+
if (!cur.length)
|
|
56
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '无此步骤:第' + String(seq) + '步(批量改只改已有的步骤,不新增)');
|
|
57
|
+
const patch = {};
|
|
58
|
+
if (s.action !== undefined) {
|
|
59
|
+
const a = String(s.action ?? '').trim();
|
|
60
|
+
if (!a)
|
|
61
|
+
throw new ChefPolicyError('POLICY_BAD_INPUT', '步骤动作不可空');
|
|
62
|
+
patch.action = a;
|
|
63
|
+
diffs.push({ action: 'mod', field: '第' + String(seq) + '步动作', before: strOf(cur[0].action), after: a });
|
|
64
|
+
}
|
|
65
|
+
if (s.duration_minutes !== undefined) {
|
|
66
|
+
const dRaw = s.duration_minutes;
|
|
67
|
+
const d = typeof dRaw === 'string' ? Number(dRaw.trim()) : dRaw;
|
|
68
|
+
if (typeof d !== 'number' || !Number.isFinite(d))
|
|
69
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '步骤时长须给数字 duration_minutes');
|
|
70
|
+
patch.duration_minutes = d;
|
|
71
|
+
diffs.push({ action: 'mod', field: '第' + String(seq) + '步时长', before: strOf(cur[0].duration_minutes), after: strOf(d) });
|
|
72
|
+
}
|
|
73
|
+
if (s.heat_level !== undefined) {
|
|
74
|
+
const heat = String(s.heat_level ?? '');
|
|
75
|
+
patch.heat_level = heat;
|
|
76
|
+
diffs.push({ action: 'mod', field: '第' + String(seq) + '步火候', before: strOf(cur[0].heat_level), after: heat });
|
|
77
|
+
}
|
|
78
|
+
const keys = Object.keys(patch);
|
|
79
|
+
if (keys.length > 0) {
|
|
80
|
+
qRun(handle, 'UPDATE cooking_steps SET ' + keys.map((k) => k + ' = ?').join(', ') + ' WHERE id = ?', [...keys.map((k) => patch[k]), String(cur[0].id)]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (hasTags) {
|
|
84
|
+
const tags = params.diet_tags.map((t) => String(t ?? '').trim()).filter((t) => t !== '');
|
|
85
|
+
const before = qAll(handle, 'SELECT tag FROM recipe_diet_tags WHERE recipe_id = ?', [recipe.id]).map((r) => String(r.tag));
|
|
86
|
+
qRun(handle, 'DELETE FROM recipe_diet_tags WHERE recipe_id = ?', [recipe.id]);
|
|
87
|
+
for (const tag of tags) {
|
|
88
|
+
qRun(handle, 'INSERT INTO recipe_diet_tags (id, recipe_id, tag) VALUES (?, ?, ?)', [randomUUID(), recipe.id, tag]);
|
|
89
|
+
}
|
|
90
|
+
diffs.push({ action: 'mod', field: '饮食标签', before: before.join('、') || '无', after: tags.join('、') || '无' });
|
|
91
|
+
}
|
|
92
|
+
handle.db.exec('COMMIT');
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
try {
|
|
96
|
+
handle.db.exec('ROLLBACK');
|
|
97
|
+
}
|
|
98
|
+
catch { /* 已回滚 */ }
|
|
99
|
+
if (e instanceof ChefFetchError || e instanceof ChefPolicyError)
|
|
100
|
+
throw e;
|
|
101
|
+
throw new ChefFetchError('CHEF_DB_UNREADABLE', '批量改写盘失败', { cause: e });
|
|
102
|
+
}
|
|
103
|
+
if (!diffs.length)
|
|
104
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '本次无有效改动');
|
|
105
|
+
return buildRecipeReceipt('已批量改' + recipe.name + ':' + diffs.length + '处(改前已对比)');
|
|
106
|
+
}
|
|
107
|
+
/** 批量改的差异明細(供页面装配,纯取数不写库)。 */
|
|
108
|
+
export function previewDataBatch(handle, params) {
|
|
109
|
+
const rawName = params.name;
|
|
110
|
+
if (typeof rawName !== 'string' || !rawName.trim())
|
|
111
|
+
return [];
|
|
112
|
+
const detail = getRecipeDetail(handle, rawName.trim());
|
|
113
|
+
const out = [];
|
|
114
|
+
for (const g of (Array.isArray(params.ingredients) ? params.ingredients : [])) {
|
|
115
|
+
const n = typeof g?.name === 'string' ? g.name.trim() : '';
|
|
116
|
+
const cur = detail.ingredients.find((x) => x.name === n);
|
|
117
|
+
if (cur && g.quantity !== undefined) {
|
|
118
|
+
out.push({ action: 'mod', field: '食材「' + n + '」用量', before: strOf(cur.quantity), after: strOf(g.quantity) });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=run-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-batch.js","sourceRoot":"","sources":["../../src/data/run-batch.ts"],"names":[],"mappings":"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"}
|
package/dist/data/run-query.d.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/** 数据管理能力的查处理(`chef.history.query` 的 quality/backup 两 kind)+ 本域独占的体检取数。
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `healthCheck
|
|
7
|
-
* 搬入本文件;旧址改转出(搬迁债务,见 `src/fetch/index.ts`)。
|
|
3
|
+
* 口径裁定(本票第一件事,见 `docs/skills/skill-chef/t776-小域.md`):
|
|
4
|
+
* 体检主口径=老件完整度(`scripts/data_quality_report.py:114-124` 五项各 20 分满分 100),
|
|
5
|
+
* 新件曾有的口碑实现属另一语义,已移出体检页(口碑另立票,见遗留出口)。
|
|
6
|
+
* `healthCheck`(四档缺失)保留作取数原语(测试与备份复用),体检页按完整度出分。
|
|
8
7
|
*/
|
|
9
8
|
import type { ChefDb, HealthIssue } from '../fetch/db.js';
|
|
10
9
|
/** 库体检:无食材/无步骤/缺火候/从未做过四档问题(无异常即空数组,由调用方拼 ok 条)。
|
|
11
10
|
* 原 `src/fetch/db.ts`,本域独占。 */
|
|
12
11
|
export declare function healthCheck(h: ChefDb): HealthIssue[];
|
|
13
|
-
/** 跑 `chef.history.query` 的 quality/backup:`kind`
|
|
12
|
+
/** 跑 `chef.history.query` 的 quality/backup:`kind` 由入口算好下传,本函数只做本域两路分支。 */
|
|
14
13
|
export declare function runDataQuery(handle: ChefDb, params: Record<string, unknown>, kind: string): unknown;
|
|
15
14
|
//# sourceMappingURL=run-query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-query.d.ts","sourceRoot":"","sources":["../../src/data/run-query.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"run-query.d.ts","sourceRoot":"","sources":["../../src/data/run-query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK1D;+BAC+B;AAC/B,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAiBpD;AA6BD,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA8EnG"}
|