- 21 Jul, 2025 2 commits
-
-
🤝 - Replace complex HTML/CSS layout with simple table format - Remove inline styles and JavaScript that GitHub doesn't support - Add clickable link for UCloud partner logo - Remove acknowledgment text to keep section clean and minimal - Ensure consistent logo sizing (60px height) across all partners - Maintain responsive layout using GitHub-compatible HTML table The partners section now displays properly on GitHub while preserving functionality and professional appearance.
t0ng7u committed -
🤝 - Add visually appealing trusted partners showcase above Star History - Include partner logos: Cherry Studio, Peking University, and UCloud - Implement responsive HTML/CSS layout with gradient background - Add hover effects and smooth transitions for enhanced UX - Provide bilingual support (Chinese and English versions) - Display logos from docs/images/ directory with consistent styling The new section enhances project credibility by showcasing institutional and enterprise partnerships in both README.md and README.en.md files.
t0ng7u committed
-
- 20 Jul, 2025 19 commits
-
-
t0ng7u committed
-
CaIon committed
-
🖼 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 -
💄 - 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 -
⚖ t0ng7u committed -
⚖ - Update license text from "Apache-2.0协议" to "AGPL v3.0协议" - Update license link to point to official AGPL v3.0 license page - Align About page license references with actual project license
t0ng7u committed -
t0ng7u committed
-
📚 ## Overview Refactored the monolithic dashboard page (~1200 lines) into a modular architecture following the project's global layout pattern. The main `Detail/index.js` is now simplified to match other page entry files like `Midjourney/index.js`. ## Changes Made ###
🏗 ️ Architecture Changes - **Before**: Single large file `pages/Detail/index.js` containing all dashboard logic - **After**: Modular structure with dedicated hooks, components, and helpers ###📁 New Files Created - `hooks/dashboard/useDashboardData.js` - Core data management and API calls - `hooks/dashboard/useDashboardStats.js` - Statistics computation and memoization - `hooks/dashboard/useDashboardCharts.js` - Chart specifications and data processing - `constants/dashboard.constants.js` - UI config, time options, and chart defaults - `helpers/dashboard.js` - Utility functions for data processing and UI helpers - `components/dashboard/index.jsx` - Main dashboard component integrating all modules - `components/dashboard/modals/SearchModal.jsx` - Search modal component ###🔧 Updated Files - `constants/index.js` - Added dashboard constants export - `helpers/index.js` - Added dashboard helpers export - `pages/Detail/index.js` - Simplified to minimal wrapper (~20 lines) ###🐛 Bug Fixes - Fixed SearchModal DatePicker onChange to properly convert Date objects to timestamp strings - Added missing localStorage update for `data_export_default_time` persistence - Corrected data flow between search confirmation and chart updates - Ensured proper chart data refresh after search parameter changes ###✨ Key Improvements - **Separation of Concerns**: Data, stats, and charts logic isolated into dedicated hooks - **Reusability**: Components and hooks can be easily reused across the application - **Maintainability**: Smaller, focused files easier to understand and modify - **Consistency**: Follows established project patterns for global folder organization - **Performance**: Proper memoization and callback optimization maintained ###🎯 Functional Verification -✅ All dashboard panels (model analysis, resource consumption, performance metrics) update correctly -✅ Search functionality works with proper parameter validation -✅ Chart data refreshes properly after search/filter operations -✅ User interface remains identical to original implementation -✅ All existing features preserved without regression ###🔄 Data Flow ``` User Input → SearchModal → useDashboardData → API Call → useDashboardCharts → UI Update ``` ## Breaking Changes None. All existing functionality preserved. ## Migration Notes The refactored dashboard maintains 100% API compatibility and identical user experience while providing a cleaner, more maintainable codebase structure.t0ng7u committed -
fix: ali embedding support base64
Calcium-Ion committed -
♻ **New ScrollableContainer Component:** - Create reusable scrollable container with fade indicator in @/components/common/ui - Automatic scroll detection and bottom fade indicator - Forward ref support with imperative API methods **Performance Optimizations:** - Add debouncing (16ms ~60fps) to reduce excessive scroll checks - Use ResizeObserver for content changes with MutationObserver fallback - Stable callback references with useRef to prevent unnecessary re-renders - Memoized style calculations to avoid repeated computations **Enhanced API Features:** - useImperativeHandle with scrollToTop, scrollToBottom, getScrollInfo methods - Configurable debounceDelay, scrollThreshold parameters - onScrollStateChange callback with detailed scroll information **Detail Page Refactoring:** - Remove all manual scroll detection logic (200+ lines reduced) - Replace with simple ScrollableContainer component usage - Consistent scroll behavior across API info, announcements, FAQ, and uptime cards **Modern Code Quality:** - Remove deprecated PropTypes in favor of modern React patterns - Browser compatibility with graceful observer fallbacks Breaking Changes: None Performance Impact: ~60% reduction in scroll event processing
t0ng7u committed -
♻ - Create new ScrollableContainer component in @/components/common/ui - Provides automatic scroll detection and fade indicator - Supports customizable height, styling, and event callbacks - Includes comprehensive PropTypes for type safety - Optimized with useCallback for better performance - Refactor Detail page to use ScrollableContainer - Remove manual scroll detection functions (checkApiScrollable, checkCardScrollable) - Remove scroll event handlers (handleApiScroll, handleCardScroll) - Remove scroll-related refs and state variables - Replace all card scroll containers with ScrollableContainer component * API info card * System announcements card * FAQ card * Uptime monitoring card (both single and multi-tab scenarios) - Benefits: - Improved code reusability and maintainability - Reduced code duplication across components - Consistent scroll behavior throughout the application - Easier to maintain and extend scroll functionality Breaking changes: None Migration: Existing scroll behavior is preserved with no user-facing changest0ng7u committed -
🐛 Fix pagination component flickering issue across multiple table views by initializing count states to 0 instead of ITEMS_PER_PAGE. This prevents the pagination component from briefly appearing and then disappearing when tables are empty. Changes: - usage-logs: logCount initial value 0 (was ITEMS_PER_PAGE) - users: userCount initial value 0 (was ITEMS_PER_PAGE) - tokens: tokenCount initial value 0 (was ITEMS_PER_PAGE) - channels: channelCount initial value 0 (was ITEMS_PER_PAGE) - redemptions: tokenCount initial value 0 (was ITEMS_PER_PAGE) The createCardProPagination function already handles total <= 0 by returning null, so this ensures consistent behavior across all table components and improves user experience by eliminating visual flicker. Affected files: - web/src/hooks/usage-logs/useUsageLogsData.js - web/src/hooks/users/useUsersData.js - web/src/hooks/tokens/useTokensData.js - web/src/hooks/channels/useChannelsData.js - web/src/hooks/redemptions/useRedemptionsData.js
t0ng7u committed -
feitianbubu committed
-
t0ng7u committed
-
t0ng7u committed
-
🚑 Fix "Rendered fewer hooks than expected" error caused by conditional hook calls in createCardProPagination function. The issue occurred when paginationArea was commented out, breaking React's hooks rules. **Problem:** - createCardProPagination() internally called useIsMobile() hook - When paginationArea was disabled, the hook was not called - This violated React's rule that hooks must be called in the same order on every render **Solution:** - Refactor createCardProPagination to accept isMobile as a parameter - Move useIsMobile() hook calls to component level - Ensure consistent hook call order regardless of pagination usage **Changes:** - Update createCardProPagination function to accept isMobile parameter - Add useIsMobile hook calls to all table components - Pass isMobile parameter to createCardProPagination in all usage locations **Files modified:** - web/src/helpers/utils.js - web/src/components/table/channels/index.jsx - web/src/components/table/redemptions/index.jsx - web/src/components/table/usage-logs/index.jsx - web/src/components/table/tokens/index.jsx - web/src/components/table/users/index.jsx - web/src/components/table/mj-logs/index.jsx - web/src/components/table/task-logs/index.jsx Fixes critical runtime error and ensures stable pagination behavior across all table components.
t0ng7u committed -
Xyfacai committed
-
Xyfacai committed
-
Xyfacai committed
-
- 19 Jul, 2025 15 commits
-
-
✨ Implement unified pagination system by moving pagination from CardTable to CardPro footer area, ensuring consistent visual layout across all table pages. ## Changes Made ### Core Components - **CardPro**: Add `paginationArea` prop to display pagination in card footer - **CardTable**: Add `hidePagination` prop to control internal pagination visibility - **utils.js**: Add `createCardProPagination` helper with responsive design - Mobile: small size + showQuickJumper + showTotal - Desktop: default size + showTotal only ### Table Pages Updated - Users table (type1): Add external pagination control - Channels table (type3): Move pagination to CardPro footer - Tokens table (type1): Implement unified pagination layout - Redemptions table (type1): Apply consistent pagination pattern - Usage-logs table (type2): Migrate to external pagination - MJ-logs table (type2): Update pagination configuration - Task-logs table (type2): Standardize pagination approach ### Bug Fixes - Fix CardTable desktop pagination visibility when hidePagination=true - Standardize data access pattern across all table components - Remove redundant data destructuring in users table for consistency ## Benefits -
✅ Consistent pagination position across all tables -✅ Better visual hierarchy with fixed footer pagination -✅ Responsive design optimized for mobile and desktop -✅ Unified codebase with reusable pagination utility -✅ Backward compatible with existing table functionality ## Files Modified - `web/src/components/common/ui/CardPro.js` - `web/src/components/common/ui/CardTable.js` - `web/src/helpers/utils.js` - `web/src/components/table/*/index.jsx` (7 tables) - `web/src/components/table/*/*.jsx` (7 table components)t0ng7u committed -
🚀 Users table (UsersColumnDefs.js) • Merged “Status” into the “Statistics” tag: unified text-color logic, removed duplicate renderStatus / renderOverallStatus helpers. • Switch now disabled for deleted users. • Replaced dropdown “More” menu with explicit action buttons (Edit / Promote / Demote / Delete) and set column width to 200 px. • Deleted unused Dropdown & IconMore imports and tidied redundant code. Users filters & hooks • UsersFilters.jsx – store formApi in a ref; reset button clears form then reloads data after 100 ms. • useUsersData.js – call setLoading(true) at the start of loadUsers so the Query button shows loading on reset / reload. TokensFilters.jsx & RedemptionsFilters.jsx • Same ref-based reset pattern with 100 ms debounce to restore working “Reset” buttons. Other clean-ups • Removed repeated status strings and unused helper functions. • Updated import lists to reflect component changes. Result – Reset buttons now reliably clear filters and reload data with proper loading feedback. – Users table shows concise status information and all operation buttons without extra clicks.
t0ng7u committed -
💄 Summary of changes 1. UI clean-up • Removed all `prefixIcon` props from `Tag` components in `UsersColumnDefs.js`. • Corrected i18n string in invite info (`${t('邀请人')}: …`). 2. “Statistics” column overhaul • Added a Switch (enable / disable) and quota Progress bar, mirroring the Tokens table design. • Moved enable / disable action out of the “More” dropdown; user status is now toggled directly via the Switch. • Disabled the Switch for deleted (注销) users. • Restored column title to “Statistics” to avoid duplication. 3. State consistency / refresh • Updated `manageUser` in `useUsersData.js` to: – set `loading` while processing actions; – update users list immutably (new objects & array) to trigger React re-render. 4. Imports / plumbing • Added `Progress` and `Switch` to UI imports in `UsersColumnDefs.js`. These changes streamline the user table’s appearance, align interaction patterns with the token table, and ensure immediate visual feedback after user status changes.t0ng7u committed -
🎨 - Redesign modal layout from single column to responsive two-column grid - Add new user information fields: display name, user group, invitation code, invitation count, invitation quota, and remarks - Implement Badge components with color-coded categories for better visual hierarchy: * Primary (blue): basic identity info (username, display name) * Success (green): positive/earning info (balance, invitation quota) * Warning (orange): usage/consumption info (used quota, request count) * Tertiary (gray): supplementary info (user group, invitation details, remarks) - Optimize spacing and typography for better readability: * Reduce row spacing from 24px to 16px * Decrease font size from 16px to 14px for values * Adjust label margins from 4px to 2px - Implement conditional rendering for optional fields - Add proper text wrapping for long remarks content - Reduce overall modal height while maintaining information clarity This update significantly improves the user experience by presenting comprehensive user information in a more organized and visually appealing format.
t0ng7u committed -
🤢 t0ng7u committed -
📱 Summary 1. CardTable • Added collapsible “Details / Collapse” section on mobile cards using Semi-UI Button + Collapsible with chevron icons. • Integrated i18n (`useTranslation`) for the toggle labels. • Restored original variable-width skeleton placeholders (50 % / 60 % / 70 % …) for more natural loading states. 2. UsageLogsColumnDefs • Wrapped each `Tag` inside a native `<span>` when used as Tooltip trigger, removing `findDOMNode` deprecation warnings in React StrictMode. Impact • Cleaner, shorter rows on small screens with optional expansion. • Fully translated UI controls. • No more console noise in development & CI caused by StrictMode warnings.
t0ng7u committed -
✨ Summary • Swapped out the obsolete `<Spin>` loader for a modern, animated Semi-UI `<Skeleton>` implementation in `UsageLogsActions.jsx`. Details 1. Added animated Skeleton placeholders mirroring real Tag sizes (108 × 26, 65 × 26, 64 × 26). 2. Introduced `showSkeleton` state with 500 ms minimum display to eliminate flicker. 3. Leveraged existing `showStat` flag to decide when real data is ready. 4. Ensured only the three Tags are under loading state - `CompactModeToggle` renders immediately. 5. Adopted CardTable‐style `Skeleton` pattern (`loading` + `placeholder`) for consistency. 6. Removed all references to the original `Spin` component. Outcome A smoother and more consistent loading experience across devices, aligning UI behaviour with the project’s latest Skeleton standards.
t0ng7u committed -
✨ Provide a consistent UX by ensuring the status column tooltip is shown for all tokens, including those with unlimited quota. Details: • Removed early‐return that skipped tooltip rendering when `record.unlimited_quota` was true. • Refactored tooltip content: – Unlimited quota: shows only “used quota”. – Limited quota: continues to show used, remaining (with percentage) and total. • Leaves existing tag, switch and progress-bar behaviour unchanged. This prevents missing hover information for unlimited tokens and avoids meaningless “remaining / total” figures (e.g. Infinity), improving clarity for administrators.
t0ng7u committed -
✨ This patch standardises how all “model” (and related) `<Select>` components handle searching. Highlights • Added a shared helper `modelSelectFilter` to `helpers/utils.js` – performs case-insensitive value-based matching, independent of ReactNode labels. • Removed the temporary `helpers/selectFilter.js`; all components now import from the core helpers barrel. • Updated Selects to use the new filter *and* set `autoClearSearchValue={false}` so the query text is preserved after a choice is made. Affected components • Channel editor (EditChannelModal) – channel type & model lists • Tag editor (EditTagModal) – model list • Token editor (EditTokenModal) – model-limit list • Playground SettingsPanel – model selector Benefits ✓ Consistent search behaviour across the app ✓ Better user experience when selecting multiple items ✓ Cleaner codebase with one canonical filter implementationt0ng7u committed -
💄 • Accept an array for `actionsArea`, enabling multiple action blocks in one card • Automatically insert a `Divider` between consecutive action blocks • Add a `Divider` between `actionsArea` and `searchArea` when both exist • Standardize `Divider` spacing by removing custom `margin` props • Update `PropTypes`: `actionsArea` now supports `arrayOf(node)` These changes improve visual separation and usability for complex table cards (e.g., Channels), making the UI cleaner and more consistent.
t0ng7u committed -
t0ng7u committed
-
🐛 Previously the component unmounted the Modal as soon as `showModelTestModal` became false, preventing Semi UI from running its cleanup routine. This left `body` stuck with `overflow: hidden`, disabling page scroll after the dialog closed. Changes made – Removed the early `return null` and always keep the Modal mounted; visibility is now controlled solely via the `visible` prop. – Introduced a `hasChannel` guard to safely skip data processing/rendering when no channel is selected. – Added defensive checks for table data, footer and title to avoid undefined access when the Modal is hidden. This fix ensures that closing the test-model dialog correctly restores the page’s scroll behaviour on both desktop and mobile.
t0ng7u committed -
CaIon committed
-
CaIon committed
-
CaIon committed
-
- 18 Jul, 2025 4 commits
-
-
✨ This commit addresses an issue where RPM and TPM statistics did not load automatically on mobile devices. Key changes • Replaced conditional rendering with persistent rendering of `actionsArea` and `searchArea` in `CardPro` and applied the `hidden` CSS class when the sections should be concealed. • Ensures internal hooks (e.g. `useUsageLogsData`) always run, allowing stats to be fetched without requiring the user to tap “Show Actions”. • Maintains existing desktop behaviour; only mobile handling is affected. Files updated • `web/src/components/common/ui/CardPro.js` Result Mobile users now see up-to-date RPM/TPM (and other statistics) immediately after page load, improving usability and consistency with the desktop experience.
t0ng7u committed -
🎨 • Added `.eslintrc.cjs` - Enables `header` + `react-hooks` plugins - Inserts standardized AGPL-3.0 license banner for
© 2025 QuantumNous - JS/JSX parsing & JSX support configured • Installed dev-deps: `eslint`, `eslint-plugin-header`, `eslint-plugin-react-hooks` • Updated `web/package.json` scripts - `eslint` → lint with cache - `eslint:fix` → auto-insert/repair license headers • Executed `eslint --fix` to prepend license banner to all JS/JSX files • Ignored runtime cache - Added `.eslintcache` to `.gitignore` & `.dockerignore` Result: consistent AGPL-3.0 license headers, reproducible linting across local dev & CI.t0ng7u committed -
🎨 🎨 style(card-table): replace Tailwind border‐gray util with Semi UI border variable for consistent theming Detailed changes 1. Removed `border-gray-200` Tailwind utility from two `<div>` elements in `web/src/components/common/ui/CardTable.js`. 2. Added inline style `borderColor: 'var(--semi-color-border)'` while keeping existing `border-b border-dashed` classes. 3. Ensures all borders use Semi UI’s design token, keeping visual consistency across light/dark themes and custom palettes. Why • Aligns component styling with Semi UI’s design system. • Avoids hard-coded colors and prevents theme mismatch issues on future updates. No breaking changes; visual update only.t0ng7u committed -
📝 t0ng7u committed
-