From 5f884d52dbca722a0d6f88cb2d7a3bd7e9419683 Mon Sep 17 00:00:00 2001 From: jiangwel Date: Thu, 14 Aug 2025 17:25:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=99=BA=E8=B0=B1?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?UI=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增智谱(ZhiPu)作为模型提供商 - 重构类型定义和主题配置 - 更新README文档和使用示例 - 修复样式问题和类型错误 - 优化表单交互和国际化支持 --- domain/modelkit.go | 31 +- pnpm-lock.yaml | 29 -- ui/ModelModal/README.md | 95 ++++-- ui/ModelModal/package.json | 5 +- ui/ModelModal/pnpm-lock.yaml | 215 +++++--------- ui/ModelModal/src/ModelModal.tsx | 277 +++++++++--------- ui/ModelModal/src/api/Model.ts | 244 --------------- ui/ModelModal/src/api/httpClient.ts | 217 -------------- ui/ModelModal/src/assets/fonts/iconfont.js | 2 +- ui/ModelModal/src/assets/images/logo.png | Bin 0 -> 54599 bytes ui/ModelModal/src/assets/images/nodata.png | Bin 0 -> 31010 bytes ui/ModelModal/src/assets/images/qrcode.png | Bin 0 -> 44786 bytes ui/ModelModal/src/components/card/index.tsx | 13 +- ui/ModelModal/src/constants/locale.ts | 2 +- ui/ModelModal/src/constants/providers.ts | 12 +- ui/ModelModal/src/constants/theme.ts | 253 ++++++++++++++++ ui/ModelModal/src/index.ts | 9 +- ui/ModelModal/src/theme.ts | 237 +++++++++++++++ ui/ModelModal/src/types/theme.d.ts | 48 +++ .../src/types/{index.ts => types.ts} | 1 + ui/ModelModal/src/vite-env.d.ts | 35 +++ usecase/modelkit.go | 1 + 22 files changed, 908 insertions(+), 818 deletions(-) delete mode 100644 pnpm-lock.yaml delete mode 100644 ui/ModelModal/src/api/Model.ts delete mode 100644 ui/ModelModal/src/api/httpClient.ts create mode 100644 ui/ModelModal/src/assets/images/logo.png create mode 100644 ui/ModelModal/src/assets/images/nodata.png create mode 100644 ui/ModelModal/src/assets/images/qrcode.png create mode 100644 ui/ModelModal/src/constants/theme.ts create mode 100644 ui/ModelModal/src/theme.ts create mode 100644 ui/ModelModal/src/types/theme.d.ts rename ui/ModelModal/src/types/{index.ts => types.ts} (99%) create mode 100644 ui/ModelModal/src/vite-env.d.ts diff --git a/domain/modelkit.go b/domain/modelkit.go index f0f28bd..432bb84 100644 --- a/domain/modelkit.go +++ b/domain/modelkit.go @@ -403,7 +403,7 @@ func getSiliconFlowModels() []ModelMetadata { {ModelName: "Qwen/Qwen3-Coder-30B-A3B-Instruct", Object: "model", Provider: consts.ModelProviderSiliconFlow, ModelType: consts.ModelTypeCoder}, } } - +// 月之暗面模型 func getMoonshotModels() []ModelMetadata { return []ModelMetadata{ {ModelName: "moonshot-v1-auto", Object: "model", Provider: consts.ModelProviderMoonshot, ModelType: consts.ModelTypeChat}, @@ -414,6 +414,7 @@ func getMoonshotModels() []ModelMetadata { } +// getAzureOpenAIModels 返回Azure OpenAI模型列表 func getAzureOpenAIModels() []ModelMetadata { return []ModelMetadata{ {ModelName: "gpt-4", Object: "model", Provider: consts.ModelProviderAzureOpenAI, ModelType: consts.ModelTypeChat}, @@ -452,22 +453,22 @@ func getGeminiModels() []ModelMetadata { func getZhiPuModels() []ModelMetadata { return []ModelMetadata{ {ModelName: "glm-4.5", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4.5-x", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4.5-x", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, {ModelName: "glm-4.5-air", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4.5-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4.5-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, {ModelName: "glm-4.5-flash", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-plus", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-air-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-long", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-flashx-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4-flash-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-z1-air", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-z1-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-z1-flashx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-z1-flash", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, - {ModelName: "glm-4v-plus-0111", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeVision}, - {ModelName: "glm-4v-flash", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeVision}, + // {ModelName: "glm-4-plus", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4-air-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4-long", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4-flashx-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4-flash-250414", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-z1-air", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-z1-airx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-z1-flashx", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-z1-flash", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeChat}, + // {ModelName: "glm-4v-plus-0111", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeVision}, + // {ModelName: "glm-4v-flash", Object: "model", Provider: consts.ModelProviderZhiPu, ModelType: consts.ModelTypeVision}, } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 7aa65a7..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,29 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@types/node': - specifier: ^24.2.1 - version: 24.2.1 - -packages: - - '@types/node@24.2.1': - resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} - - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - -snapshots: - - '@types/node@24.2.1': - dependencies: - undici-types: 7.10.0 - - undici-types@7.10.0: {} diff --git a/ui/ModelModal/README.md b/ui/ModelModal/README.md index fde4ef4..8e97c2d 100644 --- a/ui/ModelModal/README.md +++ b/ui/ModelModal/README.md @@ -1,6 +1,6 @@ -# ModelKit UI +# ModelModal -一个基于 React 和 Material-UI 的模型管理组件库。 +一个用于管理AI模型配置的React组件,基于Material-UI构建。 ## 安装 @@ -14,37 +14,90 @@ pnpm add @yokowu/modelkit-ui ## 使用方法 -### 基本使用 +### 基本用法 ```tsx -import React, { useState } from 'react'; -import { ModelAdd, ModelProvider } from '@yokowu/modelkit-ui'; +import React from 'react'; +import { ModelModal, ConstsModelType } from '@your-org/model-modal'; +import { ThemeProvider, createTheme } from '@mui/material/styles'; + +// 创建主题时需要包含 paper2 背景色 +const theme = createTheme({ + palette: { + background: { + default: '#fff', + paper: '#F1F2F8', + paper2: '#F8F9FA', // 重要:需要定义 paper2 背景色 + }, + }, +}); function App() { - const [modalOpen, setModalOpen] = useState(false); - - const handleModalClose = () => { - setModalOpen(false); - }; - - const handleRefresh = () => { - // 刷新逻辑 + const [open, setOpen] = React.useState(false); + + const modelService = { + createModel: async (data) => { + // 实现创建模型的逻辑 + return { model: {} }; + }, + listModel: async (data) => { + // 实现获取模型列表的逻辑 + return { models: [] }; + }, + checkModel: async (data) => { + // 实现检查模型的逻辑 + return { model: {} }; + }, + updateModel: async (data) => { + // 实现更新模型的逻辑 + return { model: {} }; + }, }; return ( -
- + setOpen(false)} + refresh={() => console.log('refresh')} data={null} - type="chat" - onClose={handleModalClose} - refresh={handleRefresh} + type={ConstsModelType.ModelTypeLLM} + modelService={modelService} /> -
+ ); } +``` -export default App; +### 主题配置 + +为了确保组件样式正确显示,你需要在主题中定义 `background.paper2` 属性: + +```tsx +import { createTheme } from '@mui/material/styles'; +import { mergeThemeWithDefaults } from '@your-org/model-modal'; + +// 方法1:直接在主题中定义 +const theme = createTheme({ + palette: { + background: { + default: '#fff', + paper: '#F1F2F8', + paper2: '#F8F9FA', // 必需 + }, + }, +}); + +// 方法2:使用提供的合并工具 +const baseTheme = createTheme({ + palette: { + primary: { + main: '#1976d2', + }, + }, +}); + +const theme = mergeThemeWithDefaults(baseTheme); ``` ## 组件 diff --git a/ui/ModelModal/package.json b/ui/ModelModal/package.json index c1803fe..7b0d7cb 100644 --- a/ui/ModelModal/package.json +++ b/ui/ModelModal/package.json @@ -1,6 +1,6 @@ { "name": "@yokowu/modelkit-ui", - "version": "0.2.0", + "version": "0.3.0", "description": "A reusable AI model configuration modal component for React applications", "private": false, "type": "module", @@ -55,7 +55,7 @@ }, "dependencies": { "@c-x/ui": "^1.0.9", - "@mui/material": "^7.3.1", + "@mui/material": "^6.4.12", "react": "^19.1.0", "react-activity-calendar": "^2.7.12", "react-copy-to-clipboard": "^5.1.0", @@ -66,6 +66,7 @@ "react-syntax-highlighter": "^15.6.1" }, "devDependencies": { + "@types/node": "^24.2.1", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "^4.4.1", diff --git a/ui/ModelModal/pnpm-lock.yaml b/ui/ModelModal/pnpm-lock.yaml index bae97d6..7e8307d 100644 --- a/ui/ModelModal/pnpm-lock.yaml +++ b/ui/ModelModal/pnpm-lock.yaml @@ -10,10 +10,10 @@ importers: dependencies: '@c-x/ui': specifier: ^1.0.9 - version: 1.0.9(f4d7aaa425137340707156a337dd7fe8) + version: 1.0.9(d7ef6141ca5ef333168542ae2595cf87) '@mui/material': - specifier: ^7.3.1 - version: 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^6.4.12 + version: 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: ^19.1.0 version: 19.1.1 @@ -39,6 +39,9 @@ importers: specifier: ^15.6.1 version: 15.6.1(react@19.1.1) devDependencies: + '@types/node': + specifier: ^24.2.1 + version: 24.2.1 '@types/react': specifier: ^19.1.10 version: 19.1.10 @@ -47,16 +50,16 @@ importers: version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.7.0(vite@6.3.5) + version: 4.7.0(vite@6.3.5(@types/node@24.2.1)) axios: specifier: ^1.11.0 version: 1.11.0 vite: specifier: ^6.3.5 - version: 6.3.5 + version: 6.3.5(@types/node@24.2.1) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(rollup@4.46.2)(typescript@5.8.2)(vite@6.3.5) + version: 4.5.4(@types/node@24.2.1)(rollup@4.46.2)(typescript@5.8.2)(vite@6.3.5(@types/node@24.2.1)) packages: @@ -434,8 +437,8 @@ packages: '@types/react': optional: true - '@mui/core-downloads-tracker@7.3.1': - resolution: {integrity: sha512-+mIK1Z0BhOaQ0vCgOkT1mSrIpEHLo338h4/duuL4TBLXPvUMit732mnwJY3W40Avy30HdeSfwUAAGRkKmwRaEQ==} + '@mui/core-downloads-tracker@6.5.0': + resolution: {integrity: sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q==} '@mui/icons-material@6.5.0': resolution: {integrity: sha512-VPuPqXqbBPlcVSA0BmnoE4knW4/xG6Thazo8vCLWkOKusko6DtwFV6B665MMWJ9j0KFohTIf3yx2zYtYacvG1g==} @@ -466,13 +469,13 @@ packages: '@types/react': optional: true - '@mui/material@7.3.1': - resolution: {integrity: sha512-Xf6Shbo03YmcBedZMwSpEFOwpYDtU7tC+rhAHTrA9FHk0FpsDqiQ9jUa1j/9s3HLs7KWb5mDcGnlwdh9Q9KAag==} + '@mui/material@6.5.0': + resolution: {integrity: sha512-yjvtXoFcrPLGtgKRxFaH6OQPtcLPhkloC0BML6rBG5UeldR0nPULR/2E2BfXdo5JNV7j7lOzrrLX2Qf/iSidow==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.3.1 + '@mui/material-pigment-css': ^6.5.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -496,16 +499,6 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.3.1': - resolution: {integrity: sha512-WU3YLkKXii/x8ZEKnrLKsPwplCVE11yZxUvlaaZSIzCcI3x2OdFC8eMlNy74hVeUsYQvzzX1Es/k4ARPlFvpPQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@mui/styled-engine@6.5.0': resolution: {integrity: sha512-8woC2zAqF4qUDSPIBZ8v3sakj+WgweolpyM/FXf8jAx6FMls+IE4Y8VDZc+zS805J7PRz31vz73n2SovKGaYgw==} engines: {node: '>=14.0.0'} @@ -519,19 +512,6 @@ packages: '@emotion/styled': optional: true - '@mui/styled-engine@7.3.1': - resolution: {integrity: sha512-Nqo6OHjvJpXJ1+9TekTE//+8RybgPQUKwns2Lh0sq+8rJOUSUKS3KALv4InSOdHhIM9Mdi8/L7LTF1/Ky6D6TQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@mui/system@6.5.0': resolution: {integrity: sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==} engines: {node: '>=14.0.0'} @@ -548,22 +528,6 @@ packages: '@types/react': optional: true - '@mui/system@7.3.1': - resolution: {integrity: sha512-mIidecvcNVpNJMdPDmCeoSL5zshKBbYPcphjuh6ZMjhybhqhZ4mX6k9zmIWh6XOXcqRQMg5KrcjnO0QstrNj3w==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@types/react': - optional: true - '@mui/types@7.2.24': resolution: {integrity: sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==} peerDependencies: @@ -590,16 +554,6 @@ packages: '@types/react': optional: true - '@mui/utils@7.3.1': - resolution: {integrity: sha512-/31y4wZqVWa0jzMnzo6JPjxwP6xXy4P3+iLbosFg/mJQowL1KIou0LC+lquWW60FKVbKz5ZUWBg2H3jausa0pw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} @@ -773,6 +727,9 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@24.2.1': + resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -901,8 +858,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001734: - resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==} + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1657,6 +1614,9 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -1884,14 +1844,14 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@c-x/ui@1.0.9(f4d7aaa425137340707156a337dd7fe8)': + '@c-x/ui@1.0.9(d7ef6141ca5ef333168542ae2595cf87)': dependencies: '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/icons-material': 6.5.0(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/lab': 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/material': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) + '@mui/icons-material': 6.5.0(@mui/material@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) + '@mui/lab': 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@mui/material@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/utils': 6.4.9(@types/react@19.1.10)(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-virtuoso: 4.14.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -2094,23 +2054,23 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@microsoft/api-extractor-model@7.30.7': + '@microsoft/api-extractor-model@7.30.7(@types/node@24.2.1)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0 + '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.10': + '@microsoft/api-extractor@7.52.10(@types/node@24.2.1)': dependencies: - '@microsoft/api-extractor-model': 7.30.7 + '@microsoft/api-extractor-model': 7.30.7(@types/node@24.2.1) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0 + '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.4 - '@rushstack/ts-command-line': 5.0.2 + '@rushstack/terminal': 0.15.4(@types/node@24.2.1) + '@rushstack/ts-command-line': 5.0.2(@types/node@24.2.1) lodash: 4.17.21 minimatch: 10.0.3 resolve: 1.22.10 @@ -2143,21 +2103,21 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@mui/core-downloads-tracker@7.3.1': {} + '@mui/core-downloads-tracker@6.5.0': {} - '@mui/icons-material@6.5.0(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': + '@mui/icons-material@6.5.0(@mui/material@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/material': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 optionalDependencies: '@types/react': 19.1.10 - '@mui/lab@6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/lab@6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@mui/material@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 '@mui/base': 5.0.0-beta.42(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mui/material': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mui/system': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) '@mui/types': 7.4.5(@types/react@19.1.10) '@mui/utils': 6.4.9(@types/react@19.1.10)(react@19.1.1) @@ -2170,13 +2130,13 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) '@types/react': 19.1.10 - '@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/material@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/core-downloads-tracker': 7.3.1 - '@mui/system': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/types': 7.4.5(@types/react@19.1.10) - '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) + '@mui/core-downloads-tracker': 6.5.0 + '@mui/system': 6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) + '@mui/types': 7.2.24(@types/react@19.1.10) + '@mui/utils': 6.4.9(@types/react@19.1.10)(react@19.1.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.1.10) clsx: 2.1.1 @@ -2200,15 +2160,6 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@mui/private-theming@7.3.1(@types/react@19.1.10)(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.2 - '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) - prop-types: 15.8.1 - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.10 - '@mui/styled-engine@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 @@ -2222,19 +2173,6 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/styled-engine@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.2 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/sheet': 1.4.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 19.1.1 - optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/system@6.5.0(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 @@ -2251,22 +2189,6 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) '@types/react': 19.1.10 - '@mui/system@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.2 - '@mui/private-theming': 7.3.1(@types/react@19.1.10)(react@19.1.1) - '@mui/styled-engine': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(react@19.1.1) - '@mui/types': 7.4.5(@types/react@19.1.10) - '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 19.1.1 - optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@types/react': 19.1.10 - '@mui/types@7.2.24(@types/react@19.1.10)': optionalDependencies: '@types/react': 19.1.10 @@ -2289,18 +2211,6 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@mui/utils@7.3.1(@types/react@19.1.10)(react@19.1.1)': - dependencies: - '@babel/runtime': 7.28.2 - '@mui/types': 7.4.5(@types/react@19.1.10) - '@types/prop-types': 15.7.15 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 19.1.1 - react-is: 19.1.1 - optionalDependencies: - '@types/react': 19.1.10 - '@popperjs/core@2.11.8': {} '@rolldown/pluginutils@1.0.0-beta.27': {} @@ -2373,7 +2283,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@rushstack/node-core-library@5.14.0': + '@rushstack/node-core-library@5.14.0(@types/node@24.2.1)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -2383,20 +2293,24 @@ snapshots: jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 + optionalDependencies: + '@types/node': 24.2.1 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.4': + '@rushstack/terminal@0.15.4(@types/node@24.2.1)': dependencies: - '@rushstack/node-core-library': 5.14.0 + '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) supports-color: 8.1.1 + optionalDependencies: + '@types/node': 24.2.1 - '@rushstack/ts-command-line@5.0.2': + '@rushstack/ts-command-line@5.0.2(@types/node@24.2.1)': dependencies: - '@rushstack/terminal': 0.15.4 + '@rushstack/terminal': 0.15.4(@types/node@24.2.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -2450,6 +2364,10 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node@24.2.1': + dependencies: + undici-types: 7.10.0 + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.15': {} @@ -2472,7 +2390,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@6.3.5)': + '@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@24.2.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -2480,7 +2398,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5 + vite: 6.3.5(@types/node@24.2.1) transitivePeerDependencies: - supports-color @@ -2585,7 +2503,7 @@ snapshots: browserslist@4.25.2: dependencies: - caniuse-lite: 1.0.30001734 + caniuse-lite: 1.0.30001735 electron-to-chromium: 1.5.200 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.2) @@ -2597,7 +2515,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001734: {} + caniuse-lite@1.0.30001735: {} ccount@2.0.1: {} @@ -3497,6 +3415,8 @@ snapshots: ufo@1.6.1: {} + undici-types@7.10.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -3552,9 +3472,9 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-dts@4.5.4(rollup@4.46.2)(typescript@5.8.2)(vite@6.3.5): + vite-plugin-dts@4.5.4(@types/node@24.2.1)(rollup@4.46.2)(typescript@5.8.2)(vite@6.3.5(@types/node@24.2.1)): dependencies: - '@microsoft/api-extractor': 7.52.10 + '@microsoft/api-extractor': 7.52.10(@types/node@24.2.1) '@rollup/pluginutils': 5.2.0(rollup@4.46.2) '@volar/typescript': 2.4.23 '@vue/language-core': 2.2.0(typescript@5.8.2) @@ -3565,13 +3485,13 @@ snapshots: magic-string: 0.30.17 typescript: 5.8.2 optionalDependencies: - vite: 6.3.5 + vite: 6.3.5(@types/node@24.2.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@6.3.5: + vite@6.3.5(@types/node@24.2.1): dependencies: esbuild: 0.25.9 fdir: 6.4.6(picomatch@4.0.3) @@ -3580,6 +3500,7 @@ snapshots: rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: + '@types/node': 24.2.1 fsevents: 2.3.3 vscode-uri@3.1.0: {} diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index c75d156..a50b2af 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -12,7 +12,7 @@ import { Checkbox, FormControlLabel, } from '@mui/material'; -import { Icon, message, Modal } from '@c-x/ui'; +import { Icon, message, Modal, ThemeProvider } from '@c-x/ui'; import Card from './components/card'; import React, { useEffect, useState } from 'react'; import { useForm, Controller } from 'react-hook-form'; @@ -21,11 +21,13 @@ import { Model, ConstsModelType, ModelModalProps, -} from './types'; +} from './types/types'; import { DEFAULT_MODEL_PROVIDERS } from './constants/providers'; -import { getTitleMap } from './constants/locale'; import { ModelProvider } from './constants/providers'; +import { mergeThemeWithDefaults } from './constants/theme'; +import { getLocaleMessage } from './constants/locale'; import './assets/fonts/iconfont'; +import { lightTheme } from './theme'; const titleMap = { [ConstsModelType.ModelTypeLLM]: '对话模型', @@ -42,6 +44,7 @@ export const ModelModal: React.FC = ({ data, type = ConstsModelType.ModelTypeLLM, modelService, + language = 'zh-CN', }: ModelModalProps) => { const theme = useTheme(); @@ -299,12 +302,14 @@ export const ModelModal: React.FC = ({ }, [data, open]); return ( + = ({ fullWidth variant='outlined' loading={modelLoading} - sx={{ mt: 4 }} + sx={{ + mt: 4, + borderRadius: '10px', + boxShadow: 'none', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', 'Roboto', 'Helvetica', 'Arial', sans-serif`, + color: 'black', + borderColor: 'black' + }} onClick={handleSubmit(getModel)} > 获取模型列表 @@ -642,147 +654,149 @@ export const ModelModal: React.FC = ({ )} - {/* 高级设置部分 */} - - + )} + {/* 高级设置部分 - 在选择了模型或者是其它供应商时显示 */} + {(modelUserList.length !== 0 || providerBrand === 'Other') && ( + + setExpandAdvanced(!expandAdvanced)} + > + setExpandAdvanced(!expandAdvanced)} > - - 高级设置 - - - - - - 上下文窗口大小 - - ( - <> - field.onChange(Number(e.target.value))} - /> - - {[ - { label: '128k', value: 128000 }, - { label: '256k', value: 256000 }, - { label: '512k', value: 512000 }, - { label: '1m', value: 1_000_000 } - ].map((option) => ( - field.onChange(option.value)} - > - {option.label} - - ))} - - - )} - /> + 高级设置 + + + + + + 上下文窗口大小 - - - - 最大输出 Token - - ( + ( + <> field.onChange(Number(e.target.value))} /> - )} - /> + + {[ + { label: '128k', value: 128000 }, + { label: '256k', value: 256000 }, + { label: '512k', value: 512000 }, + { label: '1m', value: 1_000_000 } + ].map((option) => ( + field.onChange(option.value)} + > + {option.label} + + ))} + + + )} + /> + + + + + 最大输出 Token - - {/* 复选框组 - 使用更紧凑的布局 */} - - ( - field.onChange(e.target.checked)} - size='small' - /> - } - label={ - - 启用 R1 模型参数 - - (使用 QWQ 等 R1 系列模型时必须启用,避免出现 400 错误) - + ( + field.onChange(Number(e.target.value))} + /> + )} + /> + + + {/* 复选框组 - 使用更紧凑的布局 */} + + ( + field.onChange(e.target.checked)} + size='small' + /> + } + label={ + + 启用 R1 模型参数 + + (使用 QWQ 等 R1 系列模型时必须启用,避免出现 400 错误) - } - sx={{ margin: 0 }} - /> - )} - /> - + + } + sx={{ margin: 0 }} + /> + )} + /> - - - - - )} + + + + + )} {error && ( = ({ + ); }; diff --git a/ui/ModelModal/src/api/Model.ts b/ui/ModelModal/src/api/Model.ts deleted file mode 100644 index b52db83..0000000 --- a/ui/ModelModal/src/api/Model.ts +++ /dev/null @@ -1,244 +0,0 @@ -import request, { ContentType, RequestParams } from "./httpClient"; -import { - DeleteDeleteModelParams, - DomainAllModelResp, - DomainCheckModelReq, - DomainCreateModelReq, - DomainGetProviderModelListResp, - DomainModel, - DomainModelTokenUsageResp, - DomainUpdateModelReq, - GetGetProviderModelListParams, - GetGetTokenUsageParams, - GetMyModelListParams, - WebResp, -} from "../types"; - -/** - * @description 获取模型列表 - * - * @tags Model - * @name GetListModel - * @summary 获取模型列表 - * @request GET:/api/v1/model - * @response `200` `(WebResp & { - data?: DomainAllModelResp, - -})` OK - */ - -export const getListModel = (params: RequestParams = {}) => - request< - WebResp & { - data?: DomainAllModelResp; - } - >({ - path: `/api/v1/model`, - method: "GET", - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 更新模型 - * - * @tags Model - * @name PutUpdateModel - * @summary 更新模型 - * @request PUT:/api/v1/model - * @response `200` `(WebResp & { - data?: DomainModel, - -})` OK - */ - -export const putUpdateModel = ( - model: DomainUpdateModelReq, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainModel; - } - >({ - path: `/api/v1/model`, - method: "PUT", - body: model, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 创建模型 - * - * @tags Model - * @name PostCreateModel - * @summary 创建模型 - * @request POST:/api/v1/model - * @response `200` `(WebResp & { - data?: DomainModel, - -})` OK - */ - -export const postCreateModel = ( - model: DomainCreateModelReq, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainModel; - } - >({ - path: `/api/v1/model`, - method: "POST", - body: model, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 删除模型 - * - * @tags Model - * @name DeleteDeleteModel - * @summary 删除模型 - * @request DELETE:/api/v1/model - * @response `200` `WebResp` OK - */ - -export const deleteDeleteModel = ( - query: DeleteDeleteModelParams, - params: RequestParams = {}, -) => - request({ - path: `/api/v1/model`, - method: "DELETE", - query: query, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 检查模型 - * - * @tags Model - * @name PostCheckModel - * @summary 检查模型 - * @request POST:/api/v1/model/check - * @response `200` `(WebResp & { - data?: DomainModel, - -})` OK - */ - -export const postCheckModel = ( - model: DomainCheckModelReq, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainModel; - } - >({ - path: `/api/v1/model/check`, - method: "POST", - body: model, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 获取我的模型列表 - * - * @tags Model - * @name GetMyModelList - * @summary 获取我的模型列表 - * @request GET:/api/v1/model/my - * @response `200` `(WebResp & { - data?: (DomainModel)[], - -})` OK - */ - -export const getMyModelList = ( - query: GetMyModelListParams, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainModel[]; - } - >({ - path: `/api/v1/model/my`, - method: "GET", - query: query, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 获取供应商支持的模型列表 - * - * @tags Model - * @name GetGetProviderModelList - * @summary 获取供应商支持的模型列表 - * @request GET:/api/v1/model/provider/supported - * @response `200` `(WebResp & { - data?: DomainGetProviderModelListResp, - -})` OK - */ - -export const getGetProviderModelList = ( - query: GetGetProviderModelListParams, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainGetProviderModelListResp; - } - >({ - path: `/api/v1/model/provider/supported`, - method: "GET", - query: query, - type: ContentType.Json, - format: "json", - ...params, - }); - -/** - * @description 获取模型token使用情况 - * - * @tags Model - * @name GetGetTokenUsage - * @summary 获取模型token使用情况 - * @request GET:/api/v1/model/token-usage - * @response `200` `(WebResp & { - data?: DomainModelTokenUsageResp, - -})` OK - */ - -export const getGetTokenUsage = ( - query: GetGetTokenUsageParams, - params: RequestParams = {}, -) => - request< - WebResp & { - data?: DomainModelTokenUsageResp; - } - >({ - path: `/api/v1/model/token-usage`, - method: "GET", - query: query, - type: ContentType.Json, - format: "json", - ...params, - }); diff --git a/ui/ModelModal/src/api/httpClient.ts b/ui/ModelModal/src/api/httpClient.ts deleted file mode 100644 index 9e6c0c4..0000000 --- a/ui/ModelModal/src/api/httpClient.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { message as Message } from "@c-x/ui"; -import type { - AxiosInstance, - AxiosRequestConfig, - HeadersDefaults, - ResponseType, -} from "axios"; -import axios from "axios"; - -export type QueryParamsType = Record; - -export interface FullRequestParams - extends Omit { - /** set parameter to `true` for call `securityWorker` for this request */ - secure?: boolean; - /** request path */ - path: string; - /** content type of request body */ - type?: ContentType; - /** query params */ - query?: QueryParamsType; - /** format of response (i.e. response.json() -> format: "json") */ - format?: ResponseType; - /** request body */ - body?: unknown; -} - -export type RequestParams = Omit< - FullRequestParams, - "body" | "method" | "query" | "path" ->; - -export interface ApiConfig - extends Omit { - securityWorker?: ( - securityData: SecurityDataType | null, - ) => Promise | AxiosRequestConfig | void; - secure?: boolean; - format?: ResponseType; -} - -export enum ContentType { - Json = "application/json", - FormData = "multipart/form-data", - UrlEncoded = "application/x-www-form-urlencoded", - Text = "text/plain", -} - -const whitePathnameList = ["/user/login", "/login", "/auth", "/invite"]; -const whiteApiList = ["/api/v1/user/profile", "/api/v1/admin/profile"]; - -const redirectToLogin = () => { - const redirectAfterLogin = encodeURIComponent(location.href); - const search = `redirect=${redirectAfterLogin}`; - const pathname = location.pathname.startsWith("/user") - ? "/login" - : "/login/admin"; - window.location.href = `${pathname}`; -}; - -type ExtractDataProp = T extends { data?: infer U } ? U : never; - -export class HttpClient { - public instance: AxiosInstance; - private securityData: SecurityDataType | null = null; - private securityWorker?: ApiConfig["securityWorker"]; - private secure?: boolean; - private format?: ResponseType; - - constructor({ - securityWorker, - secure, - format, - ...axiosConfig - }: ApiConfig = {}) { - this.instance = axios.create({ - withCredentials: true, - ...axiosConfig, - baseURL: axiosConfig.baseURL || "", - }); - this.secure = secure; - this.format = format; - this.securityWorker = securityWorker; - this.instance.interceptors.response.use( - (resp) => { - if (resp.data.code === 0) { - return resp.data.data; - } else { - Message.error(resp.data.message); - return Promise.reject(resp.data.message); - } - }, - (err) => { - if (err?.response?.status === 401) { - if ( - whitePathnameList.find((item) => location.pathname.startsWith(item)) - ) { - return Promise.reject("尚未登录"); - } - Message.error("尚未登录"); - redirectToLogin(); - return Promise.reject("尚未登录"); - } - // 手动取消请求 - if (err.code === "ERR_CANCELED") { - return; - } - const msg = err?.response?.data?.message || err?.message; - Message.error(msg); - return Promise.reject(msg); - }, - ); - } - - public setSecurityData = (data: SecurityDataType | null) => { - this.securityData = data; - }; - - protected mergeRequestParams( - params1: AxiosRequestConfig, - params2?: AxiosRequestConfig, - ): AxiosRequestConfig { - const method = params1.method || (params2 && params2.method); - - return { - ...this.instance.defaults, - ...params1, - ...(params2 || {}), - headers: { - ...((method && - this.instance.defaults.headers[ - method.toLowerCase() as keyof HeadersDefaults - ]) || - {}), - ...(params1.headers || {}), - ...((params2 && params2.headers) || {}), - }, - }; - } - - protected stringifyFormItem(formItem: unknown) { - if (typeof formItem === "object" && formItem !== null) { - return JSON.stringify(formItem); - } else { - return `${formItem}`; - } - } - - protected createFormData(input: Record): FormData { - return Object.keys(input || {}).reduce((formData, key) => { - const property = input[key]; - const propertyContent: any[] = - property instanceof Array ? property : [property]; - - for (const formItem of propertyContent) { - const isFileType = formItem instanceof Blob || formItem instanceof File; - formData.append( - key, - isFileType ? formItem : this.stringifyFormItem(formItem), - ); - } - - return formData; - }, new FormData()); - } - - public request = async ({ - secure, - path, - type, - query, - format, - body, - ...params - }: FullRequestParams): Promise> => { - const secureParams = - ((typeof secure === "boolean" ? secure : this.secure) && - this.securityWorker && - (await this.securityWorker(this.securityData))) || - {}; - const requestParams = this.mergeRequestParams(params, secureParams); - const responseFormat = format || this.format || undefined; - - if ( - type === ContentType.FormData && - body && - body !== null && - typeof body === "object" - ) { - body = this.createFormData(body as Record); - } - - if ( - type === ContentType.Text && - body && - body !== null && - typeof body !== "string" - ) { - body = JSON.stringify(body); - } - - return this.instance.request({ - ...requestParams, - headers: { - ...(requestParams.headers || {}), - ...(type && type !== ContentType.FormData - ? { "Content-Type": type } - : {}), - }, - params: query, - responseType: responseFormat, - data: body, - url: path, - }); - }; -} -export default new HttpClient({ format: "json" }).request; diff --git a/ui/ModelModal/src/assets/fonts/iconfont.js b/ui/ModelModal/src/assets/fonts/iconfont.js index 8c442a5..3013a34 100644 --- a/ui/ModelModal/src/assets/fonts/iconfont.js +++ b/ui/ModelModal/src/assets/fonts/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4940939='',(l=>{var a=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,m,e=function(a,c){c.parentNode.insertBefore(a,c)};if(a&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_4940939,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?e(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=l.document,m=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,d())})}function d(){m||(m=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}d()}})(window); \ No newline at end of file +window._iconfont_svg_string_4856251='',(c=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var h,i,o,t,p,v=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_4856251,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?v(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),h()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(o=h,t=c.document,p=!1,d(),t.onreadystatechange=function(){"complete"==t.readyState&&(t.onreadystatechange=null,z())})}function z(){p||(p=!0,o())}function d(){try{t.documentElement.doScroll("left")}catch(a){return void setTimeout(d,50)}z()}})(window); \ No newline at end of file diff --git a/ui/ModelModal/src/assets/images/logo.png b/ui/ModelModal/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..da96d16c1d0755ef4d0d306afe42fe120b099e5c GIT binary patch literal 54599 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%0Ah>v?gN?fTzsJ3>w? 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

  • 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 literal 0 HcmV?d00001 diff --git a/ui/ModelModal/src/components/card/index.tsx b/ui/ModelModal/src/components/card/index.tsx index 33ec1b8..885c1ad 100644 --- a/ui/ModelModal/src/components/card/index.tsx +++ b/ui/ModelModal/src/components/card/index.tsx @@ -1,10 +1,11 @@ import { styled } from '@mui/material'; +import type { Theme } from '@mui/material/styles'; +import type { ComponentType } from 'react'; -// @ts-ignore TS2742: Inferred type cannot be named without a reference -const StyledCard = styled('div')(({ theme }) => ({ - padding: theme!.spacing(2), - borderRadius: theme!.shape.borderRadius * 2.5, - backgroundColor: theme!.palette.background.default, +const StyledCard: ComponentType = styled('div')<{}>(({ theme }: { theme: Theme }) => ({ + padding: theme.spacing(2), + borderRadius: theme.shape.borderRadius * 2.5, + backgroundColor: theme.palette.background.default, })); -export default StyledCard; +export default StyledCard; \ No newline at end of file diff --git a/ui/ModelModal/src/constants/locale.ts b/ui/ModelModal/src/constants/locale.ts index 4d550c9..8ba8992 100644 --- a/ui/ModelModal/src/constants/locale.ts +++ b/ui/ModelModal/src/constants/locale.ts @@ -18,7 +18,7 @@ export const LOCALE_MESSAGES: Record<'zh-CN' | 'en-US', Record> 'header': 'Header', 'save': '保存', 'cancel': '取消', - 'getModelList': '获取模型列表', + 'getModelList': '获取模型列表1', 'viewDocumentation': '查看文档', // 验证消息 diff --git a/ui/ModelModal/src/constants/providers.ts b/ui/ModelModal/src/constants/providers.ts index 4a0009a..cdc41b1 100644 --- a/ui/ModelModal/src/constants/providers.ts +++ b/ui/ModelModal/src/constants/providers.ts @@ -1,4 +1,4 @@ -import { ModelProviderMap } from '../types'; +import { ModelProviderMap } from '../types/types'; // 默认模型提供商配置 export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { @@ -12,6 +12,16 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { modelDocumentUrl: 'https://model-square.app.baizhi.cloud/token', defaultBaseUrl: 'https://model-square.app.baizhi.cloud/v1', }, + ZhiPu: { + label: 'ZhiPu', + cn: '智谱', + icon: 'icon-zhipuqingyan', // 需要添加对应的图标 + urlWrite: false, + secretRequired: true, + customHeader: false, + modelDocumentUrl: 'https://open.bigmodel.cn/usercenter/apikeys', + defaultBaseUrl: 'https://open.bigmodel.cn/api/paas/v4', + }, DeepSeek: { label: 'DeepSeek', cn: 'DeepSeek', diff --git a/ui/ModelModal/src/constants/theme.ts b/ui/ModelModal/src/constants/theme.ts new file mode 100644 index 0000000..a660924 --- /dev/null +++ b/ui/ModelModal/src/constants/theme.ts @@ -0,0 +1,253 @@ +import { createTheme } from '@mui/material/styles'; +import type { Shadows } from '@mui/material'; +import { zhCN } from '@mui/material/locale'; +import { zhCN as CuiZhCN } from '@c-x/ui/dist/local'; +import onData from '@/assets/images/nodata.png'; + +const defaultTheme = createTheme(); +// 默认主题配置,确保与UI项目主题一致 +export const defaultModelModalTheme = createTheme({ + cssVariables: true, + palette: { + // mode: 'light', + primary: { + main: '#21222D', + }, + error: { + main: '#F64E54', + }, + success: { + main: '#35B37E', + light: '#AAF27F', + dark: '#229A16', + contrastText: '#fff', + }, + warning: { + main: '#FFA500', + }, + info: { + main: '#3248F2', + }, + risk: { + severe: '#FF6262', + critical: '#FFA762', + suggest: '#FFCF62' + }, + disabled: { + main: '#666', + }, + dark: { + dark: '#000', + main: '#14141B', + light: '#20232A', + contrastText: '#fff', + }, + light: { + main: '#fff', + contrastText: '#000', + }, + background: { + default: '#fff', + paper: '#F1F2F8', + }, + text: { + primary: '#21222D', + secondary: 'rgba(33,34,45, 0.7)', + tertiary: 'rgba(33,34,45, 0.5)', + // @ts-ignore + auxiliary: 'rgba(33,34,45, 0.5)', + disabled: 'rgba(33,34,45, 0.2)', + }, + // divider: '#ECEEF1', + }, + shadows: [ + ...defaultTheme.shadows.slice(0, 8), + '0px 10px 20px 0px rgba(54,59,76,0.2)', + ...defaultTheme.shadows.slice(9), + ] as Shadows, + components: { + MuiPaper: { + styleOverrides: { + root: { + backgroundColor: '#fff', + backgroundImage: 'none', + }, + }, + }, + + MuiInputBase: { + styleOverrides: { + root: { + backgroundColor: '#F8F9FA', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + '.MuiOutlinedInput-notchedOutline': { + borderColor: 'transparent', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: '#21222D !important', + borderWidth: '10px !important', + }, + borderRadius: '10px !important', + fontSize: 14, + }, + }, + }, + + MuiTypography: { + styleOverrides: { + root: { + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + MuiButtonBase: { + styleOverrides: { + root: { + // lineHeight: '1.5', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + MuiButton: { + styleOverrides: { + root: { + // lineHeight: '1.5', + borderRadius: '10px', + boxShadow: 'none', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + // @ts-ignore + MuiLoadingButton: { + styleOverrides: { + root: { + lineHeight: '1.5', + borderRadius: '10px', + }, + }, + }, + MuiInputLabel: { + styleOverrides: { + root: { + fontSize: 14, + }, + }, + }, + MuiMenu: { + styleOverrides: { + paper: { + borderRadius: '10px', + }, + }, + }, + MuiMenuItem: { + styleOverrides: { + root: { + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + fontSize: '14px', + }, + }, + }, + MuiAutocomplete: { + defaultProps: { + slotProps: { + paper: { + elevation: 8, + }, + }, + }, + styleOverrides: { + paper: { + borderRadius: '10px', + }, + option: { + fontSize: '14px', + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + }, + }, + }, + MuiFormLabel: { + styleOverrides: { + root: { + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + }, + asterisk: { + color: '#F64E54', + }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + textDecoration: 'none', + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + borderColor: '#eee', + paddingLeft: '24px !important', + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + padding: '25px 12px 26px !important', + '&:first-of-type': { + paddingLeft: '16px !important', + }, + }, + head: { + paddingTop: '0 !important', + paddingBottom: '0 !important', + height: '50px', + backgroundColor: '#f8f9fa', + borderBottom: 'none !important', + }, + body: { + borderBottom: '1px dashed', + borderColor: '#ECEEF1', + }, + }, + }, + }, + }, + zhCN, + CuiZhCN, + { + components: { + CuiEmpty: { + defaultProps: { + image: onData, + imageStyle: { + width: '150px', + }, + }, + }, + }, + +}); + +// 主题合并工具函数 - 以用户自定义主题为主 +// 深度合并函数 +const deepMerge = (target: any, source: any): any => { + const result = { ...target }; + + for (const key in source) { + if (source.hasOwnProperty(key)) { + if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) { + result[key] = deepMerge(target[key] || {}, source[key]); + } else { + result[key] = source[key]; + } + } + } + + return result; +}; + +export const mergeThemeWithDefaults = (userTheme: any) => { + return deepMerge(defaultModelModalTheme, userTheme); +}; \ No newline at end of file diff --git a/ui/ModelModal/src/index.ts b/ui/ModelModal/src/index.ts index 51c9cba..814318b 100644 --- a/ui/ModelModal/src/index.ts +++ b/ui/ModelModal/src/index.ts @@ -2,14 +2,17 @@ export { ModelModal } from './ModelModal'; // 类型定义 -export type { ModelType, Model, ModelParam, ConstsModelStatus, ConstsModelProvider, ModelProviderConfig, ModelProviderMap, CreateModelReq as CreateModelData, ListModelReq as GetModelNameData, CheckModelReq as CheckModelData, UpdateModelReq as UpdateModelData, ModelService, ModelListItem, AddModelForm, ModelModalProps } from './types'; +export type { ModelType, Model, ModelParam, ConstsModelStatus, ConstsModelProvider, ModelProviderConfig, ModelProviderMap, CreateModelReq as CreateModelData, ListModelReq as GetModelNameData, CheckModelReq as CheckModelData, UpdateModelReq as UpdateModelData, ModelService, ModelListItem, AddModelForm, ModelModalProps } from './types/types'; // 导出 ConstsModelType 枚举值 -export { ConstsModelType } from './types'; +export { ConstsModelType } from './types/types'; // 常量 export { DEFAULT_MODEL_PROVIDERS, getProvidersByType } from './constants/providers'; export { LOCALE_MESSAGES, getLocaleMessage, getTitleMap } from './constants/locale'; +export * from './constants/theme'; + +// 主题类型声明会通过TypeScript自动包含 // 工具函数 export { @@ -59,7 +62,7 @@ export const DEFAULT_CONFIG = { export const createModelModal = (defaultConfig: Partial = {}) => { const mergedConfig = { ...DEFAULT_CONFIG, ...defaultConfig }; - return (props: Omit) => { + return (props: Omit) => { return { ...props, config: mergedConfig, diff --git a/ui/ModelModal/src/theme.ts b/ui/ModelModal/src/theme.ts new file mode 100644 index 0000000..e97ed30 --- /dev/null +++ b/ui/ModelModal/src/theme.ts @@ -0,0 +1,237 @@ +'use client'; +import { createTheme, Paper } from '@mui/material'; +import type { Shadows } from '@mui/material'; +import { zhCN } from '@mui/material/locale'; +import { zhCN as CuiZhCN } from '@c-x/ui/dist/local'; +import onData from '@/assets/images/nodata.png'; +import { common } from '@mui/material/colors'; + +const defaultTheme = createTheme(); + +const lightTheme = createTheme( + { + cssVariables: true, + palette: { + // mode: 'light', + primary: { + main: '#21222D', + }, + error: { + main: '#F64E54', + }, + success: { + main: '#35B37E', + light: '#AAF27F', + dark: '#229A16', + contrastText: '#fff', + }, + warning: { + main: '#FFA500', + }, + info: { + main: '#3248F2', + }, + risk: { + severe: '#FF6262', + critical: '#FFA762', + suggest: '#FFCF62' + }, + disabled: { + main: '#666', + }, + dark: { + dark: '#000', + main: '#14141B', + light: '#20232A', + contrastText: '#fff', + }, + light: { + main: '#fff', + contrastText: '#000', + }, + background: { + default: '#fff', + paper: '#F1F2F8', + }, + + text: { + primary: '#21222D', + secondary: 'rgba(33,34,45, 0.7)', + tertiary: 'rgba(33,34,45, 0.5)', + // @ts-ignore + auxiliary: 'rgba(33,34,45, 0.5)', + disabled: 'rgba(33,34,45, 0.2)', + }, + // divider: '#ECEEF1', + }, + shadows: [ + ...defaultTheme.shadows.slice(0, 8), + '0px 10px 20px 0px rgba(54,59,76,0.2)', + ...defaultTheme.shadows.slice(9), + ] as Shadows, + components: { + MuiPaper: { + styleOverrides: { + root: { + backgroundColor: '#fff', + backgroundImage: 'none', + }, + }, + }, + + MuiInputBase: { + styleOverrides: { + root: { + backgroundColor: '#F8F9FA', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + '.MuiOutlinedInput-notchedOutline': { + borderColor: 'transparent', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: '#21222D !important', + borderWidth: '1px !important', + }, + borderRadius: '10px !important', + fontSize: 14, + }, + }, + }, + + MuiTypography: { + styleOverrides: { + root: { + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + MuiButtonBase: { + styleOverrides: { + root: { + // lineHeight: '1.5', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + MuiButton: { + styleOverrides: { + root: { + // lineHeight: '1.5', + borderRadius: '10px', + boxShadow: 'none', + fontFamily: `var(--font-gilory), var(--font-HarmonyOS), 'PingFang SC', + 'Roboto', 'Helvetica', 'Arial', sans-serif`, + }, + }, + }, + // @ts-ignore + MuiLoadingButton: { + styleOverrides: { + root: { + lineHeight: '1.5', + borderRadius: '10px', + }, + }, + }, + MuiInputLabel: { + styleOverrides: { + root: { + fontSize: 14, + }, + }, + }, + MuiMenu: { + styleOverrides: { + paper: { + borderRadius: '10px', + }, + }, + }, + MuiMenuItem: { + styleOverrides: { + root: { + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + fontSize: '14px', + }, + }, + }, + MuiAutocomplete: { + defaultProps: { + slotProps: { + paper: { + elevation: 8, + }, + }, + }, + styleOverrides: { + paper: { + borderRadius: '10px', + }, + option: { + fontSize: '14px', + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + }, + }, + }, + MuiFormLabel: { + styleOverrides: { + root: { + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + }, + asterisk: { + color: '#F64E54', + }, + }, + }, + MuiLink: { + styleOverrides: { + root: { + textDecoration: 'none', + }, + }, + }, + MuiTableCell: { + styleOverrides: { + root: { + borderColor: '#eee', + paddingLeft: '24px !important', + fontFamily: 'var(--font-gilory), var(--font-HarmonyOS)', + padding: '25px 12px 26px !important', + '&:first-of-type': { + paddingLeft: '16px !important', + }, + }, + head: { + paddingTop: '0 !important', + paddingBottom: '0 !important', + height: '50px', + backgroundColor: '#f8f9fa', + borderBottom: 'none !important', + }, + body: { + borderBottom: '1px dashed', + borderColor: '#ECEEF1', + }, + }, + }, + }, + }, + zhCN, + CuiZhCN, + { + components: { + CuiEmpty: { + defaultProps: { + image: onData, + imageStyle: { + width: '150px', + }, + }, + }, + }, + } +); + +export { lightTheme }; diff --git a/ui/ModelModal/src/types/theme.d.ts b/ui/ModelModal/src/types/theme.d.ts new file mode 100644 index 0000000..79fa6b5 --- /dev/null +++ b/ui/ModelModal/src/types/theme.d.ts @@ -0,0 +1,48 @@ +/// + +import type { PaletteColorChannel } from '@mui/material'; + +declare module '@mui/material/styles' { + interface TypeText { + tertiary: string; + auxiliary: string; + } + + interface TypeBackground { + paper2: string; + } + + interface Palette { + light: Palette['primary'] & PaletteColorChannel; + dark: Palette['primary'] & PaletteColorChannel; + disabled: Palette['primary'] & PaletteColorChannel; + risk: { + severe: string; + critical: string; + suggest: string; + }; + } + + // allow configuration using `createTheme` + interface PaletteOptions { + light?: PaletteOptions['primary'] & Partial; + dark?: PaletteOptions['primary'] & Partial; + disabled?: PaletteOptions['primary'] & Partial; + risk?: { + severe?: string; + critical?: string; + suggest?: string; + }; + text?: Partial; + background?: Partial; + } +} + +declare module '@mui/material/Button' { + interface ButtonPropsColorOverrides { + light: true; + dark: true; + } +} + +import type {} from '@mui/material/themeCssVarsAugmentation'; \ No newline at end of file diff --git a/ui/ModelModal/src/types/index.ts b/ui/ModelModal/src/types/types.ts similarity index 99% rename from ui/ModelModal/src/types/index.ts rename to ui/ModelModal/src/types/types.ts index e421913..da0323c 100644 --- a/ui/ModelModal/src/types/index.ts +++ b/ui/ModelModal/src/types/types.ts @@ -232,4 +232,5 @@ export interface ModelModalProps { onClose: () => void; refresh: () => void; modelService: ModelService; + language?: 'zh-CN' | 'en-US'; } diff --git a/ui/ModelModal/src/vite-env.d.ts b/ui/ModelModal/src/vite-env.d.ts new file mode 100644 index 0000000..e88820e --- /dev/null +++ b/ui/ModelModal/src/vite-env.d.ts @@ -0,0 +1,35 @@ +/// + +import type { PaletteColorChannel } from '@mui/material'; +declare module '@mui/material/styles' { + interface TypeText { + tertiary: string; + } + + interface TypeBackground { + paper2: string; + } + + interface Palette { + light: Palette['primary'] & PaletteColorChannel; + dark: Palette['primary'] & PaletteColorChannel; + disabled: Palette['primary'] & PaletteColorChannel; + } + + // allow configuration using `createTheme` + interface PaletteOptions { + light?: PaletteOptions['primary'] & Partial; + dark?: PaletteOptions['primary'] & Partial; + disabled?: PaletteOptions['primary'] & Partial; + text?: Partial; + background?: Partial; + } +} +declare module '@mui/material/Button' { + interface ButtonPropsColorOverrides { + light: true; + dark: true; + } +} + +import type {} from '@mui/material/themeCssVarsAugmentation'; diff --git a/usecase/modelkit.go b/usecase/modelkit.go index 02a3ec0..c967899 100644 --- a/usecase/modelkit.go +++ b/usecase/modelkit.go @@ -39,6 +39,7 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList } switch provider := consts.ModelProvider(req.Provider); provider { case consts.ModelProviderAzureOpenAI, + consts.ModelProviderZhiPu, consts.ModelProviderVolcengine: return &domain.ModelListResp{ Models: domain.From(domain.ModelProviders[provider]),