skill-bill 0.1.0 → 0.2.0
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 +127 -0
- package/dist/.gen-inputs.json +14 -0
- package/dist/cli/cmd_read.js +133 -142
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/registry.d.ts +15 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +22 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/fetch/db.d.ts +4 -0
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +12 -0
- package/dist/fetch/db.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/help/index.d.ts +1 -0
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +1 -0
- package/dist/help/index.js.map +1 -1
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +3 -2
- package/dist/help/lookup.js.map +1 -1
- package/dist/help/writeWire.d.ts +16 -0
- package/dist/help/writeWire.d.ts.map +1 -0
- package/dist/help/writeWire.js +109 -0
- package/dist/help/writeWire.js.map +1 -0
- package/dist/output.d.ts +21 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +48 -0
- package/dist/output.js.map +1 -0
- package/dist/policy/category.d.ts +5 -0
- package/dist/policy/category.d.ts.map +1 -1
- package/dist/policy/category.js +9 -2
- package/dist/policy/category.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/record.d.ts +12 -0
- package/dist/policy/record.d.ts.map +1 -1
- package/dist/policy/record.js +27 -0
- package/dist/policy/record.js.map +1 -1
- package/dist/policy/wakewords.d.ts +4 -0
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +12 -7
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/query/commands.d.ts +19 -0
- package/dist/query/commands.d.ts.map +1 -0
- package/dist/query/commands.js +40 -0
- package/dist/query/commands.js.map +1 -0
- package/dist/query/detail.d.ts +26 -0
- package/dist/query/detail.d.ts.map +1 -0
- package/dist/query/detail.js +115 -0
- package/dist/query/detail.js.map +1 -0
- package/dist/query/index.d.ts +13 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +12 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/list.d.ts +78 -0
- package/dist/query/list.d.ts.map +1 -0
- package/dist/query/list.js +110 -0
- package/dist/query/list.js.map +1 -0
- package/dist/query/read.d.ts +21 -0
- package/dist/query/read.d.ts.map +1 -0
- package/dist/query/read.js +301 -0
- package/dist/query/read.js.map +1 -0
- package/dist/record/collect.d.ts +18 -0
- package/dist/record/collect.d.ts.map +1 -0
- package/dist/record/collect.js +15 -0
- package/dist/record/collect.js.map +1 -0
- package/dist/record/collectBody.d.ts +29 -0
- package/dist/record/collectBody.d.ts.map +1 -0
- package/dist/record/collectBody.js +196 -0
- package/dist/record/collectBody.js.map +1 -0
- package/dist/record/commands.d.ts +11 -0
- package/dist/record/commands.d.ts.map +1 -0
- package/dist/record/commands.js +22 -0
- package/dist/record/commands.js.map +1 -0
- package/dist/record/index.d.ts +14 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/index.js +12 -0
- package/dist/record/index.js.map +1 -0
- package/dist/record/receipt.d.ts +16 -0
- package/dist/record/receipt.d.ts.map +1 -0
- package/dist/record/receipt.js +11 -0
- package/dist/record/receipt.js.map +1 -0
- package/dist/record/receiptBody.d.ts +5 -0
- package/dist/record/receiptBody.d.ts.map +1 -0
- package/dist/record/receiptBody.js +112 -0
- package/dist/record/receiptBody.js.map +1 -0
- package/dist/record/scene-batch.d.ts +3 -0
- package/dist/record/scene-batch.d.ts.map +1 -0
- package/dist/record/scene-batch.js +211 -0
- package/dist/record/scene-batch.js.map +1 -0
- package/dist/record/scene-borrow.d.ts +3 -0
- package/dist/record/scene-borrow.d.ts.map +1 -0
- package/dist/record/scene-borrow.js +285 -0
- package/dist/record/scene-borrow.js.map +1 -0
- package/dist/record/scene-collect.d.ts +3 -0
- package/dist/record/scene-collect.d.ts.map +1 -0
- package/dist/record/scene-collect.js +294 -0
- package/dist/record/scene-collect.js.map +1 -0
- package/dist/record/scene-expense.d.ts +3 -0
- package/dist/record/scene-expense.d.ts.map +1 -0
- package/dist/record/scene-expense.js +21 -0
- package/dist/record/scene-expense.js.map +1 -0
- package/dist/record/scene-income.d.ts +3 -0
- package/dist/record/scene-income.d.ts.map +1 -0
- package/dist/record/scene-income.js +219 -0
- package/dist/record/scene-income.js.map +1 -0
- package/dist/record/scene-installment.d.ts +3 -0
- package/dist/record/scene-installment.d.ts.map +1 -0
- package/dist/record/scene-installment.js +248 -0
- package/dist/record/scene-installment.js.map +1 -0
- package/dist/record/scene-lend.d.ts +3 -0
- package/dist/record/scene-lend.d.ts.map +1 -0
- package/dist/record/scene-lend.js +273 -0
- package/dist/record/scene-lend.js.map +1 -0
- package/dist/record/scene-photo.d.ts +3 -0
- package/dist/record/scene-photo.d.ts.map +1 -0
- package/dist/record/scene-photo.js +262 -0
- package/dist/record/scene-photo.js.map +1 -0
- package/dist/record/scene-plain.d.ts +3 -0
- package/dist/record/scene-plain.d.ts.map +1 -0
- package/dist/record/scene-plain.js +221 -0
- package/dist/record/scene-plain.js.map +1 -0
- package/dist/record/scene-refund.d.ts +3 -0
- package/dist/record/scene-refund.d.ts.map +1 -0
- package/dist/record/scene-refund.js +281 -0
- package/dist/record/scene-refund.js.map +1 -0
- package/dist/record/scene-reimburse-done.d.ts +3 -0
- package/dist/record/scene-reimburse-done.d.ts.map +1 -0
- package/dist/record/scene-reimburse-done.js +288 -0
- package/dist/record/scene-reimburse-done.js.map +1 -0
- package/dist/record/scene-reimburse.d.ts +3 -0
- package/dist/record/scene-reimburse.d.ts.map +1 -0
- package/dist/record/scene-reimburse.js +224 -0
- package/dist/record/scene-reimburse.js.map +1 -0
- package/dist/record/scene-repay.d.ts +3 -0
- package/dist/record/scene-repay.d.ts.map +1 -0
- package/dist/record/scene-repay.js +294 -0
- package/dist/record/scene-repay.js.map +1 -0
- package/dist/record/scene-restore.d.ts +3 -0
- package/dist/record/scene-restore.d.ts.map +1 -0
- package/dist/record/scene-restore.js +250 -0
- package/dist/record/scene-restore.js.map +1 -0
- package/dist/record/scene-undo.d.ts +3 -0
- package/dist/record/scene-undo.d.ts.map +1 -0
- package/dist/record/scene-undo.js +262 -0
- package/dist/record/scene-undo.js.map +1 -0
- package/dist/record/scene-update.d.ts +3 -0
- package/dist/record/scene-update.d.ts.map +1 -0
- package/dist/record/scene-update.js +249 -0
- package/dist/record/scene-update.js.map +1 -0
- package/dist/record/scene.d.ts +79 -0
- package/dist/record/scene.d.ts.map +1 -0
- package/dist/record/scene.js +39 -0
- package/dist/record/scene.js.map +1 -0
- package/dist/record/slots.d.ts +16 -0
- package/dist/record/slots.d.ts.map +1 -0
- package/dist/record/slots.js +72 -0
- package/dist/record/slots.js.map +1 -0
- package/dist/record/write.d.ts +9 -0
- package/dist/record/write.d.ts.map +1 -0
- package/dist/record/write.js +186 -0
- package/dist/record/write.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +21 -8
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/errors.d.ts +1 -1
- package/dist/render/errors.d.ts.map +1 -1
- package/dist/render/errors.js.map +1 -1
- package/dist/render/helpFile.d.ts +85 -0
- package/dist/render/helpFile.d.ts.map +1 -0
- package/dist/render/helpFile.js +110 -0
- package/dist/render/helpFile.js.map +1 -0
- package/dist/render/helpPaths.d.ts +19 -0
- package/dist/render/helpPaths.d.ts.map +1 -0
- package/dist/render/helpPaths.js +19 -0
- package/dist/render/helpPaths.js.map +1 -0
- package/dist/render/html.js +1 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +5 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +4 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/templates.js +1 -1
- package/dist/render/templates.js.map +1 -1
- package/dist/render/views.d.ts +0 -22
- package/dist/render/views.d.ts.map +1 -1
- package/dist/render/views.js +1 -16
- package/dist/render/views.js.map +1 -1
- package/dist/shared/blockedSlots.d.ts +39 -0
- package/dist/shared/blockedSlots.d.ts.map +1 -0
- package/dist/shared/blockedSlots.js +105 -0
- package/dist/shared/blockedSlots.js.map +1 -0
- package/dist/shared/candidatePick.d.ts +50 -0
- package/dist/shared/candidatePick.d.ts.map +1 -0
- package/dist/shared/candidatePick.js +115 -0
- package/dist/shared/candidatePick.js.map +1 -0
- package/dist/shared/collectFrame.d.ts +15 -0
- package/dist/shared/collectFrame.d.ts.map +1 -0
- package/dist/shared/collectFrame.js +34 -0
- package/dist/shared/collectFrame.js.map +1 -0
- package/dist/shared/commandSpec.d.ts +72 -0
- package/dist/shared/commandSpec.d.ts.map +1 -0
- package/dist/shared/commandSpec.js +2 -0
- package/dist/shared/commandSpec.js.map +1 -0
- package/dist/shared/copyArea.d.ts +51 -0
- package/dist/shared/copyArea.d.ts.map +1 -0
- package/dist/shared/copyArea.js +122 -0
- package/dist/shared/copyArea.js.map +1 -0
- package/dist/shared/diffTable.d.ts +26 -0
- package/dist/shared/diffTable.d.ts.map +1 -0
- package/dist/shared/diffTable.js +77 -0
- package/dist/shared/diffTable.js.map +1 -0
- package/dist/shared/docPage.d.ts +17 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +111 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/shared/duplicateNote.d.ts +40 -0
- package/dist/shared/duplicateNote.d.ts.map +1 -0
- package/dist/shared/duplicateNote.js +96 -0
- package/dist/shared/duplicateNote.js.map +1 -0
- package/dist/shared/emptyNote.d.ts +15 -0
- package/dist/shared/emptyNote.d.ts.map +1 -0
- package/dist/shared/emptyNote.js +27 -0
- package/dist/shared/emptyNote.js.map +1 -0
- package/dist/shared/errorReceipt.d.ts +21 -0
- package/dist/shared/errorReceipt.d.ts.map +1 -0
- package/dist/shared/errorReceipt.js +37 -0
- package/dist/shared/errorReceipt.js.map +1 -0
- package/dist/shared/flowSteps.d.ts +25 -0
- package/dist/shared/flowSteps.d.ts.map +1 -0
- package/dist/shared/flowSteps.js +49 -0
- package/dist/shared/flowSteps.js.map +1 -0
- package/dist/shared/installmentPreview.d.ts +23 -0
- package/dist/shared/installmentPreview.d.ts.map +1 -0
- package/dist/shared/installmentPreview.js +144 -0
- package/dist/shared/installmentPreview.js.map +1 -0
- package/dist/shared/outsideScan.d.ts +34 -0
- package/dist/shared/outsideScan.d.ts.map +1 -0
- package/dist/shared/outsideScan.js +116 -0
- package/dist/shared/outsideScan.js.map +1 -0
- package/dist/shared/pageIdentity.d.ts +30 -0
- package/dist/shared/pageIdentity.d.ts.map +1 -0
- package/dist/shared/pageIdentity.js +33 -0
- package/dist/shared/pageIdentity.js.map +1 -0
- package/dist/shared/pageShell.d.ts +24 -0
- package/dist/shared/pageShell.d.ts.map +1 -0
- package/dist/shared/pageShell.js +42 -0
- package/dist/shared/pageShell.js.map +1 -0
- package/dist/shared/photoEscape.d.ts +53 -0
- package/dist/shared/photoEscape.d.ts.map +1 -0
- package/dist/shared/photoEscape.js +139 -0
- package/dist/shared/photoEscape.js.map +1 -0
- package/dist/shared/prefillNote.d.ts +21 -0
- package/dist/shared/prefillNote.d.ts.map +1 -0
- package/dist/shared/prefillNote.js +78 -0
- package/dist/shared/prefillNote.js.map +1 -0
- package/dist/shared/receiptParts.d.ts +12 -0
- package/dist/shared/receiptParts.d.ts.map +1 -0
- package/dist/shared/receiptParts.js +38 -0
- package/dist/shared/receiptParts.js.map +1 -0
- package/dist/shared/recentPicks.d.ts +26 -0
- package/dist/shared/recentPicks.d.ts.map +1 -0
- package/dist/shared/recentPicks.js +41 -0
- package/dist/shared/recentPicks.js.map +1 -0
- package/dist/shared/recordPicker.d.ts +32 -0
- package/dist/shared/recordPicker.d.ts.map +1 -0
- package/dist/shared/recordPicker.js +201 -0
- package/dist/shared/recordPicker.js.map +1 -0
- package/dist/shared/rowEditorTable.d.ts +31 -0
- package/dist/shared/rowEditorTable.d.ts.map +1 -0
- package/dist/shared/rowEditorTable.js +103 -0
- package/dist/shared/rowEditorTable.js.map +1 -0
- package/dist/shared/summaryRow.d.ts +44 -0
- package/dist/shared/summaryRow.d.ts.map +1 -0
- package/dist/shared/summaryRow.js +82 -0
- package/dist/shared/summaryRow.js.map +1 -0
- package/dist/shared/typeBadge.d.ts +21 -0
- package/dist/shared/typeBadge.d.ts.map +1 -0
- package/dist/shared/typeBadge.js +68 -0
- package/dist/shared/typeBadge.js.map +1 -0
- package/dist/shared/userWording.d.ts +54 -0
- package/dist/shared/userWording.d.ts.map +1 -0
- package/dist/shared/userWording.js +131 -0
- package/dist/shared/userWording.js.map +1 -0
- package/dist/shared/writeParts.d.ts +62 -0
- package/dist/shared/writeParts.d.ts.map +1 -0
- package/dist/shared/writeParts.js +39 -0
- package/dist/shared/writeParts.js.map +1 -0
- package/dist/triggers/wake-assets.d.ts +37 -0
- package/dist/triggers/wake-assets.d.ts.map +1 -0
- package/dist/triggers/wake-assets.js +951 -0
- package/dist/triggers/wake-assets.js.map +1 -0
- package/package.json +10 -4
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { renderCaliberLine, renderDataTable, renderDisclosure, renderKpiGrid } from 'base-paint/blocks';
|
|
2
|
+
import { blockedBar, blockedItems, blockedMessage } from '../shared/blockedSlots.js';
|
|
3
|
+
import { collectMissingTags, collectSectionTitle } from '../shared/collectFrame.js';
|
|
4
|
+
import { copyArea, copyLog, promptCopyArea, undoExit } from '../shared/copyArea.js';
|
|
5
|
+
import { emptyNote } from '../shared/emptyNote.js';
|
|
6
|
+
import { DOC_SKILL, DOC_TITLE, DOC_VERSION, sceneKeyOf } from '../shared/pageIdentity.js';
|
|
7
|
+
import { pageShell } from '../shared/pageShell.js';
|
|
8
|
+
import { pickerBlock, readRowById, snapshotTable } from '../shared/recordPicker.js';
|
|
9
|
+
import { receiptStatusCard, reconcileDisclosure } from '../shared/receiptParts.js';
|
|
10
|
+
import { summaryCards, summaryRow } from '../shared/summaryRow.js';
|
|
11
|
+
import { typeBadge } from '../shared/typeBadge.js';
|
|
12
|
+
import { fieldLabelOf } from '../shared/userWording.js';
|
|
13
|
+
import { commandLine } from '../shared/writeParts.js';
|
|
14
|
+
/** 一条唤醒词一件:本件服务的那条。 */
|
|
15
|
+
const WAKE = '恢复';
|
|
16
|
+
/** 本件的命令名(恢复是 `bill.record.update` 的 `op=restore` 那一支)。 */
|
|
17
|
+
const KEY = 'bill.record.update';
|
|
18
|
+
/** 「把标记清掉」那句说明(采集页与回执页各出一处,同一句话只写在这里一份)。
|
|
19
|
+
* 本轮整改:`deleted_at`/`NULL` 是工程话,换成用户说法(照 `docs/skills/skill-bill/t407-文字审查.md` 第 29 条)。 */
|
|
20
|
+
const RESTORE_NOTE = '恢复就是清掉那个撤销标记,这一笔回到查询和统计里。'
|
|
21
|
+
+ '候选只列已经撤销过的记录,没撤销过的不进来。';
|
|
22
|
+
/** 一个值的字符串形态(数字写十进制串,其余形态按空串用)。 */
|
|
23
|
+
function textOf(v) {
|
|
24
|
+
if (typeof v === 'string')
|
|
25
|
+
return v.trim();
|
|
26
|
+
return typeof v === 'number' ? String(v) : '';
|
|
27
|
+
}
|
|
28
|
+
/** 记录编号:正整数才算给了(其余形态一律当没给,不猜)。 */
|
|
29
|
+
function idOf(params) {
|
|
30
|
+
const raw = params['id'];
|
|
31
|
+
const n = typeof raw === 'number' ? raw : textOf(raw) === '' ? NaN : Number(textOf(raw));
|
|
32
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
33
|
+
}
|
|
34
|
+
/** 摘要行的事实:有那一条就取库内那一行(页面说的是它),没有就取本次参数。 */
|
|
35
|
+
function factsOf(row, params) {
|
|
36
|
+
if (row !== null) {
|
|
37
|
+
return { amount: row.amount, category: row.category, account: row.account, ledger: row.ledger, time: row.time };
|
|
38
|
+
}
|
|
39
|
+
const raw = params['amount'];
|
|
40
|
+
const n = typeof raw === 'number' ? raw : textOf(raw) === '' ? NaN : Number(textOf(raw));
|
|
41
|
+
return {
|
|
42
|
+
amount: Number.isFinite(n) ? n : null,
|
|
43
|
+
category: textOf(params['category']),
|
|
44
|
+
account: textOf(params['account']),
|
|
45
|
+
ledger: textOf(params['ledger']),
|
|
46
|
+
time: textOf(params['time']),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** 缺项时那条写库指令原文:缺的值留成尖括号占位符,**只给看不给复制**。 */
|
|
50
|
+
function blockedCommand(params, blocked) {
|
|
51
|
+
const filled = { ...params };
|
|
52
|
+
for (const b of blocked)
|
|
53
|
+
filled[b.name] = '<' + b.label + '>';
|
|
54
|
+
return commandLine(KEY, filled);
|
|
55
|
+
}
|
|
56
|
+
/** 缺项阻断条整条收进折叠区:首屏只留缺项标签与一行副标题,口令原文不再常驻版面。
|
|
57
|
+
* 内容与判定一字不动(仍是共用件 `blockedBar` 的产出),只换摆法;折叠与否那枚置灰按钮都点不动。 */
|
|
58
|
+
function blockedFold(items, command) {
|
|
59
|
+
if (items.length === 0)
|
|
60
|
+
return '';
|
|
61
|
+
return renderDisclosure({
|
|
62
|
+
title: '还缺什么,以及补齐后照抄的那条',
|
|
63
|
+
contentHtml: blockedBar({ items, command }),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** 「照这句跟助手说一遍」那块话:挑哪一条、恢复是什么口径、接下来跟助手说哪句。 */
|
|
67
|
+
function promptOf(input) {
|
|
68
|
+
if (input.id === null) {
|
|
69
|
+
return '这一页先不写库。从候选里指定一条已经撤销过的记录,再跟助手说一遍「恢复」。';
|
|
70
|
+
}
|
|
71
|
+
if (!input.deleted) {
|
|
72
|
+
return '记录编号 ' + input.id + ' 那一条没撤销过,没有标记可清。\n'
|
|
73
|
+
+ '要撤它就说「撤销」:' + commandLine(KEY, { op: 'undo', id: input.id }) + '。';
|
|
74
|
+
}
|
|
75
|
+
return '这一条就是这次要恢复的目标。恢复只把撤销标记清掉,别的项一概不动。照这条说:\n'
|
|
76
|
+
+ commandLine(KEY, input.params);
|
|
77
|
+
}
|
|
78
|
+
/** 采集页整页:类型徽章 → 摘要行 → 置空说明 → 写库未发生 → 缺项阻断条 → 候选列表(或选定那一条的只读回显)
|
|
79
|
+
* → 照这句跟助手说一遍 → 复制区。缺 `id` 时**不给可跑的写库指令**(阻断条里那条带占位符、只给看不给复制)。 */
|
|
80
|
+
function collectOf(input) {
|
|
81
|
+
const { params, missing } = input;
|
|
82
|
+
const blocked = blockedItems({ params, missing, kind: '' });
|
|
83
|
+
const message = blockedMessage(missing, blocked);
|
|
84
|
+
const envelope = {
|
|
85
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: sceneKeyOf(KEY),
|
|
86
|
+
data: { ok: false, message },
|
|
87
|
+
};
|
|
88
|
+
const id = idOf(params);
|
|
89
|
+
const probe = id === null
|
|
90
|
+
? { ok: true, reason: '', row: null, deleted: false }
|
|
91
|
+
: readRowById(id);
|
|
92
|
+
const row = probe.row;
|
|
93
|
+
// 撤销标记口径取自 `../shared/recordPicker.ts` 的 `isDeleted`(读一条时一次算好,本件不重判一次)。
|
|
94
|
+
const deleted = probe.deleted;
|
|
95
|
+
/** 副标题只报缺哪一项(不重复「已出采集页,补齐之后跟助手说一遍」那句)。 */
|
|
96
|
+
const subtitle = blocked.length === 0 ? '' : '缺必需槽位:' + blocked.map((i) => i.label).join('、');
|
|
97
|
+
const middle = [];
|
|
98
|
+
if (id === null) {
|
|
99
|
+
middle.push(pickerBlock({
|
|
100
|
+
mode: 'restore',
|
|
101
|
+
hint: '候选只列已经撤销过的记录,挑一条即可。',
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
else if (row !== null && deleted) {
|
|
105
|
+
middle.push(snapshotTable(row, '这一条就是要恢复的记录 只读回显 记录编号 ' + row.id));
|
|
106
|
+
middle.push(renderCaliberLine('它现在带着撤销标记,' + String(row.deleted_at)
|
|
107
|
+
+ ' 撤销的。恢复之后标记清掉,这一笔回到查询和统计里。'));
|
|
108
|
+
}
|
|
109
|
+
else if (row === null) {
|
|
110
|
+
middle.push(emptyNote({
|
|
111
|
+
title: '这个编号没有可恢复的记录',
|
|
112
|
+
text: '记录编号 ' + id + ' 在库里读不到。' + (probe.ok ? '' : probe.reason + '。'),
|
|
113
|
+
next: '核一下编号,或先说清是哪一笔。',
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
middle.push(snapshotTable(row, '这一条记录 没撤销过,只读回显'));
|
|
118
|
+
middle.push(emptyNote({
|
|
119
|
+
title: '这一条没撤销过',
|
|
120
|
+
text: '记录编号 ' + id + ' 没有撤销标记,没有可清的东西。',
|
|
121
|
+
next: '要撤它就说「撤销」。要改它就说「改记录」。',
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
const content = [
|
|
125
|
+
typeBadge({
|
|
126
|
+
kind: '',
|
|
127
|
+
status: 'danger',
|
|
128
|
+
state: blocked.length > 0 ? '待补槽位 · 未写库(已阻断)' : '待核对 · 未写库',
|
|
129
|
+
next: '',
|
|
130
|
+
}),
|
|
131
|
+
blocked.length === 0 ? '' : collectSectionTitle({ no: 1, title: '先看这一笔缺什么' }),
|
|
132
|
+
collectMissingTags({ labels: blocked.map((i) => i.label) }),
|
|
133
|
+
summaryRow(factsOf(row, params)),
|
|
134
|
+
renderCaliberLine(RESTORE_NOTE),
|
|
135
|
+
collectSectionTitle({ no: 2, title: id === null ? '先挑一条记录' : '核对这一条' }),
|
|
136
|
+
blockedFold(blocked, blockedCommand(params, blocked)),
|
|
137
|
+
middle.join(''),
|
|
138
|
+
promptCopyArea(promptOf({ id, deleted, params }), '挑好记录后照这句跟助手说一遍'),
|
|
139
|
+
copyArea({
|
|
140
|
+
data: { envelope },
|
|
141
|
+
log: {
|
|
142
|
+
envelope,
|
|
143
|
+
copyLog: copyLog({
|
|
144
|
+
command: commandLine(KEY, params),
|
|
145
|
+
source: input.source,
|
|
146
|
+
detail: '没写库(采集页)',
|
|
147
|
+
actionAt: input.actionAt,
|
|
148
|
+
version: DOC_VERSION,
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
}),
|
|
152
|
+
].join('');
|
|
153
|
+
return pageShell({
|
|
154
|
+
docTitle: DOC_TITLE + '·补齐槽位',
|
|
155
|
+
title: WAKE + ' · ' + (id === null ? '挑一条记录' : '确认恢复'),
|
|
156
|
+
subtitle,
|
|
157
|
+
slot: 'collect',
|
|
158
|
+
page: 'collect',
|
|
159
|
+
shape: envelope.shape,
|
|
160
|
+
key: KEY,
|
|
161
|
+
content,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/** 回执页整页:类型徽章 → 一张大网格 → 恢复说明 → 恢复结果(读回来的标记现值)→ 写入明细表
|
|
165
|
+
* → 对账折叠区 → 退出口(撤销,把这一笔再打回标)→ 复制区三件。
|
|
166
|
+
* 这里不出改前改后对照表:标记清掉之后库里已经看不到原值,拿「有值→没有」顶一张表
|
|
167
|
+
* 等于编一个原值,本页改出置空结果表照实说。 */
|
|
168
|
+
function receiptOf(input) {
|
|
169
|
+
const { params, receipt } = input;
|
|
170
|
+
const envelope = {
|
|
171
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: sceneKeyOf(KEY),
|
|
172
|
+
data: { ok: true, message: receipt.summary },
|
|
173
|
+
};
|
|
174
|
+
const after = receipt.recordId === null ? null : readRowById(receipt.recordId);
|
|
175
|
+
const now = after !== null && after.ok && after.row !== null ? after.row.deleted_at : undefined;
|
|
176
|
+
const content = [
|
|
177
|
+
typeBadge({
|
|
178
|
+
kind: '',
|
|
179
|
+
status: 'ok',
|
|
180
|
+
state: '写库成功',
|
|
181
|
+
next: '这一笔已恢复正常,撤销见下方按钮。',
|
|
182
|
+
}),
|
|
183
|
+
renderKpiGrid([
|
|
184
|
+
...summaryCards(input.facts),
|
|
185
|
+
receiptStatusCard(receipt, input.writtenDetail),
|
|
186
|
+
{ label: '这次记了几笔', value: receipt.affectedRows + ' 笔', detail: '按库里的改动算' },
|
|
187
|
+
{
|
|
188
|
+
label: '写进去的项',
|
|
189
|
+
value: receipt.writtenFields.length + ' 项',
|
|
190
|
+
detail: receipt.writtenFields.map((f) => fieldLabelOf(f)).join('、') || '没改到任何一项',
|
|
191
|
+
},
|
|
192
|
+
]),
|
|
193
|
+
renderDataTable({
|
|
194
|
+
columns: [{ key: 'k', label: '哪一项' }, { key: 'v', label: '记成什么' }],
|
|
195
|
+
rows: [
|
|
196
|
+
{ k: fieldLabelOf('id'), v: receipt.recordId === null ? '还没有' : String(receipt.recordId) },
|
|
197
|
+
{
|
|
198
|
+
k: fieldLabelOf('deleted_at') + '现在是什么样',
|
|
199
|
+
v: now === undefined
|
|
200
|
+
? '这一页读不回这一条,以写库回执为准'
|
|
201
|
+
: now === null || String(now).trim() === '' ? '已清掉,这一笔已恢复正常' : '还带着:' + String(now),
|
|
202
|
+
},
|
|
203
|
+
{ k: '清掉之后', v: '这一笔回到查询和统计里。想再撤走就说「撤销」' },
|
|
204
|
+
],
|
|
205
|
+
caption: '恢复结果',
|
|
206
|
+
}),
|
|
207
|
+
renderDataTable({
|
|
208
|
+
columns: [{ key: 'k', label: '哪一项' }, { key: 'v', label: '记成什么' }],
|
|
209
|
+
rows: input.detail,
|
|
210
|
+
caption: '写进去的项与值',
|
|
211
|
+
}),
|
|
212
|
+
reconcileDisclosure(receipt),
|
|
213
|
+
receipt.recordId === null ? '' : undoExit(receipt.recordId),
|
|
214
|
+
copyArea({
|
|
215
|
+
data: { envelope },
|
|
216
|
+
log: {
|
|
217
|
+
envelope,
|
|
218
|
+
copyLog: copyLog({
|
|
219
|
+
command: commandLine(KEY, params),
|
|
220
|
+
source: receipt.source,
|
|
221
|
+
detail: '改了 ' + receipt.affectedRows + ' 笔,写进去 '
|
|
222
|
+
+ (receipt.writtenFields.map((f) => fieldLabelOf(f)).join('、') || '没改到任何一项'),
|
|
223
|
+
actionAt: receipt.actionAt,
|
|
224
|
+
version: DOC_VERSION,
|
|
225
|
+
}),
|
|
226
|
+
},
|
|
227
|
+
}),
|
|
228
|
+
].join('');
|
|
229
|
+
return pageShell({
|
|
230
|
+
docTitle: DOC_TITLE + '·写库回执',
|
|
231
|
+
title: WAKE + ' · 回执',
|
|
232
|
+
subtitle: receipt.summary,
|
|
233
|
+
slot: 'receipt',
|
|
234
|
+
page: 'receipt',
|
|
235
|
+
shape: envelope.shape,
|
|
236
|
+
key: KEY,
|
|
237
|
+
content,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
export const SCENE = {
|
|
241
|
+
id: 'restore',
|
|
242
|
+
wakeWord: WAKE,
|
|
243
|
+
key: KEY,
|
|
244
|
+
kind: '',
|
|
245
|
+
op: 'restore',
|
|
246
|
+
family: '批量与修正族',
|
|
247
|
+
collect: collectOf,
|
|
248
|
+
receipt: receiptOf,
|
|
249
|
+
};
|
|
250
|
+
//# sourceMappingURL=scene-restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-restore.js","sourceRoot":"","sources":["../../src/record/scene-restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-undo.d.ts","sourceRoot":"","sources":["../../src/record/scene-undo.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAA8B,KAAK,EAAE,MAAM,YAAY,CAAC;AAsPpE,eAAO,MAAM,KAAK,EAAE,KASnB,CAAC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { renderCaliberLine, renderCopyBlock, renderDataTable, renderDisclosure, renderKpiGrid } from 'base-paint/blocks';
|
|
2
|
+
import { blockedBar, blockedItems, blockedMessage } from '../shared/blockedSlots.js';
|
|
3
|
+
import { collectMissingTags, collectSectionTitle } from '../shared/collectFrame.js';
|
|
4
|
+
import { copyArea, copyLog, promptCopyArea } from '../shared/copyArea.js';
|
|
5
|
+
import { diffOf, diffTable } from '../shared/diffTable.js';
|
|
6
|
+
import { emptyNote } from '../shared/emptyNote.js';
|
|
7
|
+
import { DOC_SKILL, DOC_TITLE, DOC_VERSION, sceneKeyOf } from '../shared/pageIdentity.js';
|
|
8
|
+
import { pageShell } from '../shared/pageShell.js';
|
|
9
|
+
import { pickerBlock, readRowById, snapshotTable } from '../shared/recordPicker.js';
|
|
10
|
+
import { receiptStatusCard, reconcileDisclosure } from '../shared/receiptParts.js';
|
|
11
|
+
import { summaryCards, summaryRow } from '../shared/summaryRow.js';
|
|
12
|
+
import { typeBadge } from '../shared/typeBadge.js';
|
|
13
|
+
import { fieldLabelOf } from '../shared/userWording.js';
|
|
14
|
+
import { commandLine } from '../shared/writeParts.js';
|
|
15
|
+
/** 一条唤醒词一件:本件服务的那条。 */
|
|
16
|
+
const WAKE = '撤销';
|
|
17
|
+
/** 本件的命令名(撤销是 `bill.record.update` 的 `op=undo` 那一支)。 */
|
|
18
|
+
const KEY = 'bill.record.update';
|
|
19
|
+
/** 撤销这件事那句说明(采集页与回执页各出一处,同一句话只写在这里一份)。
|
|
20
|
+
* 本轮整改:`软删打标`/`deleted_at`/`NULL`/`物理删` 都是工程话,换成用户说法
|
|
21
|
+
* (照 `docs/skills/skill-bill/t407-文字审查.md` 第 27、28 条的判法)。 */
|
|
22
|
+
const SOFT_DELETE_NOTE = '撤销只打标,不删数据,记录还在库里。'
|
|
23
|
+
+ '撤销过的那一笔不算进查询和统计,要回来就说「恢复」。';
|
|
24
|
+
/** 一个值的字符串形态(数字写十进制串,其余形态按空串用)。 */
|
|
25
|
+
function textOf(v) {
|
|
26
|
+
if (typeof v === 'string')
|
|
27
|
+
return v.trim();
|
|
28
|
+
return typeof v === 'number' ? String(v) : '';
|
|
29
|
+
}
|
|
30
|
+
/** 记录编号:正整数才算给了(其余形态一律当没给,不猜)。 */
|
|
31
|
+
function idOf(params) {
|
|
32
|
+
const raw = params['id'];
|
|
33
|
+
const n = typeof raw === 'number' ? raw : textOf(raw) === '' ? NaN : Number(textOf(raw));
|
|
34
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
35
|
+
}
|
|
36
|
+
/** 摘要行的事实:有那一条就取库内那一行(页面说的是它),没有就取本次参数。 */
|
|
37
|
+
function factsOf(row, params) {
|
|
38
|
+
if (row !== null) {
|
|
39
|
+
return { amount: row.amount, category: row.category, account: row.account, ledger: row.ledger, time: row.time };
|
|
40
|
+
}
|
|
41
|
+
const raw = params['amount'];
|
|
42
|
+
const n = typeof raw === 'number' ? raw : textOf(raw) === '' ? NaN : Number(textOf(raw));
|
|
43
|
+
return {
|
|
44
|
+
amount: Number.isFinite(n) ? n : null,
|
|
45
|
+
category: textOf(params['category']),
|
|
46
|
+
account: textOf(params['account']),
|
|
47
|
+
ledger: textOf(params['ledger']),
|
|
48
|
+
time: textOf(params['time']),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** 缺项时那条写库指令原文:缺的值留成尖括号占位符,**只给看不给复制**。 */
|
|
52
|
+
function blockedCommand(params, blocked) {
|
|
53
|
+
const filled = { ...params };
|
|
54
|
+
for (const b of blocked)
|
|
55
|
+
filled[b.name] = '<' + b.label + '>';
|
|
56
|
+
return commandLine(KEY, filled);
|
|
57
|
+
}
|
|
58
|
+
/** 缺项阻断条整条收进折叠区:首屏只留缺项标签与一行副标题,口令原文不再常驻版面。
|
|
59
|
+
* 内容与判定一字不动(仍是共用件 `blockedBar` 的产出),只换摆法;折叠与否那枚置灰按钮都点不动。 */
|
|
60
|
+
function blockedFold(items, command) {
|
|
61
|
+
if (items.length === 0)
|
|
62
|
+
return '';
|
|
63
|
+
return renderDisclosure({
|
|
64
|
+
title: '还缺什么,以及补齐后照抄的那条',
|
|
65
|
+
contentHtml: blockedBar({ items, command }),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** 「照这句跟助手说一遍」那块话:挑哪一条、撤销是什么口径、接下来跟助手说哪句。 */
|
|
69
|
+
function promptOf(input) {
|
|
70
|
+
if (input.id === null) {
|
|
71
|
+
return '这一页先不写库。从候选里指定一条记录,再跟助手说一遍「撤销」。';
|
|
72
|
+
}
|
|
73
|
+
if (input.deleted) {
|
|
74
|
+
return '记录编号 ' + input.id + ' 那一条已经撤销过,再撤一次无事可做。\n'
|
|
75
|
+
+ '要它回到库里就说「恢复」:' + commandLine(KEY, { op: 'restore', id: input.id }) + '。';
|
|
76
|
+
}
|
|
77
|
+
return '这一条就是这次要撤销的目标。撤销只打标记、不删记录,撤完还能恢复。照这条说:\n'
|
|
78
|
+
+ commandLine(KEY, input.params);
|
|
79
|
+
}
|
|
80
|
+
/** 采集页整页:类型徽章 → 摘要行 → 打标说明 → 写库未发生 → 缺项阻断条 → 候选列表(或选定那一条的只读回显)
|
|
81
|
+
* → 照这句跟助手说一遍 → 复制区。缺 `id` 时**不给可跑的写库指令**(阻断条里那条带占位符、只给看不给复制)。 */
|
|
82
|
+
function collectOf(input) {
|
|
83
|
+
const { params, missing } = input;
|
|
84
|
+
const blocked = blockedItems({ params, missing, kind: '' });
|
|
85
|
+
const message = blockedMessage(missing, blocked);
|
|
86
|
+
const envelope = {
|
|
87
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: sceneKeyOf(KEY),
|
|
88
|
+
data: { ok: false, message },
|
|
89
|
+
};
|
|
90
|
+
const id = idOf(params);
|
|
91
|
+
const probe = id === null ? { ok: true, reason: '', row: null } : readRowById(id);
|
|
92
|
+
const row = probe.row;
|
|
93
|
+
const deleted = row !== null && row.deleted_at !== null && String(row.deleted_at).trim() !== '';
|
|
94
|
+
/** 副标题只报缺哪一项(不重复「已出采集页,补齐之后跟助手说一遍」那句)。 */
|
|
95
|
+
const subtitle = blocked.length === 0 ? '' : '缺必需槽位:' + blocked.map((i) => i.label).join('、');
|
|
96
|
+
const middle = [];
|
|
97
|
+
if (id === null) {
|
|
98
|
+
middle.push(pickerBlock({
|
|
99
|
+
mode: 'undo',
|
|
100
|
+
hint: '候选只列没撤销过的记录,挑一条即可。',
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
else if (row !== null && deleted) {
|
|
104
|
+
middle.push(snapshotTable(row, '这一条记录 已打标撤销,只读回显'));
|
|
105
|
+
middle.push(emptyNote({
|
|
106
|
+
title: '这一条已经撤销过',
|
|
107
|
+
text: '记录编号 ' + id + ' 在 ' + String(row.deleted_at) + ' 已经撤销过了,这一支不再重复撤销。',
|
|
108
|
+
next: '要它回到库里就说「恢复」。要撤别的记录就换一个编号。',
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
else if (row === null) {
|
|
112
|
+
middle.push(emptyNote({
|
|
113
|
+
title: '这个编号没有可撤销的记录',
|
|
114
|
+
text: '记录编号 ' + id + ' 在库里读不到。' + (probe.ok ? '' : probe.reason + '。'),
|
|
115
|
+
next: '核一下编号,或先说清是哪一笔。',
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
middle.push(snapshotTable(row, '这一条就是要撤销的记录 只读回显 记录编号 ' + row.id));
|
|
120
|
+
}
|
|
121
|
+
const content = [
|
|
122
|
+
typeBadge({
|
|
123
|
+
kind: '',
|
|
124
|
+
status: 'danger',
|
|
125
|
+
state: blocked.length > 0 ? '待补槽位 · 未写库(已阻断)' : '待核对 · 未写库',
|
|
126
|
+
next: '',
|
|
127
|
+
}),
|
|
128
|
+
blocked.length === 0 ? '' : collectSectionTitle({ no: 1, title: '先看这一笔缺什么' }),
|
|
129
|
+
collectMissingTags({ labels: blocked.map((i) => i.label) }),
|
|
130
|
+
summaryRow(factsOf(row, params)),
|
|
131
|
+
renderCaliberLine(SOFT_DELETE_NOTE),
|
|
132
|
+
collectSectionTitle({ no: 2, title: id === null ? '先挑一条记录' : '核对这一条' }),
|
|
133
|
+
blockedFold(blocked, blockedCommand(params, blocked)),
|
|
134
|
+
middle.join(''),
|
|
135
|
+
promptCopyArea(promptOf({ id, deleted, params }), '挑好记录后照这句跟助手说一遍'),
|
|
136
|
+
copyArea({
|
|
137
|
+
data: { envelope },
|
|
138
|
+
log: {
|
|
139
|
+
envelope,
|
|
140
|
+
copyLog: copyLog({
|
|
141
|
+
command: commandLine(KEY, params),
|
|
142
|
+
source: input.source,
|
|
143
|
+
detail: '没写库(采集页)',
|
|
144
|
+
actionAt: input.actionAt,
|
|
145
|
+
version: DOC_VERSION,
|
|
146
|
+
}),
|
|
147
|
+
},
|
|
148
|
+
}),
|
|
149
|
+
].join('');
|
|
150
|
+
return pageShell({
|
|
151
|
+
docTitle: DOC_TITLE + '·补齐槽位',
|
|
152
|
+
title: WAKE + ' · ' + (id === null ? '挑一条记录' : '确认撤销'),
|
|
153
|
+
subtitle,
|
|
154
|
+
slot: 'collect',
|
|
155
|
+
page: 'collect',
|
|
156
|
+
shape: envelope.shape,
|
|
157
|
+
key: KEY,
|
|
158
|
+
content,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/** 撤销回执的退出口:这一条已经撤销过,再撤一次无事可做——所以出口给的是「恢复」那条指令。
|
|
162
|
+
*
|
|
163
|
+
* 第 3 轮返工(上级裁定第 1 条):改前本块另带一枚「复制数据」(`ilife-exit-restore-copy`)
|
|
164
|
+
* +公共层按缺省自动补的一枚置灰「复制日志」,与下面复制区那组「复制数据/复制日志」上下重复
|
|
165
|
+
* (DOM 实测:本页 4 枚复制按钮=两组,其余 31 页各 2 枚=单组)。
|
|
166
|
+
* 改后退出口只留那枚「恢复这一笔」按钮与一句去向说明,不带复制按钮、不带 `data-t`;
|
|
167
|
+
* 恢复指令走下面复制区那颗「复制数据」(复制载荷里仍带可重跑命令,`data-t` 形状不动)。 */
|
|
168
|
+
const RESTORE_EXIT_NOTE = '想反悔就用下面那颗「复制数据」,里面带着一句恢复的话。';
|
|
169
|
+
function restoreExit() {
|
|
170
|
+
return renderCopyBlock({
|
|
171
|
+
title: '想反悔(把这一笔找回来)',
|
|
172
|
+
buttons: [{ label: '↩︎ 恢复这一笔', kind: 'red', actionId: 'ilife-exit-restore' }],
|
|
173
|
+
}) + renderCaliberLine(RESTORE_EXIT_NOTE);
|
|
174
|
+
}
|
|
175
|
+
/** 回执页整页:类型徽章 → 一张大网格 → 说明 → 「撤销标记」的改前改后对照(diff 表)→ 写入明细表
|
|
176
|
+
* → 对账折叠区 → 退出口 → 复制区三件。 */
|
|
177
|
+
function receiptOf(input) {
|
|
178
|
+
const { params, receipt } = input;
|
|
179
|
+
const envelope = {
|
|
180
|
+
version: DOC_VERSION, skill: DOC_SKILL, shape: 'receipt', key: sceneKeyOf(KEY),
|
|
181
|
+
data: { ok: true, message: receipt.summary },
|
|
182
|
+
};
|
|
183
|
+
const after = receipt.recordId === null
|
|
184
|
+
? { ok: true, reason: '', row: null }
|
|
185
|
+
: readRowById(receipt.recordId);
|
|
186
|
+
const stamped = after.ok && after.row !== null && after.row.deleted_at !== null
|
|
187
|
+
? String(after.row.deleted_at) : '';
|
|
188
|
+
const rows = stamped === ''
|
|
189
|
+
? []
|
|
190
|
+
: diffOf({ fields: ['撤销标记'], before: { 撤销标记: null }, after: { 撤销标记: stamped } });
|
|
191
|
+
const content = [
|
|
192
|
+
typeBadge({
|
|
193
|
+
kind: '',
|
|
194
|
+
status: 'warn',
|
|
195
|
+
state: '写库成功',
|
|
196
|
+
next: '这一笔已标记撤销,记录还在。恢复见下方按钮。',
|
|
197
|
+
}),
|
|
198
|
+
renderKpiGrid([
|
|
199
|
+
...summaryCards(input.facts),
|
|
200
|
+
receiptStatusCard(receipt, input.writtenDetail),
|
|
201
|
+
{ label: '这次记了几笔', value: receipt.affectedRows + ' 笔', detail: '按库里的改动算' },
|
|
202
|
+
{
|
|
203
|
+
label: '写进去的项',
|
|
204
|
+
value: receipt.writtenFields.length + ' 项',
|
|
205
|
+
detail: receipt.writtenFields.map((f) => fieldLabelOf(f)).join('、') || '没改到任何一项',
|
|
206
|
+
},
|
|
207
|
+
]),
|
|
208
|
+
renderCaliberLine(SOFT_DELETE_NOTE),
|
|
209
|
+
rows.length === 0
|
|
210
|
+
? renderDataTable({
|
|
211
|
+
columns: [{ key: 'k', label: '哪一项' }, { key: 'v', label: '记成什么' }],
|
|
212
|
+
rows: [
|
|
213
|
+
{ k: fieldLabelOf('deleted_at'), v: '已打上(本页再读时已看不到这一条)' },
|
|
214
|
+
{ k: '撤销后能不能找回来', v: '能:点「恢复」把它找回来' },
|
|
215
|
+
],
|
|
216
|
+
caption: '撤销结果',
|
|
217
|
+
})
|
|
218
|
+
: diffTable({ rows, caption: '改前改后对照 只动「撤销标记」这一项' }),
|
|
219
|
+
renderDataTable({
|
|
220
|
+
columns: [{ key: 'k', label: '哪一项' }, { key: 'v', label: '记成什么' }],
|
|
221
|
+
rows: input.detail,
|
|
222
|
+
caption: '写进去的项与值',
|
|
223
|
+
}),
|
|
224
|
+
reconcileDisclosure(receipt),
|
|
225
|
+
receipt.recordId === null ? '' : restoreExit(),
|
|
226
|
+
copyArea({
|
|
227
|
+
data: { envelope },
|
|
228
|
+
log: {
|
|
229
|
+
envelope,
|
|
230
|
+
copyLog: copyLog({
|
|
231
|
+
command: commandLine(KEY, params),
|
|
232
|
+
source: receipt.source,
|
|
233
|
+
detail: '改了 ' + receipt.affectedRows + ' 笔,写进去 '
|
|
234
|
+
+ (receipt.writtenFields.map((f) => fieldLabelOf(f)).join('、') || '没改到任何一项'),
|
|
235
|
+
actionAt: receipt.actionAt,
|
|
236
|
+
version: DOC_VERSION,
|
|
237
|
+
}),
|
|
238
|
+
},
|
|
239
|
+
}),
|
|
240
|
+
].join('');
|
|
241
|
+
return pageShell({
|
|
242
|
+
docTitle: DOC_TITLE + '·写库回执',
|
|
243
|
+
title: WAKE + ' · 回执',
|
|
244
|
+
subtitle: receipt.summary,
|
|
245
|
+
slot: 'receipt',
|
|
246
|
+
page: 'receipt',
|
|
247
|
+
shape: envelope.shape,
|
|
248
|
+
key: KEY,
|
|
249
|
+
content,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
export const SCENE = {
|
|
253
|
+
id: 'undo',
|
|
254
|
+
wakeWord: WAKE,
|
|
255
|
+
key: KEY,
|
|
256
|
+
kind: '',
|
|
257
|
+
op: 'undo',
|
|
258
|
+
family: '批量与修正族',
|
|
259
|
+
collect: collectOf,
|
|
260
|
+
receipt: receiptOf,
|
|
261
|
+
};
|
|
262
|
+
//# sourceMappingURL=scene-undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-undo.js","sourceRoot":"","sources":["../../src/record/scene-undo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-update.d.ts","sourceRoot":"","sources":["../../src/record/scene-update.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAA8B,KAAK,EAAE,MAAM,YAAY,CAAC;AAgOpE,eAAO,MAAM,KAAK,EAAE,KASnB,CAAC"}
|