skill-home 0.3.55 → 0.3.56
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/dist/cli/cmd_read.js +139 -115
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +2 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/entries/catalog.generated.d.ts +11 -0
- package/dist/entries/catalog.generated.d.ts.map +1 -0
- package/dist/entries/catalog.generated.js +10 -0
- package/dist/entries/catalog.generated.js.map +1 -0
- package/dist/entries/en.d.ts +2162 -0
- package/dist/entries/en.d.ts.map +1 -0
- package/dist/entries/en.js +2234 -0
- package/dist/entries/en.js.map +1 -0
- package/dist/entries/index.d.ts +15 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +15 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/zh.d.ts +2162 -0
- package/dist/entries/zh.d.ts.map +1 -0
- package/dist/entries/zh.js +2234 -0
- package/dist/entries/zh.js.map +1 -0
- package/dist/express/pages/express.d.ts.map +1 -1
- package/dist/express/pages/express.js +55 -39
- package/dist/express/pages/express.js.map +1 -1
- package/dist/express/pages/list.d.ts.map +1 -1
- package/dist/express/pages/list.js +61 -46
- package/dist/express/pages/list.js.map +1 -1
- package/dist/express/pages/missing.d.ts.map +1 -1
- package/dist/express/pages/missing.js +52 -34
- package/dist/express/pages/missing.js.map +1 -1
- package/dist/express/pages/stock.d.ts.map +1 -1
- package/dist/express/pages/stock.js +79 -41
- package/dist/express/pages/stock.js.map +1 -1
- package/dist/express/shopping.d.ts.map +1 -1
- package/dist/express/shopping.js +29 -27
- package/dist/express/shopping.js.map +1 -1
- package/dist/family/care.d.ts.map +1 -1
- package/dist/family/care.js +31 -27
- package/dist/family/care.js.map +1 -1
- package/dist/family/pages/family_borrow.d.ts.map +1 -1
- package/dist/family/pages/family_borrow.js +135 -69
- package/dist/family/pages/family_borrow.js.map +1 -1
- package/dist/family/pages/family_members.d.ts.map +1 -1
- package/dist/family/pages/family_members.js +81 -34
- package/dist/family/pages/family_members.js.map +1 -1
- package/dist/fetch/backup.d.ts.map +1 -1
- package/dist/fetch/backup.js +14 -5
- package/dist/fetch/backup.js.map +1 -1
- package/dist/fetch/db.d.ts +23 -0
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +28 -9
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/domains.d.ts.map +1 -1
- package/dist/fetch/domains.js +28 -24
- package/dist/fetch/domains.js.map +1 -1
- package/dist/fetch/masterKey.d.ts.map +1 -1
- package/dist/fetch/masterKey.js +2 -1
- package/dist/fetch/masterKey.js.map +1 -1
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +89 -68
- package/dist/health.js.map +1 -1
- package/dist/help/helpFile.d.ts +2 -5
- package/dist/help/helpFile.d.ts.map +1 -1
- package/dist/help/helpFile.js +44 -32
- package/dist/help/helpFile.js.map +1 -1
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +31 -25
- package/dist/help/lookup.js.map +1 -1
- package/dist/items/add.d.ts.map +1 -1
- package/dist/items/add.js +5 -4
- package/dist/items/add.js.map +1 -1
- package/dist/items/detail.d.ts.map +1 -1
- package/dist/items/detail.js +3 -2
- package/dist/items/detail.js.map +1 -1
- package/dist/items/inventory.d.ts.map +1 -1
- package/dist/items/inventory.js +7 -6
- package/dist/items/inventory.js.map +1 -1
- package/dist/items/pages/add_form.d.ts.map +1 -1
- package/dist/items/pages/add_form.js +26 -25
- package/dist/items/pages/add_form.js.map +1 -1
- package/dist/items/pages/browse.d.ts.map +1 -1
- package/dist/items/pages/browse.js +15 -14
- package/dist/items/pages/browse.js.map +1 -1
- package/dist/items/pages/category_manage.d.ts.map +1 -1
- package/dist/items/pages/category_manage.js +27 -27
- package/dist/items/pages/category_manage.js.map +1 -1
- package/dist/items/pages/confirm.d.ts.map +1 -1
- package/dist/items/pages/confirm.js +22 -21
- package/dist/items/pages/confirm.js.map +1 -1
- package/dist/items/pages/detail.d.ts.map +1 -1
- package/dist/items/pages/detail.js +32 -31
- package/dist/items/pages/detail.js.map +1 -1
- package/dist/items/pages/duplicates.d.ts.map +1 -1
- package/dist/items/pages/duplicates.js +15 -14
- package/dist/items/pages/duplicates.js.map +1 -1
- package/dist/items/pages/history.d.ts.map +1 -1
- package/dist/items/pages/history.js +45 -41
- package/dist/items/pages/history.js.map +1 -1
- package/dist/items/pages/inventory_diff.d.ts.map +1 -1
- package/dist/items/pages/inventory_diff.js +23 -20
- package/dist/items/pages/inventory_diff.js.map +1 -1
- package/dist/items/pages/inventory_records.d.ts.map +1 -1
- package/dist/items/pages/inventory_records.js +29 -26
- package/dist/items/pages/inventory_records.js.map +1 -1
- package/dist/items/pages/inventory_round.d.ts.map +1 -1
- package/dist/items/pages/inventory_round.js +46 -34
- package/dist/items/pages/inventory_round.js.map +1 -1
- package/dist/items/pages/locate.d.ts.map +1 -1
- package/dist/items/pages/locate.js +20 -19
- package/dist/items/pages/locate.js.map +1 -1
- package/dist/items/pages/move_checklist.d.ts.map +1 -1
- package/dist/items/pages/move_checklist.js +28 -25
- package/dist/items/pages/move_checklist.js.map +1 -1
- package/dist/items/pages/photo_wall.d.ts.map +1 -1
- package/dist/items/pages/photo_wall.js +25 -25
- package/dist/items/pages/photo_wall.js.map +1 -1
- package/dist/items/pages/photos.d.ts.map +1 -1
- package/dist/items/pages/photos.js +29 -31
- package/dist/items/pages/photos.js.map +1 -1
- package/dist/items/pages/receipt.d.ts.map +1 -1
- package/dist/items/pages/receipt.js +58 -52
- package/dist/items/pages/receipt.js.map +1 -1
- package/dist/items/pages/relations.d.ts.map +1 -1
- package/dist/items/pages/relations.js +22 -23
- package/dist/items/pages/relations.js.map +1 -1
- package/dist/items/pages/search_list.d.ts.map +1 -1
- package/dist/items/pages/search_list.js +17 -16
- package/dist/items/pages/search_list.js.map +1 -1
- package/dist/items/pages/tag_manage.d.ts.map +1 -1
- package/dist/items/pages/tag_manage.js +51 -44
- package/dist/items/pages/tag_manage.js.map +1 -1
- package/dist/items/pages/undo_select.d.ts.map +1 -1
- package/dist/items/pages/undo_select.js +25 -24
- package/dist/items/pages/undo_select.js.map +1 -1
- package/dist/items/search.d.ts.map +1 -1
- package/dist/items/search.js +4 -3
- package/dist/items/search.js.map +1 -1
- package/dist/items/tag.d.ts.map +1 -1
- package/dist/items/tag.js +15 -13
- package/dist/items/tag.js.map +1 -1
- package/dist/items/update.d.ts.map +1 -1
- package/dist/items/update.js +24 -23
- package/dist/items/update.js.map +1 -1
- package/dist/outfit/outfit.d.ts.map +1 -1
- package/dist/outfit/outfit.js +70 -31
- package/dist/outfit/outfit.js.map +1 -1
- package/dist/outfit/pages/outfit_picker.d.ts.map +1 -1
- package/dist/outfit/pages/outfit_picker.js +89 -40
- package/dist/outfit/pages/outfit_picker.js.map +1 -1
- package/dist/outfit/pages/travel_trip.d.ts.map +1 -1
- package/dist/outfit/pages/travel_trip.js +82 -38
- package/dist/outfit/pages/travel_trip.js.map +1 -1
- package/dist/outfit/pages/trip_outfit_plan.d.ts.map +1 -1
- package/dist/outfit/pages/trip_outfit_plan.js +87 -48
- package/dist/outfit/pages/trip_outfit_plan.js.map +1 -1
- package/dist/outfit/pages/wardrobe_analyze.d.ts.map +1 -1
- package/dist/outfit/pages/wardrobe_analyze.js +85 -36
- package/dist/outfit/pages/wardrobe_analyze.js.map +1 -1
- package/dist/outfit/pages/wardrobe_season.d.ts.map +1 -1
- package/dist/outfit/pages/wardrobe_season.js +101 -40
- package/dist/outfit/pages/wardrobe_season.js.map +1 -1
- package/dist/outfit/trip.d.ts.map +1 -1
- package/dist/outfit/trip.js +35 -14
- package/dist/outfit/trip.js.map +1 -1
- package/dist/policy/category.d.ts.map +1 -1
- package/dist/policy/category.js +2 -1
- package/dist/policy/category.js.map +1 -1
- package/dist/policy/item.d.ts.map +1 -1
- package/dist/policy/item.js +3 -2
- package/dist/policy/item.js.map +1 -1
- package/dist/policy/routes.en.generated.d.ts +18 -0
- package/dist/policy/routes.en.generated.d.ts.map +1 -0
- package/dist/policy/routes.en.generated.js +14 -0
- package/dist/policy/routes.en.generated.js.map +1 -0
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +20 -1
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/receipt/pages/accounts.d.ts.map +1 -1
- package/dist/receipt/pages/accounts.js +62 -36
- package/dist/receipt/pages/accounts.js.map +1 -1
- package/dist/receipt/pages/certificates.d.ts.map +1 -1
- package/dist/receipt/pages/certificates.js +74 -54
- package/dist/receipt/pages/certificates.js.map +1 -1
- package/dist/receipt/pages/purchase_records.d.ts.map +1 -1
- package/dist/receipt/pages/purchase_records.js +82 -59
- package/dist/receipt/pages/purchase_records.js.map +1 -1
- package/dist/receipt/pages/warranty.d.ts.map +1 -1
- package/dist/receipt/pages/warranty.js +36 -24
- package/dist/receipt/pages/warranty.js.map +1 -1
- package/dist/receipt/ticket.d.ts.map +1 -1
- package/dist/receipt/ticket.js +65 -64
- package/dist/receipt/ticket.js.map +1 -1
- package/dist/render/copyArea.d.ts.map +1 -1
- package/dist/render/copyArea.js +39 -26
- package/dist/render/copyArea.js.map +1 -1
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +19 -4
- package/dist/render/html.js.map +1 -1
- package/dist/render/views.d.ts.map +1 -1
- package/dist/render/views.js +4 -3
- package/dist/render/views.js.map +1 -1
- package/dist/setup/pages/backup_receipt.d.ts.map +1 -1
- package/dist/setup/pages/backup_receipt.js +85 -35
- package/dist/setup/pages/backup_receipt.js.map +1 -1
- package/dist/setup/pages/first_use_wizard.d.ts.map +1 -1
- package/dist/setup/pages/first_use_wizard.js +100 -33
- package/dist/setup/pages/first_use_wizard.js.map +1 -1
- package/dist/setup/pages/health_report.d.ts.map +1 -1
- package/dist/setup/pages/health_report.js +74 -37
- package/dist/setup/pages/health_report.js.map +1 -1
- package/dist/setup/pages/import_restore.d.ts.map +1 -1
- package/dist/setup/pages/import_restore.js +79 -34
- package/dist/setup/pages/import_restore.js.map +1 -1
- package/dist/shared/params.d.ts.map +1 -1
- package/dist/shared/params.js +4 -3
- package/dist/shared/params.js.map +1 -1
- package/dist/space/location.d.ts.map +1 -1
- package/dist/space/location.js +29 -19
- package/dist/space/location.js.map +1 -1
- package/dist/space/pages/fixed_spot.d.ts.map +1 -1
- package/dist/space/pages/fixed_spot.js +51 -42
- package/dist/space/pages/fixed_spot.js.map +1 -1
- package/dist/space/pages/location_manage.d.ts.map +1 -1
- package/dist/space/pages/location_manage.js +59 -48
- package/dist/space/pages/location_manage.js.map +1 -1
- package/dist/space/pages/space_view.d.ts.map +1 -1
- package/dist/space/pages/space_view.js +67 -70
- package/dist/space/pages/space_view.js.map +1 -1
- package/dist/space/pages/suggest_storage.d.ts.map +1 -1
- package/dist/space/pages/suggest_storage.js +78 -64
- package/dist/space/pages/suggest_storage.js.map +1 -1
- package/dist/stats/pages/expiring.d.ts.map +1 -1
- package/dist/stats/pages/expiring.js +99 -61
- package/dist/stats/pages/expiring.js.map +1 -1
- package/dist/stats/pages/idle.d.ts.map +1 -1
- package/dist/stats/pages/idle.js +95 -59
- package/dist/stats/pages/idle.js.map +1 -1
- package/dist/stats/pages/inventory_stat.d.ts.map +1 -1
- package/dist/stats/pages/inventory_stat.js +98 -47
- package/dist/stats/pages/inventory_stat.js.map +1 -1
- package/dist/stats/pages/overview.d.ts.map +1 -1
- package/dist/stats/pages/overview.js +137 -70
- package/dist/stats/pages/overview.js.map +1 -1
- package/dist/stats/stats.d.ts.map +1 -1
- package/dist/stats/stats.js +7 -4
- package/dist/stats/stats.js.map +1 -1
- package/package.json +4 -3
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
// 数据形状声明:PAGE_META(主命令/形状/场景预设示例/服务场景清单)。
|
|
8
8
|
import { readFileSync } from 'node:fs';
|
|
9
9
|
import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
|
|
10
|
+
import { m } from '../../entries/index.js';
|
|
11
|
+
/** 本页可见文案(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
12
|
+
function pageText() {
|
|
13
|
+
return {
|
|
14
|
+
k001: m('skill-home.express-pages-missing.c001'),
|
|
15
|
+
k002: m('skill-home.express-pages-missing.c002'),
|
|
16
|
+
k003: m('skill-home.express-pages-missing.c003'),
|
|
17
|
+
k004: (p0) => m('skill-home.express-pages-missing.c004', { p0: String(p0) }),
|
|
18
|
+
k005: (p0) => m('skill-home.express-pages-missing.c005', { p0: String(p0) }),
|
|
19
|
+
k006: m('skill-home.express-pages-missing.c006'),
|
|
20
|
+
k007: m('skill-home.express-pages-missing.c007'),
|
|
21
|
+
k008: m('skill-home.express-pages-missing.c008'),
|
|
22
|
+
k009: m('skill-home.express-pages-missing.c009'),
|
|
23
|
+
k010: m('skill-home.express-pages-missing.c010'),
|
|
24
|
+
k011: m('skill-home.express-pages-missing.c011'),
|
|
25
|
+
k012: m('skill-home.express-pages-missing.c012'),
|
|
26
|
+
k013: m('skill-home.express-pages-missing.c013'),
|
|
27
|
+
k014: m('skill-home.express-pages-missing.c014'),
|
|
28
|
+
k015: m('skill-home.express-pages-missing.c015'),
|
|
29
|
+
k016: (p0) => m('skill-home.express-pages-missing.c016', { p0: String(p0) }),
|
|
30
|
+
k017: m('skill-home.express-pages-missing.c017'),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
10
33
|
export const FAMILY = 'missing';
|
|
11
34
|
export const PAGE_META = {
|
|
12
35
|
domain: 'express',
|
|
@@ -54,21 +77,28 @@ function asMissing(env) {
|
|
|
54
77
|
name: String(o.name ?? ''),
|
|
55
78
|
current: Number(o.current ?? 0),
|
|
56
79
|
threshold: Number(o.threshold ?? 1),
|
|
57
|
-
threshold_source: String(o.threshold_source ?? '
|
|
80
|
+
threshold_source: String(o.threshold_source ?? m('skill-home.express-pages-missing.c018')),
|
|
58
81
|
status: String(o.status ?? ''),
|
|
59
82
|
suggest: Number(o.suggest ?? 1),
|
|
60
83
|
category_name: String(o.category_name ?? ''),
|
|
61
84
|
};
|
|
62
85
|
}).filter((x) => x.name);
|
|
63
|
-
return { items, scope: String(d.scope ?? '
|
|
86
|
+
return { items, scope: String(d.scope ?? m('skill-home.express-pages-missing.c030')) };
|
|
64
87
|
}
|
|
65
88
|
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
|
|
66
89
|
// fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
|
|
67
90
|
// 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
|
|
68
91
|
export function renderFamilyPage(env, ctx) {
|
|
92
|
+
const SX = {
|
|
93
|
+
k001: m('skill-home.express-pages-missing.c026'),
|
|
94
|
+
k002: m('skill-home.express-pages-missing.c027'),
|
|
95
|
+
k003: "、",
|
|
96
|
+
k004: m('skill-home.express-pages-missing.c028'),
|
|
97
|
+
k005: m('skill-home.express-pages-missing.c029'),
|
|
98
|
+
};
|
|
99
|
+
const L = pageText();
|
|
69
100
|
const template = readFileSync(new URL('../../../templates/express/missing.html', import.meta.url), 'utf8');
|
|
70
|
-
const head = '<div class="fam-head"
|
|
71
|
-
+ '<span>缺货检测</span></div>';
|
|
101
|
+
const head = '<div class="fam-head">' + '<span>' + L.k001 + '</span>' + '<span>' + L.k002 + '</span>' + '</div>';
|
|
72
102
|
const { items, scope } = asMissing(env);
|
|
73
103
|
const style = '<style>'
|
|
74
104
|
+ '.x-lead{color:#3a3a3c;font-size:15px;line-height:1.7;margin:12px 0;text-wrap:pretty}'
|
|
@@ -89,36 +119,24 @@ export function renderFamilyPage(env, ctx) {
|
|
|
89
119
|
+ '.x-empty{text-align:center;color:#666;padding:26px 0;line-height:2}'
|
|
90
120
|
+ '@media(max-width:820px){.x-row{align-items:center}.x-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.x-btn{width:100%}}'
|
|
91
121
|
+ '</style>';
|
|
92
|
-
const P_SCOPE = '
|
|
93
|
-
const P_TH = '
|
|
122
|
+
const P_SCOPE = m('skill-home.express-pages-missing.c019');
|
|
123
|
+
const P_TH = m('skill-home.express-pages-missing.c020');
|
|
94
124
|
// #890:「加入购物清单」的初始载荷(点后由页内 `onclick` 按当刻勾选改写 `data-t`)。
|
|
95
|
-
const P_LIST = '
|
|
125
|
+
const P_LIST = m('skill-home.express-pages-missing.c021');
|
|
96
126
|
let body = style;
|
|
97
127
|
// #817(③双端不塌)第二波:说明句压到 390 档一行放得下(20 字)——原来 25 字在 390 档折行后
|
|
98
128
|
// 第二行只剩一个「出」孤字。
|
|
99
|
-
body += '<p class="x-lead"
|
|
100
|
-
body += '<div class="x-metrics">'
|
|
101
|
-
+ '<span class="x-pill">缺货 ' + items.length + ' 件</span>'
|
|
102
|
-
+ '<span class="x-pill">检测范围 ' + escapeHtml(scope) + '</span>'
|
|
103
|
-
+ '<span class="x-pill">阈值来源 囤货设置</span>'
|
|
104
|
-
+ '</div>';
|
|
129
|
+
body += '<p class="x-lead">' + L.k003 + '</p>';
|
|
130
|
+
body += '<div class="x-metrics">' + '<span class="x-pill">' + L.k004(String(items.length)) + '</span>' + '<span class="x-pill">' + L.k005(String(escapeHtml(scope))) + '</span>' + '<span class="x-pill">' + L.k006 + '</span>' + '</div>';
|
|
105
131
|
if (items.length) {
|
|
106
|
-
body += '<section
|
|
107
|
-
+
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
+ '<span class="x-suggest">建议买 <b>' + it.suggest + '</b></span></div>').join('')
|
|
112
|
-
+ '</div><div class="x-actions">'
|
|
113
|
-
+ '<button class="x-btn" data-action-id="x-to-list" data-t="' + escapeHtml(P_LIST) + '" onclick="xToList(this)">加入购物清单</button>'
|
|
114
|
-
+ '<button class="x-btn ghost" data-action-id="x-scope" data-t="' + escapeHtml(P_SCOPE) + '">按范围检测</button>'
|
|
115
|
-
+ '<button class="x-btn ghost" data-action-id="x-th" data-t="' + escapeHtml(P_TH) + '">设置阈值</button>'
|
|
116
|
-
+ '</div></section>';
|
|
132
|
+
body += '<section>' + '<h2>' + L.k007 + '</h2>' + '<div id="x-list">' + items.map((it) => '<div class="x-row"><input class="x-check" type="checkbox" data-id="' + it.id + '" data-name="' + escapeHtml(it.name) + '" data-suggest="' + it.suggest + '">'
|
|
133
|
+
+ '<div style="flex:1"><div class="x-name">' + escapeHtml(it.name)
|
|
134
|
+
+ '<span class="x-state ' + (it.status === L.k011 ? 'empty' : 'low') + '">' + escapeHtml(it.status) + '</span></div>'
|
|
135
|
+
+ '<div class="x-meta">' + escapeHtml(it.category_name) + L.k010 + it.current + L.k009 + it.threshold + '</div></div>'
|
|
136
|
+
+ '<span class="x-suggest">' + L.k008 + '<b>' + it.suggest + '</b></span></div>').join('') + '</div>' + '<div class="x-actions">' + '<button class="x-btn" data-action-id="x-to-list" data-t="' + escapeHtml(P_LIST) + '" onclick="xToList(this)">' + L.k012 + '</button>' + '<button class="x-btn ghost" data-action-id="x-scope" data-t="' + escapeHtml(P_SCOPE) + '">' + L.k013 + '</button>' + '<button class="x-btn ghost" data-action-id="x-th" data-t="' + escapeHtml(P_TH) + '">' + L.k014 + '</button>' + '</div>' + '</section>';
|
|
117
137
|
}
|
|
118
138
|
else {
|
|
119
|
-
body += '<section
|
|
120
|
-
+ '<button class="x-btn ghost" data-action-id="x-th" data-t="' + escapeHtml(P_TH) + '">设置阈值</button>'
|
|
121
|
-
+ '</div></div></section>';
|
|
139
|
+
body += '<section>' + '<div class="x-empty">' + L.k015 + '<br>' + L.k016(String(escapeHtml(scope))) + '<div class="x-actions" style="justify-content:center">' + '<button class="x-btn ghost" data-action-id="x-th" data-t="' + escapeHtml(P_TH) + '">' + L.k017 + '</button>' + '</div>' + '</div>' + '</section>';
|
|
122
140
|
}
|
|
123
141
|
// #890:复制路径交给公共层共享运行时(`<!--SHARED-HELPERS-->` 槽的 `buildSharedHelpersJs`)——
|
|
124
142
|
// 页内自造 `xCopy`(无反馈/无 `catch`/无 `execCommand` 降级)与 #886 收口时漏删的
|
|
@@ -126,9 +144,9 @@ export function renderFamilyPage(env, ctx) {
|
|
|
126
144
|
// `data-action-id` + `data-t`;按当刻勾选现算的那一颗,用元素级 `onclick` 先把载荷写回自己的
|
|
127
145
|
// `data-t`(目标阶段先于 document 冒泡),没勾选时置空并保留拦截提示。
|
|
128
146
|
body += '<script>'
|
|
129
|
-
+
|
|
130
|
-
+
|
|
131
|
-
+
|
|
147
|
+
+ "function xToList(b){var s=[...document.querySelectorAll(\"#x-list input:checked\")];if(!s.length){b.setAttribute(\"data-t\",\"\");alert(\"" + SX.k001 + "\");return;}"
|
|
148
|
+
+ "var ids=s.map(function(c){return c.getAttribute(\"data-id\");}).join(\",\");var names=s.map(function(c){return c.getAttribute(\"data-name\")+\"" + SX.k002 + "\"+c.getAttribute(\"data-suggest\");}).join(\"" + SX.k003 + "\");"
|
|
149
|
+
+ "b.setAttribute(\"data-t\",\"" + SX.k004 + "\"+names+\" " + SX.k005 + "[\"+ids+\"]\");}"
|
|
132
150
|
+ '</script>';
|
|
133
151
|
// 主 operations 唯一复制区(envelope 投影;上下两分支旧按钮已删,只留这一处)。
|
|
134
152
|
body += homeCopyArea({
|
|
@@ -137,10 +155,10 @@ export function renderFamilyPage(env, ctx) {
|
|
|
137
155
|
});
|
|
138
156
|
const content = head
|
|
139
157
|
+ body
|
|
140
|
-
+ sectionOf('fields', '
|
|
141
|
-
+ sectionOf('operations', '
|
|
142
|
-
+ sectionOf('empty', '
|
|
143
|
-
+ sectionOf('status', '
|
|
158
|
+
+ sectionOf('fields', m('skill-home.express-pages-missing.c022'))
|
|
159
|
+
+ sectionOf('operations', m('skill-home.express-pages-missing.c023'))
|
|
160
|
+
+ sectionOf('empty', m('skill-home.express-pages-missing.c024'))
|
|
161
|
+
+ sectionOf('status', m('skill-home.express-pages-missing.c025'));
|
|
144
162
|
return fillTemplate(template, content);
|
|
145
163
|
}
|
|
146
164
|
//# sourceMappingURL=missing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing.js","sourceRoot":"","sources":["../../../src/express/pages/missing.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,qDAAqD;AACrD,6DAA6D;AAC7D,qDAAqD;AACrD,uEAAuE;AACvE,0CAA0C;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"missing.js","sourceRoot":"","sources":["../../../src/express/pages/missing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stock.d.ts","sourceRoot":"","sources":["../../../src/express/pages/stock.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"stock.d.ts","sourceRoot":"","sources":["../../../src/express/pages/stock.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA8B/C,eAAO,MAAM,MAAM,EAAG,OAAgB,CAAC;AAEvC,eAAO,MAAM,SAAS;;;;;qBAKQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBACgB,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE;CACxI,CAAC;AAEX,eAAO,MAAM,eAAe,EA0BvB;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AA2CF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoHvH"}
|
|
@@ -11,6 +11,31 @@ function latinFree(s) {
|
|
|
11
11
|
return s.replace(/[A-Za-z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 0xFEE0));
|
|
12
12
|
}
|
|
13
13
|
import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
|
|
14
|
+
import { m } from '../../entries/index.js';
|
|
15
|
+
/** 本页可见文案(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
16
|
+
function pageText() {
|
|
17
|
+
return {
|
|
18
|
+
k001: m('skill-home.express-pages-stock.c001'),
|
|
19
|
+
k002: m('skill-home.express-pages-stock.c002'),
|
|
20
|
+
k003: m('skill-home.express-pages-stock.c003'),
|
|
21
|
+
k004: (p0) => m('skill-home.express-pages-stock.c004', { p0: String(p0) }),
|
|
22
|
+
k005: (p0) => m('skill-home.express-pages-stock.c005', { p0: String(p0) }),
|
|
23
|
+
k006: (p0) => m('skill-home.express-pages-stock.c006', { p0: String(p0) }),
|
|
24
|
+
k007: m('skill-home.express-pages-stock.c007'),
|
|
25
|
+
k008: m('skill-home.express-pages-stock.c008'),
|
|
26
|
+
k009: m('skill-home.express-pages-stock.c009'),
|
|
27
|
+
k010: m('skill-home.express-pages-stock.c010'),
|
|
28
|
+
k011: m('skill-home.express-pages-stock.c011'),
|
|
29
|
+
k012: m('skill-home.express-pages-stock.c012'),
|
|
30
|
+
k013: m('skill-home.express-pages-stock.c013'),
|
|
31
|
+
k014: m('skill-home.express-pages-stock.c014'),
|
|
32
|
+
k015: m('skill-home.express-pages-stock.c015'),
|
|
33
|
+
k016: m('skill-home.express-pages-stock.c016'),
|
|
34
|
+
k017: m('skill-home.express-pages-stock.c017'),
|
|
35
|
+
k018: m('skill-home.express-pages-stock.c018'),
|
|
36
|
+
k019: m('skill-home.express-pages-stock.c019'),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
14
39
|
export const FAMILY = 'stock';
|
|
15
40
|
export const PAGE_META = {
|
|
16
41
|
domain: 'express',
|
|
@@ -76,9 +101,22 @@ function asStock(env) {
|
|
|
76
101
|
// fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
|
|
77
102
|
// 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
|
|
78
103
|
export function renderFamilyPage(env, ctx) {
|
|
104
|
+
const SX = {
|
|
105
|
+
k001: m('skill-home.express-pages-stock.c027'),
|
|
106
|
+
k002: m('skill-home.express-pages-stock.c034'),
|
|
107
|
+
k003: m('skill-home.express-pages-stock.c030'),
|
|
108
|
+
k004: m('skill-home.express-pages-stock.c036'),
|
|
109
|
+
k005: m('skill-home.express-pages-stock.c028'),
|
|
110
|
+
k006: m('skill-home.express-pages-stock.c029'),
|
|
111
|
+
k007: m('skill-home.express-pages-stock.c031'),
|
|
112
|
+
k008: m('skill-home.express-pages-stock.c029'),
|
|
113
|
+
k009: m('skill-home.express-pages-stock.c030'),
|
|
114
|
+
k010: m('skill-home.express-pages-stock.c031'),
|
|
115
|
+
};
|
|
116
|
+
;
|
|
117
|
+
const L = pageText();
|
|
79
118
|
const template = readFileSync(new URL('../../../templates/express/stock.html', import.meta.url), 'utf8');
|
|
80
|
-
const head = '<div class="fam-head"
|
|
81
|
-
+ '<span>囤货盘点</span></div>';
|
|
119
|
+
const head = '<div class="fam-head">' + '<span>' + L.k001 + '</span>' + '<span>' + L.k002 + '</span>' + '</div>';
|
|
82
120
|
const { items, hints } = asStock(env);
|
|
83
121
|
const low = items.filter((x) => x.status === '低');
|
|
84
122
|
const empty = items.filter((x) => x.status === '空');
|
|
@@ -106,43 +144,29 @@ export function renderFamilyPage(env, ctx) {
|
|
|
106
144
|
+ '@media(max-width:820px){.x-row{flex-direction:row;align-items:center}.x-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}'
|
|
107
145
|
+ '.x-actions>.x-btn{width:100%}.x-row>.x-btn{align-self:center}}'
|
|
108
146
|
+ '</style>';
|
|
109
|
-
const P_MISSING = '
|
|
147
|
+
const P_MISSING = m('skill-home.express-pages-stock.c020');
|
|
110
148
|
// #890:选择区两颗的初始载荷(点了以后由页内监听按当刻勾选改写 `data-t`,见件尾脚本)。
|
|
111
|
-
const P_FIX = '
|
|
112
|
-
const P_THR = '
|
|
149
|
+
const P_FIX = m('skill-home.express-pages-stock.c021');
|
|
150
|
+
const P_THR = m('skill-home.express-pages-stock.c022');
|
|
113
151
|
let body = style;
|
|
114
|
-
body += '<p class="x-lead"
|
|
115
|
-
body += '<div class="x-metrics">'
|
|
116
|
-
+ '<span class="x-pill">囤货 ' + items.length + ' 件</span>'
|
|
117
|
-
+ '<span class="x-pill">偏低 ' + low.length + ' 件</span>'
|
|
118
|
-
+ '<span class="x-pill">为空 ' + empty.length + ' 件</span>'
|
|
119
|
-
+ '</div>';
|
|
152
|
+
body += '<p class="x-lead">' + L.k003 + '</p>';
|
|
153
|
+
body += '<div class="x-metrics">' + '<span class="x-pill">' + L.k004(String(items.length)) + '</span>' + '<span class="x-pill">' + L.k005(String(low.length)) + '</span>' + '<span class="x-pill">' + L.k006(String(empty.length)) + '</span>' + '</div>';
|
|
120
154
|
if (items.length) {
|
|
121
|
-
body += '<section
|
|
122
|
-
+
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
+ '</div>').join('')
|
|
127
|
-
+ '</div><div class="x-actions">'
|
|
128
|
-
+ '<button class="x-btn" data-action-id="x-fix" data-t="' + escapeHtml(P_FIX) + '" onclick="xFix(this)">修正实际数量</button>'
|
|
129
|
-
+ '<button class="x-btn ghost" data-action-id="x-thr" data-t="' + escapeHtml(P_THR) + '" onclick="xThr(this)">设阈值</button>'
|
|
130
|
-
+ '<button class="x-btn ghost" data-action-id="x-missing" data-t="' + escapeHtml(P_MISSING) + '">检测缺货</button>'
|
|
131
|
-
+ '</div></section>';
|
|
155
|
+
body += '<section>' + '<h2>' + L.k007 + '</h2>' + '<div id="x-list">' + items.map((it) => '<div class="x-row"><input class="x-check" type="checkbox" data-id="' + it.id + '" data-name="' + escapeHtml(it.name) + '">'
|
|
156
|
+
+ '<div style="flex:1"><div class="x-name">' + escapeHtml(latinFree(it.name))
|
|
157
|
+
+ '<span class="x-state ' + (it.status === L.k011 ? 'full' : it.status === L.k010 ? 'low' : 'empty') + '">' + escapeHtml(it.status) + '</span></div>'
|
|
158
|
+
+ '<div class="x-meta">' + escapeHtml(it.category_name) + L.k009 + it.threshold + L.k008 + it.current + '</div></div>'
|
|
159
|
+
+ '</div>').join('') + '</div>' + '<div class="x-actions">' + '<button class="x-btn" data-action-id="x-fix" data-t="' + escapeHtml(P_FIX) + '" onclick="xFix(this)">' + L.k012 + '</button>' + '<button class="x-btn ghost" data-action-id="x-thr" data-t="' + escapeHtml(P_THR) + '" onclick="xThr(this)">' + L.k013 + '</button>' + '<button class="x-btn ghost" data-action-id="x-missing" data-t="' + escapeHtml(P_MISSING) + '">' + L.k014 + '</button>' + '</div>' + '</section>';
|
|
132
160
|
}
|
|
133
161
|
else {
|
|
134
|
-
body += '<section
|
|
135
|
-
+ '<button class="x-btn ghost" data-action-id="x-missing" data-t="' + escapeHtml(P_MISSING) + '">检测缺货</button>'
|
|
136
|
-
+ '</div></div></section>';
|
|
162
|
+
body += '<section>' + '<div class="x-empty">' + L.k015 + '<br>' + L.k016 + '<div class="x-actions" style="justify-content:center">' + '<button class="x-btn ghost" data-action-id="x-missing" data-t="' + escapeHtml(P_MISSING) + '">' + L.k017 + '</button>' + '</div>' + '</div>' + '</section>';
|
|
137
163
|
}
|
|
138
164
|
if (hints.length) {
|
|
139
165
|
// 同名物品按名字去重(库里允许重名,但这一节是「还有哪些常用品没设阈值」,同名重复行只是噪声)。
|
|
140
166
|
const seenHint = new Set();
|
|
141
167
|
const uniqHints = hints.filter((h) => (seenHint.has(h.name) ? false : seenHint.add(h.name)));
|
|
142
|
-
body += '<section
|
|
143
|
-
+
|
|
144
|
-
+ '<button class="x-btn ghost" data-action-id="x-one-thr" data-t="' + escapeHtml(P_THR) + '" data-id="' + h.id + '" data-name="' + escapeHtml(h.name) + '" onclick="xOneThr(this)">设阈值</button></div>').join('')
|
|
145
|
-
+ '</div></section>';
|
|
168
|
+
body += '<section>' + '<h2>' + L.k018 + '</h2>' + '<div>' + uniqHints.map((h) => '<div class="x-row"><div class="x-name">' + escapeHtml(latinFree(h.name)) + '</div><div class="x-meta">' + escapeHtml(h.category_name) + '</div>'
|
|
169
|
+
+ '<button class="x-btn ghost" data-action-id="x-one-thr" data-t="' + escapeHtml(P_THR) + '" data-id="' + h.id + '" data-name="' + escapeHtml(h.name) + L.k019 + '</button>' + '</div>').join('') + '</div>' + '</section>';
|
|
146
170
|
}
|
|
147
171
|
// #890:本页原先自带 `xCopy(t){if(navigator.clipboard){…}}`——无反馈、无 `catch`、无 `execCommand`
|
|
148
172
|
// 降级。按铁律一「把对方那份抄一遍不算走了接口」,不在这里再抄一份更厚的 `xCopy`,而是把复制
|
|
@@ -152,14 +176,28 @@ export function renderFamilyPage(env, ctx) {
|
|
|
152
176
|
// 选择区两颗要按当刻勾选现算载荷:元素级 `onclick` 在目标阶段先跑、把载荷写回自己的 `data-t`,
|
|
153
177
|
// 随后才冒泡到 document 被复制;没勾选时把 `data-t` 置空(空串在共享运行时里短路、不出
|
|
154
178
|
// 「已复制」的假反馈)并保留原来的拦截提示。
|
|
155
|
-
body +=
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
179
|
+
body +=
|
|
180
|
+
"<script>function xFix(b){var s=[...document.querySelectorAll(\"#x-list input:checked\")];if(!s.length){b.setAttribute(\"data-t\",\"\");alert(\""
|
|
181
|
+
+ SX.k001
|
|
182
|
+
+ "\");return;}var ids=s.map(function(c){return c.getAttribute(\"data-id\");}).join(\",\");var names=s.map(function(c){return c.getAttribute(\"data-name\");}).join(\"、\");b.setAttribute(\"data-t\",\""
|
|
183
|
+
+ SX.k002
|
|
184
|
+
+ "\"+names+\" "
|
|
185
|
+
+ SX.k003
|
|
186
|
+
+ "[\"+ids+\"] "
|
|
187
|
+
+ SX.k004
|
|
188
|
+
+ "___\");}function xThr(b){var s=[...document.querySelectorAll(\"#x-list input:checked\")];if(!s.length){b.setAttribute(\"data-t\",\"\");alert(\""
|
|
189
|
+
+ SX.k005
|
|
190
|
+
+ "\");return;}b.setAttribute(\"data-t\",\""
|
|
191
|
+
+ SX.k006
|
|
192
|
+
+ "\"+s.map(function(c){return c.getAttribute(\"data-name\");}).join(\"、\")+\" "
|
|
193
|
+
+ SX.k007
|
|
194
|
+
+ "___\");}function xOneThr(b){b.setAttribute(\"data-t\",\""
|
|
195
|
+
+ SX.k008
|
|
196
|
+
+ "\"+b.getAttribute(\"data-name\")+\" "
|
|
197
|
+
+ SX.k009
|
|
198
|
+
+ "[\"+b.getAttribute(\"data-id\")+\"] "
|
|
199
|
+
+ SX.k010
|
|
200
|
+
+ "___\");}</script>";
|
|
163
201
|
// 主 operations 唯一复制区(envelope 投影;上下两分支旧按钮已删,只留这一处)。
|
|
164
202
|
body += homeCopyArea({
|
|
165
203
|
data: { envelope: env },
|
|
@@ -167,10 +205,10 @@ export function renderFamilyPage(env, ctx) {
|
|
|
167
205
|
});
|
|
168
206
|
const content = head
|
|
169
207
|
+ body
|
|
170
|
-
+ sectionOf('fields', '
|
|
171
|
-
+ sectionOf('operations', '
|
|
172
|
-
+ sectionOf('empty', '
|
|
173
|
-
+ sectionOf('status', '
|
|
208
|
+
+ sectionOf('fields', m('skill-home.express-pages-stock.c023'))
|
|
209
|
+
+ sectionOf('operations', m('skill-home.express-pages-stock.c024'))
|
|
210
|
+
+ sectionOf('empty', m('skill-home.express-pages-stock.c025'))
|
|
211
|
+
+ sectionOf('status', m('skill-home.express-pages-stock.c026'));
|
|
174
212
|
return fillTemplate(template, content);
|
|
175
213
|
}
|
|
176
214
|
//# sourceMappingURL=stock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../../../src/express/pages/stock.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,mDAAmD;AACnD,6DAA6D;AAC7D,qDAAqD;AACrD,uEAAuE;AACvE,0CAA0C;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qDAAqD;AACrD,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../../../src/express/pages/stock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopping.d.ts","sourceRoot":"","sources":["../../src/express/shopping.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shopping.d.ts","sourceRoot":"","sources":["../../src/express/shopping.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAY7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CA8FzF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CA0CzF"}
|
package/dist/express/shopping.js
CHANGED
|
@@ -1,40 +1,42 @@
|
|
|
1
1
|
// 快递购物能力·购物查询与购物管理(`home.shopping.query`/`home.shopping.write` 的处理函数,
|
|
2
2
|
// #800 从 cmd_read 逐字搬迁)。出参 list/receipt 形,行为与搬迁前一致。
|
|
3
|
+
import { STATUS_AT_HOME, STATUS_SPARE, STATUS_SHIPPING } from '../fetch/db.js';
|
|
3
4
|
import { getItemById, adjustQuantity, setLocationStatus, listShopping, addShopping, checkShopping, setThreshold, } from '../fetch/index.js';
|
|
4
5
|
import { fail } from '../shared/fail.js';
|
|
5
6
|
import { asInt } from '../shared/params.js';
|
|
6
7
|
import { needId } from '../policy/index.js';
|
|
7
8
|
import { buildShoppingList, buildReceipt } from '../render/index.js';
|
|
9
|
+
import { m } from '../entries/index.js';
|
|
8
10
|
export function runShoppingQuery(params, handle) {
|
|
9
11
|
const kind = params.kind ?? 'list';
|
|
10
12
|
if (kind === 'missing') {
|
|
11
13
|
// 缺货:有阈值且(在家+备用)合计<阈值;只计在家/备用,快递中不算在库(沿老 ops 口径)。
|
|
12
14
|
// #927:分类名走 categories JOIN(老库无 items.category 列)。
|
|
13
|
-
const rows = handle.db.prepare(
|
|
15
|
+
const rows = handle.db.prepare(`SELECT i.id, i.name, c.name AS category_name, ifnull(sum(CASE WHEN l.location_status IN ('${STATUS_AT_HOME}','${STATUS_SPARE}') THEN l.quantity ELSE 0 END),0) AS qty, s.threshold FROM items i JOIN stock_thresholds s ON s.item_id=i.id LEFT JOIN item_locations l ON l.item_id=i.id LEFT JOIN categories c ON c.id=i.category_id GROUP BY i.id HAVING qty < s.threshold ORDER BY i.name`).all();
|
|
14
16
|
const items = rows.map((r) => {
|
|
15
17
|
const qty = Number(r.qty ?? 0);
|
|
16
18
|
const th = Number(r.threshold);
|
|
17
|
-
const status = qty <= 0 ? '
|
|
19
|
+
const status = qty <= 0 ? m('skill-home.express-shopping.c001') : m('skill-home.express-shopping.c002');
|
|
18
20
|
const suggest = Math.max(2 * th - qty, 1);
|
|
19
21
|
return {
|
|
20
22
|
name: String(r.name),
|
|
21
23
|
id: r.id,
|
|
22
24
|
current: qty,
|
|
23
25
|
threshold: th,
|
|
24
|
-
threshold_source: '
|
|
26
|
+
threshold_source: m('skill-home.express-shopping.c003'),
|
|
25
27
|
status,
|
|
26
28
|
suggest,
|
|
27
|
-
category_name: String(r.category_name ??
|
|
29
|
+
category_name: String(r.category_name ?? m('skill-home.express-shopping.c004')),
|
|
28
30
|
};
|
|
29
31
|
});
|
|
30
32
|
const base = buildShoppingList(items.map((it) => ({ name: it.name })));
|
|
31
|
-
return { ...base, items, scope: '
|
|
33
|
+
return { ...base, items, scope: m('skill-home.express-shopping.c005'), threshold_default: 1 };
|
|
32
34
|
}
|
|
33
35
|
if (kind === 'stock') {
|
|
34
36
|
// 囤货:有阈值物品给当前量/阈值/库存状态;无阈值常用品给提示(按使用次数前 10)。
|
|
35
37
|
// #927:分类名走 categories JOIN。
|
|
36
|
-
const rows = handle.db.prepare(
|
|
37
|
-
const stockOf = (qty, th) => (qty <= 0 ? '
|
|
38
|
+
const rows = handle.db.prepare(`SELECT i.id, i.name, c.name AS category_name, ifnull(sum(CASE WHEN l.location_status IN ('${STATUS_AT_HOME}','${STATUS_SPARE}') THEN l.quantity ELSE 0 END),0) AS qty, s.threshold FROM items i LEFT JOIN item_locations l ON l.item_id=i.id LEFT JOIN stock_thresholds s ON s.item_id=i.id LEFT JOIN categories c ON c.id=i.category_id GROUP BY i.id ORDER BY i.name`).all();
|
|
39
|
+
const stockOf = (qty, th) => (qty <= 0 ? m('skill-home.express-shopping.c006') : qty < th ? m('skill-home.express-shopping.c007') : m('skill-home.express-shopping.c008'));
|
|
38
40
|
const items = rows
|
|
39
41
|
.filter((r) => r.threshold !== null && r.threshold !== undefined)
|
|
40
42
|
.map((r) => {
|
|
@@ -46,13 +48,13 @@ export function runShoppingQuery(params, handle) {
|
|
|
46
48
|
current: qty,
|
|
47
49
|
threshold: th,
|
|
48
50
|
status: stockOf(qty, th),
|
|
49
|
-
category_name: String(r.category_name ??
|
|
51
|
+
category_name: String(r.category_name ?? m('skill-home.express-shopping.c009')),
|
|
50
52
|
};
|
|
51
53
|
});
|
|
52
54
|
const hints = handle.db.prepare("SELECT i.id, i.name, c.name AS category_name FROM items i LEFT JOIN categories c ON c.id=i.category_id WHERE NOT EXISTS (SELECT 1 FROM stock_thresholds s WHERE s.item_id=i.id) ORDER BY i.access_count DESC, i.name LIMIT 10").all().map((r) => ({
|
|
53
55
|
name: String(r.name),
|
|
54
56
|
id: r.id,
|
|
55
|
-
category_name: String(r.category_name ??
|
|
57
|
+
category_name: String(r.category_name ?? m('skill-home.express-shopping.c010')),
|
|
56
58
|
}));
|
|
57
59
|
const base = buildShoppingList(items.map((it) => ({ name: it.name })));
|
|
58
60
|
return { ...base, items, hints };
|
|
@@ -60,8 +62,8 @@ export function runShoppingQuery(params, handle) {
|
|
|
60
62
|
if (kind === 'express') {
|
|
61
63
|
const days = params.timeout_days !== undefined ? Number(params.timeout_days) : 7;
|
|
62
64
|
if (!Number.isInteger(days) || days <= 0)
|
|
63
|
-
fail(2, '
|
|
64
|
-
const rows = handle.db.prepare(
|
|
65
|
+
fail(2, m('skill-home.express-shopping.c011'));
|
|
66
|
+
const rows = handle.db.prepare(`SELECT i.id, i.name, c.name AS category_name, i.photo AS photo, l.location AS location, l.quantity AS quantity, l.purchase_date AS purchase_date FROM items i JOIN item_locations l ON l.item_id=i.id LEFT JOIN categories c ON c.id=i.category_id WHERE l.location_status='${STATUS_SHIPPING}' ORDER BY l.purchase_date LIMIT 50`).all();
|
|
65
67
|
const today = Date.now();
|
|
66
68
|
const items = rows.map((r) => {
|
|
67
69
|
const t = r.purchase_date ? Math.floor((today - new Date(r.purchase_date).getTime()) / 86400000) : 0;
|
|
@@ -70,7 +72,7 @@ export function runShoppingQuery(params, handle) {
|
|
|
70
72
|
name: String(r.name),
|
|
71
73
|
id: r.id,
|
|
72
74
|
quantity: Number(r.quantity ?? 1),
|
|
73
|
-
category_name: String(r.category_name ??
|
|
75
|
+
category_name: String(r.category_name ?? m('skill-home.express-shopping.c012')),
|
|
74
76
|
location: String(r.location ?? ''),
|
|
75
77
|
photo: r.photo ? String(r.photo) : '',
|
|
76
78
|
days: wait,
|
|
@@ -87,8 +89,8 @@ export function runShoppingQuery(params, handle) {
|
|
|
87
89
|
quantity: Number(r.quantity ?? 1),
|
|
88
90
|
routine: r.routine ? String(r.routine) : '',
|
|
89
91
|
checked: Number(r.checked ?? 0),
|
|
90
|
-
sourceLabel: r.routine ? '
|
|
91
|
-
statusLabel: Number(r.checked ?? 0) ? '
|
|
92
|
+
sourceLabel: r.routine ? m('skill-home.express-shopping.c013') : m('skill-home.express-shopping.c014'),
|
|
93
|
+
statusLabel: Number(r.checked ?? 0) ? m('skill-home.express-shopping.c015') : m('skill-home.express-shopping.c016'),
|
|
92
94
|
}));
|
|
93
95
|
const base = buildShoppingList(items.map((it) => ({ name: it.name })));
|
|
94
96
|
return { ...base, items };
|
|
@@ -97,49 +99,49 @@ export function runShoppingWrite(params, handle) {
|
|
|
97
99
|
const op = params.op ?? 'check';
|
|
98
100
|
if (op === 'list-add') {
|
|
99
101
|
if (typeof params.name !== 'string' || !params.name.trim())
|
|
100
|
-
fail(2, '
|
|
102
|
+
fail(2, m('skill-home.express-shopping.c017'));
|
|
101
103
|
const id = addShopping(handle, params.name, Number(params.quantity ?? 1), params.routine ?? null);
|
|
102
|
-
return buildReceipt('
|
|
104
|
+
return buildReceipt(m('skill-home.express-shopping.c018', { p0: String(id) }));
|
|
103
105
|
}
|
|
104
106
|
if (op === 'list-check' || op === 'check') {
|
|
105
107
|
const ids = String(params.ids ?? '').split(',').map((s) => Number(s.trim())).filter((n) => Number.isInteger(n) && n > 0);
|
|
106
108
|
if (!ids.length)
|
|
107
|
-
fail(2, '
|
|
109
|
+
fail(2, m('skill-home.express-shopping.c019'));
|
|
108
110
|
const n = checkShopping(handle, ids);
|
|
109
|
-
return buildReceipt('
|
|
111
|
+
return buildReceipt(m('skill-home.express-shopping.c020', { p0: String(n) }));
|
|
110
112
|
}
|
|
111
113
|
if (op === 'missing-to-list') {
|
|
112
114
|
const ids = String(params.ids ?? '').split(',').map((s) => Number(s.trim())).filter((n) => Number.isInteger(n) && n > 0);
|
|
113
115
|
if (!ids.length)
|
|
114
|
-
fail(2, '
|
|
116
|
+
fail(2, m('skill-home.express-shopping.c021'));
|
|
115
117
|
for (const id of ids) {
|
|
116
118
|
const it = getItemById(handle, id);
|
|
117
119
|
addShopping(handle, it.name, 1, null);
|
|
118
120
|
}
|
|
119
|
-
return buildReceipt('
|
|
121
|
+
return buildReceipt(m('skill-home.express-shopping.c022', { p0: String(ids.length) }));
|
|
120
122
|
}
|
|
121
123
|
if (op === 'stock-threshold' || op === 'stock-set-threshold') {
|
|
122
124
|
const id = asInt(params.id ?? params.item_id, 'id');
|
|
123
125
|
const th = params.threshold;
|
|
124
126
|
if (id === undefined || !Number.isInteger(th))
|
|
125
|
-
fail(2, '
|
|
127
|
+
fail(2, m('skill-home.express-shopping.c023'));
|
|
126
128
|
setThreshold(handle, id, th);
|
|
127
|
-
return buildReceipt('
|
|
129
|
+
return buildReceipt(m('skill-home.express-shopping.c024', { p0: String(id), p1: String(th) }));
|
|
128
130
|
}
|
|
129
131
|
if (op === 'stock-fix') {
|
|
130
132
|
const id = needId(params);
|
|
131
133
|
const qty = Number(params.quantity);
|
|
132
134
|
if (!Number.isInteger(qty) || qty < 0)
|
|
133
|
-
fail(2, '
|
|
135
|
+
fail(2, m('skill-home.express-shopping.c025'));
|
|
134
136
|
adjustQuantity(handle, id, { set: qty });
|
|
135
|
-
return buildReceipt('
|
|
137
|
+
return buildReceipt(m('skill-home.express-shopping.c026', { p0: String(id), p1: String(qty) }));
|
|
136
138
|
}
|
|
137
139
|
if (op === 'express-confirm') {
|
|
138
140
|
const id = needId(params);
|
|
139
|
-
setLocationStatus(handle, id, '
|
|
140
|
-
return buildReceipt('
|
|
141
|
+
setLocationStatus(handle, id, m('skill-home.express-shopping.c027'));
|
|
142
|
+
return buildReceipt(m('skill-home.express-shopping.c028', { p0: String(id) }));
|
|
141
143
|
}
|
|
142
|
-
fail(2, '
|
|
144
|
+
fail(2, m('skill-home.express-shopping.c029', { p0: String(op) }));
|
|
143
145
|
return null;
|
|
144
146
|
}
|
|
145
147
|
//# sourceMappingURL=shopping.js.map
|