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,59 @@
|
|
|
7
7
|
// 可见行只放中文(无拉丁字母,`AI` 一律转写,映射见 scene-stats.md)。
|
|
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.stats-pages-inventory-stat.c001'),
|
|
15
|
+
k002: m('skill-home.stats-pages-inventory-stat.c002'),
|
|
16
|
+
k003: m('skill-home.stats-pages-inventory-stat.c003'),
|
|
17
|
+
k004: m('skill-home.stats-pages-inventory-stat.c004'),
|
|
18
|
+
k005: m('skill-home.stats-pages-inventory-stat.c005'),
|
|
19
|
+
k006: m('skill-home.stats-pages-inventory-stat.c006'),
|
|
20
|
+
k007: m('skill-home.stats-pages-inventory-stat.c007'),
|
|
21
|
+
k008: m('skill-home.stats-pages-inventory-stat.c008'),
|
|
22
|
+
k009: m('skill-home.stats-pages-inventory-stat.c009'),
|
|
23
|
+
k010: m('skill-home.stats-pages-inventory-stat.c010'),
|
|
24
|
+
k011: m('skill-home.stats-pages-inventory-stat.c011'),
|
|
25
|
+
k012: m('skill-home.stats-pages-inventory-stat.c012'),
|
|
26
|
+
k013: m('skill-home.stats-pages-inventory-stat.c013'),
|
|
27
|
+
k014: m('skill-home.stats-pages-inventory-stat.c014'),
|
|
28
|
+
k015: m('skill-home.stats-pages-inventory-stat.c015'),
|
|
29
|
+
k016: m('skill-home.stats-pages-inventory-stat.c016'),
|
|
30
|
+
k017: m('skill-home.stats-pages-inventory-stat.c017'),
|
|
31
|
+
k018: m('skill-home.stats-pages-inventory-stat.c018'),
|
|
32
|
+
k019: m('skill-home.stats-pages-inventory-stat.c019'),
|
|
33
|
+
k020: m('skill-home.stats-pages-inventory-stat.c020'),
|
|
34
|
+
k021: m('skill-home.stats-pages-inventory-stat.c021'),
|
|
35
|
+
k022: (p0) => m('skill-home.stats-pages-inventory-stat.c022', { p0: String(p0) }),
|
|
36
|
+
k023: m('skill-home.stats-pages-inventory-stat.c023'),
|
|
37
|
+
k024: m('skill-home.stats-pages-inventory-stat.c024'),
|
|
38
|
+
k025: m('skill-home.stats-pages-inventory-stat.c025'),
|
|
39
|
+
k026: m('skill-home.stats-pages-inventory-stat.c026'),
|
|
40
|
+
k027: m('skill-home.stats-pages-inventory-stat.c027'),
|
|
41
|
+
k028: m('skill-home.stats-pages-inventory-stat.c028'),
|
|
42
|
+
k029: m('skill-home.stats-pages-inventory-stat.c029'),
|
|
43
|
+
k030: m('skill-home.stats-pages-inventory-stat.c030'),
|
|
44
|
+
k031: m('skill-home.stats-pages-inventory-stat.c031'),
|
|
45
|
+
k032: m('skill-home.stats-pages-inventory-stat.c032'),
|
|
46
|
+
k033: m('skill-home.stats-pages-inventory-stat.c033'),
|
|
47
|
+
k034: m('skill-home.stats-pages-inventory-stat.c034'),
|
|
48
|
+
k035: m('skill-home.stats-pages-inventory-stat.c035'),
|
|
49
|
+
k036: m('skill-home.stats-pages-inventory-stat.c036'),
|
|
50
|
+
k037: m('skill-home.stats-pages-inventory-stat.c037'),
|
|
51
|
+
k038: m('skill-home.stats-pages-inventory-stat.c038'),
|
|
52
|
+
k039: m('skill-home.stats-pages-inventory-stat.c039'),
|
|
53
|
+
k040: m('skill-home.stats-pages-inventory-stat.c040'),
|
|
54
|
+
k041: m('skill-home.stats-pages-inventory-stat.c041'),
|
|
55
|
+
k042: m('skill-home.stats-pages-inventory-stat.c042'),
|
|
56
|
+
k043: m('skill-home.stats-pages-inventory-stat.c043'),
|
|
57
|
+
k044: m('skill-home.stats-pages-inventory-stat.c044'),
|
|
58
|
+
k045: m('skill-home.stats-pages-inventory-stat.c045'),
|
|
59
|
+
k046: m('skill-home.stats-pages-inventory-stat.c046'),
|
|
60
|
+
k047: m('skill-home.stats-pages-inventory-stat.c047'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
10
63
|
export const FAMILY = 'inventory_stat';
|
|
11
64
|
export const PAGE_META = {
|
|
12
65
|
domain: 'stats',
|
|
@@ -43,13 +96,16 @@ export const REQUIRED_BLOCKS = {
|
|
|
43
96
|
]
|
|
44
97
|
};
|
|
45
98
|
// 可见转写(无拉丁字母;原文在 data-need 属性里一字未动)。
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
99
|
+
/** 本页可见文案(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
100
|
+
function shownText() {
|
|
101
|
+
return {
|
|
102
|
+
'空态:还没有盘点记录+完成首次盘点引导': m('skill-home.stats-pages-inventory-stat.c053'),
|
|
103
|
+
'异常:数据解析失败/数据校验失败': m('skill-home.stats-pages-inventory-stat.c054'),
|
|
104
|
+
'盘点明细(时间/范围/缺/多/异/状态)': m('skill-home.stats-pages-inventory-stat.c055'),
|
|
105
|
+
'AI建议': m('skill-home.stats-pages-inventory-stat.c056'),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const showOf = (b) => shownText()[b] ?? b;
|
|
53
109
|
// 可见文本归一:半角拉丁字母转全角(机审只认半角为英文裸词;载荷原文不动)。
|
|
54
110
|
function latinFree(s) {
|
|
55
111
|
return s.replace(/[A-Za-z]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 0xFEE0));
|
|
@@ -97,69 +153,64 @@ const CSS = '<style>'
|
|
|
97
153
|
+ '@media(max-width:560px){.st-cards{grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:8px}'
|
|
98
154
|
+ '.st-card{box-sizing:border-box;padding:10px}.st-card span{font-size:19px}.st-actions .st-btn{flex:1 1 100%}}'
|
|
99
155
|
+ '</style>';
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
156
|
+
/** 内联脚本(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
157
|
+
function pageScript() {
|
|
158
|
+
const SX = {
|
|
159
|
+
k001: m('skill-home.stats-pages-inventory-stat.c050'),
|
|
160
|
+
k002: m('skill-home.stats-pages-inventory-stat.c051'),
|
|
161
|
+
k003: m('skill-home.stats-pages-inventory-stat.c052'),
|
|
162
|
+
};
|
|
163
|
+
return '<script>(function(){var t=null;function toast(m){var e=document.getElementById("stToast");e.textContent=m;e.classList.add("show");clearTimeout(t);t=setTimeout(function(){e.classList.remove("show")},2000)}'
|
|
164
|
+
+ "function fb(s){var a=document.createElement(\"textarea\");a.value=s;document.body.appendChild(a);a.select();try{document.execCommand(\"copy\");toast(\"" + SX.k001 + "\")}catch(e){toast(\"" + SX.k002 + "\")}a.remove()}"
|
|
165
|
+
+ "function cp(s){if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(s).then(function(){toast(\"" + SX.k003 + "\")},function(){fb(s)})}else{fb(s)}}"
|
|
166
|
+
+ 'document.querySelectorAll("button[data-t]").forEach(function(b){b.addEventListener("click",function(){cp(b.getAttribute("data-t"))})})})();</script>';
|
|
167
|
+
}
|
|
104
168
|
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
|
|
105
169
|
// fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
|
|
106
170
|
// 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
|
|
107
171
|
export function renderFamilyPage(env, ctx) {
|
|
172
|
+
const L = pageText();
|
|
108
173
|
const template = readFileSync(new URL('../../../templates/stats/inventory_stat.html', import.meta.url), 'utf8');
|
|
109
174
|
const d = (env.data ?? {});
|
|
110
|
-
const
|
|
111
|
-
const records = typeof
|
|
112
|
-
const items = typeof
|
|
175
|
+
const metrics = d.metrics ?? {};
|
|
176
|
+
const records = typeof metrics.records === 'number' ? metrics.records : 0;
|
|
177
|
+
const items = typeof metrics.items === 'number' ? metrics.items : 0;
|
|
113
178
|
const diffTotal = typeof d.inventoryDiffTotal === 'number' ? d.inventoryDiffTotal : 0;
|
|
114
179
|
const rows = Array.isArray(d.inventoryDetail) ? d.inventoryDetail : [];
|
|
115
|
-
const head = '<div class="fam-head"
|
|
180
|
+
const head = '<div class="fam-head">' + '<span class="fam-name" data-family="inventory_stat">' + L.k001 + '</span>' + '<span class="fam-key" data-key="' + escapeHtml(PAGE_META.key) + '">' + L.k002 + '</span>' + '</div>';
|
|
116
181
|
// 摘要不复述两张卡的两个数(盘点记录条数/库内物品件数):只说卡片里没有的差异口径结论。
|
|
117
182
|
// #817(⑤文案不冗余):h1 由场景名回填=本页名「盘点统计」,hero 胶囊换成本页主题词(与 39/41 两页同款处置)。
|
|
118
|
-
const hero = '<div class="st st-hero"
|
|
119
|
-
|
|
120
|
-
const cards = '<div class="st st-cards">'
|
|
121
|
-
+ '<div class="st-card"><b>盘点记录</b><span>' + records + '</span><small>历史盘点条数</small></div>'
|
|
122
|
-
+ '<div class="st-card"><b>库内物品</b><span>' + items + '</span><small>盘点覆盖范围基数</small></div>'
|
|
123
|
-
+ '<div class="st-card"><b>有无数据</b><span>' + (records > 0 ? '有' : '无') + '</span><small>有没有盘点过</small></div></div>';
|
|
183
|
+
const hero = '<div class="st st-hero">' + '<span class="st-wake">' + L.k003 + '</span>' + '<p class="st-lead">' + (records === 0 ? L.k005 : L.k004) + '</p>' + '</div>';
|
|
184
|
+
const cards = '<div class="st st-cards">' + '<div class="st-card">' + '<b>' + L.k006 + '</b>' + '<span>' + records + '</span>' + '<small>' + L.k007 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k008 + '</b>' + '<span>' + items + '</span>' + '<small>' + L.k009 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k010 + '</b>' + '<span>' + (records > 0 ? L.k012 : L.k011) + '</span>' + '<small>' + L.k013 + '</small>' + '</div>' + '</div>';
|
|
124
185
|
// 建议按遗留差异是否为 0 分支:为 0 时不再让人去复查不存在的东西(#865:改吃全表合计,不再只看最近一条)。
|
|
125
|
-
const sug = '<div class="st st-sug">' + (records === 0 ?
|
|
186
|
+
const sug = '<div class="st st-sug">' + (records === 0 ? L.k016 : diffTotal > 0 ? L.k015 : L.k014) + '</div>';
|
|
126
187
|
// #865:明细逐条出(时间/范围/缺/多/异/状态),范围照老页面的写法归一成中文;
|
|
127
188
|
// 「异」与「状态」两列本库盘点表还没有(老库权威 DDL 里有,落库另票),缺列时不占位、只用一行说明点出。
|
|
128
|
-
const scopeCn = (s, loc) => (s === '' || s === 'all' ? '
|
|
129
|
-
const missCols = [rows.some((r) => r.diff === null) ? '
|
|
130
|
-
const detailRows = rows.map((r) => '<div class="st-drow"
|
|
131
|
-
+ escapeHtml(latinFree(scopeCn(r.scope, r.location))) + '</span><span class="st-hint">' + escapeHtml(String(r.date || '')) + '</span></div>'
|
|
132
|
-
+ '<div class="st-dcells"><span class="st-dcell"><b>缺</b>' + r.missing + '</span><span class="st-dcell"><b>多</b>' + r.extra + '</span>'
|
|
133
|
-
+ (r.diff === null ? '' : '<span class="st-dcell"><b>异</b>' + r.diff + '</span>')
|
|
134
|
-
+ (r.status ? '<span class="st-dcell"><b>状态</b>' + escapeHtml(latinFree(r.status)) + '</span>' : '') + '</div></div>').join('');
|
|
189
|
+
const scopeCn = (s, loc) => (s === '' || s === 'all' ? m('skill-home.stats-pages-inventory-stat.c057') : s === 'location' ? (loc || m('skill-home.stats-pages-inventory-stat.c058')) : s);
|
|
190
|
+
const missCols = [rows.some((r) => r.diff === null) ? m('skill-home.stats-pages-inventory-stat.c048') : '', rows.some((r) => !r.status) ? m('skill-home.stats-pages-inventory-stat.c049') : ''].filter(Boolean);
|
|
191
|
+
const detailRows = rows.map((r) => '<div class="st-drow">' + '<div class="st-dhead">' + '<span class="st-dname">' + escapeHtml(latinFree(scopeCn(r.scope, r.location))) + '</span>' + '<span class="st-hint">' + escapeHtml(String(r.date || '')) + '</span>' + '</div>' + '<div class="st-dcells">' + '<span class="st-dcell">' + '<b>' + L.k017 + '</b>' + r.missing + '</span>' + '<span class="st-dcell">' + '<b>' + L.k018 + '</b>' + r.extra + '</span>' + (r.diff === null ? '' : '<span class="st-dcell">' + '<b>' + L.k019 + '</b>' + r.diff + '</span>') + (r.status ? '<span class="st-dcell">' + '<b>' + L.k020 + '</b>' + escapeHtml(latinFree(r.status)) + '</span>' : '') + '</div>' + '</div>').join('');
|
|
135
192
|
const detail = records > 0
|
|
136
|
-
? '<div class="st st-sec"
|
|
137
|
-
|
|
138
|
-
+ (missCols.length ? '<div class="st-sub">本库盘点表还没有' + missCols.join('与') + ',落库后这里自动出现</div>' : '')
|
|
139
|
-
+ '<div class="st-actions"><button class="st-btn pri" data-t="帮我复查最近一次盘点的遗留差异">复查盘点</button></div></div>'
|
|
140
|
-
: '<div class="st st-empty"><b>还没有盘点记录</b>完成首次盘点后,这里会显示完成率,差异趋势与优先盘点建议'
|
|
141
|
-
+ '<div class="st-actions center"><button class="st-btn pri" data-t="帮我开始第一次盘点">复制首次盘点</button></div></div>';
|
|
193
|
+
? '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k021 + '<span class="st-hint">' + L.k022(String(rows.length)) + '</span>' + '</h2>' + (rows.length ? detailRows : '<p>' + '<span class="st-badge st-ok">' + L.k023 + '</span>' + '</p>') + (missCols.length ? '<div class="st-sub">' + L.k026 + missCols.join(L.k025) + L.k024 + '</div>' : '') + '<div class="st-actions">' + '<button class="st-btn pri" data-t="' + L.k027 + '">' + L.k028 + '</button>' + '</div>' + '</div>'
|
|
194
|
+
: '<div class="st st-empty">' + '<b>' + L.k029 + '</b>' + L.k030 + '<div class="st-actions center">' + '<button class="st-btn pri" data-t="' + L.k031 + '">' + L.k032 + '</button>' + '</div>' + '</div>';
|
|
142
195
|
// #865:完成率与遗留差异总数进「完成率与趋势」块(老 inventory_stat.py 的 total_diff 口径);
|
|
143
196
|
// 完成率要状态列,本库没有就不显示这一格,改由上面那行说明点出,不编数。
|
|
144
197
|
const comp = d.completion ?? null;
|
|
145
|
-
const trend = '<div class="st st-sec"
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
: '<div class="st-empty"><b>趋势数据不足</b>多盘点几次,完成率曲线与遗留差异总数会在这里成形</div>') + '</div>';
|
|
198
|
+
const trend = '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k033 + '</h2>' + (records > 0
|
|
199
|
+
? '<div class="st-meta">'
|
|
200
|
+
+ '<div class="st-meta-i">' + '<b>' + L.k041 + '</b>' + '<span>' + records + L.k040 + '</span>' + '</div>'
|
|
201
|
+
+ '<div class="st-meta-i">' + '<b>' + L.k039 + '</b>' + '<span>' + diffTotal + L.k038 + '</span>' + '</div>'
|
|
202
|
+
+ (comp ? '<div class="st-meta-i">' + '<b>' + L.k037 + '</b>' + '<span>' + comp.pct + '%</span></div>' : '') + '</div>'
|
|
203
|
+
+ (comp ? '' : '<div class="st-sub">' + L.k036 + '</div>')
|
|
204
|
+
: '<div class="st-empty">' + '<b>' + L.k034 + '</b>' + L.k035 + '</div>') + '</div>';
|
|
153
205
|
const tail = '<div class="st-actions">' + homeCopyArea({
|
|
154
206
|
data: { envelope: env },
|
|
155
207
|
log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
|
|
156
208
|
}) + '</div>';
|
|
157
|
-
const raw = '<details hidden class="st st-raw"
|
|
158
|
-
const blocks = '<details hidden class="st-blocks"
|
|
159
|
-
+ sectionOf('fields', '字段') + sectionOf('operations', '操作') + sectionOf('empty', '空态与异常') + sectionOf('status', '状态词') + '</details>';
|
|
209
|
+
const raw = '<details hidden class="st st-raw">' + '<summary>' + L.k042 + '</summary>' + '<pre>' + escapeHtml(JSON.stringify(env)) + '</pre>' + '</details>';
|
|
210
|
+
const blocks = '<details hidden class="st-blocks">' + '<summary>' + L.k043 + '</summary>' + sectionOf('fields', L.k044) + sectionOf('operations', L.k045) + sectionOf('empty', L.k046) + sectionOf('status', L.k047) + '</details>';
|
|
160
211
|
const content = CSS + head + '<div class="fam-content st">' + hero + cards + sug + detail + trend + '</div>'
|
|
161
212
|
+ tail + raw + blocks
|
|
162
|
-
+ '<div class="st-toast" id="stToast"></div>' +
|
|
213
|
+
+ '<div class="st-toast" id="stToast"></div>' + pageScript();
|
|
163
214
|
return fillTemplate(template, content);
|
|
164
215
|
}
|
|
165
216
|
//# sourceMappingURL=inventory_stat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory_stat.js","sourceRoot":"","sources":["../../../src/stats/pages/inventory_stat.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inventory_stat.js","sourceRoot":"","sources":["../../../src/stats/pages/inventory_stat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/stats/pages/overview.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/stats/pages/overview.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsF/C,eAAO,MAAM,MAAM,EAAG,UAAmB,CAAC;AAE1C,eAAO,MAAM,SAAS;;;;;qBAKU,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;CAC1I,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;AAuGF,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,CAyFvH"}
|
|
@@ -7,6 +7,87 @@
|
|
|
7
7
|
// 可见行只放中文(无拉丁字母,`AI/TOP/prompt/N` 一律转写,映射见 scene-stats.md)。
|
|
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.stats-pages-overview.c001'),
|
|
15
|
+
k002: m('skill-home.stats-pages-overview.c002'),
|
|
16
|
+
k003: m('skill-home.stats-pages-overview.c003'),
|
|
17
|
+
k004: m('skill-home.stats-pages-overview.c004'),
|
|
18
|
+
k005: m('skill-home.stats-pages-overview.c005'),
|
|
19
|
+
k006: m('skill-home.stats-pages-overview.c006'),
|
|
20
|
+
k007: m('skill-home.stats-pages-overview.c007'),
|
|
21
|
+
k008: m('skill-home.stats-pages-overview.c008'),
|
|
22
|
+
k009: m('skill-home.stats-pages-overview.c009'),
|
|
23
|
+
k010: m('skill-home.stats-pages-overview.c010'),
|
|
24
|
+
k011: m('skill-home.stats-pages-overview.c011'),
|
|
25
|
+
k012: m('skill-home.stats-pages-overview.c012'),
|
|
26
|
+
k013: m('skill-home.stats-pages-overview.c013'),
|
|
27
|
+
k014: (p0) => m('skill-home.stats-pages-overview.c014', { p0: String(p0) }),
|
|
28
|
+
k015: m('skill-home.stats-pages-overview.c015'),
|
|
29
|
+
k016: (p0) => m('skill-home.stats-pages-overview.c016', { p0: String(p0) }),
|
|
30
|
+
k017: m('skill-home.stats-pages-overview.c017'),
|
|
31
|
+
k018: m('skill-home.stats-pages-overview.c018'),
|
|
32
|
+
k019: m('skill-home.stats-pages-overview.c019'),
|
|
33
|
+
k020: m('skill-home.stats-pages-overview.c020'),
|
|
34
|
+
k021: m('skill-home.stats-pages-overview.c021'),
|
|
35
|
+
k022: m('skill-home.stats-pages-overview.c022'),
|
|
36
|
+
k023: m('skill-home.stats-pages-overview.c023'),
|
|
37
|
+
k024: m('skill-home.stats-pages-overview.c024'),
|
|
38
|
+
k025: m('skill-home.stats-pages-overview.c025'),
|
|
39
|
+
k026: m('skill-home.stats-pages-overview.c026'),
|
|
40
|
+
k027: m('skill-home.stats-pages-overview.c027'),
|
|
41
|
+
k028: m('skill-home.stats-pages-overview.c028'),
|
|
42
|
+
k029: m('skill-home.stats-pages-overview.c029'),
|
|
43
|
+
k030: m('skill-home.stats-pages-overview.c030'),
|
|
44
|
+
k031: m('skill-home.stats-pages-overview.c031'),
|
|
45
|
+
k032: m('skill-home.stats-pages-overview.c032'),
|
|
46
|
+
k033: m('skill-home.stats-pages-overview.c033'),
|
|
47
|
+
k034: m('skill-home.stats-pages-overview.c034'),
|
|
48
|
+
k035: m('skill-home.stats-pages-overview.c035'),
|
|
49
|
+
k036: m('skill-home.stats-pages-overview.c036'),
|
|
50
|
+
k037: m('skill-home.stats-pages-overview.c037'),
|
|
51
|
+
k038: m('skill-home.stats-pages-overview.c038'),
|
|
52
|
+
k039: m('skill-home.stats-pages-overview.c039'),
|
|
53
|
+
k040: m('skill-home.stats-pages-overview.c040'),
|
|
54
|
+
k041: m('skill-home.stats-pages-overview.c041'),
|
|
55
|
+
k042: m('skill-home.stats-pages-overview.c042'),
|
|
56
|
+
k043: m('skill-home.stats-pages-overview.c043'),
|
|
57
|
+
k044: (p0) => m('skill-home.stats-pages-overview.c044', { p0: String(p0) }),
|
|
58
|
+
k045: (p0) => m('skill-home.stats-pages-overview.c045', { p0: String(p0) }),
|
|
59
|
+
k046: m('skill-home.stats-pages-overview.c046'),
|
|
60
|
+
k047: m('skill-home.stats-pages-overview.c047'),
|
|
61
|
+
k048: (p0) => m('skill-home.stats-pages-overview.c048', { p0: String(p0) }),
|
|
62
|
+
k049: m('skill-home.stats-pages-overview.c049'),
|
|
63
|
+
k050: (p0) => m('skill-home.stats-pages-overview.c050', { p0: String(p0) }),
|
|
64
|
+
k051: m('skill-home.stats-pages-overview.c051'),
|
|
65
|
+
k052: m('skill-home.stats-pages-overview.c052'),
|
|
66
|
+
k053: m('skill-home.stats-pages-overview.c053'),
|
|
67
|
+
k054: m('skill-home.stats-pages-overview.c054'),
|
|
68
|
+
k055: m('skill-home.stats-pages-overview.c055'),
|
|
69
|
+
k056: m('skill-home.stats-pages-overview.c056'),
|
|
70
|
+
k057: m('skill-home.stats-pages-overview.c057'),
|
|
71
|
+
k058: m('skill-home.stats-pages-overview.c058'),
|
|
72
|
+
k059: m('skill-home.stats-pages-overview.c059'),
|
|
73
|
+
k060: m('skill-home.stats-pages-overview.c060'),
|
|
74
|
+
k061: m('skill-home.stats-pages-overview.c061'),
|
|
75
|
+
k062: m('skill-home.stats-pages-overview.c062'),
|
|
76
|
+
k063: m('skill-home.stats-pages-overview.c063'),
|
|
77
|
+
k064: m('skill-home.stats-pages-overview.c064'),
|
|
78
|
+
k065: m('skill-home.stats-pages-overview.c065'),
|
|
79
|
+
k066: m('skill-home.stats-pages-overview.c066'),
|
|
80
|
+
k067: m('skill-home.stats-pages-overview.c067'),
|
|
81
|
+
k068: m('skill-home.stats-pages-overview.c068'),
|
|
82
|
+
k069: m('skill-home.stats-pages-overview.c069'),
|
|
83
|
+
k070: m('skill-home.stats-pages-overview.c070'),
|
|
84
|
+
k071: m('skill-home.stats-pages-overview.c071'),
|
|
85
|
+
k072: m('skill-home.stats-pages-overview.c072'),
|
|
86
|
+
k073: m('skill-home.stats-pages-overview.c073'),
|
|
87
|
+
k074: m('skill-home.stats-pages-overview.c074'),
|
|
88
|
+
k075: m('skill-home.stats-pages-overview.c075'),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
10
91
|
export const FAMILY = 'overview';
|
|
11
92
|
export const PAGE_META = {
|
|
12
93
|
domain: 'stats',
|
|
@@ -44,16 +125,19 @@ export const REQUIRED_BLOCKS = {
|
|
|
44
125
|
]
|
|
45
126
|
};
|
|
46
127
|
// 可见转写(无拉丁字母;原文在 data-need 属性里一字未动)。
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
128
|
+
/** 本页可见文案(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
129
|
+
function shownText() {
|
|
130
|
+
return {
|
|
131
|
+
'空态:还没有物品+录入第一批引导': m('skill-home.stats-pages-overview.c082'),
|
|
132
|
+
'分区空态:暂无分类/位置/状态数据': m('skill-home.stats-pages-overview.c083'),
|
|
133
|
+
'异常:数据解析失败/数据校验失败': m('skill-home.stats-pages-overview.c084'),
|
|
134
|
+
'摘要(件数/总价/价格覆盖率/近30天变动)': m('skill-home.stats-pages-overview.c085'),
|
|
135
|
+
'价值TOP': m('skill-home.stats-pages-overview.c086'),
|
|
136
|
+
'高频TOP': m('skill-home.stats-pages-overview.c087'),
|
|
137
|
+
'点柱子复制筛选浏览prompt': m('skill-home.stats-pages-overview.c088'),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const showOf = (b) => shownText()[b] ?? b;
|
|
57
141
|
// 可见文本归一:半角拉丁字母转全角(机审只认半角为英文裸词;载荷原文不动)。
|
|
58
142
|
// 数字与日期原样保留。
|
|
59
143
|
function latinFree(s) {
|
|
@@ -118,51 +202,50 @@ const CSS = '<style>'
|
|
|
118
202
|
+ '.st-toast.show{opacity:1}@media(max-width:560px){.st-card span{font-size:19px}.st-actions .st-btn{flex:1 1 100%}'
|
|
119
203
|
+ '.st-drow{grid-template-columns:minmax(0,1fr) 54px 30px;gap:6px}.st-tcols{gap:4px}}'
|
|
120
204
|
+ '</style>';
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
205
|
+
/** 内联脚本(渲染期取词:写成函数,模块加载时不取词)。 */
|
|
206
|
+
function pageScript() {
|
|
207
|
+
const SX = {
|
|
208
|
+
k001: m('skill-home.stats-pages-overview.c079'),
|
|
209
|
+
k002: m('skill-home.stats-pages-overview.c080'),
|
|
210
|
+
k003: m('skill-home.stats-pages-overview.c081'),
|
|
211
|
+
};
|
|
212
|
+
return '<script>(function(){var t=null;function toast(m){var e=document.getElementById("stToast");e.textContent=m;e.classList.add("show");clearTimeout(t);t=setTimeout(function(){e.classList.remove("show")},2000)}'
|
|
213
|
+
+ "function fb(s){var a=document.createElement(\"textarea\");a.value=s;document.body.appendChild(a);a.select();try{document.execCommand(\"copy\");toast(\"" + SX.k001 + "\")}catch(e){toast(\"" + SX.k002 + "\")}a.remove()}"
|
|
214
|
+
+ "function cp(s){if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(s).then(function(){toast(\"" + SX.k003 + "\")},function(){fb(s)})}else{fb(s)}}"
|
|
215
|
+
+ 'document.querySelectorAll("button[data-t]").forEach(function(b){b.addEventListener("click",function(){cp(b.getAttribute("data-t"))})});'
|
|
216
|
+
+ 'document.querySelectorAll("[data-bar]").forEach(function(r){r.addEventListener("click",function(){cp(r.getAttribute("data-bar"))})});})();</script>';
|
|
217
|
+
}
|
|
126
218
|
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
|
|
127
219
|
// fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
|
|
128
220
|
// 复制区走共用件(卡路里同款三格式+六段日志);`ctx.command` 由交付链供给(含 params),直调缺省按本族主 key。
|
|
129
221
|
export function renderFamilyPage(env, ctx) {
|
|
222
|
+
const L = pageText();
|
|
130
223
|
const template = readFileSync(new URL('../../../templates/stats/overview.html', import.meta.url), 'utf8');
|
|
131
224
|
const d = (env.data ?? {});
|
|
132
|
-
const
|
|
133
|
-
const n = (k) => (typeof
|
|
225
|
+
const metrics = d.metrics ?? {};
|
|
226
|
+
const n = (k) => (typeof metrics[k] === 'number' ? metrics[k] : 0);
|
|
134
227
|
// #865:高频排行吃 `topFreq`(完整名称+最后使用日);缺该字段时回落既有 `top.*` 指标(既有键不动)。
|
|
135
228
|
const tops = (Array.isArray(d.topFreq) && d.topFreq.length
|
|
136
229
|
? d.topFreq
|
|
137
|
-
: Object.entries(
|
|
230
|
+
: Object.entries(metrics).filter(([k]) => k.startsWith('top.')).map(([k, v]) => ({ name: k.slice(4), count: v, lastAccessedAt: '' })))
|
|
138
231
|
.slice().sort((a, b) => b.count - a.count);
|
|
139
232
|
const topMax = tops.length ? Math.max(...tops.map((t) => t.count), 1) : 1;
|
|
140
|
-
const head = '<div class="fam-head"
|
|
233
|
+
const head = '<div class="fam-head">' + '<span class="fam-name" data-family="overview">' + L.k001 + '</span>' + '<span class="fam-key" data-key="' + escapeHtml(PAGE_META.key) + '">' + L.k002 + '</span>' + '</div>';
|
|
141
234
|
// 摘要不复述五张卡的数字:只说卡片里没有的结论(价格是否补全),覆盖率数字留给价值排行那块。
|
|
142
|
-
const lead = n('items') === 0 ? '
|
|
143
|
-
: (n('price.cover') >= 100 ? '
|
|
235
|
+
const lead = n('items') === 0 ? m('skill-home.stats-pages-overview.c076')
|
|
236
|
+
: (n('price.cover') >= 100 ? m('skill-home.stats-pages-overview.c077') : m('skill-home.stats-pages-overview.c078'));
|
|
144
237
|
// #817:h1 与页族名已经是「统物品」,hero 胶囊不再同名,改说这一页的范围。
|
|
145
|
-
const hero = '<div class="st st-hero"
|
|
146
|
-
const cards = '<div class="st st-cards">'
|
|
147
|
-
|
|
148
|
-
+ '<div class="st-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
+ '<div class="st-card"><b>分类数</b><span>' + n('categories') + '</span><small>启用中的分类</small></div></div>';
|
|
152
|
-
const freqRows = tops.length ? tops.map((t) => '<div class="st-row" data-bar="帮我筛选浏览物品:'
|
|
153
|
-
+ escapeHtml(t.name) + '" role="button" tabindex="0"><div class="st-name">' + escapeHtml(latinFree(t.name))
|
|
154
|
-
// #865:最后使用日来自 `topFreq.lastAccessedAt`(老「高频 TOP」表带这一列);标签与日期各占一格,无值不占位。
|
|
155
|
-
+ (t.lastAccessedAt ? '<div class="st-sub"><span class="st-kv"><b>最后使用</b>'
|
|
156
|
-
+ escapeHtml(String(t.lastAccessedAt).slice(0, 10)) + '</span></div>' : '')
|
|
157
|
-
+ '<div class="st-track"><span class="st-fill" style="width:' + Math.round((t.count / topMax) * 100) + '%"></span></div></div>'
|
|
158
|
-
+ '<div class="st-num">' + t.count + '次</div></div>').join('')
|
|
159
|
-
: '<div class="st-empty"><b>还没有访问记录</b>多看看几件物品,这里就会出现高频排行</div>';
|
|
160
|
-
const freq = '<div class="st st-sec"><h2 class="st-sec-t">高频排行</h2>'
|
|
161
|
-
+ '<div class="st-legend"><span><i style="background:#0a63d6"></i>柱长代表访问次数,点一行复制筛选浏览指令</span></div>' + freqRows + '</div>';
|
|
238
|
+
const hero = '<div class="st st-hero">' + '<span class="st-wake">' + L.k003 + '</span>' + '<p class="st-lead">' + lead + '</p>' + '</div>';
|
|
239
|
+
const cards = '<div class="st st-cards">' + '<div class="st-card">' + '<b>' + L.k004 + '</b>' + '<span>' + n('items') + '</span>' + '<small>' + L.k005 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k006 + '</b>' + '<span>' + n('quantity') + '</span>' + '<small>' + L.k007 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k008 + '</b>' + '<span>' + n('locations') + '</span>' + '<small>' + L.k009 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k010 + '</b>' + '<span>' + n('tags') + '</span>' + '<small>' + L.k011 + '</small>' + '</div>' + '<div class="st-card">' + '<b>' + L.k012 + '</b>' + '<span>' + n('categories') + '</span>' + '<small>' + L.k013 + '</small>' + '</div>' + '</div>';
|
|
240
|
+
const freqRows = tops.length ? tops.map((t) => '<div class="st-row" data-bar="' + L.k014(String(escapeHtml(t.name))) + '" role="button" tabindex="0">' + '<div class="st-name">' + escapeHtml(latinFree(t.name)) + (t.lastAccessedAt ? '<div class="st-sub">' + '<span class="st-kv">' + '<b>' + L.k015 + '</b>'
|
|
241
|
+
+ escapeHtml(String(t.lastAccessedAt).slice(0, 10)) + '</span></div>' : '') + '<div class="st-track">' + '<span class="st-fill" style="width:' + Math.round((t.count / topMax) * 100) + '%">' + '</span>' + '</div>' + '</div>' + '<div class="st-num">' + L.k016(String(t.count)) + '</div>' + '</div>').join('')
|
|
242
|
+
: '<div class="st-empty">' + '<b>' + L.k017 + '</b>' + L.k018 + '</div>';
|
|
243
|
+
const freq = '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k019 + '</h2>' + '<div class="st-legend">' + '<span>' + '<i style="background:#0a63d6">' + '</i>' + L.k020 + '</span>' + '</div>' + freqRows + '</div>';
|
|
162
244
|
// #865:四个分布各出逐项计数(老 `top_category_rows`/`_location_distribution`/`_status_distribution`/`_owner_distribution` 口径)。
|
|
163
245
|
// 口径原文只住 `data-need` 属性;可见行是「名称+柱长+计数」,三格定宽栅格,窄屏不掉字也不靠分隔符拼串。
|
|
164
246
|
const dims = d.distributions ?? {};
|
|
165
247
|
const dimRows = (rows) => {
|
|
248
|
+
const L = pageText();
|
|
166
249
|
const list = Array.isArray(rows) ? rows.slice(0, 8) : [];
|
|
167
250
|
if (!list.length)
|
|
168
251
|
return '';
|
|
@@ -171,45 +254,31 @@ export function renderFamilyPage(env, ctx) {
|
|
|
171
254
|
// 挤进一个串看不出哪个是哪个;拆开也避免同一串在多行重复时被判据当成重复句。
|
|
172
255
|
return '<div class="st-dim">' + list.map((r) => '<div class="st-drow"><span class="st-dname">'
|
|
173
256
|
+ escapeHtml(latinFree(r.name)) + '</span><span class="st-track st-dtrack"><span class="st-fill" style="width:'
|
|
174
|
-
+ Math.round((r.count / max) * 100) + '%"></span></span><span class="st-dnum">' + r.count +
|
|
257
|
+
+ Math.round((r.count / max) * 100) + '%"></span></span><span class="st-dnum">' + r.count + L.k021
|
|
175
258
|
+ (typeof r.pct === 'number' ? '<span class="st-dpct">' + r.pct + '%</span>' : '') + '</span></div>').join('') + '</div>';
|
|
176
259
|
};
|
|
177
260
|
const dist = (t, ctx, cmd, label, rows) => '<div class="st-row"><div class="st-name">' + t + '<div class="st-sub">' + ctx + '</div></div>'
|
|
178
261
|
+ '<div><button class="st-btn soft" data-t="' + escapeHtml(cmd) + '">' + label + '</button></div></div>' + dimRows(rows);
|
|
179
262
|
// #817 第二波(②层级清):灰字原是「无逐维明细」——数据口径术语,读的人不知道那是什么;
|
|
180
263
|
// 改成说这一块怎么用(点右边按钮复制该维统计)。
|
|
181
|
-
const dists = '<div class="st st-sec"
|
|
182
|
-
+ dist('分类分布', '库内共有' + n('categories') + '个分类', '帮我按分类统计物品数量', '复制分类统计', dims.categories)
|
|
183
|
-
+ dist('位置分布', '库内共有' + n('locations') + '个位置点', '帮我按位置统计物品数量', '复制位置统计', dims.locations)
|
|
184
|
-
+ dist('状态分布', '库内共有' + n('items') + '件物品', '帮我按状态统计物品数量', '复制状态统计', dims.statuses)
|
|
185
|
-
// #817 第二波(②层级清):四块里只有这一块没有总量(check 要「四个分布分块是否有总量与入口」)——补上。
|
|
186
|
-
+ dist('归属分布', '默认归使用者,库内共 ' + n('items') + ' 件', '帮我按归属人统计物品数量', '复制归属统计', dims.owners) + '</div>';
|
|
264
|
+
const dists = '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k022 + '<span class="st-hint">' + L.k023 + '</span>' + '</h2>' + dist(L.k028, L.k027 + n('categories') + L.k026, L.k025, L.k024, dims.categories) + dist(L.k033, L.k032 + n('locations') + L.k031, L.k030, L.k029, dims.locations) + dist(L.k038, L.k037 + n('items') + L.k036, L.k035, L.k034, dims.statuses) + dist(L.k043, L.k042 + n('items') + L.k041, L.k040, L.k039, dims.owners) + '</div>';
|
|
187
265
|
// #865:价值排行吃 `topValue`(带分类名,价格大于 0 口径);缺该字段时回落既有 `value.*` 指标。
|
|
188
266
|
const vals = (Array.isArray(d.topValue) && d.topValue.length
|
|
189
267
|
? d.topValue
|
|
190
|
-
: Object.entries(
|
|
268
|
+
: Object.entries(metrics).filter(([k]) => k.startsWith('value.')).map(([k, v]) => ({ name: k.slice(6), price: v, category: '' })))
|
|
191
269
|
.slice().sort((a, b) => b.price - a.price);
|
|
192
270
|
const valMax = vals.length ? Math.max(...vals.map((t) => t.price), 1) : 1;
|
|
193
|
-
const valRows = vals.map((t) => '<div class="st-row" data-bar="
|
|
194
|
-
+ '<div class="st-name">' + escapeHtml(latinFree(t.name))
|
|
195
|
-
+ (t.category ? '<div class="st-sub">' + escapeHtml(latinFree(t.category)) + '</div>' : '')
|
|
196
|
-
+ '<div class="st-track"><span class="st-fill" style="width:' + Math.round((t.price / valMax) * 100) + '%"></span></div></div>'
|
|
197
|
-
+ '<div class="st-num">' + t.price + ' 元</div></div>').join('');
|
|
271
|
+
const valRows = vals.map((t) => '<div class="st-row" data-bar="' + L.k044(String(escapeHtml(t.name))) + '" role="button" tabindex="0">' + '<div class="st-name">' + escapeHtml(latinFree(t.name)) + (t.category ? '<div class="st-sub">' + escapeHtml(latinFree(t.category)) + '</div>' : '') + '<div class="st-track">' + '<span class="st-fill" style="width:' + Math.round((t.price / valMax) * 100) + '%">' + '</span>' + '</div>' + '</div>' + '<div class="st-num">' + L.k045(String(t.price)) + '</div>' + '</div>').join('');
|
|
198
272
|
// #817 第二波(⑥分隔符不懒政):原先三个口径(覆盖率/有价格件数/合计价值)挤在标题那一行的小灰字里,
|
|
199
273
|
// 靠「,」硬串;改成三格注脚,一格一个口径名+一个值,窄屏自动折行。
|
|
200
|
-
const priceMeta = '<div class="st-meta">'
|
|
201
|
-
|
|
202
|
-
+ '<div class="st-
|
|
203
|
-
|
|
204
|
-
const more = '<div class="st st-sec"><h2 class="st-sec-t">价值排行</h2>' + priceMeta
|
|
205
|
-
+ (vals.length ? valRows + '<div class="st-actions"><button class="st-btn soft" data-t="帮我找出没有价格的物品,我逐个补价">复制补价提示</button></div>' : '<div class="st-empty"><b>还没有价格数据</b>给物品补上价格后,这里会出现价值排行'
|
|
206
|
-
+ '<div class="st-actions center"><button class="st-btn" data-t="帮我找出没有价格的物品,我逐个补价">复制补价提示</button></div></div>') + '</div>';
|
|
207
|
-
const empty = n('items') === 0 ? '<div class="st st-empty"><b>还没有物品</b>录入第一批物品后,这里就是你的家底总览'
|
|
208
|
-
+ '<div class="st-actions center"><button class="st-btn pri" data-t="帮我录入第一批物品">复制初始化</button></div></div>' : '';
|
|
274
|
+
const priceMeta = '<div class="st-meta">' + '<div class="st-meta-i">' + '<b>' + L.k046 + '</b>' + '<span>' + n('price.cover') + '%' + '</span>' + '</div>' + '<div class="st-meta-i">' + '<b>' + L.k047 + '</b>' + '<span>' + L.k048(String(n('price.covered'))) + '</span>' + '</div>' + '<div class="st-meta-i">' + '<b>' + L.k049 + '</b>' + '<span>' + L.k050(String(n('price.total'))) + '</span>' + '</div>' + '</div>';
|
|
275
|
+
const more = '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k051 + '</h2>' + priceMeta + (vals.length ? valRows + '<div class="st-actions">' + '<button class="st-btn soft" data-t="' + L.k056 + '">' + L.k057 + '</button>' + '</div>' : '<div class="st-empty">' + '<b>' + L.k054 + '</b>' + L.k055
|
|
276
|
+
+ '<div class="st-actions center">' + '<button class="st-btn" data-t="' + L.k052 + '">' + L.k053 + '</button>' + '</div>' + '</div>') + '</div>';
|
|
277
|
+
const empty = n('items') === 0 ? '<div class="st st-empty">' + '<b>' + L.k058 + '</b>' + L.k059 + '<div class="st-actions center">' + '<button class="st-btn pri" data-t="' + L.k060 + '">' + L.k061 + '</button>' + '</div>' + '</div>' : '';
|
|
209
278
|
// 建议不复述卡片数字(条数/位置数/最常看的名字都在卡片里):只说按排行能做什么。
|
|
210
279
|
const sug = '<div class="st st-sug">' + (tops.length
|
|
211
|
-
?
|
|
212
|
-
:
|
|
280
|
+
? L.k063
|
|
281
|
+
: L.k062) + '</div>';
|
|
213
282
|
// #865:趋势吃 `trend.buckets`(近30天四桶:近7天/8-14天/15-21天/22-30天,老 `_trend_buckets` 分档)。
|
|
214
283
|
// 每桶两柱(录入/废弃)+桶下计数;桶全空时仍给诚实空态,不画一条零线冒充曲线。
|
|
215
284
|
const buckets = Array.isArray(d.trend?.buckets) ? d.trend.buckets : [];
|
|
@@ -219,20 +288,18 @@ export function renderFamilyPage(env, ctx) {
|
|
|
219
288
|
? '<div class="st-trend">' + buckets.map((b) => '<div class="st-tb"><div class="st-tcols">'
|
|
220
289
|
+ '<span class="st-tcell"><span class="st-tcol"><i class="st-tfill" style="height:' + trendPct(b.added) + '"></i></span><b>' + b.added + '</b></span>'
|
|
221
290
|
+ '<span class="st-tcell"><span class="st-tcol del"><i class="st-tfill" style="height:' + trendPct(b.discarded) + '"></i></span><b>' + b.discarded + '</b></span>'
|
|
222
|
-
+ '</div><div class="st-tl">' + escapeHtml(b.label) + '</div></div>').join('')
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const trend = '<div class="st st-sec"><h2 class="st-sec-t">趋势 <span class="st-hint">近30天变动</span></h2>' + trendChart + '</div>';
|
|
227
|
-
const raw = '<details hidden class="st st-raw"><summary>原始回执(给排查用)</summary><pre>' + escapeHtml(JSON.stringify(env)) + '</pre></details>';
|
|
291
|
+
+ '</div><div class="st-tl">' + escapeHtml(b.label) + '</div></div>').join('') + '</div>' + '<div class="st-legend">' + '<span>' + '<i style="background:#0a63d6">' + '</i>' + L.k064 + '</span>' + '<span>' + '<i style="background:#c7cbd1">' + '</i>' + L.k065 + '</span>' + '</div>' + '<div class="st-sub">' + escapeHtml(d.trend?.note ?? '') + '</div>'
|
|
292
|
+
: '<div class="st-empty">' + '<b>' + L.k066 + '</b>' + L.k067 + '</div>';
|
|
293
|
+
const trend = '<div class="st st-sec">' + '<h2 class="st-sec-t">' + L.k068 + '<span class="st-hint">' + L.k069 + '</span>' + '</h2>' + trendChart + '</div>';
|
|
294
|
+
const raw = '<details hidden class="st st-raw">' + '<summary>' + L.k070 + '</summary>' + '<pre>' + escapeHtml(JSON.stringify(env)) + '</pre>' + '</details>';
|
|
228
295
|
const tail = '<div class="st-actions">' + homeCopyArea({
|
|
229
296
|
data: { envelope: env },
|
|
230
297
|
log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
|
|
231
298
|
}) + '</div>';
|
|
232
|
-
const blocks = '<details hidden class="st-blocks"
|
|
299
|
+
const blocks = '<details hidden class="st-blocks">' + '<summary>' + L.k071 + '</summary>' + sectionOf('fields', L.k072) + sectionOf('operations', L.k073) + sectionOf('empty', L.k074) + sectionOf('status', L.k075) + '</details>';
|
|
233
300
|
const content = CSS + head + '<div class="fam-content st">' + hero + cards + empty + freq + dists + more + trend + sug + '</div>'
|
|
234
301
|
+ tail + raw + blocks
|
|
235
|
-
+ '<div class="st-toast" id="stToast"></div>' +
|
|
302
|
+
+ '<div class="st-toast" id="stToast"></div>' + pageScript();
|
|
236
303
|
return fillTemplate(template, content);
|
|
237
304
|
}
|
|
238
305
|
//# sourceMappingURL=overview.js.map
|