skill-home 0.3.0 → 0.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +97 -53
- package/dist/cli/cmd_read.js +62 -777
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +5 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +8 -2
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/keys.d.ts +4 -0
- package/dist/cli/keys.d.ts.map +1 -0
- package/dist/cli/keys.js +51 -0
- package/dist/cli/keys.js.map +1 -0
- package/dist/cli/registry.d.ts +4 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +30 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/config.d.ts +13 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -8
- package/dist/config.js.map +1 -1
- package/dist/express/commands.d.ts +3 -0
- package/dist/express/commands.d.ts.map +1 -0
- package/dist/express/commands.js +6 -0
- package/dist/express/commands.js.map +1 -0
- package/dist/express/index.d.ts +3 -0
- package/dist/express/index.d.ts.map +1 -0
- package/dist/express/index.js +4 -0
- package/dist/express/index.js.map +1 -0
- package/dist/express/pages/express.d.ts +21 -0
- package/dist/express/pages/express.d.ts.map +1 -0
- package/dist/express/pages/express.js +156 -0
- package/dist/express/pages/express.js.map +1 -0
- package/dist/express/pages/list.d.ts +21 -0
- package/dist/express/pages/list.d.ts.map +1 -0
- package/dist/express/pages/list.js +161 -0
- package/dist/express/pages/list.js.map +1 -0
- package/dist/express/pages/missing.d.ts +21 -0
- package/dist/express/pages/missing.d.ts.map +1 -0
- package/dist/express/pages/missing.js +141 -0
- package/dist/express/pages/missing.js.map +1 -0
- package/dist/express/pages/stock.d.ts +21 -0
- package/dist/express/pages/stock.d.ts.map +1 -0
- package/dist/express/pages/stock.js +164 -0
- package/dist/express/pages/stock.js.map +1 -0
- package/dist/express/routes.d.ts +3 -0
- package/dist/express/routes.d.ts.map +1 -0
- package/dist/express/routes.js +8 -0
- package/dist/express/routes.js.map +1 -0
- package/dist/express/shopping.d.ts +4 -0
- package/dist/express/shopping.d.ts.map +1 -0
- package/dist/express/shopping.js +143 -0
- package/dist/express/shopping.js.map +1 -0
- package/dist/family/care.d.ts +4 -0
- package/dist/family/care.d.ts.map +1 -0
- package/dist/family/care.js +103 -0
- package/dist/family/care.js.map +1 -0
- package/dist/family/commands.d.ts +3 -0
- package/dist/family/commands.d.ts.map +1 -0
- package/dist/family/commands.js +6 -0
- package/dist/family/commands.js.map +1 -0
- package/dist/family/index.d.ts +3 -0
- package/dist/family/index.d.ts.map +1 -0
- package/dist/family/index.js +4 -0
- package/dist/family/index.js.map +1 -0
- package/dist/family/pages/family_borrow.d.ts +21 -0
- package/dist/family/pages/family_borrow.d.ts.map +1 -0
- package/dist/family/pages/family_borrow.js +267 -0
- package/dist/family/pages/family_borrow.js.map +1 -0
- package/dist/family/pages/family_members.d.ts +21 -0
- package/dist/family/pages/family_members.d.ts.map +1 -0
- package/dist/family/pages/family_members.js +171 -0
- package/dist/family/pages/family_members.js.map +1 -0
- package/dist/family/routes.d.ts +3 -0
- package/dist/family/routes.d.ts.map +1 -0
- package/dist/family/routes.js +20 -0
- package/dist/family/routes.js.map +1 -0
- package/dist/fetch/backup.d.ts +4 -6
- package/dist/fetch/backup.d.ts.map +1 -1
- package/dist/fetch/backup.js +4 -13
- package/dist/fetch/backup.js.map +1 -1
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +9 -1
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/domains.d.ts +3 -0
- package/dist/fetch/domains.d.ts.map +1 -1
- package/dist/fetch/domains.js +5 -4
- package/dist/fetch/domains.js.map +1 -1
- package/dist/fetch/errors.d.ts +1 -1
- package/dist/fetch/errors.d.ts.map +1 -1
- package/dist/fetch/errors.js.map +1 -1
- package/dist/fetch/index.d.ts +4 -0
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +3 -0
- package/dist/fetch/index.js.map +1 -1
- package/dist/fetch/masterKey.d.ts +11 -0
- package/dist/fetch/masterKey.d.ts.map +1 -0
- package/dist/fetch/masterKey.js +46 -0
- package/dist/fetch/masterKey.js.map +1 -0
- package/dist/fetch/paths.d.ts +48 -1
- package/dist/fetch/paths.d.ts.map +1 -1
- package/dist/fetch/paths.js +82 -8
- package/dist/fetch/paths.js.map +1 -1
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +47 -35
- package/dist/health.js.map +1 -1
- package/dist/help/helpAssets.js +4 -4
- package/dist/help/helpAssets.js.map +1 -1
- package/dist/help/manifest.d.ts +8 -2
- package/dist/help/manifest.d.ts.map +1 -1
- package/dist/help/manifest.js +10 -4
- package/dist/help/manifest.js.map +1 -1
- package/dist/items/add.d.ts +3 -0
- package/dist/items/add.d.ts.map +1 -0
- package/dist/items/add.js +34 -0
- package/dist/items/add.js.map +1 -0
- package/dist/items/commands.d.ts +3 -0
- package/dist/items/commands.d.ts.map +1 -0
- package/dist/items/commands.js +22 -0
- package/dist/items/commands.js.map +1 -0
- package/dist/items/detail.d.ts +3 -0
- package/dist/items/detail.d.ts.map +1 -0
- package/dist/items/detail.js +31 -0
- package/dist/items/detail.js.map +1 -0
- package/dist/items/index.d.ts +3 -0
- package/dist/items/index.d.ts.map +1 -0
- package/dist/items/index.js +4 -0
- package/dist/items/index.js.map +1 -0
- package/dist/items/inventory.d.ts +4 -0
- package/dist/items/inventory.d.ts.map +1 -0
- package/dist/items/inventory.js +41 -0
- package/dist/items/inventory.js.map +1 -0
- package/dist/items/pages/add_form.d.ts +21 -0
- package/dist/items/pages/add_form.d.ts.map +1 -0
- package/dist/items/pages/add_form.js +169 -0
- package/dist/items/pages/add_form.js.map +1 -0
- package/dist/items/pages/browse.d.ts +21 -0
- package/dist/items/pages/browse.d.ts.map +1 -0
- package/dist/items/pages/browse.js +143 -0
- package/dist/items/pages/browse.js.map +1 -0
- package/dist/items/pages/category_manage.d.ts +21 -0
- package/dist/items/pages/category_manage.d.ts.map +1 -0
- package/dist/items/pages/category_manage.js +153 -0
- package/dist/items/pages/category_manage.js.map +1 -0
- package/dist/items/pages/confirm.d.ts +21 -0
- package/dist/items/pages/confirm.d.ts.map +1 -0
- package/dist/items/pages/confirm.js +147 -0
- package/dist/items/pages/confirm.js.map +1 -0
- package/dist/items/pages/detail.d.ts +21 -0
- package/dist/items/pages/detail.d.ts.map +1 -0
- package/dist/items/pages/detail.js +160 -0
- package/dist/items/pages/detail.js.map +1 -0
- package/dist/items/pages/duplicates.d.ts +21 -0
- package/dist/items/pages/duplicates.d.ts.map +1 -0
- package/dist/items/pages/duplicates.js +138 -0
- package/dist/items/pages/duplicates.js.map +1 -0
- package/dist/items/pages/history.d.ts +21 -0
- package/dist/items/pages/history.d.ts.map +1 -0
- package/dist/items/pages/history.js +213 -0
- package/dist/items/pages/history.js.map +1 -0
- package/dist/items/pages/inventory_diff.d.ts +21 -0
- package/dist/items/pages/inventory_diff.d.ts.map +1 -0
- package/dist/items/pages/inventory_diff.js +126 -0
- package/dist/items/pages/inventory_diff.js.map +1 -0
- package/dist/items/pages/inventory_records.d.ts +21 -0
- package/dist/items/pages/inventory_records.d.ts.map +1 -0
- package/dist/items/pages/inventory_records.js +142 -0
- package/dist/items/pages/inventory_records.js.map +1 -0
- package/dist/items/pages/inventory_round.d.ts +21 -0
- package/dist/items/pages/inventory_round.d.ts.map +1 -0
- package/dist/items/pages/inventory_round.js +145 -0
- package/dist/items/pages/inventory_round.js.map +1 -0
- package/dist/items/pages/locate.d.ts +21 -0
- package/dist/items/pages/locate.d.ts.map +1 -0
- package/dist/items/pages/locate.js +126 -0
- package/dist/items/pages/locate.js.map +1 -0
- package/dist/items/pages/move_checklist.d.ts +21 -0
- package/dist/items/pages/move_checklist.d.ts.map +1 -0
- package/dist/items/pages/move_checklist.js +112 -0
- package/dist/items/pages/move_checklist.js.map +1 -0
- package/dist/items/pages/photo_wall.d.ts +21 -0
- package/dist/items/pages/photo_wall.d.ts.map +1 -0
- package/dist/items/pages/photo_wall.js +145 -0
- package/dist/items/pages/photo_wall.js.map +1 -0
- package/dist/items/pages/photos.d.ts +21 -0
- package/dist/items/pages/photos.d.ts.map +1 -0
- package/dist/items/pages/photos.js +180 -0
- package/dist/items/pages/photos.js.map +1 -0
- package/dist/items/pages/receipt.d.ts +21 -0
- package/dist/items/pages/receipt.d.ts.map +1 -0
- package/dist/items/pages/receipt.js +252 -0
- package/dist/items/pages/receipt.js.map +1 -0
- package/dist/items/pages/relations.d.ts +21 -0
- package/dist/items/pages/relations.d.ts.map +1 -0
- package/dist/items/pages/relations.js +144 -0
- package/dist/items/pages/relations.js.map +1 -0
- package/dist/items/pages/search_list.d.ts +21 -0
- package/dist/items/pages/search_list.d.ts.map +1 -0
- package/dist/items/pages/search_list.js +133 -0
- package/dist/items/pages/search_list.js.map +1 -0
- package/dist/items/pages/tag_manage.d.ts +21 -0
- package/dist/items/pages/tag_manage.d.ts.map +1 -0
- package/dist/items/pages/tag_manage.js +213 -0
- package/dist/items/pages/tag_manage.js.map +1 -0
- package/dist/items/pages/undo_select.d.ts +21 -0
- package/dist/items/pages/undo_select.d.ts.map +1 -0
- package/dist/items/pages/undo_select.js +143 -0
- package/dist/items/pages/undo_select.js.map +1 -0
- package/dist/items/routes.d.ts +3 -0
- package/dist/items/routes.d.ts.map +1 -0
- package/dist/items/routes.js +62 -0
- package/dist/items/routes.js.map +1 -0
- package/dist/items/search.d.ts +3 -0
- package/dist/items/search.d.ts.map +1 -0
- package/dist/items/search.js +47 -0
- package/dist/items/search.js.map +1 -0
- package/dist/items/tag.d.ts +25 -0
- package/dist/items/tag.d.ts.map +1 -0
- package/dist/items/tag.js +133 -0
- package/dist/items/tag.js.map +1 -0
- package/dist/items/update.d.ts +20 -0
- package/dist/items/update.d.ts.map +1 -0
- package/dist/items/update.js +211 -0
- package/dist/items/update.js.map +1 -0
- package/dist/outfit/commands.d.ts +3 -0
- package/dist/outfit/commands.d.ts.map +1 -0
- package/dist/outfit/commands.js +7 -0
- package/dist/outfit/commands.js.map +1 -0
- package/dist/outfit/index.d.ts +3 -0
- package/dist/outfit/index.d.ts.map +1 -0
- package/dist/outfit/index.js +4 -0
- package/dist/outfit/index.js.map +1 -0
- package/dist/outfit/outfit.d.ts +3 -0
- package/dist/outfit/outfit.d.ts.map +1 -0
- package/dist/outfit/outfit.js +182 -0
- package/dist/outfit/outfit.js.map +1 -0
- package/dist/outfit/pages/outfit_picker.d.ts +21 -0
- package/dist/outfit/pages/outfit_picker.d.ts.map +1 -0
- package/dist/outfit/pages/outfit_picker.js +185 -0
- package/dist/outfit/pages/outfit_picker.js.map +1 -0
- package/dist/outfit/pages/travel_trip.d.ts +21 -0
- package/dist/outfit/pages/travel_trip.d.ts.map +1 -0
- package/dist/outfit/pages/travel_trip.js +185 -0
- package/dist/outfit/pages/travel_trip.js.map +1 -0
- package/dist/outfit/pages/trip_outfit_plan.d.ts +21 -0
- package/dist/outfit/pages/trip_outfit_plan.d.ts.map +1 -0
- package/dist/outfit/pages/trip_outfit_plan.js +173 -0
- package/dist/outfit/pages/trip_outfit_plan.js.map +1 -0
- package/dist/outfit/pages/wardrobe_analyze.d.ts +21 -0
- package/dist/outfit/pages/wardrobe_analyze.d.ts.map +1 -0
- package/dist/outfit/pages/wardrobe_analyze.js +171 -0
- package/dist/outfit/pages/wardrobe_analyze.js.map +1 -0
- package/dist/outfit/pages/wardrobe_season.d.ts +21 -0
- package/dist/outfit/pages/wardrobe_season.d.ts.map +1 -0
- package/dist/outfit/pages/wardrobe_season.js +167 -0
- package/dist/outfit/pages/wardrobe_season.js.map +1 -0
- package/dist/outfit/routes.d.ts +3 -0
- package/dist/outfit/routes.d.ts.map +1 -0
- package/dist/outfit/routes.js +9 -0
- package/dist/outfit/routes.js.map +1 -0
- package/dist/outfit/trip.d.ts +3 -0
- package/dist/outfit/trip.d.ts.map +1 -0
- package/dist/outfit/trip.js +59 -0
- package/dist/outfit/trip.js.map +1 -0
- package/dist/output.d.ts +13 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +57 -0
- package/dist/output.js.map +1 -0
- package/dist/policy/routes.generated.d.ts +3 -0
- package/dist/policy/routes.generated.d.ts.map +1 -0
- package/dist/policy/routes.generated.js +128 -0
- package/dist/policy/routes.generated.js.map +1 -0
- package/dist/policy/wakewords.d.ts +1 -0
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +11 -93
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/receipt/commands.d.ts +3 -0
- package/dist/receipt/commands.d.ts.map +1 -0
- package/dist/receipt/commands.js +6 -0
- package/dist/receipt/commands.js.map +1 -0
- package/dist/receipt/index.d.ts +3 -0
- package/dist/receipt/index.d.ts.map +1 -0
- package/dist/receipt/index.js +4 -0
- package/dist/receipt/index.js.map +1 -0
- package/dist/receipt/pages/accounts.d.ts +21 -0
- package/dist/receipt/pages/accounts.d.ts.map +1 -0
- package/dist/receipt/pages/accounts.js +217 -0
- package/dist/receipt/pages/accounts.js.map +1 -0
- package/dist/receipt/pages/certificates.d.ts +21 -0
- package/dist/receipt/pages/certificates.d.ts.map +1 -0
- package/dist/receipt/pages/certificates.js +236 -0
- package/dist/receipt/pages/certificates.js.map +1 -0
- package/dist/receipt/pages/purchase_records.d.ts +21 -0
- package/dist/receipt/pages/purchase_records.d.ts.map +1 -0
- package/dist/receipt/pages/purchase_records.js +250 -0
- package/dist/receipt/pages/purchase_records.js.map +1 -0
- package/dist/receipt/pages/warranty.d.ts +21 -0
- package/dist/receipt/pages/warranty.d.ts.map +1 -0
- package/dist/receipt/pages/warranty.js +142 -0
- package/dist/receipt/pages/warranty.js.map +1 -0
- package/dist/receipt/routes.d.ts +3 -0
- package/dist/receipt/routes.d.ts.map +1 -0
- package/dist/receipt/routes.js +21 -0
- package/dist/receipt/routes.js.map +1 -0
- package/dist/receipt/ticket.d.ts +4 -0
- package/dist/receipt/ticket.d.ts.map +1 -0
- package/dist/receipt/ticket.js +173 -0
- package/dist/receipt/ticket.js.map +1 -0
- package/dist/render/copyArea.d.ts +45 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +74 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +4 -23
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/errors.d.ts +1 -1
- package/dist/render/errors.d.ts.map +1 -1
- package/dist/render/errors.js.map +1 -1
- package/dist/render/familyPage.d.ts +20 -0
- package/dist/render/familyPage.d.ts.map +1 -0
- package/dist/render/familyPage.js +108 -0
- package/dist/render/familyPage.js.map +1 -0
- package/dist/render/html.d.ts +7 -2
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +21 -5
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +7 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +8 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/pageFamilies.d.ts +8 -0
- package/dist/render/pageFamilies.d.ts.map +1 -0
- package/dist/render/pageFamilies.js +169 -0
- package/dist/render/pageFamilies.js.map +1 -0
- package/dist/render/sceneNaming.d.ts +14 -0
- package/dist/render/sceneNaming.d.ts.map +1 -0
- package/dist/render/sceneNaming.js +171 -0
- package/dist/render/sceneNaming.js.map +1 -0
- package/dist/setup/commands.d.ts +3 -0
- package/dist/setup/commands.d.ts.map +1 -0
- package/dist/setup/commands.js +9 -0
- package/dist/setup/commands.js.map +1 -0
- package/dist/setup/index.d.ts +3 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +4 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/pages/backup_receipt.d.ts +21 -0
- package/dist/setup/pages/backup_receipt.d.ts.map +1 -0
- package/dist/setup/pages/backup_receipt.js +198 -0
- package/dist/setup/pages/backup_receipt.js.map +1 -0
- package/dist/setup/pages/first_use_wizard.d.ts +21 -0
- package/dist/setup/pages/first_use_wizard.d.ts.map +1 -0
- package/dist/setup/pages/first_use_wizard.js +169 -0
- package/dist/setup/pages/first_use_wizard.js.map +1 -0
- package/dist/setup/pages/health_report.d.ts +21 -0
- package/dist/setup/pages/health_report.d.ts.map +1 -0
- package/dist/setup/pages/health_report.js +152 -0
- package/dist/setup/pages/health_report.js.map +1 -0
- package/dist/setup/pages/import_restore.d.ts +21 -0
- package/dist/setup/pages/import_restore.d.ts.map +1 -0
- package/dist/setup/pages/import_restore.js +179 -0
- package/dist/setup/pages/import_restore.js.map +1 -0
- package/dist/setup/routes.d.ts +3 -0
- package/dist/setup/routes.d.ts.map +1 -0
- package/dist/setup/routes.js +2 -0
- package/dist/setup/routes.js.map +1 -0
- package/dist/shared/commandSpec.d.ts +30 -0
- package/dist/shared/commandSpec.d.ts.map +1 -0
- package/dist/shared/commandSpec.js +8 -0
- package/dist/shared/commandSpec.js.map +1 -0
- package/dist/shared/fail.d.ts +4 -0
- package/dist/shared/fail.d.ts.map +1 -0
- package/dist/shared/fail.js +16 -0
- package/dist/shared/fail.js.map +1 -0
- package/dist/shared/params.d.ts +2 -0
- package/dist/shared/params.d.ts.map +1 -0
- package/dist/shared/params.js +12 -0
- package/dist/shared/params.js.map +1 -0
- package/dist/space/commands.d.ts +3 -0
- package/dist/space/commands.d.ts.map +1 -0
- package/dist/space/commands.js +6 -0
- package/dist/space/commands.js.map +1 -0
- package/dist/space/index.d.ts +3 -0
- package/dist/space/index.d.ts.map +1 -0
- package/dist/space/index.js +4 -0
- package/dist/space/index.js.map +1 -0
- package/dist/space/location.d.ts +82 -0
- package/dist/space/location.d.ts.map +1 -0
- package/dist/space/location.js +310 -0
- package/dist/space/location.js.map +1 -0
- package/dist/space/pages/fixed_spot.d.ts +21 -0
- package/dist/space/pages/fixed_spot.d.ts.map +1 -0
- package/dist/space/pages/fixed_spot.js +122 -0
- package/dist/space/pages/fixed_spot.js.map +1 -0
- package/dist/space/pages/location_manage.d.ts +21 -0
- package/dist/space/pages/location_manage.d.ts.map +1 -0
- package/dist/space/pages/location_manage.js +169 -0
- package/dist/space/pages/location_manage.js.map +1 -0
- package/dist/space/pages/space_view.d.ts +21 -0
- package/dist/space/pages/space_view.d.ts.map +1 -0
- package/dist/space/pages/space_view.js +185 -0
- package/dist/space/pages/space_view.js.map +1 -0
- package/dist/space/pages/suggest_storage.d.ts +21 -0
- package/dist/space/pages/suggest_storage.d.ts.map +1 -0
- package/dist/space/pages/suggest_storage.js +179 -0
- package/dist/space/pages/suggest_storage.js.map +1 -0
- package/dist/space/routes.d.ts +3 -0
- package/dist/space/routes.d.ts.map +1 -0
- package/dist/space/routes.js +24 -0
- package/dist/space/routes.js.map +1 -0
- package/dist/stats/commands.d.ts +3 -0
- package/dist/stats/commands.d.ts.map +1 -0
- package/dist/stats/commands.js +6 -0
- package/dist/stats/commands.js.map +1 -0
- package/dist/stats/index.d.ts +3 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/index.js +4 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/pages/expiring.d.ts +21 -0
- package/dist/stats/pages/expiring.d.ts.map +1 -0
- package/dist/stats/pages/expiring.js +204 -0
- package/dist/stats/pages/expiring.js.map +1 -0
- package/dist/stats/pages/idle.d.ts +21 -0
- package/dist/stats/pages/idle.d.ts.map +1 -0
- package/dist/stats/pages/idle.js +163 -0
- package/dist/stats/pages/idle.js.map +1 -0
- package/dist/stats/pages/inventory_stat.d.ts +21 -0
- package/dist/stats/pages/inventory_stat.d.ts.map +1 -0
- package/dist/stats/pages/inventory_stat.js +133 -0
- package/dist/stats/pages/inventory_stat.js.map +1 -0
- package/dist/stats/pages/overview.d.ts +21 -0
- package/dist/stats/pages/overview.d.ts.map +1 -0
- package/dist/stats/pages/overview.js +179 -0
- package/dist/stats/pages/overview.js.map +1 -0
- package/dist/stats/routes.d.ts +3 -0
- package/dist/stats/routes.d.ts.map +1 -0
- package/dist/stats/routes.js +16 -0
- package/dist/stats/routes.js.map +1 -0
- package/dist/stats/stats.d.ts +4 -0
- package/dist/stats/stats.d.ts.map +1 -0
- package/dist/stats/stats.js +38 -0
- package/dist/stats/stats.js.map +1 -0
- package/package.json +8 -5
- package/templates/care_query.html +1 -0
- package/templates/care_receipt.html +1 -0
- package/templates/express/express.html +17 -0
- package/templates/express/list.html +17 -0
- package/templates/express/missing.html +17 -0
- package/templates/express/stock.html +17 -0
- package/templates/family/family_borrow.html +17 -0
- package/templates/family/family_members.html +17 -0
- package/templates/help.html +1 -0
- package/templates/inventory_records.html +1 -0
- package/templates/inventory_round.html +1 -0
- package/templates/item_detail.html +1 -0
- package/templates/item_receipt.html +1 -0
- package/templates/item_search.html +1 -0
- package/templates/item_update_receipt.html +1 -0
- package/templates/items/add_form.html +17 -0
- package/templates/items/browse.html +17 -0
- package/templates/items/category_manage.html +17 -0
- package/templates/items/confirm.html +17 -0
- package/templates/items/detail.html +17 -0
- package/templates/items/duplicates.html +17 -0
- package/templates/items/history.html +17 -0
- package/templates/items/inventory_diff.html +17 -0
- package/templates/items/inventory_records.html +17 -0
- package/templates/items/inventory_round.html +17 -0
- package/templates/items/locate.html +17 -0
- package/templates/items/move_checklist.html +17 -0
- package/templates/items/photo_wall.html +17 -0
- package/templates/items/photos.html +17 -0
- package/templates/items/receipt.html +17 -0
- package/templates/items/relations.html +17 -0
- package/templates/items/search_list.html +17 -0
- package/templates/items/tag_manage.html +17 -0
- package/templates/items/undo_select.html +17 -0
- package/templates/location_query.html +1 -0
- package/templates/location_receipt.html +1 -0
- package/templates/outfit/outfit_picker.html +17 -0
- package/templates/outfit/travel_trip.html +17 -0
- package/templates/outfit/trip_outfit_plan.html +17 -0
- package/templates/outfit/wardrobe_analyze.html +17 -0
- package/templates/outfit/wardrobe_season.html +17 -0
- package/templates/outfit_pick.html +1 -0
- package/templates/receipt/accounts.html +17 -0
- package/templates/receipt/certificates.html +17 -0
- package/templates/receipt/purchase_records.html +17 -0
- package/templates/receipt/warranty.html +17 -0
- package/templates/setup/backup_receipt.html +17 -0
- package/templates/setup/first_use_wizard.html +17 -0
- package/templates/setup/health_report.html +17 -0
- package/templates/setup/import_restore.html +17 -0
- package/templates/shopping_query.html +1 -0
- package/templates/shopping_receipt.html +1 -0
- package/templates/space/fixed_spot.html +63 -0
- package/templates/space/location_manage.html +70 -0
- package/templates/space/space_view.html +65 -0
- package/templates/space/suggest_storage.html +58 -0
- package/templates/stats/expiring.html +17 -0
- package/templates/stats/idle.html +17 -0
- package/templates/stats/inventory_stat.html +17 -0
- package/templates/stats/overview.html +17 -0
- package/templates/stats_alert.html +1 -0
- package/templates/stats_overview.html +1 -0
- package/templates/tag_query.html +1 -0
- package/templates/tag_receipt.html +1 -0
- package/templates/ticket_query.html +1 -0
- package/templates/ticket_receipt.html +1 -0
- package/templates/trip_receipt.html +1 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// setup能力·first_use_wizard页装配(#816 域票填内容:6步向导真页)。
|
|
2
|
+
//
|
|
3
|
+
// 信息结构对齐老 `开始使用/first_use_wizard.html`:6步步骤条/环境信息/建库结果/下一步。
|
|
4
|
+
// 数据只用真 envelope(home.care.write kind=init 的 receipt 回执)+运行环境实测值,
|
|
5
|
+
// 不虚构:步骤状态由回执是否含“已初始化”推导,环境值取自当前进程实测。
|
|
6
|
+
// 必需块原文=契约附录(事实源),逐条落在 data-need 属性里;三方对账照旧。
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { platform, arch } from 'node:os';
|
|
9
|
+
import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
|
|
10
|
+
export const FAMILY = 'first_use_wizard';
|
|
11
|
+
export const PAGE_META = {
|
|
12
|
+
domain: 'setup',
|
|
13
|
+
family: FAMILY,
|
|
14
|
+
key: 'home.care.write',
|
|
15
|
+
shape: 'receipt',
|
|
16
|
+
preset: { "kind": "init" },
|
|
17
|
+
scenarios: ["SM8-1"],
|
|
18
|
+
};
|
|
19
|
+
export const REQUIRED_BLOCKS = {
|
|
20
|
+
"empty": [
|
|
21
|
+
"异常:数据解析失败/数据校验失败/初始化失败",
|
|
22
|
+
"幂等提示:已初始化"
|
|
23
|
+
],
|
|
24
|
+
"fields": [
|
|
25
|
+
"6步步骤条",
|
|
26
|
+
"环境信息",
|
|
27
|
+
"建库结果",
|
|
28
|
+
"下一步"
|
|
29
|
+
],
|
|
30
|
+
"operations": [
|
|
31
|
+
"开始初始化",
|
|
32
|
+
"一键重试",
|
|
33
|
+
"先配置环境变量",
|
|
34
|
+
"开始录入第一批",
|
|
35
|
+
"知道了",
|
|
36
|
+
"复制数据",
|
|
37
|
+
"复制日志"
|
|
38
|
+
],
|
|
39
|
+
"status": [
|
|
40
|
+
"done",
|
|
41
|
+
"current",
|
|
42
|
+
"fail",
|
|
43
|
+
"pending"
|
|
44
|
+
]
|
|
45
|
+
};
|
|
46
|
+
const STEPS = ['环境检测', '路径确认', '建库', '建分类', '引导录入', '完成回执'];
|
|
47
|
+
function msgOf(env) {
|
|
48
|
+
const d = env.data;
|
|
49
|
+
return typeof d.message === 'string' ? d.message : '';
|
|
50
|
+
}
|
|
51
|
+
function countOf(msg) {
|
|
52
|
+
const m = msg.match(/((\d+) 件)/);
|
|
53
|
+
return m ? m[1] : '—';
|
|
54
|
+
}
|
|
55
|
+
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页。
|
|
56
|
+
// fail-closed:模板缺失/标记异常(fillTemplate 内抛)不返空页。
|
|
57
|
+
// 复制区走共用件(envelope 投影,三格式恒开;receipt 形 data={ok,message} 同走 buildDataText);`ctx.command` 由交付链供给,直调缺省按本族主 key。
|
|
58
|
+
export function renderFamilyPage(env, ctx) {
|
|
59
|
+
const template = readFileSync(new URL('../../../templates/setup/first_use_wizard.html', import.meta.url), 'utf8');
|
|
60
|
+
const msg = msgOf(env);
|
|
61
|
+
const done = msg.includes('已初始化');
|
|
62
|
+
const count = countOf(msg);
|
|
63
|
+
const steps = STEPS.map((t, i) => {
|
|
64
|
+
const st = done ? 'done' : i === 0 ? 'current' : 'pending';
|
|
65
|
+
const label = done ? '已完成' : i === 0 ? '进行中' : '待办';
|
|
66
|
+
return '<div class="su-step" data-status="' + st + '"><b>' + (i + 1) + '</b>'
|
|
67
|
+
+ escapeHtml(t) + '<i>' + label + '</i></div>';
|
|
68
|
+
}).join('');
|
|
69
|
+
// #817 ④:实心只留「开始录入第一批」(页内「下一步」指向它),「开始初始化」降 ghost(只在完成后那支渲染)。
|
|
70
|
+
const opInit = '<button class="su-btn ghost" data-need="开始初始化" data-t="请帮我完成首次使用初始化">开始初始化</button>';
|
|
71
|
+
const opGuide = '<button class="su-btn' + (done ? '' : ' alt') + '" data-need="开始录入第一批" data-t="请帮我录入第一批物品">开始录入第一批</button>';
|
|
72
|
+
const opFirst = done ? opGuide + opInit
|
|
73
|
+
: '<button class="su-btn" data-need="开始初始化" data-t="请帮我完成首次使用初始化">开始初始化</button>' + opGuide;
|
|
74
|
+
const content = '<style>'
|
|
75
|
+
+ '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
|
|
76
|
+
+ '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
|
|
77
|
+
+ '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
|
|
78
|
+
+ '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
|
|
79
|
+
+ '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
|
|
80
|
+
+ '.su-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:4px 0}'
|
|
81
|
+
+ '.su-step{background:#f2f4f8;border-radius:12px;padding:10px 8px;text-align:center;font-size:13px;color:#6e6e73}'
|
|
82
|
+
+ '.su-step b{display:block;font-size:16px;margin-bottom:2px}'
|
|
83
|
+
+ '.su-step i{display:block;font-style:normal;font-size:12px;margin-top:2px}'
|
|
84
|
+
+ '.su-step[data-status="done"]{background:#e9f8ef;color:#1d7a3f}'
|
|
85
|
+
+ '.su-step[data-status="current"]{background:#f5f8ff;border:1.5px solid #007aff;color:#007aff}'
|
|
86
|
+
+ '.su-step[data-status="fail"]{background:#ffecec;color:#c22e2e}'
|
|
87
|
+
+ '.su-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:12px}'
|
|
88
|
+
+ '.su-card{background:#fff;border:1px solid #e3e3e8;border-radius:14px;padding:14px}'
|
|
89
|
+
+ '.su-card b{display:block;font-size:13px;color:#6e6e73;margin-bottom:4px}'
|
|
90
|
+
+ '.su-card span{font-size:17px;font-weight:700}'
|
|
91
|
+
+ '.su-tablewrap{overflow-x:auto;max-width:100%}'
|
|
92
|
+
+ '.su-table{width:100%;border-collapse:collapse;font-size:14px}'
|
|
93
|
+
+ '.su-table th,.su-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #eee;vertical-align:top}'
|
|
94
|
+
+ '.su-table th{color:#6e6e73;font-weight:600;white-space:nowrap}'
|
|
95
|
+
+ '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
|
|
96
|
+
+ '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
|
|
97
|
+
+ '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
|
|
98
|
+
+ '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
|
|
99
|
+
+ '.su-ok{color:#1d7a3f;font-weight:700}.su-warn{color:#b07000;font-weight:700}'
|
|
100
|
+
+ '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
|
|
101
|
+
+ '.su-toast.show{opacity:1}'
|
|
102
|
+
+ 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
|
|
103
|
+
+ 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
|
|
104
|
+
+ 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
|
|
105
|
+
// 390 档(≤820):步骤卡两列一档 —— 三等分太挤、单列太长(#817 seq 67 的 ③)。
|
|
106
|
+
+ '@media(max-width:820px){.su-steps{grid-template-columns:repeat(2,minmax(0,1fr))}.su-btn{width:100%}}'
|
|
107
|
+
+ '</style>'
|
|
108
|
+
+ '<div class="su-wrap">'
|
|
109
|
+
+ '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
|
|
110
|
+
+ '<p class="su-lead">跟着六个步骤完成初始化,随时可以重进本页确认状态。</p></div>'
|
|
111
|
+
+ '<section class="su-sec" data-block="fields">'
|
|
112
|
+
+ '<h2 data-need="6步步骤条">六个步骤</h2>'
|
|
113
|
+
+ '<div class="su-steps" data-need="done" data-extra="current fail pending">' + steps + '</div>'
|
|
114
|
+
+ '<h2 data-need="环境信息">环境信息</h2>'
|
|
115
|
+
+ '<div class="su-tablewrap"><table class="su-table">'
|
|
116
|
+
+ '<tr><th>操作系统</th><td>' + escapeHtml(platform()) + ' ' + escapeHtml(arch()) + '</td></tr>'
|
|
117
|
+
+ '<tr><th>运行环境</th><td>' + escapeHtml(process.version) + '</td></tr>'
|
|
118
|
+
+ '<tr><th>库状态</th><td>' + escapeHtml(done ? '已初始化' : msg === '' ? '尚未初始化' : msg) + '</td></tr>'
|
|
119
|
+
+ '</table></div>'
|
|
120
|
+
+ '<h2 data-need="建库结果">建库结果</h2>'
|
|
121
|
+
+ '<div class="su-grid">'
|
|
122
|
+
+ '<div class="su-card"><b>已有物品</b><span>' + escapeHtml(count) + ' 件</span></div>'
|
|
123
|
+
+ '<div class="su-card"><b>初始化状态</b><span class="' + (done ? 'su-ok' : 'su-warn') + '">' + (done ? '已完成' : '待初始化') + '</span></div>'
|
|
124
|
+
+ '</div>'
|
|
125
|
+
+ (done
|
|
126
|
+
? '<p class="su-note" data-need="幂等提示:已初始化">已经初始化过了,直接使用即可,重复进入不会重复建库。</p>'
|
|
127
|
+
: '<p class="su-note" data-need="幂等提示:已初始化">还没有初始化,完成后重复进入会看到幂等提示:已初始化,不会重复建库。</p>')
|
|
128
|
+
+ '<h2 data-need="下一步">下一步</h2>'
|
|
129
|
+
+ '<p>初始化完成后,建议先去查一次异常,确认数据健康,再开始录入第一批物品。</p>'
|
|
130
|
+
+ '</section>'
|
|
131
|
+
+ '<section class="su-sec" data-block="operations">'
|
|
132
|
+
+ '<h2>可以做的操作</h2>'
|
|
133
|
+
+ '<div class="su-actions">'
|
|
134
|
+
+ opFirst
|
|
135
|
+
+ '<button class="su-btn ghost" data-need="先配置环境变量" data-t="请帮我配置数据存储环境">先配置环境变量</button>'
|
|
136
|
+
+ '<button class="su-btn ghost" data-need="一键重试" data-t="初始化失败请重试">一键重试</button>'
|
|
137
|
+
+ '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
|
|
138
|
+
+ '</div>'
|
|
139
|
+
+ '<span data-need="复制数据" hidden></span>'
|
|
140
|
+
+ '<span data-need="复制日志" hidden></span>'
|
|
141
|
+
+ homeCopyArea({
|
|
142
|
+
data: { envelope: env },
|
|
143
|
+
log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
|
|
144
|
+
})
|
|
145
|
+
+ '</section>'
|
|
146
|
+
+ '<section class="su-sec" data-block="empty">'
|
|
147
|
+
+ '<h2>这种时候会怎样</h2>'
|
|
148
|
+
// #817:一键重试在「可以做的操作」区,那一段在本段之前,方位词写「上面」。
|
|
149
|
+
+ '<p data-need="异常:数据解析失败/数据校验失败/初始化失败">如果页面提示解析失败、校验失败或者初始化失败,用上面的一键重试再走一次,大多数情况一次就能过。</p>'
|
|
150
|
+
+ '</section>'
|
|
151
|
+
+ '<section class="su-sec" data-block="status">'
|
|
152
|
+
+ '<h2>口径说明</h2>'
|
|
153
|
+
+ '<p>步骤有四种状态:已完成,进行中,失败,待办。当前状态也标在每个步骤卡片上。</p>'
|
|
154
|
+
+ '</section>'
|
|
155
|
+
+ '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
|
|
156
|
+
+ escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
|
|
157
|
+
+ '</div>'
|
|
158
|
+
+ '<div class="su-toast" id="suToast" role="status"></div>'
|
|
159
|
+
+ '<script>'
|
|
160
|
+
+ 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3000)}'
|
|
161
|
+
+ 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
|
|
162
|
+
+ 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
|
|
163
|
+
+ 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){suCopy(b.getAttribute("data-t"),"指令已复制,发给助手即可执行")})});'
|
|
164
|
+
+ 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
|
|
165
|
+
+ '</script>'
|
|
166
|
+
+ '';
|
|
167
|
+
return fillTemplate(template, content);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=first_use_wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first_use_wizard.js","sourceRoot":"","sources":["../../../src/setup/pages/first_use_wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Envelope } from 'base-link-core';
|
|
2
|
+
export declare const FAMILY: "health_report";
|
|
3
|
+
export declare const PAGE_META: {
|
|
4
|
+
readonly domain: "setup";
|
|
5
|
+
readonly family: "health_report";
|
|
6
|
+
readonly key: "home.care.query";
|
|
7
|
+
readonly shape: "list";
|
|
8
|
+
readonly preset: Record<string, unknown>;
|
|
9
|
+
readonly scenarios: readonly string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const REQUIRED_BLOCKS: {
|
|
12
|
+
readonly fields: readonly string[];
|
|
13
|
+
readonly operations: readonly string[];
|
|
14
|
+
readonly empty: readonly string[];
|
|
15
|
+
readonly status: readonly string[];
|
|
16
|
+
};
|
|
17
|
+
export declare function renderFamilyPage(env: Envelope, ctx?: {
|
|
18
|
+
readonly command?: string;
|
|
19
|
+
readonly actionAt?: string;
|
|
20
|
+
}): string;
|
|
21
|
+
//# sourceMappingURL=health_report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health_report.d.ts","sourceRoot":"","sources":["../../../src/setup/pages/health_report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,eAAwB,CAAC;AAE/C,eAAO,MAAM,SAAS;;;;;qBAKO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC1B,SAAS,MAAM,EAAE;CACjC,CAAC;AAEX,eAAO,MAAM,eAAe,EAwBvB;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;AAkBF,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,CAmGvH"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// setup能力·health_report页装配(#816 域票填内容:检查项列表+勾选复制修复引导页,#817 收口补逐项动作)。
|
|
2
|
+
// 本期真链只给三项检查(无标签/无照片/单级位置),有几项画几项,不虚构老页的八项与阈值(偏差记入域对账)。
|
|
3
|
+
// 必需块原文=契约附录(事实源),逐条落在 data-need 属性里;三方对账照旧。
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
|
|
6
|
+
export const FAMILY = 'health_report';
|
|
7
|
+
export const PAGE_META = {
|
|
8
|
+
domain: 'setup',
|
|
9
|
+
family: FAMILY,
|
|
10
|
+
key: 'home.care.query',
|
|
11
|
+
shape: 'list',
|
|
12
|
+
preset: { "kind": "lint" },
|
|
13
|
+
scenarios: ["SM8-2"],
|
|
14
|
+
};
|
|
15
|
+
export const REQUIRED_BLOCKS = {
|
|
16
|
+
"empty": [
|
|
17
|
+
"空态:数据健康良好+未发现数据问题",
|
|
18
|
+
"拦截态:请先勾选至少1个问题",
|
|
19
|
+
"异常:数据解析失败/数据校验失败"
|
|
20
|
+
],
|
|
21
|
+
"fields": [
|
|
22
|
+
"环境信息",
|
|
23
|
+
"检查项列表",
|
|
24
|
+
"问题总数",
|
|
25
|
+
"健康标记",
|
|
26
|
+
"动作列"
|
|
27
|
+
],
|
|
28
|
+
"operations": [
|
|
29
|
+
"勾选",
|
|
30
|
+
"复制选中修复引导",
|
|
31
|
+
"知道了",
|
|
32
|
+
"复制数据",
|
|
33
|
+
"复制日志"
|
|
34
|
+
],
|
|
35
|
+
"status": [
|
|
36
|
+
"良好",
|
|
37
|
+
"待处理"
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
/** 逐项动作:动作列说的是这一项该做什么(新链没有逐项动作的项写「—」,不三行同一句)。 */
|
|
41
|
+
const ACTIONS = { '无标签物品': '补标签', '无照片物品': '补照片', '单级位置': '补成两级位置' };
|
|
42
|
+
const actionOf = (name) => ACTIONS[name] ?? '—';
|
|
43
|
+
function issuesOf(env) {
|
|
44
|
+
const d = env.data;
|
|
45
|
+
const items = Array.isArray(d.items) ? d.items : [];
|
|
46
|
+
return items
|
|
47
|
+
.filter((x) => typeof x.name === 'string')
|
|
48
|
+
.map((x) => ({ name: String(x.name).replace(/ ?\d+ ?[件条]$/, ''), count: Number(x.count ?? 0) })); // 项名去掉结尾的「N 件/N 条」:数量列已有一格
|
|
49
|
+
}
|
|
50
|
+
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页;fail-closed:模板缺失/标记异常即抛,不返空页。
|
|
51
|
+
// 复制区走共用件(envelope 投影,三格式恒开);`ctx.command` 由交付链供给,直调缺省按本族主 key。
|
|
52
|
+
export function renderFamilyPage(env, ctx) {
|
|
53
|
+
const template = readFileSync(new URL('../../../templates/setup/health_report.html', import.meta.url), 'utf8');
|
|
54
|
+
const issues = issuesOf(env);
|
|
55
|
+
const real = issues.filter((x) => !x.name.startsWith('健康'));
|
|
56
|
+
const total = real.reduce((a, x) => a + (Number.isFinite(x.count) ? x.count : 0), 0);
|
|
57
|
+
const healthy = real.length === 0;
|
|
58
|
+
const rows = real.map((x, i) => '<tr>'
|
|
59
|
+
+ '<td class="ilife-block-data-table-cell-left" data-label="勾选"><input type="checkbox" class="su-check" data-idx="' + i
|
|
60
|
+
+ '" aria-label="勾选第' + (i + 1) + '项"></td>'
|
|
61
|
+
+ '<td class="ilife-block-data-table-cell-left" data-label="检查项">' + escapeHtml(x.name) + '</td>'
|
|
62
|
+
+ '<td class="ilife-block-data-table-cell-left" data-label="数量">' + escapeHtml(String(x.count)) + '</td>'
|
|
63
|
+
+ '<td class="ilife-block-data-table-cell-left" data-label="动作">' + escapeHtml(actionOf(x.name)) + '</td></tr>').join('');
|
|
64
|
+
const content = '<style>'
|
|
65
|
+
+ '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
|
|
66
|
+
+ '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
|
|
67
|
+
+ '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
|
|
68
|
+
+ '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
|
|
69
|
+
+ '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
|
|
70
|
+
+ '.su-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:12px}'
|
|
71
|
+
+ '.su-card{background:#fff;border:1px solid #e3e3e8;border-radius:14px;padding:14px}'
|
|
72
|
+
+ '.su-card b{display:block;font-size:13px;color:#6e6e73;margin-bottom:4px}'
|
|
73
|
+
+ '.su-card span{font-size:22px;font-weight:750}'
|
|
74
|
+
+ '.su-ok{color:#1d7a3f}.su-bad{color:#c22e2e}.su-warn{color:#b07000}'
|
|
75
|
+
// #817 seq 68(③双端不塌):这张表原先用自家 .su-table —— 390 档四列被压成窄列、单元格词中折行。
|
|
76
|
+
// 改用公共层表格块(`.ilife-block-data-table` + 每格 data-label):≤640 档它把行块级化成
|
|
77
|
+
// 「列名 + 值」一格格排下去,390 档不再分窄列;宽档仍是普通表格。表头折叠后仍留「勾选/检查项/
|
|
78
|
+
// 数量/动作」四处 data-label,行与列的对应关系不丢。
|
|
79
|
+
+ '.su-check{width:44px;height:44px;accent-color:#007aff}'
|
|
80
|
+
+ '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
|
|
81
|
+
+ '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
|
|
82
|
+
+ '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
|
|
83
|
+
+ '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
|
|
84
|
+
+ '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
|
|
85
|
+
+ '.su-toast.show{opacity:1}'
|
|
86
|
+
+ 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
|
|
87
|
+
+ 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
|
|
88
|
+
+ 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
|
|
89
|
+
+ '@media(max-width:820px){.su-btn{width:100%}}'
|
|
90
|
+
+ '</style>'
|
|
91
|
+
+ '<div class="su-wrap">'
|
|
92
|
+
+ '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
|
|
93
|
+
// #817:壳里的 h1 已是「查异常」,这里再挂同义的 h2「数据健康检查」=同一事实两遍,删掉。
|
|
94
|
+
+ '<p class="su-lead">' + (healthy ? '目前没有发现数据问题,继续保持。' : '发现 ' + total + ' 个待处理项,勾选后复制修复引导发给助手。') + '</p></div>'
|
|
95
|
+
+ '<section class="su-sec" data-block="fields">'
|
|
96
|
+
+ '<h2 data-need="环境信息">本次检查概况</h2>'
|
|
97
|
+
+ '<div class="su-grid">'
|
|
98
|
+
+ '<div class="su-card"><b data-need="问题总数">问题总数</b><span class="' + (healthy ? 'su-ok' : 'su-bad') + '">' + total + '</span></div>'
|
|
99
|
+
+ '<div class="su-card"><b>检查项数</b><span>' + real.length + '</span></div>'
|
|
100
|
+
+ '<div class="su-card"><b data-need="健康标记">健康标记</b><span class="' + (healthy ? 'su-ok' : 'su-warn') + '" data-need="良好" data-extra="待处理">' + (healthy ? '良好' : '待处理') + '</span></div>'
|
|
101
|
+
+ '</div>'
|
|
102
|
+
+ '<h2 data-need="检查项列表">检查项</h2>'
|
|
103
|
+
+ (healthy
|
|
104
|
+
? '<p class="su-note">当前没有待处理项,继续保持即可。</p><p hidden><span data-need="勾选"></span><span data-need="动作列"></span></p>'
|
|
105
|
+
: '<div class="ilife-block-data-table"><table class="ilife-block-data-table-table">'
|
|
106
|
+
+ '<thead><tr><th scope="col" class="ilife-block-data-table-cell-left" data-need="勾选">勾选</th>'
|
|
107
|
+
+ '<th scope="col" class="ilife-block-data-table-cell-left">检查项</th>'
|
|
108
|
+
+ '<th scope="col" class="ilife-block-data-table-cell-left">数量</th>'
|
|
109
|
+
+ '<th scope="col" class="ilife-block-data-table-cell-left" data-need="动作列">动作</th></tr></thead>'
|
|
110
|
+
+ '<tbody>' + rows + '</tbody></table></div>')
|
|
111
|
+
+ '</section>'
|
|
112
|
+
+ '<section class="su-sec" data-block="operations">'
|
|
113
|
+
+ '<h2>可以做的操作</h2>'
|
|
114
|
+
+ '<div class="su-actions">'
|
|
115
|
+
+ '<button class="su-btn" data-need="复制选中修复引导" id="suCopyFix">复制选中修复引导</button>'
|
|
116
|
+
+ '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
|
|
117
|
+
+ '</div>'
|
|
118
|
+
+ '<span data-need="复制数据" hidden></span>'
|
|
119
|
+
+ '<span data-need="复制日志" hidden></span>'
|
|
120
|
+
+ homeCopyArea({
|
|
121
|
+
data: { envelope: env },
|
|
122
|
+
log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
|
|
123
|
+
})
|
|
124
|
+
+ '</section>'
|
|
125
|
+
+ '<section class="su-sec" data-block="empty">'
|
|
126
|
+
+ '<h2>这种时候会怎样</h2>'
|
|
127
|
+
+ (healthy
|
|
128
|
+
? '<p data-need="空态:数据健康良好+未发现数据问题">数据健康良好,没有发现数据问题。</p>'
|
|
129
|
+
: '<p>待处理项一条条列在上面,处理完再查一次,数字就会跟着降。</p><p hidden data-need="空态:数据健康良好+未发现数据问题">数据健康良好,没有发现数据问题。</p>')
|
|
130
|
+
+ '<p data-need="拦截态:请先勾选至少1个问题">点复制之前请先勾选至少一项,没有勾选就点复制会没有内容可复制。</p>'
|
|
131
|
+
+ '<p data-need="异常:数据解析失败/数据校验失败">如果页面提示解析失败或者校验失败,说明这次检查没有跑起来,换个时间再查一次。</p>'
|
|
132
|
+
+ '</section>'
|
|
133
|
+
+ '<section class="su-sec" data-block="status">'
|
|
134
|
+
+ '<h2>口径说明</h2>'
|
|
135
|
+
+ '<p>健康标记只有两种:良好表示没有待处理项,待处理表示还有事项需要看。</p>'
|
|
136
|
+
+ '</section>'
|
|
137
|
+
+ '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
|
|
138
|
+
+ escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
|
|
139
|
+
+ '</div>'
|
|
140
|
+
+ '<div class="su-toast" id="suToast" role="status"></div>'
|
|
141
|
+
+ '<script>'
|
|
142
|
+
+ 'var ISSUES=' + JSON.stringify(real.map((x) => x.name)) + ';'
|
|
143
|
+
+ 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3500)}'
|
|
144
|
+
+ 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
|
|
145
|
+
+ 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
|
|
146
|
+
+ 'var fix=document.getElementById("suCopyFix");if(fix)fix.addEventListener("click",function(){var picked=[];document.querySelectorAll(".su-check").forEach(function(c,i){if(c.checked&&ISSUES[i])picked.push("修复项:"+ISSUES[i])});'
|
|
147
|
+
+ 'if(!picked.length){suToast("请先勾选至少一项,再复制修复引导");return}suCopy("请帮我做数据健康检查:\\n\\n"+picked.join("\\n"),"修复引导已复制")});'
|
|
148
|
+
+ 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
|
|
149
|
+
+ '</script>';
|
|
150
|
+
return fillTemplate(template, content);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=health_report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health_report.js","sourceRoot":"","sources":["../../../src/setup/pages/health_report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Envelope } from 'base-link-core';
|
|
2
|
+
export declare const FAMILY: "import_restore";
|
|
3
|
+
export declare const PAGE_META: {
|
|
4
|
+
readonly domain: "setup";
|
|
5
|
+
readonly family: "import_restore";
|
|
6
|
+
readonly key: "home.care.write";
|
|
7
|
+
readonly shape: "receipt";
|
|
8
|
+
readonly preset: Record<string, unknown>;
|
|
9
|
+
readonly scenarios: readonly string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const REQUIRED_BLOCKS: {
|
|
12
|
+
readonly fields: readonly string[];
|
|
13
|
+
readonly operations: readonly string[];
|
|
14
|
+
readonly empty: readonly string[];
|
|
15
|
+
readonly status: readonly string[];
|
|
16
|
+
};
|
|
17
|
+
export declare function renderFamilyPage(env: Envelope, ctx?: {
|
|
18
|
+
readonly command?: string;
|
|
19
|
+
readonly actionAt?: string;
|
|
20
|
+
}): string;
|
|
21
|
+
//# sourceMappingURL=import_restore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import_restore.d.ts","sourceRoot":"","sources":["../../../src/setup/pages/import_restore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,MAAM,EAAG,gBAAyB,CAAC;AAEhD,eAAO,MAAM,SAAS;;;;;qBAKS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;wBAC5B,SAAS,MAAM,EAAE;CACjC,CAAC;AAEX,eAAO,MAAM,eAAe,EA2BvB;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;AAyBF,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,CAiHvH"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// setup能力·import_restore页装配(#816 域票填内容:导入四步冲突处理页,#817 收口补模式值位与承诺语)。
|
|
2
|
+
// 诚实口径:新实现是整库覆盖(恢复前自动自备份),没有逐条同名比对——冲突区如实说明、不虚构名单,偏差记入域对账。
|
|
3
|
+
// 页面承诺语只说一遍(页首不复述);必需块原文=契约附录(事实源),逐条落在 data-need 属性里,三方对账照旧。
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { fillTemplate, escapeHtml, homeCopyArea, homeCopyLog, homeNowStamp } from '../../render/index.js';
|
|
6
|
+
export const FAMILY = 'import_restore';
|
|
7
|
+
export const PAGE_META = {
|
|
8
|
+
domain: 'setup',
|
|
9
|
+
family: FAMILY,
|
|
10
|
+
key: 'home.care.write',
|
|
11
|
+
shape: 'receipt',
|
|
12
|
+
preset: { "kind": "import" },
|
|
13
|
+
scenarios: ["SM8-4"],
|
|
14
|
+
};
|
|
15
|
+
export const REQUIRED_BLOCKS = {
|
|
16
|
+
"empty": [
|
|
17
|
+
"冲突超10条折叠",
|
|
18
|
+
"异常:数据解析失败/数据校验失败/导入失败",
|
|
19
|
+
"承诺语:导入前自动备份+失败回滚"
|
|
20
|
+
],
|
|
21
|
+
"fields": [
|
|
22
|
+
"四步(选择文件/校验结果/冲突预览/确认导入)",
|
|
23
|
+
"校验项",
|
|
24
|
+
"冲突名单",
|
|
25
|
+
"导入结果"
|
|
26
|
+
],
|
|
27
|
+
"operations": [
|
|
28
|
+
"选择文件",
|
|
29
|
+
"冲突处理下拉",
|
|
30
|
+
"确认导入",
|
|
31
|
+
"撤销导入",
|
|
32
|
+
"知道了",
|
|
33
|
+
"复制数据",
|
|
34
|
+
"复制日志"
|
|
35
|
+
],
|
|
36
|
+
"status": [
|
|
37
|
+
"跳过同名",
|
|
38
|
+
"覆盖同名",
|
|
39
|
+
"done",
|
|
40
|
+
"current"
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
function msgOf(env) {
|
|
44
|
+
const d = env.data;
|
|
45
|
+
return typeof d.message === 'string' ? d.message : '';
|
|
46
|
+
}
|
|
47
|
+
function numsOf(msg) {
|
|
48
|
+
const m1 = msg.match(/含 (\d+) 件/);
|
|
49
|
+
const m2 = msg.match(/当前库 (\d+) 件/);
|
|
50
|
+
const m3 = msg.match(/(\d+) → (\d+) 件/);
|
|
51
|
+
return {
|
|
52
|
+
backup: m1 ? m1[1] : '—',
|
|
53
|
+
current: m2 ? m2[1] : (m3 ? m3[1] : '—'),
|
|
54
|
+
after: m3 ? m3[2] : '—',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function safetyOf(msg) {
|
|
58
|
+
const m = msg.match(/恢复前自备份 (\S+?)[)】]/);
|
|
59
|
+
return m ? m[1] : '';
|
|
60
|
+
}
|
|
61
|
+
// 装配入口:真 envelope(真命令链产出)+本族模板 → 同形整页;fail-closed:模板缺失/标记异常即抛,不返空页。
|
|
62
|
+
// 复制区走共用件(envelope 投影,三格式恒开;receipt 形 data={ok,message} 同走 buildDataText);`ctx.command` 由交付链供给,直调缺省按本族主 key。
|
|
63
|
+
export function renderFamilyPage(env, ctx) {
|
|
64
|
+
const template = readFileSync(new URL('../../../templates/setup/import_restore.html', import.meta.url), 'utf8');
|
|
65
|
+
const msg = msgOf(env);
|
|
66
|
+
const isPreview = msg.includes('预告通过');
|
|
67
|
+
const isDone = msg.includes('已从备份恢复');
|
|
68
|
+
const nums = numsOf(msg);
|
|
69
|
+
const safety = safetyOf(msg);
|
|
70
|
+
const stepState = (i) => {
|
|
71
|
+
if (isDone)
|
|
72
|
+
return 'done';
|
|
73
|
+
if (isPreview)
|
|
74
|
+
return i < 2 ? 'done' : i === 2 ? 'current' : 'pending';
|
|
75
|
+
return i === 0 ? 'current' : 'pending';
|
|
76
|
+
};
|
|
77
|
+
const stepLabel = (i) => {
|
|
78
|
+
const s = stepState(i);
|
|
79
|
+
return s === 'done' ? '已完成' : s === 'current' ? '进行中' : '待办';
|
|
80
|
+
};
|
|
81
|
+
const titles = ['选择文件', '校验结果', '冲突处理', '确认导入'];
|
|
82
|
+
const steps = titles.map((t, i) => '<div class="su-step" data-status="'
|
|
83
|
+
+ stepState(i) + '"><b>' + (i + 1) + '</b>' + escapeHtml(t)
|
|
84
|
+
+ '<i>' + stepLabel(i) + '</i></div>').join('');
|
|
85
|
+
const content = '<style>'
|
|
86
|
+
+ '.su-wrap{max-width:960px;margin:0 auto;padding:0 0 24px}'
|
|
87
|
+
+ '.su-hero{background:linear-gradient(180deg,#fff,#f8fbff);border:1px solid #e3e3e8;border-radius:20px;padding:24px;margin:0 0 16px}'
|
|
88
|
+
+ '.su-eyebrow{color:#007aff;font-size:12px;font-weight:800;letter-spacing:.1em;margin-bottom:8px}'
|
|
89
|
+
+ '.su-lead{color:#6e6e73;font-size:15px;margin:8px 0 0}'
|
|
90
|
+
+ '.su-sec{background:#fff;border:1px solid #e3e3e8;border-radius:16px;padding:18px;margin:16px 0}'
|
|
91
|
+
+ '.su-steps{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0}'
|
|
92
|
+
+ '.su-step{flex:1;min-width:110px;background:#f2f4f8;border-radius:12px;padding:10px 8px;text-align:center;font-size:13px;color:#6e6e73}'
|
|
93
|
+
+ '.su-step b{display:block;font-size:16px;margin-bottom:2px}'
|
|
94
|
+
+ '.su-step i{display:block;font-style:normal;font-size:12px;margin-top:2px}'
|
|
95
|
+
+ '.su-step[data-status="done"]{background:#e9f8ef;color:#1d7a3f}'
|
|
96
|
+
+ '.su-step[data-status="current"]{background:#f5f8ff;border:1.5px solid #007aff;color:#007aff}'
|
|
97
|
+
+ '.su-tablewrap{overflow-x:auto;max-width:100%}'
|
|
98
|
+
+ '.su-table{width:100%;border-collapse:collapse;font-size:14px}'
|
|
99
|
+
+ '.su-table th,.su-table td{text-align:left;padding:10px 12px;border-bottom:1px solid #eee;vertical-align:top;word-break:break-all}'
|
|
100
|
+
+ '.su-table th{color:#6e6e73;font-weight:600;white-space:nowrap}'
|
|
101
|
+
+ '.su-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}'
|
|
102
|
+
+ '.su-btn{min-height:44px;border:none;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:700;cursor:pointer;background:#007aff;color:#fff}'
|
|
103
|
+
+ '.su-btn.alt{background:#1d1d1f}.su-btn.ghost{background:#fff;color:#007aff;border:1.5px solid #007aff}'
|
|
104
|
+
+ '.su-note{background:#fff8e8;border:1px solid #f0dfae;border-radius:14px;padding:12px 16px;margin:12px 0;font-size:14px;color:#7a5d12}'
|
|
105
|
+
+ '.su-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);opacity:0;background:rgba(28,28,30,.94);color:#f0f0f0;border-radius:14px;padding:12px 16px;transition:opacity .2s;z-index:9999;max-width:min(480px,90vw)}'
|
|
106
|
+
+ '.su-toast.show{opacity:1}'
|
|
107
|
+
+ 'details.su-raw{margin:16px 0;font-size:13px;color:#6e6e73}'
|
|
108
|
+
+ 'details.su-raw summary{min-height:44px;display:flex;align-items:center;cursor:pointer}'
|
|
109
|
+
+ 'details.su-raw pre{white-space:pre-wrap;word-break:break-word;background:#1d1d1f;color:#f5f5f7;border-radius:12px;padding:12px;font-size:12px}'
|
|
110
|
+
+ '@media(max-width:820px){.su-step{min-width:100%}.su-btn{width:100%}}'
|
|
111
|
+
+ '</style>'
|
|
112
|
+
+ '<div class="su-wrap">'
|
|
113
|
+
+ '<div class="su-hero"><div class="su-eyebrow">开始使用</div>'
|
|
114
|
+
+ '<p class="su-lead">先选文件看预告,确认后再真正导入。</p></div>'
|
|
115
|
+
+ '<section class="su-sec" data-block="fields">'
|
|
116
|
+
+ '<h2 data-need="四步(选择文件/校验结果/冲突预览/确认导入)">四个步骤</h2>'
|
|
117
|
+
+ '<div class="su-steps" data-need="done" data-extra="current">' + steps + '</div>'
|
|
118
|
+
+ '<h2 data-need="校验项">校验结果</h2>'
|
|
119
|
+
+ '<div class="su-tablewrap"><table class="su-table">'
|
|
120
|
+
+ '<tr><th>备份中物品</th><td>' + (nums.backup === '—' ? '—' : escapeHtml(nums.backup) + ' 件') + '</td></tr>'
|
|
121
|
+
+ '<tr><th>当前库物品</th><td>' + (nums.current === '—' ? '—' : escapeHtml(nums.current) + ' 件') + '</td></tr>'
|
|
122
|
+
+ (isDone ? '<tr><th>导入后物品</th><td>' + (nums.after === '—' ? '—' : escapeHtml(nums.after) + ' 件') + '</td></tr>' : '')
|
|
123
|
+
+ (safety !== '' ? '<tr><th>恢复前备份</th><td>' + escapeHtml(safety) + '</td></tr>' : '')
|
|
124
|
+
+ '</table></div>'
|
|
125
|
+
+ '<h2 data-need="冲突名单">冲突处理</h2>'
|
|
126
|
+
+ '<div class="su-tablewrap" data-need="冲突处理下拉"><table class="su-table">'
|
|
127
|
+
+ '<tr><th>处理模式</th><th>这一档怎么处理</th></tr>'
|
|
128
|
+
+ '<tr><td data-need="跳过同名">跳过同名</td><td>整库覆盖</td></tr>'
|
|
129
|
+
+ '<tr><td data-need="覆盖同名">覆盖同名</td><td>整库覆盖</td></tr>'
|
|
130
|
+
+ '</table></div>'
|
|
131
|
+
+ '<p class="su-note">恢复不逐条比对同名;兜底是恢复前自动留的那份备份。</p>'
|
|
132
|
+
+ '<p class="su-note" hidden data-need="冲突超10条折叠">只看前十条,其余只报总数。</p>'
|
|
133
|
+
+ '<h2 data-need="导入结果">导入结果</h2>'
|
|
134
|
+
+ (isDone
|
|
135
|
+
? '<p>导入完成,当前库已经是备份里的样子。想反悔就用恢复前那份自动备份恢复回去。</p>'
|
|
136
|
+
: isPreview
|
|
137
|
+
? '<p>预告通过,数字对得上就可以确认导入,确认前库里的数据原样不动。</p>'
|
|
138
|
+
: '<p>还没有选择文件,先走预告看看这份备份里有多少东西,再决定导不导入。</p>')
|
|
139
|
+
+ '</section>'
|
|
140
|
+
+ '<section class="su-sec" data-block="operations">'
|
|
141
|
+
+ '<h2>可以做的操作</h2>'
|
|
142
|
+
+ '<div class="su-actions">'
|
|
143
|
+
+ '<button class="su-btn" data-need="选择文件" data-t="我马上发一份备份文件,请进入等待状态">选择文件</button>'
|
|
144
|
+
// #817(④触控够大·主次可辨):「确认导入」是整库覆盖的破坏性一步,不再与主操作「选择文件」同为实心蓝,
|
|
145
|
+
// 降 ghost;「撤销导入」「知道了」原本就是 ghost,不动。载荷 data-t 与块登记的 data-need 一字不动。
|
|
146
|
+
+ '<button class="su-btn ghost" data-need="确认导入" data-t="请确认导入,恢复前请先自动备份">确认导入</button>'
|
|
147
|
+
+ '<button class="su-btn ghost" data-need="撤销导入" data-t="请用恢复前备份恢复,撤销上次导入">撤销导入</button>'
|
|
148
|
+
+ '<button class="su-btn ghost" data-need="知道了" id="suKnow">知道了</button>'
|
|
149
|
+
+ '</div>'
|
|
150
|
+
+ '<span data-need="复制数据" hidden></span>'
|
|
151
|
+
+ '<span data-need="复制日志" hidden></span>'
|
|
152
|
+
+ homeCopyArea({
|
|
153
|
+
data: { envelope: env },
|
|
154
|
+
log: { envelope: env, copyLog: homeCopyLog({ command: ctx?.command ?? 'home-cmd-read ' + PAGE_META.key, actionAt: ctx?.actionAt ?? homeNowStamp() }) },
|
|
155
|
+
})
|
|
156
|
+
+ '</section>'
|
|
157
|
+
+ '<section class="su-sec" data-block="empty">'
|
|
158
|
+
+ '<h2>这种时候会怎样</h2>'
|
|
159
|
+
+ '<p data-need="承诺语:导入前自动备份+失败回滚">导入前会自动备份现有数据,万一失败会自动回滚,现有数据不会丢。</p>'
|
|
160
|
+
+ '<p data-need="异常:数据解析失败/数据校验失败/导入失败">如果提示解析失败、校验失败或者导入失败,先确认发过去的是备份文件,再走一次预告。</p>'
|
|
161
|
+
+ '</section>'
|
|
162
|
+
+ '<section class="su-sec" data-block="status">'
|
|
163
|
+
+ '<h2>状态说明</h2>'
|
|
164
|
+
+ '<p>步骤状态分三种:已完成,进行中,待办。当前走到哪一步,卡片上看得出来。</p>'
|
|
165
|
+
+ '</section>'
|
|
166
|
+
+ '<details hidden class="su-raw"><summary>原始回执</summary><pre>'
|
|
167
|
+
+ escapeHtml(JSON.stringify(env.data)) + '</pre></details>'
|
|
168
|
+
+ '</div>'
|
|
169
|
+
+ '<div class="su-toast" id="suToast" role="status"></div>'
|
|
170
|
+
+ '<script>'
|
|
171
|
+
+ 'function suToast(t){var el=document.getElementById("suToast");if(!el)return;el.textContent=t;el.classList.add("show");setTimeout(function(){el.classList.remove("show")},3500)}'
|
|
172
|
+
+ 'function suCopy(text,ok){function fb(){try{var ta=document.createElement("textarea");ta.value=text;document.body.appendChild(ta);ta.select();var ok=false;try{ok=document.execCommand("copy")}catch(e){}document.body.removeChild(ta);return ok}catch(e){return false}}'
|
|
173
|
+
+ 'if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){suToast(ok)}).catch(function(){suToast(fb()?ok:"复制失败,请长按手动复制")})}else{suToast(fb()?ok:"复制失败,请长按手动复制")}}'
|
|
174
|
+
+ 'document.querySelectorAll("[data-t]").forEach(function(b){b.addEventListener("click",function(){suCopy(b.getAttribute("data-t"),"指令已复制,发给助手即可执行")})});'
|
|
175
|
+
+ 'var kd=document.getElementById("suKnow");if(kd)kd.addEventListener("click",function(){suToast("收到")});'
|
|
176
|
+
+ '</script>';
|
|
177
|
+
return fillTemplate(template, content);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=import_restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import_restore.js","sourceRoot":"","sources":["../../../src/setup/pages/import_restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/setup/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,YAAY,EAAE,SAAS,aAAa,EAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/setup/routes.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,YAAY,GAA6B,EAAE,CAAC"}
|