From 4b73457f7fd74d929b99b427fb556fa549910070 Mon Sep 17 00:00:00 2001 From: jialin Date: Wed, 26 Feb 2025 15:59:39 +0800 Subject: [PATCH] style: gpuselector dropdown style --- .../seal-form/components/wrapper.less | 69 ++++++++++++++++--- .../seal-form/components/wrapper.tsx | 5 +- src/components/seal-form/seal-cascader.tsx | 9 ++- src/components/seal-form/styles/cascader.less | 5 ++ src/global.less | 12 +++- src/locales/en-US/common.ts | 3 +- src/locales/zh-CN/common.ts | 3 +- .../llmodels/components/advance-config.tsx | 20 ++++++ 8 files changed, 110 insertions(+), 16 deletions(-) create mode 100644 src/components/seal-form/styles/cascader.less diff --git a/src/components/seal-form/components/wrapper.less b/src/components/seal-form/components/wrapper.less index 08ebf641..f8b8d1e8 100644 --- a/src/components/seal-form/components/wrapper.less +++ b/src/components/seal-form/components/wrapper.less @@ -17,6 +17,47 @@ border: none; box-shadow: none; + &.dropdown-visible { + :local(.wrapper) { + :global(.ant-select-selector) { + border-bottom: none !important; + border-radius: @borderRadius @borderRadius 0 0; + transition: all 0.2s ease; + + &::before { + content: ''; + position: absolute; + height: 1px; + margin-inline: 1px; + bottom: 0; + left: 0; + right: 0; + background-color: var(--ant-color-split); + } + } + + :global(.ant-select-dropdown) { + box-shadow: none; + border-width: var(--ant-line-width); + border-style: var(--ant-line-type); + border-color: var(--ant-input-active-border-color); + border-top: none; + } + + &:hover { + :global(.ant-select-dropdown) { + border-color: var(--ant-input-active-border-color); + } + } + + &:focus-within { + border-color: var(--ant-input-active-border-color) !important; + outline: 0; + background-color: var(--ant-input-active-bg); + } + } + } + &:focus-within { border: none; box-shadow: none; @@ -64,6 +105,12 @@ border-color: var(--ant-color-error) !important; } } + + &.dropdown-visible { + :global(.ant-select-dropdown) { + border-color: var(--ant-color-error) !important; + } + } } } @@ -208,6 +255,15 @@ display: flex; align-items: center; height: 54px; + + :global(.ant-select-selection-search) { + top: 20px !important; + inset-inline-start: @input-inner-padding; + } + } + + :global(.ant-select.ant-cascader .ant-select-selection-search) { + top: 0 !important; } :global(.ant-input-number-input-wrap) { @@ -217,10 +273,10 @@ :global(.ant-select-selector) { flex: 1; padding-inline: @input-inner-padding !important; - border-width: var(--ant-line-width) !important; - border-style: var(--ant-line-type) !important; - border-color: var(--ant-color-border) !important; - border-radius: @borderRadius !important; + border-width: var(--ant-line-width); + border-style: var(--ant-line-type); + border-color: var(--ant-color-border); + border-radius: @borderRadius; height: 54px !important; padding-block: 20px 0 !important; box-shadow: none !important; @@ -237,11 +293,6 @@ } } - :global(.ant-select-selection-search) { - top: 20px !important; - inset-inline-start: @input-inner-padding; - } - :global(.ant-select-multiple.ant-select-lg) { :global(.ant-select-selection-search) { margin-inline-start: 0 !important; diff --git a/src/components/seal-form/components/wrapper.tsx b/src/components/seal-form/components/wrapper.tsx index 8bc7c5cc..2331dec9 100644 --- a/src/components/seal-form/components/wrapper.tsx +++ b/src/components/seal-form/components/wrapper.tsx @@ -16,6 +16,7 @@ interface WrapperProps { addAfter?: React.ReactNode; variant?: string; hasPrefix?: boolean; + classList?: string; onClick?: () => void; } @@ -33,18 +34,20 @@ const Wrapper: React.FC = ({ addAfter, hasPrefix, noWrapperStyle, + classList, onClick }) => { return (
diff --git a/src/components/seal-form/seal-cascader.tsx b/src/components/seal-form/seal-cascader.tsx index 2c45d535..b128f8b4 100644 --- a/src/components/seal-form/seal-cascader.tsx +++ b/src/components/seal-form/seal-cascader.tsx @@ -4,7 +4,6 @@ import type { CascaderAutoProps } from 'antd'; import { Cascader, Form } from 'antd'; import { cloneDeep } from 'lodash'; import { useEffect, useMemo, useRef, useState } from 'react'; -import styled from 'styled-components'; import Wrapper from './components/wrapper'; import { SealFormItemProps } from './types'; @@ -25,7 +24,7 @@ const SealCascader: React.FC = ( const intl = useIntl(); const [isFocus, setIsFocus] = useState(false); const inputRef = useRef(null); - const boxRef = useRef(null); + const [visible, setVisible] = useState(false); let status = ''; // the status can be controlled by Form.Item @@ -83,11 +82,14 @@ const SealCascader: React.FC = ( props.onBlur?.(e); }; - const Boxer = styled.div``; + const handleDropdownVisibleChange = (open: boolean) => { + setVisible(open); + }; return ( = ( onBlur={handleOnBlur} onChange={handleChange} notFoundContent={null} + onDropdownVisibleChange={handleDropdownVisibleChange} > ); diff --git a/src/components/seal-form/styles/cascader.less b/src/components/seal-form/styles/cascader.less new file mode 100644 index 00000000..28e381dd --- /dev/null +++ b/src/components/seal-form/styles/cascader.less @@ -0,0 +1,5 @@ +:local(.dropdown-visible) { + :local(.ant-select-selector) { + border-bottom: 0 !important; + } +} diff --git a/src/global.less b/src/global.less index 2b43e3e7..696178a7 100644 --- a/src/global.less +++ b/src/global.less @@ -797,8 +797,18 @@ body { background-color: var(--ant-select-option-selected-bg) !important; } +.ant-cascader-dropdown .ant-cascader-menu { + flex-grow: unset; +} + .cascader-popup-wrapper { - // width: 100%; + width: 100%; + border: 1px solid var(--ant-color-border); + inset: 54px auto auto 0 !important; + border-radius: 0 0 var(--border-radius-base) var(--border-radius-base); + border-top: none; + max-height: 240px; + min-height: 100px; &.gpu-selector { .ant-cascader-menu:last-child { diff --git a/src/locales/en-US/common.ts b/src/locales/en-US/common.ts index 37906950..617f1f96 100644 --- a/src/locales/en-US/common.ts +++ b/src/locales/en-US/common.ts @@ -226,5 +226,6 @@ export default { 'common.button.delrecreate': 'Delete (Recreate)', 'common.options.all': 'All', 'common.options.none': 'None', - 'common.options.auto': 'Auto' + 'common.options.auto': 'Auto', + 'common.search.empty': 'No matching results found.' }; diff --git a/src/locales/zh-CN/common.ts b/src/locales/zh-CN/common.ts index 240bba5f..fb61191e 100644 --- a/src/locales/zh-CN/common.ts +++ b/src/locales/zh-CN/common.ts @@ -219,5 +219,6 @@ export default { 'common.button.delrecreate': '删除(重建)', 'common.options.all': '全部', 'common.options.none': '无', - 'common.options.auto': '自动' + 'common.options.auto': '自动', + 'common.search.empty': '未找到匹配结果' }; diff --git a/src/pages/llmodels/components/advance-config.tsx b/src/pages/llmodels/components/advance-config.tsx index bb1c004a..656c739a 100644 --- a/src/pages/llmodels/components/advance-config.tsx +++ b/src/pages/llmodels/components/advance-config.tsx @@ -11,6 +11,7 @@ import { useIntl } from '@umijs/max'; import { Checkbox, Collapse, + Empty, Form, FormInstance, Tooltip, @@ -145,6 +146,23 @@ const AdvanceConfig: React.FC = (props) => { }; const gpuOptionRender = (data: any) => { + if (data.value === '__EMPTY__') { + return ( + + ); + } let width: any = { maxWidth: 140, minWidth: 140 @@ -275,6 +293,8 @@ const AdvanceConfig: React.FC = (props) => { >