feat(mall): address book wave 7 frontend, contract, and archive

Live addresses domain for the mall: shared contract (AddressBookEntry +
five client methods), mock adapter state v3, live domain pick, addresses
page CRUD, checkout saved-address picker with manual fallback, demo seed,
and the archived change plus address-book capability spec.
This commit is contained in:
Chengdong Zhang
2026-09-18 16:00:05 +08:00
parent 5e866d08f4
commit c51e96ae41
17 changed files with 467 additions and 88 deletions
+15 -2
View File
@@ -2,9 +2,7 @@
## Purpose
The buyer-facing storefront: shell, home page, discovery, shopping and transaction flows, and the buyer center.
## Requirements
### Requirement: Localized storefront
The mall SHALL render every UI string and all catalog/store/marketing mock content in en or zh from one switcher, defaulting to en. Switching locale SHALL update the desktop shell and current page without a full reload.
@@ -138,3 +136,18 @@ The mall SHALL provide a store directory and store home reading live shops from
#### Scenario: a shop without a profile still renders
- **WHEN** a shop has no profile row
- **THEN** the directory and store home render it without inventing logo, scores or copy
### Requirement: Address book management
The mall buyer center SHALL list, add, edit, delete and set-default the signed-in customer's saved addresses through the selected API adapter, replacing the previous fixed mock list.
#### Scenario: manage addresses in the buyer center
- **WHEN** a signed-in shopper opens `/user/addresses` and adds or edits an address
- **THEN** the change persists through the adapter and survives a full page reload
### Requirement: Checkout address selection
Checkout SHALL offer the customer's saved addresses for selection, defaulting to their default address, and SHALL submit the selected address with the order. When the customer has no saved address, checkout SHALL provide an inline manual address form instead.
#### Scenario: checkout with a saved address
- **WHEN** a signed-in shopper with saved addresses checks out
- **THEN** the default address is preselected and the created order carries the chosen address