diff --git a/config/routes.ts b/config/routes.ts index 393dec47..256b8db2 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -120,7 +120,7 @@ export default [ name: '404', path: '*', key: '404', - layout: false, + hideInMenu: true, component: './404' } ]; diff --git a/src/assets/images/grid_background_1920x1080.png b/src/assets/images/grid_background_1920x1080.png new file mode 100644 index 00000000..e645264f Binary files /dev/null and b/src/assets/images/grid_background_1920x1080.png differ diff --git a/src/components/auto-tooltip/index.tsx b/src/components/auto-tooltip/index.tsx index 504a08d9..eb868909 100644 --- a/src/components/auto-tooltip/index.tsx +++ b/src/components/auto-tooltip/index.tsx @@ -96,7 +96,7 @@ const AutoTooltip: React.FC = ({ ...tooltipProps, destroyTooltipOnHide: false }} - title={isOverflowing || showTitle ? children : false} + title={isOverflowing || showTitle ? title || children : false} > {ghost ? (
diff --git a/src/components/echarts/scatter.tsx b/src/components/echarts/scatter.tsx index 387217e1..6de2c798 100644 --- a/src/components/echarts/scatter.tsx +++ b/src/components/echarts/scatter.tsx @@ -168,7 +168,7 @@ const Scatter: React.FC = (props) => { tooltip: { trigger: 'item', borderWidth: 0, - backgroundColor: chartColorMap.colorBgBase, + backgroundColor: chartColorMap.splitLineColor, borderColor: 'transparent', formatter(params: any, callback?: (val: any) => any) { const dataList = findOverlappingPoints(seriseDataList, params.data); diff --git a/src/components/footer/index.tsx b/src/components/footer/index.tsx index 23392a6e..b77e5448 100644 --- a/src/components/footer/index.tsx +++ b/src/components/footer/index.tsx @@ -25,10 +25,11 @@ const useStyles = createStyles(({ token, css }) => ({ const Footer: React.FC = () => { const intl = useIntl(); + const [modal, contextHolder] = Modal.useModal(); const { styles } = useStyles(); const showVersion = () => { - Modal.info({ + modal.info({ ...modalConfig, width: 460, content: @@ -36,32 +37,35 @@ const Footer: React.FC = () => { }; return ( -
-
-
-
- - © - {new Date().getFullYear()} - {intl.formatMessage({ id: 'settings.company' })} - - - - - + <> + {contextHolder} +
+
+
+
+ + © + {new Date().getFullYear()} + {intl.formatMessage({ id: 'settings.company' })} + + + + + +
-
+ ); }; diff --git a/src/components/seal-form/wrapper/input.ts b/src/components/seal-form/wrapper/input.ts index 9b5e4228..a17021cf 100644 --- a/src/components/seal-form/wrapper/input.ts +++ b/src/components/seal-form/wrapper/input.ts @@ -14,6 +14,39 @@ const InputWrapper = styled.div` top: 9px; } } + + // ============= input initial ============= + .ant-input-outlined.ant-input-status-error:not(.ant-input-disabled) { + border: none; + box-shadow: none; + } + + .ant-input-outlined.ant-input-status-error:not(.ant-input-disabled):focus, + .ant-input-outlined.ant-input-status-error:not( + .ant-input-disabled + ):focus-within { + border: none; + box-shadow: none; + } + + .ant-input-number-outlined.ant-input-number-status-error:not( + .ant-input-number-disabled + ) { + border: none; + box-shadow: none; + } + + .ant-input-number-outlined.ant-input-number-status-error:not( + .ant-input-number-disabled + ):focus, + .ant-input-number-outlined.ant-input-number-status-error:not( + .ant-input-disabled + ):focus-within { + border: none; + box-shadow: none; + } + // ============= input initial end ============= + .seal-input-wrapper-disabled { background-color: var(--ant-color-bg-container-disabled); cursor: not-allowed; diff --git a/src/components/seal-form/wrapper/slider.ts b/src/components/seal-form/wrapper/slider.ts index 93b93444..874bfc13 100644 --- a/src/components/seal-form/wrapper/slider.ts +++ b/src/components/seal-form/wrapper/slider.ts @@ -42,7 +42,6 @@ const SliderWrapper = styled.div` .ant-input-number-input { text-align: center !important; - background-color: var(--color-white-1); } } } diff --git a/src/components/seal-table/components/header-prefix.tsx b/src/components/seal-table/components/header-prefix.tsx index be4451d1..476c86b1 100644 --- a/src/components/seal-table/components/header-prefix.tsx +++ b/src/components/seal-table/components/header-prefix.tsx @@ -13,6 +13,7 @@ interface HeaderPrefixProps { indeterminate?: boolean; selectAll?: boolean; hasColumns?: boolean; + disabled?: boolean; } const HeaderPrefix: React.FC = (props) => { @@ -24,7 +25,8 @@ const HeaderPrefix: React.FC = (props) => { onExpandAll, indeterminate, selectAll, - expandAll + expandAll, + disabled } = props; const handleToggleExpand = () => { @@ -68,6 +70,7 @@ const HeaderPrefix: React.FC = (props) => { onChange={onSelectAll} indeterminate={indeterminate} checked={selectAll} + disabled={disabled} >
); @@ -87,7 +90,9 @@ const HeaderPrefix: React.FC = (props) => { } if (enableSelection) { return ( -
{}
+
+ {} +
); } return null; diff --git a/src/components/seal-table/index.tsx b/src/components/seal-table/index.tsx index a170dafb..474bddb1 100644 --- a/src/components/seal-table/index.tsx +++ b/src/components/seal-table/index.tsx @@ -14,7 +14,8 @@ const Wrapper = styled.div<{ $token: any }>` --ant-table-cell-padding-block: ${(props) => props.$token.cellPaddingBlock}px; --ant-table-header-border-radius: ${(props) => props.$token.headerBorderRadius}px; - --ant-table-header-split-color: ${(props) => props.$token.headerSplitColor}; + --ant-table-header-split-color: ${(props) => + props.$token.colorBorderSecondary}; --ant-table-row-selected-bg: ${(props) => props.$token.rowSelectedBg}; --ant-table-row-selected-hover-bg: ${(props) => props.$token.rowSelectedHoverBg}; @@ -47,7 +48,6 @@ const SealTable: React.FC = ( loadChildrenAPI } = props; const { token } = theme.useToken(); - console.log('seal-table-props', token.Table); const parsedColumns = useMemo(() => { if (columns) return columns; @@ -137,7 +137,12 @@ const SealTable: React.FC = ( }; return ( - +
= ( expandAll={expandAll} expandable={expandable} enableSelection={rowSelection?.enableSelection} + disabled={!props.dataSource?.length} hasColumns={parsedColumns.length > 0} >
diff --git a/src/components/seal-table/styles/header.less b/src/components/seal-table/styles/header.less index 87db0fac..9d871fc1 100644 --- a/src/components/seal-table/styles/header.less +++ b/src/components/seal-table/styles/header.less @@ -1,10 +1,21 @@ .table-header { + position: relative; min-height: 20px; display: flex; align-items: center; justify-content: flex-start; padding-inline: var(--ant-table-cell-padding-inline); - border-right: 1px solid var(--ant-table-header-split-color); + + &::before { + position: absolute; + top: 50%; + inset-inline-end: 0; + width: 1px; + height: 1.6em; + background-color: var(--ant-table-header-split-color); + transform: translateY(-50%); + content: ''; + } &-last { border-right: none; diff --git a/src/global.less b/src/global.less index ce681d72..eb0dd024 100644 --- a/src/global.less +++ b/src/global.less @@ -94,9 +94,13 @@ html[data-theme='realDark'] { --color-bg-tooltip: #424242; --color-editor-header-bg: #292929; --color-progress-text: rgba(255, 255, 255, 80%); - --color-modal-content-bg: #1f1f1f; + --color-modal-content-bg: #080808; background: #141414; + + .ant-result-image { + opacity: 0.9; + } } body { @@ -118,6 +122,10 @@ body { // table .ant-table-wrapper { + .ant-table { + background: transparent !important; + } + .ant-table-selection-column { padding-inline-start: 16px !important; } @@ -144,11 +152,21 @@ body { display: flex !important; } - tr > th { - border: none; - padding-block: 0; - height: 50px; - background-color: var(--ant-color-fill-tertiary); + .ant-table-thead { + tr { + background-color: var(--ant-color-fill-tertiary); + + > th { + border: none; + padding-block: 0; + height: 50px; + background-color: transparent; + + &::before { + transition: none !important; + } + } + } } tr > td { @@ -157,46 +175,17 @@ body { } } - // input - // .ant-input-css-var.ant-input { - // height: 40px; - // } - - // .ant-input-outlined, - // .ant-input-affix-wrapper, - // .ant-picker { - // height: 40px; - // } - - .ant-input-outlined.ant-input-status-error:not(.ant-input-disabled) { - border: none; - box-shadow: none; + .ant-input-outlined, + .ant-input-number, + .ant-select-selector { + background: transparent !important; } - .ant-input-outlined.ant-input-status-error:not(.ant-input-disabled):focus, - .ant-input-outlined.ant-input-status-error:not( - .ant-input-disabled - ):focus-within { - border: none; - box-shadow: none; - } - - // input number - .ant-input-number-outlined.ant-input-number-status-error:not( - .ant-input-number-disabled - ) { - border: none; - box-shadow: none; - } - - .ant-input-number-outlined.ant-input-number-status-error:not( - .ant-input-number-disabled - ):focus, - .ant-input-number-outlined.ant-input-number-status-error:not( - .ant-input-disabled - ):focus-within { - border: none; - box-shadow: none; + // set for the non-form item + .ant-input-outlined, + .ant-input-affix-wrapper, + .ant-picker { + height: 40px; } // form item help @@ -261,10 +250,6 @@ body { } } - .ant-table-wrapper .ant-table { - background-color: unset; - } - .ant-table-content table { .ant-table-tbody { .ant-table-row { @@ -732,7 +717,11 @@ body { } a { - color: var(--ant-color-link-hover); + color: var(--ant-blue); + + &:hover { + color: var(--ant-blue-5); + } } } } diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx index 834aa843..d2f474ef 100644 --- a/src/layouts/index.tsx +++ b/src/layouts/index.tsx @@ -99,6 +99,7 @@ export default (props: any) => { const { initialize: initialize } = useOverlayScroller({ defer: false }); + const [modal, contextHolder] = Modal.useModal(); const { themeData, setTheme, userSettings, isDarkTheme } = useUserSettings(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const { initialize: initializeMenu } = useOverlayScroller(); @@ -132,7 +133,7 @@ export default (props: any) => { const showVersion = () => { saveScrollHeight(); - Modal.info({ + modal.info({ ...modalConfig, width: 460, content: , @@ -477,6 +478,7 @@ export default (props: any) => { )} + {contextHolder} ); }; diff --git a/src/locales/en-US/common.ts b/src/locales/en-US/common.ts index b00bac66..1e881cd8 100644 --- a/src/locales/en-US/common.ts +++ b/src/locales/en-US/common.ts @@ -238,5 +238,6 @@ export default { 'common.appearance': 'Appearance', 'common.appearance.dark': 'Dark', 'common.appearance.light': 'Light', - 'common.appearance.system': 'System Default' + 'common.appearance.system': 'System Default', + 'common.exception.404': 'Sorry, the page you visited does not exist.' }; diff --git a/src/locales/ja-JP/common.ts b/src/locales/ja-JP/common.ts index ebb40241..61a8cfe0 100644 --- a/src/locales/ja-JP/common.ts +++ b/src/locales/ja-JP/common.ts @@ -238,7 +238,8 @@ export default { 'common.appearance': 'Appearance', 'common.appearance.dark': 'Dark', 'common.appearance.light': 'Light', - 'common.appearance.system': 'System Default' + 'common.appearance.system': 'System Default', + 'common.exception.404': 'Sorry, the page you visited does not exist.' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== @@ -246,4 +247,5 @@ export default { // 2. 'common.appearance.light': 'Light', // 3. 'common.appearance.system': 'System Default', // 4. 'common.appearance': 'Appearance', +// 5. 'common.exception.404': 'Sorry, the page you visited does not exist.' // ========== End of To-Do List ========== diff --git a/src/locales/ru-RU/common.ts b/src/locales/ru-RU/common.ts index dfd5bd45..755dc7fe 100644 --- a/src/locales/ru-RU/common.ts +++ b/src/locales/ru-RU/common.ts @@ -236,9 +236,10 @@ export default { 'common.appearance': 'Внешний вид', 'common.appearance.dark': 'Темная', 'common.appearance.light': 'Светлая', - 'common.appearance.system': 'Как в системе' + 'common.appearance.system': 'Как в системе', + 'common.exception.404': 'Sorry, the page you visited does not exist.' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== - +// 1. 'common.exception.404': 'Sorry, the page you visited does not exist.' // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/common.ts b/src/locales/zh-CN/common.ts index 917a9e1a..3a09732c 100644 --- a/src/locales/zh-CN/common.ts +++ b/src/locales/zh-CN/common.ts @@ -233,5 +233,6 @@ export default { 'common.appearance': '外观', 'common.appearance.dark': '深色', 'common.appearance.light': '浅色', - 'common.appearance.system': '跟随系统' + 'common.appearance.system': '跟随系统', + 'common.exception.404': '抱歉,你访问的页面不存在' }; diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 0263687e..59981485 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,18 +1,16 @@ -import { history } from '@umijs/max'; -import { Button, Result } from 'antd'; +import { useIntl } from '@umijs/max'; +import { Result } from 'antd'; import React from 'react'; -const NoFoundPage: React.FC = () => ( - history.push('/')}> - Back Home - - } - /> -); +const NoFoundPage: React.FC = () => { + const intl = useIntl(); + return ( + + ); +}; export default NoFoundPage; diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx index 7e25e2df..df800ec6 100644 --- a/src/pages/llmodels/components/deploy-modal.tsx +++ b/src/pages/llmodels/components/deploy-modal.tsx @@ -154,6 +154,7 @@ const AddModal: FC = (props) => { const handleOnSelectModel = (item: any, evaluate?: boolean) => { setSelectedModel(item); + console.log('item.isGGUF=========>', item.isGGUF); if (!item.isGGUF) { setIsGGUF(false); form.current?.form?.resetFields(resetFields); diff --git a/src/pages/llmodels/config/index.ts b/src/pages/llmodels/config/index.ts index aba07550..60d4123a 100644 --- a/src/pages/llmodels/config/index.ts +++ b/src/pages/llmodels/config/index.ts @@ -489,7 +489,8 @@ export const updateExcludeFields = [ 'ollama_library_model_name', 'scheduleType', 'backend', - 'gpu_selector' + 'gpu_selector', + 'categories' ]; export const formFields = [ diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index aab1e6f2..df9cfc18 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -1,4 +1,5 @@ import Bg2 from '@/assets/images/bg-2.png'; +import GridBg from '@/assets/images/grid_background_1920x1080.png'; import { userAtom } from '@/atoms/user'; import Footer from '@/components/footer'; import useUserSettings from '@/hooks/use-user-settings'; @@ -21,7 +22,7 @@ const Wrapper = styled.div<{ $isDarkTheme: boolean }>` z-index: -1; background: ${({ $isDarkTheme }) => $isDarkTheme - ? `repeating-linear-gradient(45deg, #000, transparent 120px)` + ? `url(${GridBg}) center center /cover no-repeat` : `url(${Bg2}) center center /cover no-repeat`}; opacity: ${({ $isDarkTheme }) => ($isDarkTheme ? 1 : 0.6)}; `; diff --git a/src/pages/playground/style/message-input.less b/src/pages/playground/style/message-input.less index fcb49694..8f3662ae 100644 --- a/src/pages/playground/style/message-input.less +++ b/src/pages/playground/style/message-input.less @@ -80,7 +80,6 @@ width: 100%; display: flex; position: relative; - background-color: var(--ant-color-bg-elevated); border-radius: var(--border-radius-base); textarea { diff --git a/src/pages/resources/components/model-files.tsx b/src/pages/resources/components/model-files.tsx index 543f2bec..451ea1fc 100644 --- a/src/pages/resources/components/model-files.tsx +++ b/src/pages/resources/components/model-files.tsx @@ -154,8 +154,10 @@ const getWorkerName = ( }; const getModelInfo = (record: ListItem) => { + const source = _.get(modelSourceMap, record.source, ''); if (record.source === modelSourceMap.huggingface_value) { return { + source: `${source}/${record.huggingface_repo_id}`, repo_id: record.huggingface_repo_id, title: `${record.huggingface_repo_id}/${record.huggingface_filename}`, filename: record.huggingface_filename || record.huggingface_repo_id @@ -163,6 +165,7 @@ const getModelInfo = (record: ListItem) => { } if (record.source === modelSourceMap.modelscope_value) { return { + source: `${source}/${record.model_scope_model_id}`, repo_id: record.model_scope_model_id, title: `${record.model_scope_model_id}/${record.model_scope_file_path}`, filename: record.model_scope_file_path || record.model_scope_model_id @@ -170,12 +173,14 @@ const getModelInfo = (record: ListItem) => { } if (record.source === modelSourceMap.ollama_library_value) { return { + source: `${source}/${record.ollama_library_model_name}`, repo_id: record.ollama_library_model_name, title: record.ollama_library_model_name, filename: record.ollama_library_model_name }; } return { + source: `${source}${record.local_path}`, repo_id: record.local_path, title: record.local_path, filename: _.split(record.local_path, /[\\/]/).pop() @@ -551,11 +556,11 @@ const ModelFiles = () => { }, render: (text: string, record: ListItem) => { const modelInfo = getModelInfo(record); - const { repo_id } = modelInfo; + const { repo_id, source } = modelInfo; return ( - - - {_.get(modelSourceMap, record.source, '')} + + + {source} ); @@ -586,7 +591,7 @@ const ModelFiles = () => { { title: intl.formatMessage({ id: 'resources.modelfiles.form.path' }), dataIndex: 'resolved_paths', - width: '35%', + width: '30%', ellipsis: { showTitle: false }, @@ -597,6 +602,7 @@ const ModelFiles = () => { { title: intl.formatMessage({ id: 'resources.modelfiles.size' }), dataIndex: 'size', + width: 100, ellipsis: { showTitle: false }, @@ -612,6 +618,7 @@ const ModelFiles = () => { title: intl.formatMessage({ id: 'common.table.createTime' }), dataIndex: 'created_at', sorter: false, + width: 180, ellipsis: { showTitle: false }, diff --git a/src/pages/resources/index.tsx b/src/pages/resources/index.tsx index 8547a7a1..026f1280 100644 --- a/src/pages/resources/index.tsx +++ b/src/pages/resources/index.tsx @@ -12,6 +12,10 @@ const Wrapper = styled.div` .ant-page-header-heading { padding-inline: 8px; } + .ant-tabs-nav .ant-tabs-tab-active, + .ant-tabs-tab { + background: transparent; + } `; const Resources = () => {