Files
iot-device-management-frontend/apps/web-ele/src/components/description/use-description.ts

32 lines
894 B
TypeScript
Raw Normal View History

2025-10-21 15:16:32 +08:00
import type { Component } from 'vue';
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
import type { DescInstance, DescriptionProps } from './typing';
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
import { h, reactive } from 'vue';
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
import Description from './description.vue';
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
export function useDescription(options?: Partial<DescriptionProps>) {
const propsState = reactive<Partial<DescriptionProps>>(options || {});
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
const api: DescInstance = {
setDescProps: (descProps: Partial<DescriptionProps>): void => {
Object.assign(propsState, descProps);
},
};
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
// 创建一个包装组件,将 propsState 合并到 props 中
const DescriptionWrapper: Component = {
2025-07-05 07:10:58 +08:00
name: 'UseDescription',
inheritAttrs: false,
2025-10-21 15:16:32 +08:00
setup(_props, { attrs, slots }) {
return () => {
// @ts-ignore - 避免类型实例化过深
return h(Description, { ...propsState, ...attrs }, slots);
};
2025-07-05 07:10:58 +08:00
},
2025-10-21 15:16:32 +08:00
};
2025-07-05 07:10:58 +08:00
2025-10-21 15:16:32 +08:00
return [DescriptionWrapper, api] as const;
2025-07-05 07:10:58 +08:00
}