diff --git a/CHANGELOG.md b/CHANGELOG.md index 760504e4289eeca566505b10bc91ba2db162017b..791ba27364ea57caa7ae8edf2d93a44cd055aaa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ ## [Unreleased] +### Change + +- 更新编辑器提供清除能力,更新富文本是否已折叠状态持久化 + ### Fixed - 修复ios中时间选择器弹出文本输入框 diff --git a/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx b/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx index 2b74c9f18ce8d11689193274e3aacf18dba050af..f2cb1eeb4ebec867c28624f470cb044c5482ef04 100644 --- a/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx +++ b/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx @@ -89,6 +89,11 @@ export const IBizFormItemContainer = defineComponent({ if (props.labelWidth !== 130) { Object.assign(result, { 'label-width': `${props.labelWidth}px` }); } + if (props.required) { + Object.assign(result, { 'required-style': 'none' }); + } else { + Object.assign(result, { 'required-style': 'inherit' }); + } return ns.cssVarBlock(result); }); return { ns, cssVars, showUnderLine, showEditorBorder }; diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.scss b/src/editor/data-picker/ibiz-picker/ibiz-picker.scss index 2e99f1c5470e5695e6032e98b99063beeb123301..f7ac58710c8b9b697395e5b0250e926e0a78d3ed 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.scss +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.scss @@ -87,4 +87,93 @@ input { text-align: getCssVar(form-item-container, editor-align); } + + @include e('pickup-search-icon'){ + font-size: getCssVar(font-size,header,5); + display: flex; + } + @include e('linkview-icon'){ + font-size: getCssVar(font-size,header,5); + display: flex; + } +} +@include b(picker-pop){ + display: flex; + width: 100%; + height: 100%; + padding: getCssVar(spacing,base); + flex-direction: column; + @include e('header'){ + flex-shrink: 0; + display: flex; + justify-content: space-between; + opacity: 0.7; + @include m('caption'){ + margin-left: getCssVar(spacing,base); + } + @include m('right'){ + display: getCssVar(form-item-container,required-style); + } + } + @include e('content'){ + flex: 1; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + } + @include e('search'){ + margin-top: getCssVar(spacing,base); + flex-shrink: 0; + padding: getCssVar(spacing,extra-tight) 0; + overflow: hidden; + border-radius: getCssVar(border-radius,medium); + + .van-field{ + --van-field-icon-size: #{getCssVar(font-soze,heaader-5)}; + padding: getCssVar(spacing,extra-tight); + --van-cell-background:#{getCssVar(color,fill,2)}; + + .van-field__left-icon{ + display: flex; + align-items: center; + padding: 0 getCssVar(spacing,extra-tight); + } + + .van-field__value{ + &::placeholder{ + font-size: getCssVar(font-size,small); + color: getCssVar(color,text,3); + } + input{ + text-align: left; + } + } + } + + } + @include e('list'){ + flex: 1; + overflow: auto; + @include m('item'){ + display: flex; + justify-content: space-between; + align-items: center; + padding: getCssVar(spacing,base) 0; + border-bottom: 1px solid getCssVar(color,border); + } + @include m('item-text'){ + color: getCssVar(dropdown, select-option-item-color); + background-color: getCssVar(dropdown, select-option-item-bkcolor); + + border-radius: getCssVar(spacing,base); + @include when('bkcolor'){ + padding: getCssVar(spacing,extra-tight) getCssVar(spacing,base); + } + } + @include m('selected'){ + color: getCssVar(color,primary); + } + } } diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx index d2388e46969cc65bba4b3f117fdf86a5273fbbc4..1e1a6678b70384dd7c412e4a6a44c799500bbd58 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx @@ -36,6 +36,9 @@ export const IBizPicker = defineComponent({ // 加载中 const loading: Ref = ref(false); + // 搜索过滤值 + const searchValue: Ref = ref(''); + watch( () => props.value, newVal => { @@ -63,23 +66,28 @@ export const IBizPicker = defineComponent({ // 处理选中数据后的处理逻辑 const handleDataSelect = async (data: IData) => { + const targetData = data.getOrigin?.() || data._deData || data; // 处理回填数据 - const dataItems = await c.calcFillDataItems(data); + const dataItems = await c.calcFillDataItems(targetData); if (dataItems.length) { dataItems.forEach(dataItem => { emit('change', dataItem.value, dataItem.id); }); } - Object.assign(data, { - [c.keyName]: data[c.keyName] ? data[c.keyName] : data.srfkey, - [c.textName]: data[c.textName] ? data[c.textName] : data.srfmajortext, + Object.assign(targetData, { + [c.keyName]: targetData[c.keyName] + ? targetData[c.keyName] + : targetData.srfkey, + [c.textName]: targetData[c.textName] + ? targetData[c.textName] + : targetData.srfmajortext, }); // 处理值项和本身的值 if (c.valueItem) { - emit('change', data[c.keyName], c.valueItem); + emit('change', targetData[c.keyName], c.valueItem); } - emit('change', data[c.textName]); + emit('change', targetData[c.textName]); }; // 打开数据选择视图 @@ -193,11 +201,9 @@ export const IBizPicker = defineComponent({ }; // 确定 - const onConfirm = ({ selectedOptions }: { selectedOptions: IData[] }) => { + const onConfirm = (item: IData) => { showPicker.value = false; - if (Array.isArray(selectedOptions)) { - handleDataSelect(selectedOptions[0]); - } + handleDataSelect(item); }; const openPicker = async () => { @@ -205,6 +211,110 @@ export const IBizPicker = defineComponent({ onSearch(); }; + // 点击关闭 + const onClose = () => { + showPicker.value = true; + }; + + // 点击清除按钮 + const onClickClear = () => { + showPicker.value = false; + onClear(); + }; + + // 绘制弹出抽屉顶部 + const renderPopHeader = () => { + return ( +
+
+ + + {ibiz.i18n.t('editor.dropdown.pleaseSelect')} + +
+
+ {ibiz.i18n.t('editor.dropdown.clear')} +
+
+ ); + }; + + // 绘制搜索框 + const renderSearchInput = () => { + return ( +
+ + {{ + 'left-icon': () => { + return ; + }, + }} + +
+ ); + }; + + const renderNoData = () => { + return ; + }; + + // 绘制选项列表 + const renderSelectList = () => { + return ( +
+ {items.value.length !== 0 && + items.value.map((item: IData) => { + if (item.srfmajortext?.indexOf(searchValue.value) < 0) return; + return ( +
onConfirm(item)} + > +
+ {item.srfmajortext} +
+ {item.srfkey && item.srfkey === props.data[c.valueItem] && ( + + )} +
+ ); + })} + {items.value.length === 0 && renderNoData()} +
+ ); + }; + + // 绘制弹出抽屉内容 + const renderPopContent = () => { + return ( +
+ {renderSearchInput()} + {renderSelectList()} +
+ ); + }; + return { ns, c, @@ -217,7 +327,6 @@ export const IBizPicker = defineComponent({ onACSelect, onSearch, editorRef, - onClear, onFocus, onBlur, closeCircle, @@ -226,6 +335,8 @@ export const IBizPicker = defineComponent({ onConfirm, showPicker, openPicker, + renderPopHeader, + renderPopContent, }; }, render() { @@ -241,9 +352,8 @@ export const IBizPicker = defineComponent({ { this.openPicker(); @@ -260,27 +370,34 @@ export const IBizPicker = defineComponent({ return [ this.c.model.pickupAppViewId ? ( - + ) : null, this.c.model.linkAppViewId ? ( - + ) : null, ]; }, }} - - { - this.showPicker = false; - }} - onConfirm={this.onConfirm} - /> + +
+ {this.renderPopHeader()} + {this.renderPopContent()} +
); diff --git a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.scss b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.scss index 210e885f3626f2670ae33a58492d7bf8a3285bb2..880d61a5c28cddf5e8e85fe1bdda35f576b5b779 100644 --- a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.scss +++ b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.scss @@ -70,3 +70,82 @@ background-color: getCssVar(dropdown, select-option-item-bkcolor); border-radius: getCssVar(spacing, base); } + +@include b(dropdown-pop){ + display: flex; + width: 100%; + height: 100%; + padding: getCssVar(spacing,base); + flex-direction: column; + @include e('header'){ + flex-shrink: 0; + display: flex; + justify-content: space-between; + opacity: 0.7; + @include m('caption'){ + margin-left: getCssVar(spacing,base); + } + @include m('right'){ + display: getCssVar(form-item-container,required-style); + } + } + @include e('content'){ + flex: 1; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + } + @include e('search'){ + margin-top: getCssVar(spacing,base); + flex-shrink: 0; + padding: getCssVar(spacing,extra-tight) 0; + overflow: hidden; + border-radius: getCssVar(border-radius,medium); + + .van-field{ + --van-field-icon-size: #{getCssVar(font-soze,heaader-5)}; + padding: getCssVar(spacing,extra-tight); + --van-cell-background:#{getCssVar(color,fill,2)}; + + .van-field__left-icon{ + display: flex; + align-items: center; + padding: 0 getCssVar(spacing,extra-tight); + } + + .van-field__value{ + text-align: left; + &::placeholder{ + font-size: getCssVar(font-size,small); + color: getCssVar(color,text,3); + } + } + } + + } + @include e('list'){ + flex: 1; + overflow: auto; + @include m('item'){ + display: flex; + justify-content: space-between; + align-items: center; + padding: getCssVar(spacing,base) 0; + border-bottom: 1px solid getCssVar(color,border); + } + @include m('item-text'){ + color: getCssVar(dropdown, select-option-item-color); + background-color: getCssVar(dropdown, select-option-item-bkcolor); + + border-radius: getCssVar(spacing,base); + @include when('bkcolor'){ + padding: getCssVar(spacing,extra-tight) getCssVar(spacing,base); + } + } + @include m('selected'){ + color: getCssVar(color,primary); + } + } +} \ No newline at end of file diff --git a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx index fc4e4c36bdc209559e90ba225aae18d196da1912..1d939d19f90139452d7b6d57762882a6ef5a3f71 100644 --- a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx +++ b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx @@ -5,7 +5,6 @@ import { useNamespace, } from '@ibiz-template/vue3-util'; import './ibiz-dropdown.scss'; -import { PickerOption } from 'vant'; import { DropDownListEditorController } from '../dropdown-list-editor.controller'; import { IBizCommonRightIcon } from '../../common/right-icon/right-icon'; @@ -24,6 +23,9 @@ export const IBizDropdown = defineComponent({ // 是否是树形 const hasChildren = ref(false); + // 搜索值 + const searchValue = ref(''); + // 树数据 const treeNodes: Ref = ref([]); @@ -105,23 +107,124 @@ export const IBizDropdown = defineComponent({ }, 100); }; - // 确定 - const onConfirm = ({ selectedOptions }: { selectedOptions: IData[] }) => { + // 根据text获取对应代码表项 + const getCodeListItem = (text: string | undefined) => { + return items.value.find(item => item.text === text); + }; + + // 清除 + const onClear = (event: MouseEvent) => { + event.stopPropagation(); + event.preventDefault(); showPicker.value = false; - if (Array.isArray(selectedOptions)) { - curValue.value = selectedOptions[0].value; - const emitVal = selectedOptions - .map(val => { - return val.value; - }) - .join(','); - emit('change', selectedOptions.length === 0 ? null : emitVal); + emit('change', null); + }; + + // 选中 + const onSelect = (select?: IData) => { + showPicker.value = false; + if (select) { + curValue.value = select.value; } + emit('change', !select ? null : select.value); }; - // 根据text获取对应代码表项 - const getCodeListItem = (text: string | undefined) => { - return items.value.find(item => item.text === text); + const onClose = () => { + showPicker.value = false; + }; + + // 绘制弹出抽屉顶部 + const renderPopHeader = () => { + return ( +
+
+ + + {ibiz.i18n.t('editor.dropdown.pleaseSelect')} + +
+
+ {ibiz.i18n.t('editor.dropdown.clear')} +
+
+ ); + }; + + // 绘制搜索框 + const renderSearchInput = () => { + return ( +
+ + {{ + 'left-icon': () => { + return ; + }, + }} + +
+ ); + }; + + // 无数据 + const renderNoData = () => { + return ; + }; + + // 绘制选项列表 + const renderSelectList = () => { + return ( +
+ {items.value.length === 0 && + items.value.map((item: IData) => { + if (item.text?.indexOf(searchValue.value) < 0) return; + return ( +
onSelect(item)} + > +
+ {item.text} +
+ {item.value && item.value === curValue.value && ( + + )} +
+ ); + })} + {items.value.length !== 0 && renderNoData()} +
+ ); + }; + + // 绘制弹出抽屉内容 + const renderPopContent = () => { + return ( +
+ {renderSearchInput()} + {renderSelectList()} +
+ ); }; return { @@ -136,8 +239,9 @@ export const IBizDropdown = defineComponent({ editorRef, treeNodes, showPicker, - onConfirm, getCodeListItem, + renderPopHeader, + renderPopContent, }; }, @@ -218,39 +322,16 @@ export const IBizDropdown = defineComponent({ 'right-icon': , }} , - - { - this.showPicker = false; - }} - onConfirm={this.onConfirm} - > - {{ - option: (option: PickerOption, _index: number) => { - return ( -
- {option.text} -
- ); - }, - }} -
+ +
+ {this.renderPopHeader()} + {this.renderPopContent()} +
, ]; return ( diff --git a/src/editor/html/quill-editor-preview/quill-editor-preview.tsx b/src/editor/html/quill-editor-preview/quill-editor-preview.tsx index b2d155726bf3355c262d154e359fdfd963a5bdff..8c8005e13593decd1a75dcd6eb28f21613482a3a 100644 --- a/src/editor/html/quill-editor-preview/quill-editor-preview.tsx +++ b/src/editor/html/quill-editor-preview/quill-editor-preview.tsx @@ -17,6 +17,10 @@ const IBizQuillPreview: any = defineComponent({ type: Number, default: 200, }, + isCollapse: { + type: Boolean, + default: false, + }, }, setup(props, { emit }) { const ns = useNamespace('quill-preview'); @@ -32,9 +36,6 @@ const IBizQuillPreview: any = defineComponent({ // 预览图片路径 const previewImage = ref(''); - // 是否完全展开 - const isCollapse = ref(true); - // 伸缩内容高度 const collapseHeight = ref('auto'); @@ -58,7 +59,7 @@ const IBizQuillPreview: any = defineComponent({ // 重置伸缩高度 const resetCollapseHeight = () => { - if (isCollapse.value && editorRef.value) { + if (props.isCollapse && editorRef.value) { // 收缩时 const height = (editorRef.value as HTMLElement).offsetHeight; // 内容高度低于设置的默认高度时,拿内容高度作为伸缩高度 @@ -114,7 +115,8 @@ const IBizQuillPreview: any = defineComponent({ // 点击伸缩按钮 const onClick = () => { - isCollapse.value = !isCollapse.value; + // isCollapse.value = !isCollapse.value; + emit('collapse', !props.isCollapse); resetCollapseHeight(); }; @@ -123,12 +125,12 @@ const IBizQuillPreview: any = defineComponent({ return (
- {isCollapse.value + {props.isCollapse ? ibiz.i18n.t('editor.html.expand') : ibiz.i18n.t('editor.html.collapse')} - {isCollapse.value && } - {!isCollapse.value && } + {props.isCollapse && } + {!props.isCollapse && }
); }; @@ -148,7 +150,6 @@ const IBizQuillPreview: any = defineComponent({ lang, editorRef, previewImage, - isCollapse, collapseHeight, showCollapseBtn, handleClick, diff --git a/src/editor/html/quill-editor/quill-editor.scss b/src/editor/html/quill-editor/quill-editor.scss index 861a603c1f4019d697f8c4b33e83c8cf80340805..01b7bafaf0298e763cfb7c6cdc731c49dfb254b2 100644 --- a/src/editor/html/quill-editor/quill-editor.scss +++ b/src/editor/html/quill-editor/quill-editor.scss @@ -46,6 +46,9 @@ margin-left: getCssVar(spacing, tight); } } + .ql-toolbar.ql-snow { + text-align: left; + } // quill多语言特殊处理,后续补充多语言 @include m(zh-cn) { .ql-snow { diff --git a/src/editor/html/quill-editor/quill-editor.tsx b/src/editor/html/quill-editor/quill-editor.tsx index e1f22f3bbdda7ab66986b9cb1d60649f3018dbac..1648f5641af1d503ca149265066ab343a291db1a 100644 --- a/src/editor/html/quill-editor/quill-editor.tsx +++ b/src/editor/html/quill-editor/quill-editor.tsx @@ -51,6 +51,9 @@ const IBizQuill: any = defineComponent({ // 临时数据 const tempValue: Ref = ref(''); + // 是否完全展开 + const isCollapse: Ref = ref(true); + const getImage = (delta: Delta) => { const item = delta.ops.find(x => x.insert && (x.insert as IData).image); if (item) { @@ -181,6 +184,7 @@ const IBizQuill: any = defineComponent({ editing, updating, editorRef, + isCollapse, handleEdit, handleCancel, handleConfirm, @@ -204,9 +208,13 @@ const IBizQuill: any = defineComponent({ readonly={this.readonly} showCollapse={this.c.showCollapse} defaultHeight={this.c.defaultHeight} + isCollapse={this.isCollapse} onEdit={() => { this.editing = true; }} + onCollapse={(val: boolean) => { + this.isCollapse = val; + }} /> )} (false); // 最大值 let max = Infinity; // 最小值 @@ -97,7 +99,10 @@ export const IBizNumberRangePicker = defineComponent({ } else if (index === 1) { maxValue.value = value; } - if (minValue.value !== null && maxValue.value !== null) { + if ( + (minValue.value || Number(maxValue.value) === 0) && + (maxValue.value || Number(maxValue.value) === 0) + ) { emit('change', [minValue.value, maxValue.value].join(valueSeparator)); } if (refFormItem.value) { @@ -106,12 +111,53 @@ export const IBizNumberRangePicker = defineComponent({ } }; + const handleFoucs = () => { + startFocus.value = true; + emit('focus'); + }; + + const handleBlur = () => { + startFocus.value = false; + emit('blur'); + }; // 聚焦失焦事件 const { componentRef: editorRef } = useFocusAndBlur( - () => emit('focus'), - () => emit('blur'), + handleFoucs, + handleBlur, ); + const onClear = () => { + const evt: IData = { + target: { + value: '', + }, + }; + handleChange(evt, 0); + handleChange(evt, 1); + }; + + const renderClear = () => { + if (props.readonly || props.disabled) { + return null; + } + if ( + !minValue.value && + minValue.value !== 0 && + !maxValue.value && + maxValue.value !== 0 + ) { + return null; + } + if (!startFocus.value) return null; + return ( + + ); + }; + return { ns, c, @@ -127,6 +173,7 @@ export const IBizNumberRangePicker = defineComponent({ endPlaceHolder, rangeSeparator, editorRef, + renderClear, }; }, render() { @@ -145,8 +192,9 @@ export const IBizNumberRangePicker = defineComponent({ readonly={this.readonly} placeholder={this.startPlaceHolder} type='number' + class={this.ns.e('start')} onInput={(val: IData) => this.handleChange(val, 0)} - /> + >
{this.rangeSeparator}
this.handleChange(val, 1)} > + {this.renderClear()} ); }, diff --git a/src/editor/text-box/ibiz-input-number/ibiz-input-number.scss b/src/editor/text-box/ibiz-input-number/ibiz-input-number.scss index 40400c24a3dd915002aa4f23e2279b0a00e394fd..6e775053550e760a7fe3afd90747aad9448e35ba 100644 --- a/src/editor/text-box/ibiz-input-number/ibiz-input-number.scss +++ b/src/editor/text-box/ibiz-input-number/ibiz-input-number.scss @@ -35,4 +35,8 @@ font-size: getCssVar('form-item', 'font-size'); font-style: normal; } + + .van-field__clear{ + display: getCssVar(form-item-container,required-style); + } } \ No newline at end of file diff --git a/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx b/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx index daf1b69b63bd100f4707bf8c677a6412e71cd102..a17e1a83e1d8aa141277028284fe847c8c07e8cb 100644 --- a/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx +++ b/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx @@ -68,6 +68,10 @@ export const IBizInputNumber = defineComponent({ emit('blur'); }; + const onClear = () => { + emit('change', undefined); + }; + return { ns, c, @@ -77,6 +81,7 @@ export const IBizInputNumber = defineComponent({ onFocus, onBlur, show, + onClear, }; }, render() { @@ -98,7 +103,10 @@ export const IBizInputNumber = defineComponent({ modelValue={this.currentVal} placeholder={this.c.placeHolder} precision={this.c.model.precision} + type='number' disabled={this.disabled} + clearable + onClear={this.onClear} onFocus={this.onFocus} onBlur={this.onBlur} onInput={this.handleChange} diff --git a/src/editor/text-box/input/input.scss b/src/editor/text-box/input/input.scss index 4df7a96b670daf798124fcc4bda2af1a14139fe1..63d0f13bcb843a97b921cfbad86398a023888000 100644 --- a/src/editor/text-box/input/input.scss +++ b/src/editor/text-box/input/input.scss @@ -36,4 +36,8 @@ font-size: getCssVar('form-item', 'font-size'); font-style: normal; } + + .van-field__clear{ + display: getCssVar(form-item-container,required-style); + } } diff --git a/src/editor/text-box/input/input.tsx b/src/editor/text-box/input/input.tsx index 5f46c795b81730095212b61cf3f42f5c1a092c08..2b3a3ccae64096f7810af419a65ebbb6c7d7f446 100644 --- a/src/editor/text-box/input/input.tsx +++ b/src/editor/text-box/input/input.tsx @@ -119,6 +119,11 @@ export const IBizInput = defineComponent({ emit('focus'); }; + // 清除输入 + const onClear = () => { + emit('change', ''); + }; + return { c, ns, @@ -129,6 +134,7 @@ export const IBizInput = defineComponent({ handleKeyUp, onBlur, onFocus, + onClear, inputRef, }; }, @@ -167,6 +173,8 @@ export const IBizInput = defineComponent({ disabled={this.disabled} autosize={this.type === 'textarea'} autocomplete='new-password' + clearable + onClear={this.onClear} > {slots} diff --git a/src/locale/en/index.ts b/src/locale/en/index.ts index 08224cee1b2a0a916109f38a978b9bdb092e99b1..30fe1ad4aaef02f359dc8832c56bdfccb4dff66b 100644 --- a/src/locale/en/index.ts +++ b/src/locale/en/index.ts @@ -37,6 +37,11 @@ export default { asc: 'ascend', desc: 'descend', }, + dropdown: { + pleaseSelect: 'Please Select', + clear: 'Clear', + searchPlaceholder: 'Search', + }, }, // 部件 control: { diff --git a/src/locale/zh-CN/index.ts b/src/locale/zh-CN/index.ts index a75809417f93513cabd0008efa461992ccef4234..c0973e55483a59e7ae58fa2d389e8e5417621c23 100644 --- a/src/locale/zh-CN/index.ts +++ b/src/locale/zh-CN/index.ts @@ -148,6 +148,11 @@ export default { emojiPicker: { addEmoji: '添加表情', }, + dropdown: { + pleaseSelect: '请选择', + clear: '清除', + searchPlaceholder: '搜索', + }, }, // 多语言 locale: {