From 2d8f8ffa7a6e5b3f4428eba8fecae29523582ff0 Mon Sep 17 00:00:00 2001 From: sakurayinfei <970412446@qq.com> Date: Tue, 28 Oct 2025 10:18:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(textarea):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E7=9A=AE=E8=82=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/opendesign/src/textarea/style/theme-ascend.scss | 1 + packages/opendesign/src/textarea/style/theme-common.scss | 9 +++++++++ .../opendesign/src/textarea/style/theme-kunpeng.scss | 1 + .../opendesign/src/textarea/style/theme-openeuler.scss | 1 + 4 files changed, 12 insertions(+) create mode 100644 packages/opendesign/src/textarea/style/theme-common.scss diff --git a/packages/opendesign/src/textarea/style/theme-ascend.scss b/packages/opendesign/src/textarea/style/theme-ascend.scss index e69de29b..6bd5cbdc 100644 --- a/packages/opendesign/src/textarea/style/theme-ascend.scss +++ b/packages/opendesign/src/textarea/style/theme-ascend.scss @@ -0,0 +1 @@ +@use './theme-common.scss' as *; diff --git a/packages/opendesign/src/textarea/style/theme-common.scss b/packages/opendesign/src/textarea/style/theme-common.scss new file mode 100644 index 00000000..7f461b30 --- /dev/null +++ b/packages/opendesign/src/textarea/style/theme-common.scss @@ -0,0 +1,9 @@ +@use '../../_styles/mixin.scss' as *; + +.o-textarea { + height: 126px; + + @include respond-to('<=pc_s') { + height: 116px; + } +} diff --git a/packages/opendesign/src/textarea/style/theme-kunpeng.scss b/packages/opendesign/src/textarea/style/theme-kunpeng.scss index e69de29b..6bd5cbdc 100644 --- a/packages/opendesign/src/textarea/style/theme-kunpeng.scss +++ b/packages/opendesign/src/textarea/style/theme-kunpeng.scss @@ -0,0 +1 @@ +@use './theme-common.scss' as *; diff --git a/packages/opendesign/src/textarea/style/theme-openeuler.scss b/packages/opendesign/src/textarea/style/theme-openeuler.scss index e69de29b..6bd5cbdc 100644 --- a/packages/opendesign/src/textarea/style/theme-openeuler.scss +++ b/packages/opendesign/src/textarea/style/theme-openeuler.scss @@ -0,0 +1 @@ +@use './theme-common.scss' as *; -- Gitee From cd169fd37bf9f400bf4d647746dac3c85c47c20c Mon Sep 17 00:00:00 2001 From: sakurayinfei <970412446@qq.com> Date: Tue, 28 Oct 2025 10:50:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(textarea):=20=E4=BC=98=E5=8C=96scrollba?= =?UTF-8?q?rProps=E5=8F=8AinputEl=E5=8F=98=E9=87=8F=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opendesign/src/_components/in-textarea/InTextarea.vue | 6 +++--- packages/opendesign/src/_headless/use-input.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/opendesign/src/_components/in-textarea/InTextarea.vue b/packages/opendesign/src/_components/in-textarea/InTextarea.vue index 56f3403a..cc629e75 100644 --- a/packages/opendesign/src/_components/in-textarea/InTextarea.vue +++ b/packages/opendesign/src/_components/in-textarea/InTextarea.vue @@ -4,7 +4,7 @@ import { inTextareaProps } from './types'; import { IconClose } from '../../_utils/icons'; import { useInput } from '../../_headless/use-input'; import { useI18n } from '../../locale'; -import { vScrollbar } from '../../scrollbar'; +import { vScrollbar, type BaseScrollerPropsT } from '../../scrollbar'; const props = defineProps(inTextareaProps); @@ -89,8 +89,8 @@ const mirrorValue = computed(() => { const scrollbarProps = computed(() => { if (props.scrollbar === true) { return { - showType: 'hover', - size: 'small', + showType: 'hover' as BaseScrollerPropsT['showType'], + size: 'small' as BaseScrollerPropsT['size'], }; } return props.scrollbar; diff --git a/packages/opendesign/src/_headless/use-input.ts b/packages/opendesign/src/_headless/use-input.ts index b122e9ca..5c625598 100644 --- a/packages/opendesign/src/_headless/use-input.ts +++ b/packages/opendesign/src/_headless/use-input.ts @@ -98,7 +98,7 @@ export function useInput(options: InputOptionT) { return r; }; - const inputEl = ref(); + const inputEl = ref(); // 正在输入中文,处理输入过程中触发input事件 const composition = useComposition({ el: inputEl }); -- Gitee From 2c22660a732740fd93ebd2c1871473815ed0e2f8 Mon Sep 17 00:00:00 2001 From: sakurayinfei <970412446@qq.com> Date: Tue, 28 Oct 2025 10:51:37 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(doc):=20=E5=AE=8C=E5=96=84=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/_components/in-textarea/types.ts | 62 +++++++++------ .../opendesign/src/textarea/OTextarea.vue | 6 +- .../{textareaUsage.ts => TextareaUsage.vue} | 75 ++++++------------- .../src/textarea/__docs__/index.en-US.md | 6 +- .../src/textarea/__docs__/index.zh-CN.md | 4 +- packages/opendesign/src/textarea/types.ts | 12 ++- 6 files changed, 83 insertions(+), 82 deletions(-) rename packages/opendesign/src/textarea/__docs__/__case__/{textareaUsage.ts => TextareaUsage.vue} (36%) diff --git a/packages/opendesign/src/_components/in-textarea/types.ts b/packages/opendesign/src/_components/in-textarea/types.ts index c8c439ca..69b5bd3e 100644 --- a/packages/opendesign/src/_components/in-textarea/types.ts +++ b/packages/opendesign/src/_components/in-textarea/types.ts @@ -6,121 +6,141 @@ export type TextareaResizeT = (typeof TextareaResizeTypes)[number]; export const inTextareaProps = { /** - * 下拉框的值 - * v-model + * @zh-CN 双向绑定值 + * @en-US Two-way binding value */ modelValue: { type: String, }, /** - * 下拉框的默认值 - * 非受控 + * @zh-CN 非受控默认值 + * @en-US Non-controlled default value */ defaultValue: { type: String, }, /** - * 提示文本 + * @zh-CN 提示文本 + * @en-US Prompt text */ placeholder: { type: String, }, /** - * 是否禁用 + * @zh-CN 是否禁用 + * @en-US Whether to disable */ disabled: { type: Boolean, }, /** - * 是否只读 + * @zh-CN 是否只读 + * @en-US Whether to read-only */ readonly: { type: Boolean, }, /** - * 是否可以清除 + * @zh-CN 是否可以清除 + * @en-US Whether to clear */ clearable: { type: Boolean, }, /** - * 对值格式化,控制显示格式 + * @zh-CN 格式化函数,控制显示格式 + * @en-US Format function, control display format */ format: { type: Function as PropType<(value: string) => string>, }, /** - * 判断值的有效性 + * @zh-CN 校验函数 + * @en-US Validation function */ validate: { type: Function as PropType<(value: string) => boolean>, }, /** - * 输入为无效值时,在blur + * @zh-CN 输入非法值时的回调 + * @en-US Callback when input value is invalid */ valueOnInvalidChange: { type: Function as PropType<(inputValue: string, lastValidInputValue: string) => string>, }, /** - * 显示的行数 + * @zh-CN 同 textarea 的 rows 属性 + * @en-US The rows attribute of textarea */ rows: { type: Number, default: undefined, }, /** - * 显示的列数 + * @zh-CN 同 textarea 的 cols 属性 + * @en-US The cols attribute of textarea */ cols: { type: Number, default: undefined, }, /** - * 是否支持调整尺寸 ResizeT + * @zh-CN 是否支持调整尺寸 + * @en-US Whether to support resizing + * @default 'vertical' */ resize: { type: String as PropType, default: 'vertical', }, /** - * 最小字符长度 + * @zh-CN 字符最小长度 + * @en-US Minimum length of characters */ minLength: { type: Number, }, /** - * 最大字符长度 + * @zh-CN 字符最大长度 + * @en-US Maximum length of characters */ maxLength: { type: Number, }, /** - * 获取长度方法 + * @zh-CN 获取长度方法 + * @en-US The method of getting length */ getLength: { type: Function as PropType<(val: string) => number>, }, /** - * 超过最大字符长度时是否允许输入 + * @zh-CN 超过最大字符长度时是否允许输入 + * @en-US Whether to allow input when exceeding the maximum character length + * @default true */ inputOnOutlimit: { type: Boolean, default: true, }, /** - * 根据内容自动计算高度 + * @zh-CN 根据内容自动计算高度 + * @en-US Whether to automatically calculate height based on content */ autoSize: { type: Boolean, }, /** - * textarea id, 用于label关联 + * @zh-CN id, 用于关联label + * @en-US id, for associating label */ textareaId: { type: String, }, /** - * 使用内置scrollbar,支持传递scrollbar配置项 + * @zh-CN scrollbar配置 + * @en-US scrollbar configuration + * @default true */ scrollbar: { type: [Boolean, Object] as PropType>, diff --git a/packages/opendesign/src/textarea/OTextarea.vue b/packages/opendesign/src/textarea/OTextarea.vue index ce7b7db8..08df185d 100644 --- a/packages/opendesign/src/textarea/OTextarea.vue +++ b/packages/opendesign/src/textarea/OTextarea.vue @@ -79,10 +79,14 @@ onMounted(() => { }); defineExpose({ + /** expose: Focus method */ focus: () => inTextareaRef.value?.focus(), + /** expose: Blur method */ blur: () => inTextareaRef.value?.blur(), + /** expose: Clear method */ clear: () => inTextareaRef.value?.clear(), - inputEl: () => inTextareaRef.value?.inputEl, + /** expose: Textarea element */ + inputEl: () => inTextareaRef.value?.inputEl as HTMLTextAreaElement | undefined, });