diff --git a/packages/common b/packages/common index 5aedfdf7ab..581f565e6d 160000 --- a/packages/common +++ b/packages/common @@ -1 +1 @@ -Subproject commit 5aedfdf7ab0457141b0a886d2126e22bbdb42cae +Subproject commit 581f565e6d55091fac143775d461f2c47c51365c diff --git a/packages/components/switch/_example/theme.vue b/packages/components/switch/_example/theme.vue new file mode 100644 index 0000000000..6b02a5e338 --- /dev/null +++ b/packages/components/switch/_example/theme.vue @@ -0,0 +1,19 @@ + diff --git a/packages/components/switch/_usage/props.json b/packages/components/switch/_usage/props.json index 881604decd..8c4f7c4d60 100644 --- a/packages/components/switch/_usage/props.json +++ b/packages/components/switch/_usage/props.json @@ -11,6 +11,25 @@ "defaultValue": false, "options": [] }, + { + "name": "theme", + "type": "enum", + "defaultValue": "round", + "options": [ + { + "label": "round", + "value": "round" + }, + { + "label": "rectangle", + "value": "rectangle" + }, + { + "label": "line", + "value": "line" + } + ] + }, { "name": "size", "type": "enum", diff --git a/packages/components/switch/props.ts b/packages/components/switch/props.ts index 233173bd12..c4fdf51842 100644 --- a/packages/components/switch/props.ts +++ b/packages/components/switch/props.ts @@ -8,7 +8,7 @@ import { TdSwitchProps } from './type'; import { PropType } from 'vue'; export default { - /** Switch 切换状态前的回调方法,常用于需要发起异步请求的场景,回调返回值支持布尔和 Promise 类型,返回`false`或 Promise reject不继续执行change,否则则继续执行。 */ + /** Switch 切换状态前的回调方法,常用于需要发起异步请求的场景,回调返回值支持布尔和 Promise 类型,返回`false`或 Promise reject不继续执行change,否则则继续执行 */ beforeChange: { type: Function as PropType, }, @@ -37,6 +37,15 @@ export default { return ['small', 'medium', 'large'].includes(val); }, }, + /** 组件风格。round为圆形,rectangle为矩形,line为线形 */ + theme: { + type: String as PropType, + default: 'round' as TdSwitchProps['theme'], + validator(val: TdSwitchProps['theme']): boolean { + if (!val) return true; + return ['round', 'rectangle', 'line'].includes(val); + }, + }, /** 开关值 */ value: { type: [String, Number, Boolean] as PropType, diff --git a/packages/components/switch/switch.en-US.md b/packages/components/switch/switch.en-US.md index ac48c1a82d..b0313a6429 100644 --- a/packages/components/switch/switch.en-US.md +++ b/packages/components/switch/switch.en-US.md @@ -1,19 +1,21 @@ :: BASE_DOC :: ## API + ### Switch Props name | type | default | description | required -- | -- | -- | -- | -- -beforeChange | Function | - | stop checked change。Typescript:`() => boolean \| Promise` | N -customValue | Array | - | Typescript:`Array` | N +beforeChange | Function | - | Typescript: `() => boolean \| Promise` | N +customValue | Array | - | Typescript: `Array` | N disabled | Boolean | undefined | \- | N -label | Array / Slot / Function | [] | Typescript:`Array \| TNode<{ value: SwitchValue }>`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/common.ts) | N +label | Array / Slot / Function | [] | Typescript: `Array \| TNode<{ value: SwitchValue }>`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/common.ts) | N loading | Boolean | false | \- | N size | String | medium | options: small/medium/large | N -value | String / Number / Boolean | - | `v-model` and `v-model:value` is supported。Typescript:`T` `type SwitchValue = string \| number \| boolean`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N -defaultValue | String / Number / Boolean | - | uncontrolled property。Typescript:`T` `type SwitchValue = string \| number \| boolean`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N -onChange | Function | | Typescript:`(value: T, context: { e: MouseEvent }) => void`
| N +theme | String | round | options: round/rectangle/line | N +value | String / Number / Boolean | - | `v-model` and `v-model:value` is supported。Typescript: `T` `type SwitchValue = string \| number \| boolean`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N +defaultValue | String / Number / Boolean | - | uncontrolled property。Typescript: `T` `type SwitchValue = string \| number \| boolean`。[see more ts definition](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N +onChange | Function | | Typescript: `(value: T, context: { e: MouseEvent }) => void`
| N ### Switch Events diff --git a/packages/components/switch/switch.md b/packages/components/switch/switch.md index c71c696f28..fda2e4c1b4 100644 --- a/packages/components/switch/switch.md +++ b/packages/components/switch/switch.md @@ -1,9 +1,13 @@ :: BASE_DOC :: +### 不同风格的开关 + +{{ theme }} ## API + ### Switch Props -名称 | 类型 | 默认值 | 说明 | 必传 +名称 | 类型 | 默认值 | 描述 | 必传 -- | -- | -- | -- | -- beforeChange | Function | - | Switch 切换状态前的回调方法,常用于需要发起异步请求的场景,回调返回值支持布尔和 Promise 类型,返回`false`或 Promise reject不继续执行change,否则则继续执行。TS 类型:`() => boolean \| Promise` | N customValue | Array | - | 用于自定义开关的值,[打开时的值,关闭时的值]。默认为 [true, false]。示例:[1, 0]、['open', 'close']。TS 类型:`Array` | N @@ -11,6 +15,7 @@ disabled | Boolean | undefined | 是否禁用组件。优先级:Switch.disable label | Array / Slot / Function | [] | 开关内容,[开启时内容,关闭时内容]。示例:['开', '关'] 或 (value) => value ? '开' : '关'。TS 类型:`Array \| TNode<{ value: SwitchValue }>`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/common.ts) | N loading | Boolean | false | 是否处于加载中状态 | N size | String | medium | 开关尺寸。可选项:small/medium/large | N +theme | String | round | 组件风格。round为圆形,rectangle为矩形,line为线形。可选项:round/rectangle/line | N value | String / Number / Boolean | - | 开关值。支持语法糖 `v-model` 或 `v-model:value`。TS 类型:`T` `type SwitchValue = string \| number \| boolean`。[详细类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N defaultValue | String / Number / Boolean | - | 开关值。非受控属性。TS 类型:`T` `type SwitchValue = string \| number \| boolean`。[详细类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/switch/type.ts) | N onChange | Function | | TS 类型:`(value: T, context: { e: MouseEvent }) => void`
数据发生变化时触发 | N diff --git a/packages/components/switch/switch.tsx b/packages/components/switch/switch.tsx index 65d9f84d89..f4625ed6f6 100755 --- a/packages/components/switch/switch.tsx +++ b/packages/components/switch/switch.tsx @@ -66,6 +66,8 @@ export default defineComponent({ [STATUS.value.disabled]: disabled.value, [STATUS.value.loading]: props.loading, [STATUS.value.checked]: innerValue.value === activeValue.value || props.modelValue === activeValue.value, + [`${COMPONENT_NAME.value}--line`]: props.theme === 'line', + [`${COMPONENT_NAME.value}--rectangle`]: props.theme === 'rectangle', }, ]); const nodeClasses = computed(() => { @@ -100,6 +102,8 @@ export default defineComponent({ ); const content = computed(() => { + if (props.theme === 'line') return; + if (isFunction(props.label)) { return props.label(h, { value: innerValue.value }); } diff --git a/packages/components/switch/type.ts b/packages/components/switch/type.ts index 3308048a92..583a430362 100644 --- a/packages/components/switch/type.ts +++ b/packages/components/switch/type.ts @@ -4,11 +4,11 @@ * 该文件为脚本自动生成文件,请勿随意修改。如需修改请联系 PMC * */ -import { TNode } from '../common'; +import type { TNode } from '../common'; export interface TdSwitchProps { /** - * Switch 切换状态前的回调方法,常用于需要发起异步请求的场景,回调返回值支持布尔和 Promise 类型,返回`false`或 Promise reject不继续执行change,否则则继续执行。 + * Switch 切换状态前的回调方法,常用于需要发起异步请求的场景,回调返回值支持布尔和 Promise 类型,返回`false`或 Promise reject不继续执行change,否则则继续执行 */ beforeChange?: () => boolean | Promise; /** @@ -34,6 +34,11 @@ export interface TdSwitchProps { * @default medium */ size?: 'small' | 'medium' | 'large'; + /** + * 组件风格。round为圆形,rectangle为矩形,line为线形 + * @default round + */ + theme?: 'round' | 'rectangle' | 'line'; /** * 开关值 */