skill-schedule 0.3.3 → 0.3.13
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 +12 -3
- package/dist/.gen-inputs.json +4 -4
- package/dist/admin/adminDocs.d.ts +57 -0
- package/dist/admin/adminDocs.d.ts.map +1 -0
- package/dist/admin/adminDocs.js +190 -0
- package/dist/admin/adminDocs.js.map +1 -0
- package/dist/admin/adminParts.d.ts +37 -0
- package/dist/admin/adminParts.d.ts.map +1 -0
- package/dist/admin/adminParts.js +83 -0
- package/dist/admin/adminParts.js.map +1 -0
- package/dist/admin/handlers.d.ts.map +1 -1
- package/dist/admin/handlers.js +196 -6
- package/dist/admin/handlers.js.map +1 -1
- package/dist/admin/routes.d.ts +10 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +2 -0
- package/dist/admin/routes.js.map +1 -1
- package/dist/analyze/analyzeDocs.d.ts +51 -0
- package/dist/analyze/analyzeDocs.d.ts.map +1 -0
- package/dist/analyze/analyzeDocs.js +442 -0
- package/dist/analyze/analyzeDocs.js.map +1 -0
- package/dist/analyze/analyzeParts.d.ts +53 -0
- package/dist/analyze/analyzeParts.d.ts.map +1 -0
- package/dist/analyze/analyzeParts.js +229 -0
- package/dist/analyze/analyzeParts.js.map +1 -0
- package/dist/analyze/handlers.d.ts.map +1 -1
- package/dist/analyze/handlers.js +41 -4
- package/dist/analyze/handlers.js.map +1 -1
- package/dist/cli/cmd_read.js +8 -2
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +0 -9
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +20 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/fetch/feishu.d.ts +6 -0
- package/dist/fetch/feishu.d.ts.map +1 -1
- package/dist/fetch/feishu.js +18 -7
- package/dist/fetch/feishu.js.map +1 -1
- package/dist/fetch/index.d.ts +1 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +1 -1
- package/dist/fetch/index.js.map +1 -1
- package/dist/health.d.ts +11 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +48 -22
- package/dist/health.js.map +1 -1
- package/dist/help/index.d.ts +1 -0
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +3 -0
- package/dist/help/index.js.map +1 -1
- package/dist/plan/discussDocs.d.ts +8 -0
- package/dist/plan/discussDocs.d.ts.map +1 -0
- package/dist/plan/discussDocs.js +321 -0
- package/dist/plan/discussDocs.js.map +1 -0
- package/dist/plan/feishuDocs.d.ts +19 -0
- package/dist/plan/feishuDocs.d.ts.map +1 -0
- package/dist/plan/feishuDocs.js +257 -0
- package/dist/plan/feishuDocs.js.map +1 -0
- package/dist/plan/handlers.d.ts.map +1 -1
- package/dist/plan/handlers.js +107 -3
- package/dist/plan/handlers.js.map +1 -1
- package/dist/plan/index.d.ts +2 -0
- package/dist/plan/index.d.ts.map +1 -1
- package/dist/plan/index.js +16 -9
- package/dist/plan/index.js.map +1 -1
- package/dist/plan/iso.d.ts +2 -0
- package/dist/plan/iso.d.ts.map +1 -1
- package/dist/plan/iso.js +6 -2
- package/dist/plan/iso.js.map +1 -1
- package/dist/plan/planDocs.d.ts +47 -0
- package/dist/plan/planDocs.d.ts.map +1 -0
- package/dist/plan/planDocs.js +159 -0
- package/dist/plan/planDocs.js.map +1 -0
- package/dist/plan/planParts.d.ts +38 -0
- package/dist/plan/planParts.d.ts.map +1 -0
- package/dist/plan/planParts.js +96 -0
- package/dist/plan/planParts.js.map +1 -0
- package/dist/plan/probe.d.ts +28 -0
- package/dist/plan/probe.d.ts.map +1 -0
- package/dist/plan/probe.js +114 -0
- package/dist/plan/probe.js.map +1 -0
- package/dist/plan/receipt.d.ts +12 -0
- package/dist/plan/receipt.d.ts.map +1 -1
- package/dist/plan/receipt.js +17 -0
- package/dist/plan/receipt.js.map +1 -1
- package/dist/plan/receiptDocs.d.ts +26 -0
- package/dist/plan/receiptDocs.d.ts.map +1 -0
- package/dist/plan/receiptDocs.js +341 -0
- package/dist/plan/receiptDocs.js.map +1 -0
- package/dist/plan/replayDocs.d.ts +165 -0
- package/dist/plan/replayDocs.d.ts.map +1 -0
- package/dist/plan/replayDocs.js +226 -0
- package/dist/plan/replayDocs.js.map +1 -0
- package/dist/plan/replaySections.d.ts +5 -0
- package/dist/plan/replaySections.d.ts.map +1 -0
- package/dist/plan/replaySections.js +471 -0
- package/dist/plan/replaySections.js.map +1 -0
- package/dist/plan/reviewDocs.d.ts +4 -0
- package/dist/plan/reviewDocs.d.ts.map +1 -0
- package/dist/plan/reviewDocs.js +130 -0
- package/dist/plan/reviewDocs.js.map +1 -0
- package/dist/plan/sync.d.ts.map +1 -1
- package/dist/plan/sync.js +5 -0
- package/dist/plan/sync.js.map +1 -1
- package/dist/policy/index.d.ts +1 -1
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -1
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/plan.d.ts +8 -0
- package/dist/policy/plan.d.ts.map +1 -1
- package/dist/policy/plan.js +20 -0
- package/dist/policy/plan.js.map +1 -1
- package/dist/query/handlers.d.ts +3 -0
- package/dist/query/handlers.d.ts.map +1 -1
- package/dist/query/handlers.js +86 -12
- package/dist/query/handlers.js.map +1 -1
- package/dist/query/queryDocs.d.ts +64 -0
- package/dist/query/queryDocs.d.ts.map +1 -0
- package/dist/query/queryDocs.js +554 -0
- package/dist/query/queryDocs.js.map +1 -0
- package/dist/query/routes.d.ts +11 -1
- package/dist/query/routes.d.ts.map +1 -1
- package/dist/query/routes.js +5 -1
- package/dist/query/routes.js.map +1 -1
- package/dist/render/copyArea.d.ts +61 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +80 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +3 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +2 -0
- package/dist/render/index.js.map +1 -1
- package/dist/shared/dayPage.d.ts +67 -0
- package/dist/shared/dayPage.d.ts.map +1 -0
- package/dist/shared/dayPage.js +92 -0
- package/dist/shared/dayPage.js.map +1 -0
- package/dist/shared/detailPage.d.ts +55 -0
- package/dist/shared/detailPage.d.ts.map +1 -0
- package/dist/shared/detailPage.js +65 -0
- package/dist/shared/detailPage.js.map +1 -0
- package/dist/shared/docPage.d.ts +22 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +52 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/shared/overviewPage.d.ts +52 -0
- package/dist/shared/overviewPage.d.ts.map +1 -0
- package/dist/shared/overviewPage.js +65 -0
- package/dist/shared/overviewPage.js.map +1 -0
- package/dist/shared/pageNav.d.ts +24 -0
- package/dist/shared/pageNav.d.ts.map +1 -0
- package/dist/shared/pageNav.js +70 -0
- package/dist/shared/pageNav.js.map +1 -0
- package/dist/shared/pageParts.d.ts +45 -0
- package/dist/shared/pageParts.d.ts.map +1 -0
- package/dist/shared/pageParts.js +154 -0
- package/dist/shared/pageParts.js.map +1 -0
- package/dist/shared/planPage.d.ts +49 -0
- package/dist/shared/planPage.d.ts.map +1 -0
- package/dist/shared/planPage.js +48 -0
- package/dist/shared/planPage.js.map +1 -0
- package/dist/shared/rangePage.d.ts +44 -0
- package/dist/shared/rangePage.d.ts.map +1 -0
- package/dist/shared/rangePage.js +50 -0
- package/dist/shared/rangePage.js.map +1 -0
- package/dist/shared/weekPage.d.ts +36 -0
- package/dist/shared/weekPage.d.ts.map +1 -0
- package/dist/shared/weekPage.js +42 -0
- package/dist/shared/weekPage.js.map +1 -0
- package/dist/triggers/routes.generated.d.ts +23 -1
- package/dist/triggers/routes.generated.d.ts.map +1 -1
- package/dist/triggers/routes.generated.js +4 -1
- package/dist/triggers/routes.generated.js.map +1 -1
- package/dist/write/handlers.d.ts.map +1 -1
- package/dist/write/handlers.js +101 -5
- package/dist/write/handlers.js.map +1 -1
- package/dist/write/writeDocs.d.ts +27 -0
- package/dist/write/writeDocs.d.ts.map +1 -0
- package/dist/write/writeDocs.js +423 -0
- package/dist/write/writeDocs.js.map +1 -0
- package/dist/write/writeParts.d.ts +54 -0
- package/dist/write/writeParts.d.ts.map +1 -0
- package/dist/write/writeParts.js +117 -0
- package/dist/write/writeParts.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** #785 · 「区间汇总」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f02「作息记录·区间」这一族
|
|
4
|
+
* 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
|
|
5
|
+
* 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
|
|
6
|
+
*
|
|
7
|
+
* 形状=件序列(照老侧 f02 的必现块摆位,一块不少,只换主次):
|
|
8
|
+
*
|
|
9
|
+
* 读数卡 → 结论条 → 分类聚合(分布行)→ 7 维趋势(图表块)→ 睡眠统计(事实条)→ 每日明细(行列表)→ 复制区
|
|
10
|
+
*
|
|
11
|
+
* 老侧 f02 的必现块:**分类聚合**=分布行、**7 维趋势**=图表块、**睡眠统计**=事实条;
|
|
12
|
+
* 另有老侧同页的 4 卡摘要(这里=读数卡)与每日明细(这里=行列表),健康分落读数卡之一。
|
|
13
|
+
*
|
|
14
|
+
* **本件只认形状,不认口径**:哪 7 维、每格多少分钟、分布行怎么排序、睡眠取哪几类,都由 `query` 侧
|
|
15
|
+
* 算好再进来(与 `weekPage.ts` 同一分工)。
|
|
16
|
+
*
|
|
17
|
+
* #891 补的**页内定位**(不动件序列):本页**小节恒 3 颗**(`分类聚合`/`7 维趋势`/`复制与留档`),
|
|
18
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页是长页**,页首出页内目录。
|
|
19
|
+
*/
|
|
20
|
+
import { type ChartBlockInput, type DistributionRowInput, type KpiCardInput, type ListRowInput } from 'base-paint/blocks';
|
|
21
|
+
import { type FactItemInput } from 'base-paint';
|
|
22
|
+
import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
|
|
23
|
+
import { type PageHead } from './docPage.js';
|
|
24
|
+
/** 「区间汇总」一页要的全部东西(8 个字段)。 */
|
|
25
|
+
export interface RangePageData {
|
|
26
|
+
readonly head: PageHead;
|
|
27
|
+
/** 读数卡:块数/覆盖/覆盖天数/健康分(老侧同页的「4 卡摘要」)。 */
|
|
28
|
+
readonly kpis: readonly KpiCardInput[];
|
|
29
|
+
readonly conclusion: string;
|
|
30
|
+
/** **分类聚合**:一级分类的时长与占比(标签是给人看的一级分类名,不是 `l1.x` 那种原始键)。 */
|
|
31
|
+
readonly distribution: readonly DistributionRowInput[];
|
|
32
|
+
/** 分布行上色要的顺序(一级分类的权威顺序,由调用方从 `policy` 取)。 */
|
|
33
|
+
readonly order: readonly string[];
|
|
34
|
+
/** **7 维趋势**:图表块的 kind + 入参(本件只补段名,不挑 kind——单日区间与多日区间的画法不同)。 */
|
|
35
|
+
readonly trend: Omit<ChartBlockInput, 'title'>;
|
|
36
|
+
/** **睡眠统计**:夜间睡眠/午睡/合计。 */
|
|
37
|
+
readonly sleep: readonly FactItemInput[];
|
|
38
|
+
/** 每日明细(一行一天:日期/块数/当天时长)。 */
|
|
39
|
+
readonly daily: readonly ListRowInput[];
|
|
40
|
+
readonly copy: ScheduleCopyAreaInput;
|
|
41
|
+
}
|
|
42
|
+
/** 出「区间汇总」整页。 */
|
|
43
|
+
export declare function renderRangePage(data: RangePageData): string;
|
|
44
|
+
//# sourceMappingURL=rangePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rangePage.d.ts","sourceRoot":"","sources":["../../src/shared/rangePage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAE0B,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAC9E,KAAK,YAAY,EAAE,KAAK,YAAY,EACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI9D,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC/C,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED,iBAAiB;AACjB,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAsB3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** #785 · 「区间汇总」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f02「作息记录·区间」这一族
|
|
4
|
+
* 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
|
|
5
|
+
* 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
|
|
6
|
+
*
|
|
7
|
+
* 形状=件序列(照老侧 f02 的必现块摆位,一块不少,只换主次):
|
|
8
|
+
*
|
|
9
|
+
* 读数卡 → 结论条 → 分类聚合(分布行)→ 7 维趋势(图表块)→ 睡眠统计(事实条)→ 每日明细(行列表)→ 复制区
|
|
10
|
+
*
|
|
11
|
+
* 老侧 f02 的必现块:**分类聚合**=分布行、**7 维趋势**=图表块、**睡眠统计**=事实条;
|
|
12
|
+
* 另有老侧同页的 4 卡摘要(这里=读数卡)与每日明细(这里=行列表),健康分落读数卡之一。
|
|
13
|
+
*
|
|
14
|
+
* **本件只认形状,不认口径**:哪 7 维、每格多少分钟、分布行怎么排序、睡眠取哪几类,都由 `query` 侧
|
|
15
|
+
* 算好再进来(与 `weekPage.ts` 同一分工)。
|
|
16
|
+
*
|
|
17
|
+
* #891 补的**页内定位**(不动件序列):本页**小节恒 3 颗**(`分类聚合`/`7 维趋势`/`复制与留档`),
|
|
18
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页是长页**,页首出页内目录。
|
|
19
|
+
*/
|
|
20
|
+
import { renderChartBlock, renderConclusionBar, renderDistributionRows, renderKpiGrid, renderListRows, } from 'base-paint/blocks';
|
|
21
|
+
import { renderFactStrip } from 'base-paint';
|
|
22
|
+
import { scheduleCopyArea } from '../render/copyArea.js';
|
|
23
|
+
import { assembleDocPage } from './docPage.js';
|
|
24
|
+
import { pageSections } from './pageNav.js';
|
|
25
|
+
import { categoryColor } from './pageParts.js';
|
|
26
|
+
/** 出「区间汇总」整页。 */
|
|
27
|
+
export function renderRangePage(data) {
|
|
28
|
+
const { toc, body } = pageSections([
|
|
29
|
+
{ html: renderKpiGrid(data.kpis) },
|
|
30
|
+
{ html: renderConclusionBar(data.conclusion) },
|
|
31
|
+
// 分类聚合这一段要有名字(老侧 f02 的必现块就叫「分类聚合」):段名走 `heat-title` 这个公共层
|
|
32
|
+
// 已有的段名类(今天总结页的「作息库现状」与周视图的矩阵段名都走它),不新造类名、不新添 CSS。
|
|
33
|
+
{ navText: '分类聚合', html: '<h2 class="heat-title">分类聚合</h2>'
|
|
34
|
+
// 分布行按名上色(与色带/矩阵同一算式):不给色就一律落 `--blue`,八行一样看不出分别。
|
|
35
|
+
+ renderDistributionRows({
|
|
36
|
+
rows: data.distribution.map((row) => ({ ...row, color: categoryColor(row.label, data.order) })),
|
|
37
|
+
}) },
|
|
38
|
+
{ navText: '7 维趋势', html: renderChartBlock({ ...data.trend, title: '7 维趋势' }) },
|
|
39
|
+
{ html: renderFactStrip({ items: data.sleep }) },
|
|
40
|
+
{ html: renderListRows({ items: data.daily, emptyText: '这一区间没有记录' }) },
|
|
41
|
+
{ navText: '复制与留档', html: scheduleCopyArea({
|
|
42
|
+
title: '复制与留档',
|
|
43
|
+
dataActionId: 'ilife-sch-range-copy-data',
|
|
44
|
+
logActionId: 'ilife-sch-range-copy-log',
|
|
45
|
+
...data.copy,
|
|
46
|
+
}) },
|
|
47
|
+
]);
|
|
48
|
+
return assembleDocPage({ head: data.head, content: toc + body });
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=rangePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rangePage.js","sourceRoot":"","sources":["../../src/shared/rangePage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,gBAAgB,EAAE,mBAAmB,EAAE,sBAAsB,EAC7D,aAAa,EAAE,cAAc,GAE9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAqB/C,iBAAiB;AACjB,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACjC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClC,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC9C,0DAA0D;QAC1D,mDAAmD;QACnD,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC;gBACzD,kDAAkD;kBAChD,sBAAsB,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBAChG,CAAC,EAAE;QACN,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QAC/E,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;QAChD,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE;QACtE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC;gBACzC,KAAK,EAAE,OAAO;gBACd,YAAY,EAAE,2BAA2B;gBACzC,WAAW,EAAE,0BAA0B;gBACvC,GAAG,IAAI,CAAC,IAAI;aACb,CAAC,EAAE;KACL,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** #782 · 「周视图」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 形状=人裁过的 **A · 矩阵为主**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
|
|
4
|
+
* 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
|
|
5
|
+
*
|
|
6
|
+
* 读数卡 → 7×24 热力矩阵(页主体)→ 图例 → 分类总览 → 每日汇总列表 → 复制区
|
|
7
|
+
*
|
|
8
|
+
* 老侧 f08「周视图」的五个必现块:**7×24 全分类热力图**=矩阵(页主体)、**分类总览**=分布行、
|
|
9
|
+
* **每日汇总**=列表行、**健康分**=读数卡之一、**复制 prompt 位**=复制区。
|
|
10
|
+
*
|
|
11
|
+
* **本件只认形状,不认口径**:格子取哪个分类、健康分怎么算、顺序表从哪来,都由 `query` 侧给。
|
|
12
|
+
*
|
|
13
|
+
* #891 补的**页内定位**(不动件序列):本页**小节恒 2 颗**(`7×24 全分类热力图`/`复制给 AI`),
|
|
14
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页被判为短页**,页首不出页内目录;
|
|
15
|
+
* 两颗段名照旧各包一层带 `id` 的 `<section>`(锚点仍在,只有目录不出)。
|
|
16
|
+
*/
|
|
17
|
+
import { type DistributionRowInput, type KpiCardInput, type ListRowInput } from 'base-paint/blocks';
|
|
18
|
+
import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
|
|
19
|
+
import { type PageHead } from './docPage.js';
|
|
20
|
+
import { type HeatRow } from './pageParts.js';
|
|
21
|
+
/** 「周视图」一页要的全部东西(7 个字段)。 */
|
|
22
|
+
export interface WeekPageData {
|
|
23
|
+
readonly head: PageHead;
|
|
24
|
+
readonly kpis: readonly KpiCardInput[];
|
|
25
|
+
/** 七天各一行(每行 24 格);行尾合计由调用方格式化好(`sum`)。 */
|
|
26
|
+
readonly rows: readonly HeatRow[];
|
|
27
|
+
readonly order: readonly string[];
|
|
28
|
+
/** 分类总览。 */
|
|
29
|
+
readonly distribution: readonly DistributionRowInput[];
|
|
30
|
+
/** 每日汇总(一行一天)。 */
|
|
31
|
+
readonly daily: readonly ListRowInput[];
|
|
32
|
+
readonly copy: ScheduleCopyAreaInput;
|
|
33
|
+
}
|
|
34
|
+
/** 出「周视图」整页。 */
|
|
35
|
+
export declare function renderWeekPage(data: WeekPageData): string;
|
|
36
|
+
//# sourceMappingURL=weekPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weekPage.d.ts","sourceRoot":"","sources":["../../src/shared/weekPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAEL,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAChE,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE/E,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,YAAY;IACZ,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkBzD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** #782 · 「周视图」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 形状=人裁过的 **A · 矩阵为主**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
|
|
4
|
+
* 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
|
|
5
|
+
*
|
|
6
|
+
* 读数卡 → 7×24 热力矩阵(页主体)→ 图例 → 分类总览 → 每日汇总列表 → 复制区
|
|
7
|
+
*
|
|
8
|
+
* 老侧 f08「周视图」的五个必现块:**7×24 全分类热力图**=矩阵(页主体)、**分类总览**=分布行、
|
|
9
|
+
* **每日汇总**=列表行、**健康分**=读数卡之一、**复制 prompt 位**=复制区。
|
|
10
|
+
*
|
|
11
|
+
* **本件只认形状,不认口径**:格子取哪个分类、健康分怎么算、顺序表从哪来,都由 `query` 侧给。
|
|
12
|
+
*
|
|
13
|
+
* #891 补的**页内定位**(不动件序列):本页**小节恒 2 颗**(`7×24 全分类热力图`/`复制给 AI`),
|
|
14
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`)**这一页被判为短页**,页首不出页内目录;
|
|
15
|
+
* 两颗段名照旧各包一层带 `id` 的 `<section>`(锚点仍在,只有目录不出)。
|
|
16
|
+
*/
|
|
17
|
+
import { renderDistributionRows, renderKpiGrid, renderListRows, } from 'base-paint/blocks';
|
|
18
|
+
import { scheduleCopyArea } from '../render/copyArea.js';
|
|
19
|
+
import { assembleDocPage } from './docPage.js';
|
|
20
|
+
import { pageSections } from './pageNav.js';
|
|
21
|
+
import { categoryColor, renderHeatMatrix } from './pageParts.js';
|
|
22
|
+
/** 出「周视图」整页。 */
|
|
23
|
+
export function renderWeekPage(data) {
|
|
24
|
+
const { toc, body } = pageSections([
|
|
25
|
+
{ html: renderKpiGrid(data.kpis) },
|
|
26
|
+
// 段名是「7×24 全分类热力图」;目录项逐字用它。
|
|
27
|
+
{ navText: '7×24 全分类热力图', html: renderHeatMatrix(data.rows, { order: data.order, id: 'week-heat', title: '7×24 全分类热力图', legend: true }) },
|
|
28
|
+
// 分类总览按名上色(与矩阵同一算式):不给色就一律落 `--blue`,八行一样看不出分别。
|
|
29
|
+
{ html: renderDistributionRows({
|
|
30
|
+
rows: data.distribution.map((row) => ({ ...row, color: categoryColor(row.label, data.order) })),
|
|
31
|
+
}) },
|
|
32
|
+
{ html: renderListRows({ items: data.daily, emptyText: '这一周没有记录' }) },
|
|
33
|
+
{ navText: '复制给 AI', html: scheduleCopyArea({
|
|
34
|
+
title: '复制给 AI',
|
|
35
|
+
dataActionId: 'ilife-sch-week-copy-data',
|
|
36
|
+
logActionId: 'ilife-sch-week-copy-log',
|
|
37
|
+
...data.copy,
|
|
38
|
+
}) },
|
|
39
|
+
]);
|
|
40
|
+
return assembleDocPage({ head: data.head, content: toc + body });
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=weekPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weekPage.js","sourceRoot":"","sources":["../../src/shared/weekPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,sBAAsB,EAAE,aAAa,EAAE,cAAc,GAEtD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAgB/E,gBAAgB;AAChB,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACjC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClC,4BAA4B;QAC5B,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;QACzI,gDAAgD;QAChD,EAAE,IAAI,EAAE,sBAAsB,CAAC;gBAC7B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAChG,CAAC,EAAE;QACJ,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE;QACrE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC;gBAC1C,KAAK,EAAE,QAAQ;gBACf,YAAY,EAAE,0BAA0B;gBACxC,WAAW,EAAE,yBAAyB;gBACtC,GAAG,IAAI,CAAC,IAAI;aACb,CAAC,EAAE;KACL,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -40,7 +40,10 @@ export declare const SCHEDULE_ROUTES: readonly [{
|
|
|
40
40
|
readonly order: 9;
|
|
41
41
|
}, {
|
|
42
42
|
readonly phrase: "初始化数据库";
|
|
43
|
-
readonly key: "schedule.
|
|
43
|
+
readonly key: "schedule.help.lookup";
|
|
44
|
+
readonly preset: {
|
|
45
|
+
readonly view: "init";
|
|
46
|
+
};
|
|
44
47
|
readonly order: 10;
|
|
45
48
|
}, {
|
|
46
49
|
readonly phrase: "查作息";
|
|
@@ -293,5 +296,24 @@ export declare const SCHEDULE_ROUTES: readonly [{
|
|
|
293
296
|
readonly op: "review";
|
|
294
297
|
};
|
|
295
298
|
readonly order: 47;
|
|
299
|
+
}, {
|
|
300
|
+
readonly phrase: "周视图";
|
|
301
|
+
readonly key: "schedule.record.range";
|
|
302
|
+
readonly preset: {
|
|
303
|
+
readonly view: "week";
|
|
304
|
+
};
|
|
305
|
+
readonly order: 48;
|
|
306
|
+
}, {
|
|
307
|
+
readonly phrase: "按 ID 查记录";
|
|
308
|
+
readonly key: "schedule.record.detail";
|
|
309
|
+
readonly needs: readonly ["id"];
|
|
310
|
+
readonly order: 49;
|
|
311
|
+
}, {
|
|
312
|
+
readonly phrase: "首次使用";
|
|
313
|
+
readonly key: "schedule.help.lookup";
|
|
314
|
+
readonly preset: {
|
|
315
|
+
readonly view: "firstUse";
|
|
316
|
+
};
|
|
317
|
+
readonly order: 50;
|
|
296
318
|
}];
|
|
297
319
|
//# sourceMappingURL=routes.generated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.generated.d.ts","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"routes.generated.d.ts","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDlB,CAAC"}
|
|
@@ -10,7 +10,7 @@ export const SCHEDULE_ROUTES = [
|
|
|
10
10
|
{ phrase: '今天作息', key: 'schedule.record.today', order: 7 },
|
|
11
11
|
{ phrase: '查作息时间轴', key: 'schedule.record.today', order: 8 },
|
|
12
12
|
{ phrase: '查作息状态', key: 'schedule.record.today', order: 9 },
|
|
13
|
-
{ phrase: '初始化数据库', key: 'schedule.
|
|
13
|
+
{ phrase: '初始化数据库', key: 'schedule.help.lookup', preset: { "view": "init" }, order: 10 },
|
|
14
14
|
{ phrase: '查作息', key: 'schedule.record.today', order: 11 },
|
|
15
15
|
{ phrase: '汇总作息', key: 'schedule.record.range', needs: ['start', 'end'], order: 12 },
|
|
16
16
|
{ phrase: '查作息范围', key: 'schedule.record.range', needs: ['start', 'end'], order: 13 },
|
|
@@ -48,5 +48,8 @@ export const SCHEDULE_ROUTES = [
|
|
|
48
48
|
{ phrase: '日程管家同步', key: 'schedule.plan.write', preset: { "op": "sync" }, order: 45 },
|
|
49
49
|
{ phrase: '飞书探测', key: 'schedule.plan.write', preset: { "op": "sync", "dryRun": true }, order: 46 },
|
|
50
50
|
{ phrase: '复盘', key: 'schedule.plan.write', preset: { "op": "review" }, order: 47 },
|
|
51
|
+
{ phrase: '周视图', key: 'schedule.record.range', preset: { "view": "week" }, order: 48 },
|
|
52
|
+
{ phrase: '按 ID 查记录', key: 'schedule.record.detail', needs: ['id'], order: 49 },
|
|
53
|
+
{ phrase: '首次使用', key: 'schedule.help.lookup', preset: { "view": "firstUse" }, order: 50 },
|
|
51
54
|
];
|
|
52
55
|
//# sourceMappingURL=routes.generated.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.generated.js","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9D,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3D,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7D,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5D,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3D,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"routes.generated.js","sourceRoot":"","sources":["../../src/triggers/routes.generated.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiG7D,eAAO,MAAM,WAAW,EAAE,YA2BzB,CAAC"}
|
package/dist/write/handlers.js
CHANGED
|
@@ -1,24 +1,120 @@
|
|
|
1
1
|
/** 写入与同步的处理函数(命令事实的执行一半;声明在 `./commands.ts`)。
|
|
2
2
|
*
|
|
3
|
-
* 逐字搬自 `src/cli/cmd_read.ts` 的 switch
|
|
3
|
+
* 逐字搬自 `src/cli/cmd_read.ts` 的 switch 一臂(行为零改动)——**#783 起这一臂多出「出页」那一半**:
|
|
4
|
+
* 写库之后各支出一张真页(`./writeDocs.ts` 装配,形状与件序列见该件头),回执载荷(`data`)与
|
|
5
|
+
* 退出码口径一行不改(顶层 `ok`/`message` 照旧,追加的分字段只多不少)。
|
|
6
|
+
*
|
|
7
|
+
* 批量导入(`records[]`,老侧 `batch-add` 的 ok/partial 语义):逐条走同一条 add 校验与写库函数,
|
|
8
|
+
* 单条不过不打断其余;没通过的原因在**载荷里**给原文(给 AI 看),在**页上**给中文短因(给人看)。
|
|
4
9
|
*/
|
|
5
|
-
import { addRecord, amendRecord, addSummary, } from '../fetch/index.js';
|
|
10
|
+
import { addRecord, amendRecord, addSummary, getRecordById, } from '../fetch/index.js';
|
|
6
11
|
import { parseRecordOp, validateAddInput, validateAmendInput, validateSummaryInput } from '../policy/index.js';
|
|
7
12
|
import { buildRecordReceipt } from '../render/index.js';
|
|
13
|
+
import { amendReceiptPage, batchReceiptPage, recordResultPage, summaryReceiptPage } from './writeDocs.js';
|
|
14
|
+
/** 校验失败的原因 → 页上那句中文短因(库列名与命令参数名都不上屏;载荷里仍留原文给 AI)。 */
|
|
15
|
+
const REASON_ZH = {
|
|
16
|
+
POLICY_BAD_CATEGORY: '分类不在白名单',
|
|
17
|
+
POLICY_BAD_TIME: '起止时间不对',
|
|
18
|
+
POLICY_BAD_DATE: '日期不对',
|
|
19
|
+
POLICY_MISSING_SLOT: '缺了必填字段',
|
|
20
|
+
POLICY_BAD_INPUT: '字段值不对',
|
|
21
|
+
};
|
|
22
|
+
function reasonOf(error) {
|
|
23
|
+
const code = error?.code;
|
|
24
|
+
return (code !== undefined ? REASON_ZH[code] : undefined) ?? '没通过校验';
|
|
25
|
+
}
|
|
26
|
+
const cellText = (value) => (typeof value === 'string' ? value : '');
|
|
27
|
+
/** 批量导入:逐条校验、逐条写库,单条不过不打断(老侧 `batch-add` 的口径)。 */
|
|
28
|
+
function runBatch(params, handle) {
|
|
29
|
+
const raw = Array.isArray(params.records) ? params.records : [];
|
|
30
|
+
if (raw.length === 0) {
|
|
31
|
+
const message = '批量导入须给非空 records 数组(每条含 date/time_start/time_end/activity/category)';
|
|
32
|
+
return { data: { ok: false, message, items: [], total: 0, success: 0, failed: 0 }, html: '' };
|
|
33
|
+
}
|
|
34
|
+
const items = [];
|
|
35
|
+
for (let i = 0; i < raw.length; i += 1) {
|
|
36
|
+
const seq = i + 1;
|
|
37
|
+
const one = raw[i];
|
|
38
|
+
const record = typeof one === 'object' && one !== null ? one : {};
|
|
39
|
+
try {
|
|
40
|
+
const input = validateAddInput(record);
|
|
41
|
+
const written = addRecord(handle, input);
|
|
42
|
+
items.push({
|
|
43
|
+
seq, date: written.date, time: written.time_start + ' 至 ' + written.time_end,
|
|
44
|
+
activity: written.activity, category: written.category,
|
|
45
|
+
ok: true, result: '已写入', message: '', id: written.id,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
items.push({
|
|
50
|
+
seq,
|
|
51
|
+
date: cellText(record.date),
|
|
52
|
+
time: cellText(record.time_start) === '' || cellText(record.time_end) === ''
|
|
53
|
+
? '—'
|
|
54
|
+
: cellText(record.time_start) + ' 至 ' + cellText(record.time_end),
|
|
55
|
+
activity: cellText(record.activity) === '' ? '—' : cellText(record.activity),
|
|
56
|
+
category: cellText(record.category) === '' ? '—' : cellText(record.category),
|
|
57
|
+
ok: false, result: reasonOf(e), message: e.message ?? String(e), id: null,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const done = items.filter((it) => it.ok).length;
|
|
62
|
+
const failed = items.length - done;
|
|
63
|
+
const dates = [...new Set(items.map((it) => it.date).filter((d) => d !== ''))].sort();
|
|
64
|
+
const dateText = dates.length === 0
|
|
65
|
+
? '—'
|
|
66
|
+
: (dates.length === 1 ? dates[0] : dates[0] + ' 至 ' + dates[dates.length - 1]);
|
|
67
|
+
const rows = items.map((it) => ({
|
|
68
|
+
seq: it.seq, time: it.time, activity: it.activity, category: it.category, result: it.result, ok: it.ok,
|
|
69
|
+
}));
|
|
70
|
+
const message = failed === 0
|
|
71
|
+
? '已批量写入 ' + items.length + ' 条(全部成功)'
|
|
72
|
+
: '已批量写入 ' + done + ' 条,另有 ' + failed + ' 条没通过校验(见 items[] 的 message)';
|
|
73
|
+
return {
|
|
74
|
+
data: {
|
|
75
|
+
ok: failed === 0,
|
|
76
|
+
message,
|
|
77
|
+
total: items.length,
|
|
78
|
+
success: done,
|
|
79
|
+
failed,
|
|
80
|
+
date: dateText,
|
|
81
|
+
items: items.map((it) => ({
|
|
82
|
+
seq: it.seq, ok: it.ok, id: it.id, date: it.date, time: it.time,
|
|
83
|
+
activity: it.activity, category: it.category,
|
|
84
|
+
...(it.ok ? {} : { reason: it.result, message: it.message }),
|
|
85
|
+
})),
|
|
86
|
+
},
|
|
87
|
+
html: batchReceiptPage({ date: dateText, rows }),
|
|
88
|
+
...(failed === 0 ? {} : { exitCode: 1 }),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
8
91
|
export const writeRecord = (params, handle) => {
|
|
92
|
+
// 批量那一支先认(`records[]` 出现即批量;op 缺省仍是 add,见 `parseRecordOp`)。
|
|
93
|
+
if (Array.isArray(params.records))
|
|
94
|
+
return runBatch(params, handle);
|
|
9
95
|
const op = parseRecordOp(params);
|
|
10
96
|
if (op === 'add') {
|
|
11
97
|
const input = validateAddInput(params);
|
|
12
98
|
const r = addRecord(handle, input);
|
|
13
|
-
return {
|
|
99
|
+
return {
|
|
100
|
+
data: buildRecordReceipt('已记一条:' + r.id + '(' + r.date + ' ' + r.time_start + '~' + r.time_end + ' ' + r.category + ')'),
|
|
101
|
+
html: recordResultPage(handle, r),
|
|
102
|
+
};
|
|
14
103
|
}
|
|
15
104
|
if (op === 'amend') {
|
|
16
105
|
const { id, patch } = validateAmendInput(params);
|
|
106
|
+
const before = getRecordById(handle, id);
|
|
17
107
|
const r = amendRecord(handle, id, patch);
|
|
18
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
data: buildRecordReceipt('已修正:' + r.id + '(edit_count=' + r.edit_count + ')'),
|
|
110
|
+
html: amendReceiptPage(before, r, Object.keys(patch)),
|
|
111
|
+
};
|
|
19
112
|
}
|
|
20
113
|
const s = validateSummaryInput(params);
|
|
21
114
|
addSummary(handle, s.date, s.category, s.totalMinutes);
|
|
22
|
-
return {
|
|
115
|
+
return {
|
|
116
|
+
data: buildRecordReceipt('已写摘要:' + s.date + ' ' + s.category + '=' + s.totalMinutes + '分钟'),
|
|
117
|
+
html: summaryReceiptPage(handle, s),
|
|
118
|
+
};
|
|
23
119
|
};
|
|
24
120
|
//# sourceMappingURL=handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/write/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ScheduleDb, ScheduleRecord } from '../fetch/db.js';
|
|
2
|
+
/** 「记作息结果」整页:状态总览 + 全天时间轴 + 过去几小时推断回溯(老侧三件套),只记一级时加提示。 */
|
|
3
|
+
export declare function recordResultPage(handle: ScheduleDb, record: ScheduleRecord, now?: Date): string;
|
|
4
|
+
/** 「修正作息回执」整页:蓝调 diff + 多字段前后对照 + 这条记录现在的样子。 */
|
|
5
|
+
export declare function amendReceiptPage(before: ScheduleRecord, after: ScheduleRecord, patchKeys: readonly string[], now?: Date): string;
|
|
6
|
+
/** 批量里的一条结果(口径见 `handlers.ts`;原因一律中文,库列名与命令参数名不上屏)。 */
|
|
7
|
+
export interface BatchRow {
|
|
8
|
+
readonly seq: number;
|
|
9
|
+
readonly time: string;
|
|
10
|
+
readonly activity: string;
|
|
11
|
+
readonly category: string;
|
|
12
|
+
/** 写入成功那一格写「已写入」,没通过的写中文原因。 */
|
|
13
|
+
readonly result: string;
|
|
14
|
+
readonly ok: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** 「批量导入回执」整页:收到条数/写入成功/没通过 + 逐条结果。 */
|
|
17
|
+
export declare function batchReceiptPage(input: {
|
|
18
|
+
readonly date: string;
|
|
19
|
+
readonly rows: readonly BatchRow[];
|
|
20
|
+
}): string;
|
|
21
|
+
/** 「写作息摘要回执」整页:这次写了什么 + 当日这一支的现状(老侧这条无产物,新给一份真页)。 */
|
|
22
|
+
export declare function summaryReceiptPage(handle: ScheduleDb, summary: {
|
|
23
|
+
date: string;
|
|
24
|
+
category: string;
|
|
25
|
+
totalMinutes: number;
|
|
26
|
+
}): string;
|
|
27
|
+
//# sourceMappingURL=writeDocs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeDocs.d.ts","sourceRoot":"","sources":["../../src/write/writeDocs.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA+HjE,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAoF3G;AAWD,gDAAgD;AAChD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,GAAE,IAAiB,GAClG,MAAM,CAqER;AAID,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;CACpC,GAAG,MAAM,CAkET;AAID,qDAAqD;AACrD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpF,MAAM,CA4CR"}
|