1. 22 Jul, 2025 20 commits
    • 💄 feat(ui): replace availability indicators with icons in PricingTableColumns (#1365) · e007b26b
      Summary
      • Swapped out the old availability UI for clearer icon-based feedback.
      • Users now see a green check icon when their group can use a model and a red × icon (with tooltip) when it cannot.
      
      Details
      1. Imports
         • Removed deprecated `IconVerify`.
         • Added `IconCheckCircleStroked`  and `IconClose`  for new states.
      
      2. Availability column
         • `renderAvailable` now
           – Shows a green `IconCheckCircleStroked` inside a popover (“Your group can use this model”).
           – Shows a red `IconClose` inside a popover (“你的分组无权使用该模型”) when the model is inaccessible.
           – Eliminates the empty cell/grey tag fallback.
      
      3. Group tag
         • Updated selected-group tag to use `IconCheckCircleStroked` for visual consistency.
      
      Result
      Improves UX by providing explicit visual cues for model availability and removes ambiguous blank cells.
      t0ng7u committed
    • ️ refactor(model-pricing): extract `resetPricingFilters` utility and eliminate duplication (#1365) · e22ef769
      Centralize filter-reset logic to improve maintainability and consistency.
      
      - Add `resetPricingFilters` helper to `web/src/helpers/utils.js`, encapsulating all reset actions (search, category, currency, ratio, group, quota type, etc.).
      - Update `PricingFilterModal.jsx` and `PricingSidebar.jsx` to import and use the new utility instead of keeping their own duplicate `handleResetFilters`.
      - Removes repeated code, ensures future changes to reset behavior require modification in only one place, and keeps components lean.
      t0ng7u committed
    • 🔧 refactor(pricing-filters): extract display settings & improve mobile layout (#1365) · 9bab77ad
      * **PricingDisplaySettings.jsx**
        • Extracted display settings (recharge price, currency, ratio toggle) from PricingSidebar
        • Maintains complete styling and functionality as standalone component
      
      * **SelectableButtonGroup.jsx**
        • Added isMobile detection with conditional Col spans
        • Mobile: `span={12}` (2 buttons per row) for better touch experience
        • Desktop: preserved responsive grid `xs={24} sm={24} md={24} lg={12} xl={8}`
      
      * **PricingSidebar.jsx**
        • Updated imports to use new PricingDisplaySettings component
        • Simplified component structure while preserving reset logic
      
      These changes enhance code modularity and provide optimized mobile UX for filter button groups across the pricing interface.
      t0ng7u committed
    • 📌 fix(pricing-search): make search bar sticky within PricingContent (#1365) · cff8c3ac
      * Added `position: sticky; top: 0; z-index: 5;` to search bar container
        – keeps the bar fixed while the table body scrolls
      * Preserves previous padding, border and background styles
      * Improves usability by ensuring quick access to search & actions during long list navigation
      
      • PricingTable
        • Added `compactMode` prop; strips fixed columns and sets `scroll={compactMode ? undefined : { x: 'max-content' }}`
        • Processes columns to remove `fixed` in compact mode
      
      • PricingPage & index.css
        • Added `.pricing-scroll-hide` utility to hide Y-axis scrollbar for `Sider` & `Content`
      
      • Responsive / style refinements
        • Sidebar width adjusted to 460px
        • Scrollbars hidden uniformly across pricing modules
      
      These changes complete the model-pricing UI refactor, ensuring clean scrolling, responsive filters, and fixed availability column for better usability.
      t0ng7u committed
    • feat(ui): enhance pricing table & filters with responsive button-group, fixed… · f845a96f
       feat(ui): enhance pricing table & filters with responsive button-group, fixed column, scroll tweaks (#1365)
      
      • SelectableButtonGroup
        • Added optional collapsible support with gradient mask & toggle
        • Dynamic tagCount badge support for groups / quota types
        • Switched to responsive Row/Col (`xs 24`, `sm 24`, `lg 12`, `xl 8`) for fluid layout
        • Shows expand button only when item count exceeds visible rows
      
      • Sidebar filters
        • PricingGroups & PricingQuotaTypes now pass tag counts to button-group
        • Counts derived from current models & quota_type
      
      • PricingTableColumns
        • Moved “Availability” column to far right; fixed via `fixed: 'right'`
        • Re-ordered columns and preserved ratio / price logic
      
      • PricingTable
        • Added `compactMode` prop; strips fixed columns and sets `scroll={compactMode ? undefined : { x: 'max-content' }}`
        • Processes columns to remove `fixed` in compact mode
      
      • PricingPage & index.css
        • Added `.pricing-scroll-hide` utility to hide Y-axis scrollbar for `Sider` & `Content`
      
      • Responsive / style refinements
        • Sidebar width adjusted to 460px
        • Scrollbars hidden uniformly across pricing modules
      
      These changes complete the model-pricing UI refactor, ensuring clean scrolling, responsive filters, and fixed availability column for better usability.
      t0ng7u committed
    • 🎨 feat(model-pricing): refactor layout and component structure (#1365) · 1c22e03a
      * Re-architected model-pricing page into modular components:
        * PricingPage / PricingSidebar / PricingContent
        * Removed obsolete `ModelPricing*` components and column defs
      * Introduced reusable `SelectableButtonGroup` in `common/ui`
        * Supports Row/Col grid (3 per row)
        * Optional collapsible mode with gradient mask & toggle
      * Rebuilt filter panels with the new button-group:
        * Model categories, token groups, and quota types
        * Added dynamic `tagCount` badges to display item totals
      * Extended `useModelPricingData` hook
        * Added `filterGroup` and `filterQuotaType` state and logic
      * Updated PricingTable columns & sidebar reset logic to respect new states
      * Ensured backward compatibility via re-export in `index.jsx`
      * Polished styling, icons and i18n keys
      t0ng7u committed
    • 🐛 fix(EditChannelModal): hide empty “API Config” card for VolcEngine Ark/Doubao (type 45) · 5bd8dd78
      The VolcEngine Ark/Doubao channel now has a hard-coded base URL inside the backend, so it no longer requires any API-address settings on the front-end side.
      Previously, the input field was hidden but the surrounding “API Config” card still rendered, leaving a blank, confusing section.
      
      Changes made
      • Added `showApiConfigCard` flag (true when `inputs.type !== 45`) right after the state declarations.
      • Wrapped the entire “API Config” card in a conditional render driven by this flag.
      • Removed the duplicate declaration of `showApiConfigCard` further down in the component to avoid shadowing and improve readability.
      
      Scope verification
      • Checked all other channel types: every remaining type either displays a dedicated API-related input/banner (3, 8, 22, 36, 37, 40, …) or falls back to the generic “custom API address” field.
      • Therefore, only type 45 requires the card to be fully hidden.
      
      Result
      The “Edit Channel” modal now shows no empty card for the VolcEngine Ark/Doubao channel, leading to a cleaner and more intuitive UI while preserving behaviour for all other channels.
      t0ng7u committed
    • Merge pull request #1416 from feitianbubu/pr/opt-video-channel · d0990034
      chore: opt video channel and platform
      IcedTangerine committed
    • 🌐 feat: implement left-right pagination layout with i18n support · 2f55960b
      - Add left-right pagination layout for desktop (total info on left, controls on right)
      - Keep mobile layout centered with pagination controls only
      - Implement proper i18n support for pagination text using react-i18next
      - Add pagination translations for Chinese and English
      - Standardize t function usage across all table components to use xxxData.t pattern
      - Update CardPro footer layout to support justify-between on desktop
      - Use CSS variable --semi-color-text-2 for consistent text styling
      - Disable built-in Pagination showTotal to avoid duplication
      
      Components updated:
      - CardPro: Enhanced footer layout with responsive design
      - createCardProPagination: Added i18n support and custom total text
      - All table components: Unified t function usage pattern
      - i18n files: Added pagination-related translations
      
      The pagination now displays "Showing X to Y of Z items" on desktop
      and maintains existing centered layout on mobile devices.
      t0ng7u committed
    • ️ refactor: restructure ModelPricing component into modular architecture · a2fc86a2
      - Break down monolithic ModelPricing.js (685 lines) into focused components:
        * ModelPricingHeader.jsx - top status card with pricing information
        * ModelPricingTabs.jsx - model category navigation tabs
        * ModelPricingFilters.jsx - search and action controls
        * ModelPricingTable.jsx - data table with pricing details
        * ModelPricingColumnDefs.js - table column definitions and renderers
      
      - Create custom hook useModelPricingData.js for centralized state management:
        * Consolidate all business logic and API calls
        * Manage pricing calculations and data transformations
        * Handle search, filtering, and UI interactions
      
      - Follow project conventions matching other table components:
        * Adopt same file structure as channels/, users/, tokens/ modules
        * Maintain consistent naming patterns and component organization
        * Preserve all original functionality including responsive design
      
      - Update import paths:
        * Remove obsolete ModelPricing.js file
        * Update Pricing page to use new ModelPricingPage component
        * Fix missing import references
      
      Benefits:
      - Improved maintainability with single-responsibility components
      - Enhanced code reusability and testability
      - Better team collaboration with modular structure
      - Consistent codebase architecture across all table components
      t0ng7u committed
    • Merge pull request #1410 from feitianbubu/pr/fix-page-param · 5c1f07ae
      fix: page query param is p
      Calcium-Ion committed
    • Merge pull request #1415 from feitianbubu/pr/fix-relayError-nil · 72afb727
      fix: avoid relayError nil panic
      Calcium-Ion committed
    • fix: add Think field to OllamaRequest and support extra parameters in… · c5ec332a
      fix: add Think field to OllamaRequest and support extra parameters in GeneralOpenAIRequest. (close #1125
      )
      CaIon committed
  2. 21 Jul, 2025 16 commits
  3. 20 Jul, 2025 4 commits
    • 🖼️ feat(header): improve logo loading UX with skeleton overlay · 78597a22
      Ensure the header logo is shown only after the image has fully loaded to eliminate flicker:
      
      • Introduced `logoLoaded` state to track image load completion.
      • Pre-loaded the logo using `new Image()` inside a `useEffect` hook and set state on `onload`.
      • Replaced the previous Skeleton wrapper with a stacked layout:
        – A `Skeleton.Image` placeholder is rendered while the logo is loading.
        – The real `<img>` element fades in with an opacity transition once both global
          `isLoading` and `logoLoaded` are true.
      • Added automatic reset of `logoLoaded` whenever the logo source changes.
      • Removed redundant `onLoad` on the `<img>` tag to avoid double triggers.
      • Ensured placeholder and image sizes match via absolute positioning to prevent layout shift.
      
      This delivers a smoother visual experience by keeping the skeleton visible until the logo is completely ready and then revealing it seamlessly.
      t0ng7u committed
    • 💄 refactor(playground): migrate inline styles to TailwindCSS v3 classes · e390d1ab
      - Replace all inline style objects with TailwindCSS utility classes
      - Convert Layout and Layout.Sider component styles to responsive classes
      - Simplify conditional styling logic using template literals
      - Maintain existing responsive design and functionality
      - Improve code readability and maintainability
      
      Changes include:
      - Layout: height/background styles → h-full bg-transparent
      - Sider: complex style object → conditional className with mobile/desktop variants
      - Debug panel overlay: inline styles → utility classes (fixed, z-[1000], etc.)
      - Remove redundant style props while preserving visual consistency
      t0ng7u committed