diff --git a/packages/amis-ui/scss/components/form/_text.scss b/packages/amis-ui/scss/components/form/_text.scss index 25a9026f568..62a7b185419 100644 --- a/packages/amis-ui/scss/components/form/_text.scss +++ b/packages/amis-ui/scss/components/form/_text.scss @@ -506,3 +506,44 @@ input.#{$ns}TextControl-input-password { color: var(--Form-input-onDisabled-color); } } + +// 多选模式下收纳标签的浮层样式 +.#{$ns}TextControl-overflow-wrapper { + .#{$ns}TextControl-overflow { + display: flex; + flex-wrap: wrap; + gap: var(--gap-xs); + max-width: px2rem(300px); + } + + .#{$ns}TextControl-overflow-value { + display: inline-flex; + align-items: center; + line-height: calc( + var(--Form-input-lineHeight) * var(--Form-input-fontSize) - #{px2rem(2px)} + ); + font-size: var(--Form-selectValue-fontSize); + background: var(--Form-select-multiple-bgColor); + border-radius: px2rem(2px); + padding: 0 var(--gap-sm); + max-width: 100%; + word-break: break-all; + } + + .#{$ns}TextControl-overflow-valueLabel { + line-height: var(--gap-xl); + word-break: break-all; + } + + .#{$ns}TextControl-overflow-valueIcon { + cursor: pointer; + margin-left: var(--gap-sm); + min-width: px2rem(10px); + color: var(--default-icon-color); + flex-shrink: 0; + + &:hover { + color: var(--danger); + } + } +} diff --git a/packages/amis/src/renderers/Form/InputText.tsx b/packages/amis/src/renderers/Form/InputText.tsx index dd54e75edfa..df020fa9d77 100644 --- a/packages/amis/src/renderers/Form/InputText.tsx +++ b/packages/amis/src/renderers/Form/InputText.tsx @@ -22,7 +22,14 @@ import { isEffectiveApi, getVariable } from 'amis-core'; -import {Icon, SpinnerExtraProps, Input, Spinner, OverflowTpl} from 'amis-ui'; +import { + Icon, + SpinnerExtraProps, + Input, + Spinner, + OverflowTpl, + TooltipWrapper +} from 'amis-ui'; import {ActionSchema} from '../Action'; import {FormOptionsSchema, SchemaApi, SchemaObject} from '../../Schema'; import {supportStatic} from './StaticHoc'; @@ -127,6 +134,16 @@ export interface AMISInputTextSchema extends AMISFormItemWithOptions { /** 内容为空时清除值 */ clearValueOnEmpty?: boolean; + + /** + * 标签的最大展示数量,超出数量后以收纳浮层的方式展示,仅在多选模式开启后生效 + */ + maxTagCount?: number; + + /** + * 收纳标签的Popover配置 + */ + overflowTagPopover?: object; } export type InputTextRendererEvent = @@ -139,7 +156,7 @@ export type InputTextRendererEvent = | 'enter'; export interface TextProps extends OptionsControlProps, SpinnerExtraProps { - placeholder?: string | { [propName: string]: string; }; + placeholder?: string | {[propName: string]: string}; addOn?: ActionObject & { position?: 'left' | 'right'; label?: string; @@ -163,6 +180,11 @@ export interface TextProps extends OptionsControlProps, SpinnerExtraProps { nativeInputClassName?: string; popOverContainer?: any; + + /** 标签的最大展示数量 */ + maxTagCount?: number; + /** 收纳标签的Popover配置 */ + overflowTagPopover?: object; } export interface TextState { @@ -792,7 +814,9 @@ export default class TextControl extends React.PureComponent< css, id, nativeAutoComplete, - testIdBuilder + testIdBuilder, + maxTagCount, + overflowTagPopover } = this.props; let type = this.props.type?.replace(/^(?:native|input)\-/, ''); @@ -883,25 +907,89 @@ export default class TextControl extends React.PureComponent< ) : null} - {selectedOptions.map((item, index) => - multiple ? ( -