Conversation
# Conflicts: # .gitignore
- tokens.css: add sketch border-radius tokens, card-sketch-shadow, dec-stamp/gold-line/leaf/grid-line decoration tokens for both themes - base.css: add .sketch-sm/md/lg, .brush-highlight, .grid-paper, .section-heading, .stamp-watermark utility classes - ConsoleCard: add sketch variant (irregular radius + pencil shadow + left accent bar); ink variant gets grid-paper texture - ConsoleButton: hand-drawn radius + layered shadow on all variants; new stamp variant (seal-style, slight rotation) - StatusChip: left color bar + irregular border-radius for all tones - ConsoleTabs: tapered brush-stroke active indicator + brush-highlight on active label text - DataTable: serif/wide-tracking column headers, gold-line header border, dashed row dividers - EmptyState: replace generic SVG with hand-drawn line-art box + leaf sprout decoration - ConsoleSidebar: texture-paper bg, serif brand name, bamboo-node group dividers, wider accent active bar, warm-tile hover - ConsoleTopbar: gold-line bottom shadow, serif mobile brand, sketch radius on active mobile pill with micro-rotation - PageHero: text-5xl desktop title, brush-highlight on accent phrase - BalanceCard: sketch card variant, mono-font balance number, wider progress bar with irregular radius - ConsoleModal: sketch radius + gold-line top decoration + serif title - TextInput: bottom-line only (hand-written feel), no box border
…gant Day (Desert Ledger, hand-drawn richer): - sketch radii skew +40%, marker-pen offset shadows deepened - AI-generated washi paper tile replaces SVG noise (texture-paper) - AI dry-brush ink stroke divider (.ink-divider) replaces dashed rules in sidebar tools and below tab-less page heroes - AI carved seal stamp watermark on sketch cards (BalanceCard) - hand-drawn checkbox (slightly-off circle, thicker tick), toggle thumb with ink outline, segmented active tile outlined + sketch radius - SearchInput / AmountInput join the underline hand-written style - brush-highlight upgraded to polygon brush shape (clip-path token) - charts: no smoothing, circle markers, dashed grid (lineMood preset) Night (One Night, Material x Elegant): - MD3 elevation ladder (5 levels, umbra+penumbra) replaces offset shadows - MD3 surface tint: gold-warmed surfaces by altitude (tint-1/2/3) - MD3 state layer: unified gold 8%/12% hover/press tokens - uniform radii (8/12/16), stamp + ink dividers extinguished via tokens - StatusChip converts to tonal chip (no left bar), tabs get glow bar - display numbers go light-weight (500) via display-number utility - velvet texture tile (alpha 0.05) as page background material - charts: smooth glowing lines, solid hairline grid, soft area fades Charts now consume charts/themePreset.ts (lineMood/areaGradient): TrendDual, TokenTrend, StatsDualTrend, StatsHourly, FlowChart, InviteMonthChart, OrderRevenueChart. Textures generated via gpt-image-2 (multi-candidate, sharp-processed): paper-day.webp, velvet-night.webp, divider-ink.png, seal-stamp.png
Left panel upgrades from static copy to a living narrative that draws the slogan itself: one key lighting up all models. - AuthScene.ts (~430 lines): mini canvas engine, independent of MapScene but reusing its vocabulary — arcUp bezier packets, request(gold)/ response(mint) color semantics, iconLoader bitmap cache, DPR cap 2, visibilitychange gate, reduced-motion static frame - 8 real model logos as a constellation (fixed hand-tuned layout that avoids the HTML copy bands), sine float + pointer parallax by depth, hover shows name label, packet hits pulse the node halo - 3D key emblem generated via gpt-image-2 (circuit-chip head), white bg matted to alpha via luminance+saturation gate, breathing glow beneath; vector fallback key kept for load failure - AI atmosphere backgrounds (portrait webp, 21KB/8KB): ink-wash gold-rim mountains by day, aurora ribbons by night; scrim gradient keeps the serif headline ≥4.5:1; canvas masked out near the ticker foot - mini-ticker replaces the three decorative dots: real store data (model count / uptime / version) rotating 4s per item via keyed CSS animation (Transition dropped frames left it stuck at opacity 0); reduced-motion renders all three statically - theme.ts: authLight/authDark palettes (ink-green night vs charcoal night); i18n adds ticker labels in zh-CN/en
Below lg the aside is display:none; instantiating the engine there would animate a 0x0 canvas forever. Bail out when the panel has no layout.
Panel picks up the theme-forked tokens: sketch-md radius + paper texture by day, uniform radius + elevation-3 by night. Chevron gets round caps. Activity/farm/bigame surfaces stay untouched per scope decision.
Rebuilt from the dark split-panel into a full-page editorial spread on the site's paper ground, in the style of premium AI-relay landings: - AuthLayout: single texture-paper page, slim top brand bar (brand / theme / locale / back-home), content grid = editorial left + floating form card right; the card reads hand-drawn by day (sketch radius + pencil shadow) and Material by night (uniform radius + elevation-3) - AuthEditorialPanel: relay diagram (prompt -> byte-level passthrough -> official upstream) drawn as thin ink strokes, poetic two-line serif headline (一念之轻 / 接万模之响), trust bullet list (no request bodies / full TLS / instant access), live stats footer from the app store - DotGlobe (~300 lines): orthographic dot-matrix earth reusing the landMask continents, fibonacci sampling with dithered coastlines, slow rotation, hub-to-hub bezier arcs with packet heads and arrival pulses — colors resolved from semantic tokens at runtime so the same scene reads olive-ink by day and mist-blue by night - form cards gain a centered motto + serif title; sign-in/up/reset all ride the new layout unchanged in behavior - removed the previous key-constellation panel (AuthScene, brand panel, AI background/emblem assets) and its theme palettes - i18n: relay/editorial/motto strings in zh-CN and en
Add a .sketch-card utility (uneven radius + marker shadow, hover lift in CSS) and adopt it on the Models, Marketplace, Invite and Orders cards, replacing per-component inline styles and $el.style mutation. Bring Tickets and Users into the same family: thread bubbles move from an inline-style ternary to token classes on the sketch radius, system notes use the gold hairline, and titles/IDs/quota figures pick up .display-title and .display-number. Vendor group headers switch to the gold rule. Night theme follows automatically through the forked tokens — uniform MD3 radius and elevation, no DOM branching.
Replace the single quota-based plan with a discriminated union of two
sellable shapes, and retire the user/token group concept in favour of
channels only.
Plan model:
- traffic pack grants a fixed quota once, with a custom-unit validity
(hour/day/week/month) or no expiry at all
- subscription pack meters quota per period, either granting it
(meter=refill) or capping it (meter=cap), for the length of a term
- kind is immutable after creation; the edit route pins it to the stored
value and clears the other kind's exclusive fields
- sortable columns stay kind-agnostic: a one-off grant and a per-period
allowance are not comparable, so quota renders per kind but never sorts
Durations are value+unit pairs. Month periods roll over by calendar month
and clamp at month end (Jan 31 + 1mo lands on Feb 28/29), while unit
conversion normalizes a month to 30 days for pricing maths only.
Accent colour accepts a custom hex alongside the three semantic tokens.
This is a managed exception to the semantic-token rule, documented in
docs/THEMES.md: emphasis marks only, validated and normalized server-side,
with a non-blocking contrast warning against both card surfaces.
Retire groups:
- drop UserInfo.group, TokenItem.group, GROUPS, GROUP_RPM, GROUP_DISCOUNT
- rate ceiling moves to the subscription plan's rate_limit
- billing multiplier moves to the plan's ratio; group_ratio becomes
plan_ratio and DiscountCard keeps its global x plan = effective shape
- demoStorage stops validating `group` before the field is dropped, so
sessions persisted with it stay valid instead of being logged out
Each plan may bind one exclusive platform channel. Deleting that channel
does not cascade: the plan keeps the id and the UI surfaces it as removed
rather than silently resetting to none.
Entitlements are now { subscription, traffic[] } because each traffic
grant expires on its own schedule and cannot be folded into one balance.
Also fixed along the way:
- .gitignore: anchor the bare `plans` rule to the repo root, which was
silently excluding frontend/src/components/console/plans/
- RedemptionView: read the live plan catalogue instead of a hardcoded list
naming a plan that never existed
- RedemptionView: add the hidden md:block guard the other admin tables
have, which was rendering table and mobile list together under md
- IconButton: dim the disabled state, previously indistinguishable
- AmountInput: optional prefix/integer props so day and order counts stop
rendering a currency sign
Land the Vue 3 frontend rewrite alongside the upstream backend. The branch adds frontend/ as a self-contained project and touches nothing else of substance: no Go files, no web/ sources. Scope of the merge: - frontend/ — Vue 3.5 + TS strict, Vite 8, vue-router 5, Pinia 4, Tailwind 3.4, ECharts 6, vue-i18n 11; 3 auth + 21 console + 5 lab routes - .gitignore — anchor `plans` to `/plans`; unanchored it also swallowed frontend/src/components/console/plans - AGENTS.md — frontend working rules - web/public/favicon.ico — dropped; index.html references /logo.png and main.tsx sets the icon from status, so the file was orphaned Not integrated: frontend/dist is not referenced by any Go code. main.go still embeds web/dist only, so web/ remains the delivered frontend and this merge does not change the delivery path. Console and Lab run against an in-browser mock. VITE_API_MODE=http is not usable yet: the token lifecycle for Authorization: Bearer is unimplemented and ten route families the mock serves have no backend counterpart. See docs/REN2HUB_FRONTEND_ARCHITECTURE.md in the workspace repository.
… and progress metrics
…y and theme styling
…izontal table visibility
…and responsive color tiering
…audit findings - Add common ErrorBanner/SectionHeading/SkeletonBlock/StatTileGrid primitives; migrate 24 hand-written skeletons across 15 views and four silent-failure pages to shared error states - Migrate admin channels/users/orders/redemption/plans to unified PageHero headers; adopt SegmentedToggle on dashboard stats and invite sorting; standardize display-number typography - Align control height scale (FilterSelect sm=32, SegmentedToggle md=40); define .focus-ring utility; fix stamp variant radius override chain - Fix night-theme leaks (AccountCenter day-only strokes, 2FA QR fixed white), remove fake max-concurrency stat, split ticket reply/close loading states, surface invoice offline reason fail-closed - Sync visual-audit test contracts to compressed dashboard scale; document EmptyState/grid conventions in THEMES.md
Contributor
|
Important Review skippedToo many files! This PR contains 905 files, which is 605 over the limit of 300. To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (53)
📒 Files selected for processing (905)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Author
|
误将目标仓库解析为上游仓库,正确的 Ren2Hub PR 将单独创建。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
变更描述 / Description
本 PR 修正内存渠道缓存与数据库选择路径的能力状态语义。此前内存缓存按启用渠道的
Channel.Group/Models建索引,数据库路径按Ability.enabled过滤;单独禁用某个分组模型能力时,两条路径可能选择不同渠道。现在内存缓存以启用的 Ability 作为分组/模型候选来源,同时继续使用 Channel 状态作为全局门禁,并新增回归测试覆盖禁用、重新启用两个状态。变更类型 / Type of change
关联任务 / Related Issue
提交前检查项 / Checklist
运行证明 / Proof of Work
已通过:
go test -timeout 60s ./model -run '^TestInitChannelCacheHonorsAbilityEnabled$' -count=1go test -timeout 60s ./model ./service ./middleware ./controllergit diff --check