- 23 Jun, 2025 14 commits
-
-
🚀 1. Backend • `controller/channel.go` – Added pagination (`p`, `page_size`) support to `SearchChannels`. – Added independent `type` filter (keeps `type_counts` unaffected). – Returned `total`, `type_counts` to match `/api/channel/` response. 2. Frontend • `ChannelsTable.js` – `loadChannels` / `searchChannels` now pass `p`, `page_size`, `id_sort`, `type`, `status` correctly. – Pagination, page-size selector and type tabs work for both normal list and search mode. – Switch for “ID sort” calls proper API and keeps UI state in sync. – Removed unnecessary `normalize` helper; `getFormValues` back to concise form. Result • Search mode and normal listing now share identical pagination and filtering behavior. • Type tabs show correct counts even after searching. • “ID Sort” toggle no longer inverses actual behaviour.t0ng7u committed -
✨ Refactors `ChannelsTable.js` to ensure that the selected group filter is **never lost** when: 1. Cycling between channel-type tabs. 2. Changing the status dropdown (all / enabled / disabled). Key points: • `loadChannels` now detects active search filters (keyword / group / model) and transparently delegates to `searchChannels`, guaranteeing all parameters are sent in every request. • `searchChannels` accepts optional `typeKey` and `statusF` arguments, enabling reuse without code duplication. • Loading state handling is unified; no extra renders or side effects were introduced, keeping UI performance intact. • Duplicate logic removed and responsibilities clearly separated for easier future maintenance.
t0ng7u committed -
💄 Replaced the verbose placeholder “Search channel ID, name, key and API address ...” with a concise version “Channel ID, name, key, API address” in `ChannelsTable.js` and synchronized the corresponding i18n entries. This improves readability and keeps UI text consistent across languages.
t0ng7u committed -
🐛 Ensure that the selected "group" filter (and other form search values) persist across type tab changes, status filter updates, pagination, and page-size changes. Changes include: • loadChannels: added `searchParams` argument and now appends keyword, group and model query strings to API calls. • refresh / page handlers / type tabs / status Select: now pass current form values to loadChannels, keeping filters intact. • searchChannels: maintains active type and status filters when issuing search requests. • Form.Select (searchGroup): triggers loadChannels when only group filter is active, preventing parameter loss. • Minor cleanup and comment adjustments.
t0ng7u committed -
🐛 • Unify the Select option structure as `{ key, label, value }`; add missing `key` to prevent duplicated rendering by Semi-UI. • Trim and deduplicate the `models` array via `Set` inside `handleInputChange`, ensuring state always contains unique values. • In the options-merging `useEffect`, use a `Map` keyed by `value` (after `trim`) to guarantee a unique `optionList` when combining backend data with currently selected models. • Apply the same structure and de-duplication when: – Fetching models from `/api/channel/models` – Adding custom models (`addCustomModels`) – Fetching upstream model lists (`fetchUpstreamModelList`) • Replace obsolete `text` field with `label` in custom option objects for consistency. No backend changes are required; the fix is entirely front-end. Closes #1292t0ng7u committed -
🎨 * Added a dedicated effect to merge origin and selected models, ensuring selected items always remain in the dropdown list. * Enhanced “Copy all models” button: * Shows info message when list is empty. * Displays success / error notification based on copy result. * Unified UI look-and-feel by applying `!rounded-lg` class to inputs, selects, banners and buttons. * i18n: added English translations for new prompts - "No models to copy" - "Model list copied to clipboard" - "Copy failed"
t0ng7u committed -
Merge pull request #1290 from JoeyLearnsToCode/feat-copy-models
同語 committed -
🚀 WHAT’S NEW • Backend – Introduced `parseStatusFilter` helper to normalize `status` query across handlers. – `GET /api/channel` & `GET /api/channel/search` now accept `status=enabled|disabled` to return only enabled or disabled channels. – Tag-mode branch respects both `statusFilter` and `typeFilter`; SQL paths trimmed to one query + one lightweight `GROUP BY` for `type_counts`. • Frontend (`ChannelsTable.js`) – Added “Status Filter” `<Select>` (All / Enabled / Disabled) with localStorage persistence. – All data-loading and search requests now always append `type` (when not “all”) and `status` params, so filtering & pagination are handled entirely server-side. – Removed client-side post-filtering for type, preventing short pages and reducing CPU work. – Tabs’ type counts stay in sync via backend-provided `type_counts`. IMPROVEMENTS • Eliminated duplicated status-parsing logic; single source of truth eases future extension. • Reduced redundant queries, improved consistency of counts in UI. • Secured key leakage with `Omit("key")` unchanged; no perf regressions observed. Closes #1289t0ng7u committed -
t0ng7u committed
-
🚀 🚀 chore(ui): Refactor UpstreamRatioSync with conflict-modal component, performance hooks & cleanup (#1286) WHAT’S NEW • Extracted reusable ConflictConfirmModal for clearer JSX hierarchy • Added detailed conflict detection & confirmation flow before syncing options • Refactored state-heavy callbacks (`selectValue`, `performSync`) with `useCallback` to avoid unnecessary renders • Introduced build-time constants (later removed unused export) and unified helper utilities • Ensured final ratios are rebuilt accurately before API `PUT`, fixing “value not updated” bug • Enhanced UI hints: warning icon on conflict, multiline billing info, mobile-friendly modal size • General code cleanup: removed dead variables, adopted early returns, improved comments WHY Improves maintainability, user clarity when billing-type collisions occur, and guarantees data consistency after synchronisation.t0ng7u committed -
🐛 Add a `useEffect` hook in `UpstreamRatioSync.js` to automatically set `currentPage` to `1` whenever `ratioTypeFilter` or `searchKeyword` updates. This prevents the table from appearing empty when users switch to the “model_price” (fixed price) filter or perform a new search while on a later page. Additional changes: - Import `useEffect` from React. This enhancement delivers a smoother UX by ensuring the first page of results is always shown after any filtering action.
t0ng7u committed -
JoeyLearnsToCode committed
-
🎛 Introduce the ability to quickly locate models with conflicting billing configurations. Key points • Added `hasConflict` flag to detect models that define both a fixed price (`ModelPrice`) and any ratio (`ModelRatio` or `CompletionRatio`). • Added “Show Only Conflict Rates” `Checkbox` to toolbar; filtering logic now supports keyword + conflict filtering. • Display a red `Tag` beside the model name when a conflict is detected for immediate visual feedback. • Kept `hasConflict` state in sync during add, update and delete operations. • Imported `Checkbox` and `Tag` from **@douyinfe/semi-ui**. • Minor UI tweaks (circle tag style, margin) for consistency. This enhancement helps administrators swiftly identify and resolve incompatible pricing rules, addressing the need discussed in issue #1286.
t0ng7u committed
-
- 22 Jun, 2025 13 commits
-
-
🔧 CaIon committed -
🍭 t0ng7u committed -
t0ng7u committed
-
✨ Summary • Added per-table “Compact / Adaptive” view toggle to all major table components (Tokens, Channels, Logs, MjLogs, TaskLogs, Redemptions, Users). • Persist user preference in a single localStorage entry (`table_compact_modes`) instead of scattered keys. Details 1. utils.js • Re-implemented `getTableCompactMode` / `setTableCompactMode` to read & write a shared JSON object. • Imported storage-key constant from `constants`. 2. hooks/useTableCompactMode.js • Hook now consumes the unified helpers and listens to `storage` events via the shared key constant. 3. constants • Added `TABLE_COMPACT_MODES_KEY` to `common.constant.js` and re-exported via `constants/index.js`. 4. Table components • Integrated `useTableCompactMode('<tableName>')`. • Dynamically remove `fixed: 'right'` column and horizontal `scroll` when in compact mode. • UI: toggle button placed at card title’s right; responsive layout on small screens. 5. UI polish • Replaced all lucide-react `List`/`ListIcon` usages with Semi UI `IconDescend` for consistency. • Restored correct icons where `Hash` was intended (TaskLogsTable). Benefits • Consistent UX for switching list density across the app. • Cleaner localStorage footprint with easier future maintenance.t0ng7u committed -
feat: support user-group-specific for mj and task
Calcium-Ion committed -
CaIon committed
-
CaIon committed
-
CaIon committed
-
✨ This commit enhances the “Copy Selected Tokens to Clipboard” feature in `TokensTable.js` by introducing a user-friendly modal that lets users choose how they want to copy tokens. Changes made • Replaced direct copy logic with a `Modal.info` dialog. • Modal displays the prompt “Please choose your copy mode”. • Added two buttons in a custom footer: – **Name + Secret**: copies `tokenName sk-tokenKey`. – **Secret Only**: copies `sk-tokenKey`. • Each button triggers the copy operation and closes the dialog. • Maintains existing validations (e.g., selection check, clipboard feedback). Benefits • Gives users clear control over copy format, reducing manual editing. • Aligns UI with Semi UI’s best practices via custom modal footer. No backend/API changes are involved; all updates are limited to the front-end UI logic.
t0ng7u committed -
t0ng7u committed
-
🗑 • Back-end • model/token.go • Add `BatchDeleteTokens(ids []int, userId int)` – transactional DB removal + async Redis cache cleanup. • controller/token.go • Introduce `TokenBatch` DTO and `DeleteTokenBatch` handler calling the model layer; returns amount deleted. • router/api-router.go • Register `POST /api/token/batch` route (user-scoped). • Front-end (TokensTable.js) • Replace per-token deletion loops with single request to `/api/token/batch`. • Display dynamic i18n message: “Deleted {{count}} tokens!”. • Add modal confirmation: • Title “Batch delete token”. • Content “Are you sure you want to delete the selected {{count}} tokens?”. • UI/UX tweaks • Responsive button group (flex-wrap, mobile line-break). • Clear `selectedKeys` after refresh / successful deletion to avoid ghost selections. • i18n • Ensure placeholder style matches translation keys (`{{count}}`). This commit delivers efficient, scalable token management and an improved user experience across devices.t0ng7u committed -
creamlike1024 committed
-
creamlike1024 committed
-
- 21 Jun, 2025 13 commits
-
-
CaIon committed
-
feat: enhance token usage details for upstream OpenRouter
Calcium-Ion committed -
feat: openrouter format for claude request
Calcium-Ion committed -
CaIon committed
-
✨ CaIon committed -
feat: add placeholder for kling AccessKey and SecretKey
Calcium-Ion committed -
t0ng7u committed
-
📝 📝 feat(SettingsAnnouncements/SettingsFAQ): update placeholders & success texts, add Markdown/HTML hint • SettingsAnnouncements.js – Placeholder now states “Supports Markdown/HTML” for both small & expanded editors – Success/alert messages unified to use Chinese quotation marks • SettingsFAQ.js – Answer textarea placeholder updated with Markdown/HTML support note – Unified success/alert messages punctuation These tweaks clarify rich-text support and keep UI copy consistent.t0ng7u committed -
✨ * Added `Tooltip` component and ellipsis style for “question” & “answer” columns * Keeps table compact while showing full content on hover * Updated success messages punctuation for consistency
t0ng7u committed -
✨ * Added “Expand Edit” button with `Maximize2` icon to open a large modal editor * Introduced full-screen `TextArea` modal; content syncs back to main form via Form API * Switched to correct `TextArea` import from Semi UI to fix invalid element error * Implemented ellipsis & `Tooltip` for “content” and “extra” columns to keep table concise * Added state management (`showContentModal`, `formApiRef`) and related handlers * Updated success messages & punctuation for consistency
t0ng7u committed -
✨ - Introduced `isNoThinkingRequest` and `trimModelThinking` functions to manage model names and thinking configurations. - Updated `GeminiHelper` to conditionally adjust the model name based on the thinking budget and request settings. - Refactored `ThinkingAdaptor` to streamline the integration of thinking capabilities into Gemini requests. - Cleaned up commented-out code in `FetchUpstreamModels` for clarity. These changes improve the handling of model configurations and enhance the adaptability of the Gemini relay system.
CaIon committed -
skynono committed
-
skynono committed
-