Commit Graph
302 Commits
Author SHA1 Message Date
kate522 52ad9fbbd3 feat(user-center): redesign 推广中心 panel + extract promotion.css
Give the standalone promotion tab its own stylesheet and a task-priority
layout (成果概览 → 分享操作 → 奖励说明 → 邀请记录).

- assets/css/routes/user-center/promotion.css: new module owning all
  uc-promotion-* rules; flattens #panel-promotion chrome, adds focus-visible
  on the copy button + link input, and a ≤640px single-column layout with a
  full-width copy button (no horizontal overflow)
- user-center.css: import the new promotion.css
- user-center/revenue.css: drop the now-migrated uc-promotion-* rules (keep
  only the revenue-layout mobile rule)
- profile-invite.php: refresh doc header to describe the section priority
  order; copy button stays a focusable <button>, credits.js keeps text-based
  success/failure feedback via [data-invite-copy-feedback]
2026-08-05 17:26:56 +08:00
kate522 51274fd00a feat(user-center): promote invite into standalone 推广中心 tab
Register a dedicated `promotion` dashboard panel gated by the existing
invite switches (credits + invite reward + invite registration), and move
the invite card out of the revenue tab so 收益中心 is pure earnings/withdrawal.

- src/User/Center.php: register promotion panel; revenue no longer depends
  on invite being on
- inc/helpers/user-center-renderers/profile-promotion.php: new panel body
  hosting the existing [data-aksrt-invite] card
- profile-revenue.php: drop the invite section; aksrt-user-center.php: drop
  unused show_invite_section context, add promotion to built-in tabs + view map
- repoint invite/promotion deep-link aliases from revenue to promotion across
  tab-url builder, tab resolver, runtime tabAliases, urls.php, and the
  revenue-JS enqueue gate
- sidebar-nav.php: add 推广中心 service entry; shell.css: entry icon color;
  sidebar-creator.php: reword revenue card
- UserRuntime.php: allow promotion in configurable tabs
2026-08-05 16:45:47 +08:00
kate522andClaude Fable 5 5375ad6429 perf(modal): unify cancellable frontend modal flows
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 02:04:55 +08:00
kate522andClaude Fable 5 34150f3358 refactor(modal): remove legacy compatibility paths
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 00:06:37 +08:00
kate522andClaude Fable 5 21c3300255 fix(vip): scope redesign to summary card
Restore the existing membership purchase cards and keep the UX refresh limited to the top membership summary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:34:53 +08:00
kate522andClaude Fable 5 b60894a371 design(vip): refresh membership card experience
Introduce state-aware membership hierarchy, token-based styling, responsive level cards, and a non-interactive permanent VIP2 state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:28:57 +08:00
kate522andClaude Fable 5 0551260403 fix(vip): flatten panel and format membership summary
Remove the shared dashboard card around the VIP panel and render membership details as title, level, intro, and expiry rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 18:43:54 +08:00
kate522andClaude Fable 5 480a0bb498 refactor(vip): simplify user center membership summary
Remove profile identity chrome from the VIP header, keep the crown watermark, and flatten the summary into one thin card while preserving membership purchase cards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 18:34:28 +08:00
kate522 47e9f07675 fix(badges): always show badge modal entry when feature is enabled 2026-08-04 12:54:53 +08:00
kate522 ed19937e99 feat(badges): zibll-style badge modal with category grid, detail view, and wear UX 2026-08-04 12:46:44 +08:00
kate522 3a33f7cd7f fix(badges): hide "我的徽章" button until user has visible badges
profile-header.php was rendering two badge buttons ("我的徽章"
opening the local modal and "徽章弹层" opening a remote modal).
Drop the remote one and gate the local one behind the new
aksrt_user_has_visible_badges() helper, which only returns true
when the user actually has at least one badge entry that exists
in the active catalog dictionary — preventing a useless empty
modal when nothing can be shown.
2026-08-04 10:51:20 +08:00
kate522 e991f1a0c6 fix(badges): complete full-chain badge circuit and preset icons
Close the full circuit break in the badge/medal system and replace
empty default icons with preset SVG assets so badges render out of
the box:

- Add aksrt_get_worn_medal_icon() helper that renders the worn medal
  image inline (with settings fallback when the Badges class is
  unavailable).
- Profile header (UC) now shows the worn medal icon beside the name,
  matching zibll's name row order (display_name → VIP → Medal → Level → Verify).
- Add .medal-icon / .aksrt-identity-medal vertical-align rules in UC shell.css.
- Extract SchemaUsers::default_medal_args() and preset 6 badges (rookie,
  checkin-30, writer, popular, annual-star, vip-member) with real icon
  URLs from assets/img/medal/ (medal-1/2/5/9/12/15.svg).
- Vue badge.js: add MEDAL_BASE helper + preset icons matching PHP defaults.
2026-08-04 10:36:50 +08:00
kate522 a00a04287d feat(users): default user center to VIP 2026-08-03 22:28:28 +08:00
kate522 9fa9a4cbaf feat(users): style VIP sidebar card 2026-08-03 22:11:09 +08:00
kate522 dafd0ad233 feat(users): add VIP sidebar entry 2026-08-03 22:04:27 +08:00
kate522 a8f9f9b59a fix(users): simplify revenue center header 2026-08-03 16:33:14 +08:00
kate522 21ea8eac43 feat(users): separate revenue center cards 2026-08-03 16:26:39 +08:00
kate522 49c12b761f feat(users): merge promotion into revenue center 2026-08-03 15:38:17 +08:00
kate522 156060d2ec feat(users): build promotion invite panel 2026-08-03 13:57:32 +08:00
kate522 d138c05f77 feat(users): add inline promotion center 2026-08-03 13:40:54 +08:00
kate522 26d307056e feat(orders): redesign user order center 2026-08-03 12:54:58 +08:00
kate522 9f429e5a62 fix(orders): stop no-thumbnail order items being squeezed
Order items without a product thumbnail render the title and price into the
3-column grid with the image slot missing, so the title gets crushed into the
64px image column and the price floats far right. Tag such items with a
--no-image modifier that drops the image column (desktop: title fills the row
with price right-aligned; mobile: title full-width, price wraps below).
2026-08-03 09:42:40 +08:00
kate522 e71a5b7585 refactor: drop order quick shortcuts, keep My Orders tile only
Per feedback the 待支付/售后 shortcut row is not wanted. Remove the nested
quick grid, delete the now-orphaned sidebar-orders renderer, and strip its
uc-order-grid CSS. 我的订单 remains a single tile in the 我的服务 grid.
2026-08-03 09:16:29 +08:00
kate522 16fdeceaf7 refactor: move user-center My Orders into My Services section
The standalone order card is folded into the 我的服务 (My Services) sidebar
section: 我的订单 becomes a service-grid tile (all orders), with the
待支付/售后 quick shortcuts rendered beneath it as a compact row. Gated on
the orders dashboard tab being registered so no dead tile appears when the
payment stack is absent.
2026-08-03 09:09:02 +08:00
kate522 d0db910b08 fix: remove stale require of deleted aksrt-commerce helper
Phase 2 of the shop removal (1d250535) deleted inc/helpers/aksrt-commerce.php
but left the require_once in bootstrap.php, fatally breaking every page load.
The only surviving caller (page-revenue.php) already falls back gracefully.
2026-08-03 08:58:51 +08:00
kate522 8c5b1555c9 refactor: flatten src/AKSRT → src (drop theme-identifier dir)
Move all domain folders from src/AKSRT/{Domain} to src/{Domain}; remap
Composer PSR-4 "AKSRT\\": "src/"; update audit script + README + ADR
paths; remove dead tools/build-psr4-map.php (scanned deleted inc/classes).
2026-08-02 22:06:06 +08:00
kate522 1d2505356e feat: remove shop feature (Phase 2)
Delete all shop domain classes, controllers, schema builders, templates,
JS/CSS, admin SPA pages, and shop-only payment classes (Shipping,
AfterSale, Discount). Remove shop-only DB table definitions (product_variant,
after_sale, order_shipping, card_key) from migrator and add their DROP
to uninstall.php. Clean up shared files:

- Remove aksrt_product CPT + taxonomies from Setup.php
- Remove shop rewrite rules/query vars/template redirect from SetupPart2.php
- Remove shop widget areas from SetupPart1.php
- Remove shop enqueues from ScriptsPart1b.php
- Remove sepakerator-aksrt-shop from SetupPart2.php
- Remove get_shop_settings facade (delete ForumShop.php, clean DomainGroups.php)
- Remove ORDER_PRODUCT_SHOP constant from DomainModel.php
- Remove Shop::class fallback branches from UserOrders.php, OrderCenterRest.php
- Remove shipping/after-sale branches from OrderRepositoryAdmin.php, PayMenus.php, PayOrders.php
- Remove shop product widgets from widgets-register.php
- Remove cart page from template-registry.php, routing.php, ScriptsPart2.php
- Remove cart UI from sidebar-nav.php, profile-orders.php, sidebar-orders.php
- Clean up order-center.js (remove rebuy/cartUrl/receipt/after-sale handlers)
- Remove aksrt_get_cart_page_url/product_page/product_edit from transactions.php
- Clean up aksrt_product_cat references in Coupon.php, PayCoupons.php

Shared payment/order/credits/content-pay stack fully retained.
2026-08-02 21:25:52 +08:00
kate522 2bbd7c01a3 feat: remove forum feature (Phase 1) 2026-08-02 20:02:44 +08:00
kate522andClaude Fable 5 5ca3638382 fix: 身份认证身份证号码校验
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 22:18:15 +08:00
kate522andClaude Fable 5 ea5269e0c6 fix: 阿里云 H5 认证提交 MetaInfo
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 22:13:29 +08:00
kate522andClaude Fable 5 333a7be64b fix: 认证失败后允许重新提交
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 21:34:02 +08:00
kate522andClaude Fable 5 63705dfde0 fix: 精简身份认证申请表单
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 19:15:01 +08:00
kate522 4de67311cc feat: 接入腾讯云与阿里云实人认证 2026-08-01 13:21:21 +08:00
kate522 d9ec08bae1 fix: 移除导航弹层重复认证图标 2026-07-31 12:11:30 +08:00
kate522 29ef28066e fix: 导航用户弹层认证图标同行 2026-07-31 11:54:19 +08:00
kate522 d9a3685001 fix: 认证图标与用户名同行 2026-07-31 11:25:11 +08:00
kate522 370ddc70d3 fix: 完善认证图标展示 2026-07-31 11:01:33 +08:00
kate522 ec63b446e8 feat: 固定个人与企业认证流程 2026-07-31 10:56:59 +08:00
kate522andClaude Fable 5 aa098fe870 feat(widgets): phase 4 align user/author/slider widgets 1:1 with zibll
Align the 5 user/author/slider widgets with Zibll CSF widget
definitions in widget-user.php / widget-slider.php and
options-module.php (add_slider / slide / zib_palette):

- WidgetUserCard (widget_ui_user): add Zibll button palettes
  (button_1_class/button_2_class via new palette_opts()/
  sanitize_palette() replicating CFS_Module::zib_palette c/b/jb)
  and button_2 type (home/center) → profile/center URL.
- WidgetAuthorCard (widget_ui_avatar): add show_button +
  button_1/button_2 (class/text/type) rendered only when the
  logged-in viewer is the author (zibll parity); expand orderby
  to modified/like/favorite.
- WidgetUserRanking (zib_widget_ui_user_ranking): rename field
  to Zibll `orderby` (default checkin_all_day) with the exact
  4 dims (checkin_all_day/checkin_continuous_day/points→credits
  /followed-user-count→followers) + `number` (was count); keep
  rank_by/count aliases for legacy instances; reword desc
  options to match Zibll labels.
- WidgetSlider (zib_widget_ui_slider): add direction/speed/
  spacebetween/scale_height+scale/autoplay to form+update+render,
  pass through to aksrt_render_slider (effect/loop/button/
  pagination/pc·m_height/interval already present); widen
  interval min to 0, height default to 400 (zibll pc_height).
- aksrt_user_card_query_posts: support like/favorite orderby
  (meta _aksrt_like_count / _aksrt_favorite_count) so the
  author/user-card more-posts strip honors the expanded orderby.

Acceptance: php -l clean on all changed files; audit exit 0;
all widget files <=383 lines. Phase 4 done-when marked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 21:16:55 +08:00
Claude d975ff4ce6 feat(phase2): shared common-form layer + CommonWidgetFields trait for all widgets
- Extract Zibll CSF_Widget::params() common-field parity into
  inc/modules/widget-common.php (required by widgets-register.php to keep
  both files <1000 lines): subtitle, title_style(simple/big), title_highlight
  +color, title_link x3, title_link_style colors, sidebar_affix, show_type
  (all/only_pc/only_sm), show_id_type(show/hide), show_ids, animation_in,
  animation_repeat, layout_pin_pc/m, layout_bg(white/dark). Adds
  normalize_link/normalize_bg helpers, affix_attrs, common_wrapper_attr,
  render_title, animation_class. Back-compat normalizes legacy tokens
  (in_affix->sidebar_affix, pc/only_pc, include/exclude->show/hide).
- Add src/AKSRT/Widgets/Traits/CommonWidgetFields.php trait
  (render_common_form_section + update_common_fields).
- Wire all 57 widgets to use the trait; migrate the 16 hand-rolled in_affix
  implementations to shared sidebar_affix (fixes 6 latent bugs where
  in_affix was never persisted). SearchWidget intentionally skips the shared
  form section (its business show_type collides) but adopts the affix helper.
- widget_display_callback parity verified via tmp assertion script.

Refs .specs/plans/zibll-widgets-1to1.md Phase 2 (US1/US5)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 20:42:46 +08:00
Claude 98aeee3cc1 fix(phase1): backfill pagination, fix card stacking, unify archive render
- Backfill aksrt_render_pagination() into inc/helpers/aksrt-template-tags.php
  (numbered + load_more/infinite branches, \AKSRT\Settings\Settings facade)
- post-card.css: drop display:block !important from base .posts-item so
  .posts-item.card inline-block 3-col grid wins; scope <posts> block forcing
- archive-resources.php: replace hand-written .posts-row.ajaxpager +
  get_template_part loop with aksrt_render_post_list() + aksrt_render_pagination()

Refs .specs/plans/zibll-widgets-1to1.md Phase 1 (US2/US3/US5)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:05:43 +08:00
Claude 4325ce0c1c fix(ui): render user level icon inline beside the name
The level (等级) badge was wrapping to its own line below the username and
rendering at the intrinsic PNG size in most surfaces. Centralize the badge
sizing after zibll's `.img-icon` (height: 1.1em, inline-block) in base.css so
every route gets the same compact inline badge, and keep the name row from
flex-wrapping.

- Add shared `.aksrt-user-level-icon / .aksrt-identity-medal` rule + nowrap name
  rows in base.css (loaded on all routes).
- Header dropdown: append the level icon next to the display name (was a
  separate badges row); constrain the name to ellipsis so the badge never wraps.
- User center profile header & author hero: render the level icon inside the
  <h1> name row; drop the duplicate level chip from the signals row.
- Single article author bar / after-box author card: nowrap the name row and
  size the level icon to 1.2em (was unstyled → intrinsic PNG size).
- Comments: inner <name> nowrap with a name clamp; medal sized to 1em.
- Consolidate the per-route `.aksrt-user-level-icon` duplicates in
  user-center/level.css and profile/layout.css onto the shared rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 18:13:41 +08:00
kate522 d5be2879d0 fix(user): accept core avatar hook payload 2026-07-30 11:05:25 +08:00
kate522 d4946ee554 fix(user): close level parity gaps 2026-07-30 10:21:48 +08:00
kate522 20c19dfe31 feat(user): complete growth level chain 2026-07-30 09:38:45 +08:00
kate522 eed75d9f15 fix(user): move avatar upload to hover overlay 2026-07-29 14:17:52 +08:00
kate522 224691e709 fix(user): normalize default avatar filename 2026-07-29 13:53:59 +08:00
kate522 eeabe1d384 fix(user): harden native avatar uploads 2026-07-29 13:39:02 +08:00
kate522 e94437ef60 feat(user): add local avatar management flow 2026-07-29 13:35:17 +08:00
kate522 2dfaa10798 fix(identity): complete native certification review flow 2026-07-29 12:25:58 +08:00