fix: Fix ts type error
							parent
							
								
									eee3d31eeb
								
							
						
					
					
						commit
						81283bcd24
					
				|  | @ -1,11 +1,12 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { Button, theme } from 'ant-design-vue' | import { Button, theme } from 'ant-design-vue' | ||||||
|  | import type { ComponentOptionsMixin } from 'vue' | ||||||
| import { computed, unref } from 'vue' | import { computed, unref } from 'vue' | ||||||
| import { buttonProps } from './props' | import { buttonProps } from './props' | ||||||
| import { useAttrs } from '@/hooks/core/useAttrs' | import { useAttrs } from '@/hooks/core/useAttrs' | ||||||
| import { Icon } from '@/components/Icon' | import { Icon } from '@/components/Icon' | ||||||
| 
 | 
 | ||||||
| defineOptions({ name: 'AButton', extends: Button, indeterminate: false }) | defineOptions({ name: 'AButton', extends: Button as ComponentOptionsMixin, indeterminate: false }) | ||||||
| const props = defineProps(buttonProps) | const props = defineProps(buttonProps) | ||||||
| const { useToken } = theme | const { useToken } = theme | ||||||
| const { token } = useToken() | const { token } = useToken() | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ function sliderChange(n: number) { | ||||||
|   fetch() |   fetch() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function handleDelete(id) { | async function handleDelete(id: number) { | ||||||
|   emit('delete', id) |   emit('delete', id) | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -18,7 +18,9 @@ const props = defineProps({ | ||||||
|   showBtn: { type: Boolean, default: true }, |   showBtn: { type: Boolean, default: true }, | ||||||
|   btnProps: { type: Object as PropType<ButtonProps> }, |   btnProps: { type: Object as PropType<ButtonProps> }, | ||||||
|   btnText: { type: String, default: '' }, |   btnText: { type: String, default: '' }, | ||||||
|   uploadApi: { type: Function as PropType<({ file, name }) => Promise<void>> }, |   uploadApi: { | ||||||
|  |     type: Function as PropType<({ file, name }: { file: Blob; name: string }) => Promise<void>>, | ||||||
|  |   }, | ||||||
|   size: { type: Number, default: 5 }, |   size: { type: Number, default: 5 }, | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,15 +3,7 @@ | ||||||
| --> | --> | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, watch } from 'vue' | import { computed, watch } from 'vue' | ||||||
| import { | import { Checkbox, Col, Empty, Form, FormItem, Input, Switch } from 'ant-design-vue' | ||||||
|   Checkbox, |  | ||||||
|   Col, |  | ||||||
|   Empty, |  | ||||||
|   Form, |  | ||||||
|   FormItem, |  | ||||||
|   Input, |  | ||||||
|   Switch, |  | ||||||
| } from 'ant-design-vue' |  | ||||||
| import { isArray } from 'lodash-es' | import { isArray } from 'lodash-es' | ||||||
| import { | import { | ||||||
|   advanceFormItemColProps, |   advanceFormItemColProps, | ||||||
|  | @ -23,6 +15,8 @@ import { | ||||||
| import { useFormDesignState } from '../../../hooks/useFormDesignState' | import { useFormDesignState } from '../../../hooks/useFormDesignState' | ||||||
| import RuleProps from './RuleProps.vue' | import RuleProps from './RuleProps.vue' | ||||||
| 
 | 
 | ||||||
|  | defineOptions({ name: 'FormItemProps' }) | ||||||
|  | 
 | ||||||
| const { formConfig } = useFormDesignState() | const { formConfig } = useFormDesignState() | ||||||
| 
 | 
 | ||||||
| watch( | watch( | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
|  * @Description: 右侧属性面板控件 表单属性面板 |  * @Description: 右侧属性面板控件 表单属性面板 | ||||||
| --> | --> | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
|  | import { computed } from 'vue' | ||||||
| import type { RadioChangeEvent } from 'ant-design-vue' | import type { RadioChangeEvent } from 'ant-design-vue' | ||||||
| import { | import { | ||||||
|   Checkbox, |   Checkbox, | ||||||
|  | @ -9,11 +10,12 @@ import { | ||||||
|   Form, |   Form, | ||||||
|   FormItem, |   FormItem, | ||||||
|   InputNumber, |   InputNumber, | ||||||
|   Radio, |  | ||||||
|   Slider, |   Slider, | ||||||
| } from 'ant-design-vue' | } from 'ant-design-vue' | ||||||
| import { useFormDesignState } from '../../../hooks/useFormDesignState' | import { useFormDesignState } from '../../../hooks/useFormDesignState' | ||||||
| 
 | 
 | ||||||
|  | defineOptions({ name: 'FormProps' }) | ||||||
|  | 
 | ||||||
| const { formConfig } = useFormDesignState() | const { formConfig } = useFormDesignState() | ||||||
| 
 | 
 | ||||||
| formConfig.value = formConfig.value || { | formConfig.value = formConfig.value || { | ||||||
|  | @ -21,10 +23,17 @@ formConfig.value = formConfig.value || { | ||||||
|   wrapperCol: { span: 24 }, |   wrapperCol: { span: 24 }, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function lableLayoutChange(e: RadioChangeEvent) { | function labelLayoutChange(e: RadioChangeEvent) { | ||||||
|   if (e.target.value === 'Grid') |   if (e.target.value === 'Grid') | ||||||
|     formConfig.value.layout = 'horizontal' |     formConfig.value.layout = 'horizontal' | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | const sliderSpan = computed(() => { | ||||||
|  |   if (formConfig.value.labelLayout) | ||||||
|  |     return Number(formConfig.value.labelCol!.span) | ||||||
|  | 
 | ||||||
|  |   return 0 | ||||||
|  | }) | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|  | @ -33,33 +42,33 @@ function lableLayoutChange(e: RadioChangeEvent) { | ||||||
|       <!--      <e-upload v-model="fileList"></e-upload> --> |       <!--      <e-upload v-model="fileList"></e-upload> --> | ||||||
| 
 | 
 | ||||||
|       <FormItem label="表单布局"> |       <FormItem label="表单布局"> | ||||||
|         <Radio.Group v-model:value="formConfig.layout" button-style="solid"> |         <RadioGroup v-model:value="formConfig.layout" button-style="solid"> | ||||||
|           <Radio.Button value="horizontal"> |           <RadioButton value="horizontal"> | ||||||
|             水平 |             水平 | ||||||
|           </Radio.Button> |           </RadioButton> | ||||||
|           <Radio.Button value="vertical" :disabled="formConfig.labelLayout === 'Grid'"> |           <RadioButton value="vertical" :disabled="formConfig.labelLayout === 'Grid'"> | ||||||
|             垂直 |             垂直 | ||||||
|           </Radio.Button> |           </RadioButton> | ||||||
|           <Radio.Button value="inline" :disabled="formConfig.labelLayout === 'Grid'"> |           <RadioButton value="inline" :disabled="formConfig.labelLayout === 'Grid'"> | ||||||
|             行内 |             行内 | ||||||
|           </Radio.Button> |           </RadioButton> | ||||||
|         </Radio.Group> |         </RadioGroup> | ||||||
|       </FormItem> |       </FormItem> | ||||||
| 
 | 
 | ||||||
|       <!-- <Row> --> |       <!-- <Row> --> | ||||||
|       <FormItem label="标签布局"> |       <FormItem label="标签布局"> | ||||||
|         <Radio.Group |         <RadioGroup | ||||||
|           v-model:value="formConfig.labelLayout" |           v-model:value="formConfig.labelLayout" | ||||||
|           button-style="solid" |           button-style="solid" | ||||||
|           @change="lableLayoutChange" |           @change="labelLayoutChange" | ||||||
|         > |         > | ||||||
|           <Radio.Button value="flex"> |           <RadioButton value="flex"> | ||||||
|             固定 |             固定 | ||||||
|           </Radio.Button> |           </RadioButton> | ||||||
|           <Radio.Button value="Grid" :disabled="formConfig.layout !== 'horizontal'"> |           <RadioButton value="Grid" :disabled="formConfig.layout !== 'horizontal'"> | ||||||
|             栅格 |             栅格 | ||||||
|           </Radio.Button> |           </RadioButton> | ||||||
|         </Radio.Group> |         </RadioGroup> | ||||||
|       </FormItem> |       </FormItem> | ||||||
|       <!-- </Row> --> |       <!-- </Row> --> | ||||||
|       <FormItem v-show="formConfig.labelLayout === 'flex'" label="标签宽度(px)"> |       <FormItem v-show="formConfig.labelLayout === 'flex'" label="标签宽度(px)"> | ||||||
|  | @ -72,35 +81,35 @@ function lableLayoutChange(e: RadioChangeEvent) { | ||||||
|       </FormItem> |       </FormItem> | ||||||
|       <div v-if="formConfig.labelLayout === 'Grid'"> |       <div v-if="formConfig.labelLayout === 'Grid'"> | ||||||
|         <FormItem label="labelCol"> |         <FormItem label="labelCol"> | ||||||
|           <Slider v-model:value="formConfig.labelCol!.span" :max="24" /> |           <Slider v-model:value="sliderSpan" :max="24" /> | ||||||
|         </FormItem> |         </FormItem> | ||||||
|         <FormItem label="wrapperCol"> |         <FormItem label="wrapperCol"> | ||||||
|           <Slider v-model:value="formConfig.wrapperCol!.span" :max="24" /> |           <Slider v-model:value="sliderSpan" :max="24" /> | ||||||
|         </FormItem> |         </FormItem> | ||||||
| 
 | 
 | ||||||
|         <FormItem label="标签对齐"> |         <FormItem label="标签对齐"> | ||||||
|           <Radio.Group v-model:value="formConfig.labelAlign" button-style="solid"> |           <RadioGroup v-model:value="formConfig.labelAlign" button-style="solid"> | ||||||
|             <Radio.Button value="left"> |             <RadioButton value="left"> | ||||||
|               靠左 |               靠左 | ||||||
|             </Radio.Button> |             </RadioButton> | ||||||
|             <Radio.Button value="right"> |             <RadioButton value="right"> | ||||||
|               靠右 |               靠右 | ||||||
|             </Radio.Button> |             </RadioButton> | ||||||
|           </Radio.Group> |           </RadioGroup> | ||||||
|         </FormItem> |         </FormItem> | ||||||
| 
 | 
 | ||||||
|         <FormItem label="控件大小"> |         <FormItem label="控件大小"> | ||||||
|           <Radio.Group v-model:value="formConfig.size" button-style="solid"> |           <RadioGroup v-model:value="formConfig.size" button-style="solid"> | ||||||
|             <Radio.Button value="default"> |             <RadioButton value="default"> | ||||||
|               默认 |               默认 | ||||||
|             </Radio.Button> |             </RadioButton> | ||||||
|             <Radio.Button value="small"> |             <RadioButton value="small"> | ||||||
|               小 |               小 | ||||||
|             </Radio.Button> |             </RadioButton> | ||||||
|             <Radio.Button value="large"> |             <RadioButton value="large"> | ||||||
|               大 |               大 | ||||||
|             </Radio.Button> |             </RadioButton> | ||||||
|           </Radio.Group> |           </RadioGroup> | ||||||
|         </FormItem> |         </FormItem> | ||||||
|       </div> |       </div> | ||||||
|       <FormItem label="表单属性"> |       <FormItem label="表单属性"> | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ import { useDesign } from '@/hooks/web/useDesign' | ||||||
| const props = defineProps( | const props = defineProps( | ||||||
|   { |   { | ||||||
|     list: { |     list: { | ||||||
|       type: Array as unknown as any[], |       type: Array as PropType<IVFormComponent[]>, | ||||||
|       default: () => [], |       default: () => [], | ||||||
|     }, |     }, | ||||||
|     handleListPush: { |     handleListPush: { | ||||||
|  |  | ||||||
|  | @ -4,12 +4,12 @@ import type { ComponentOptions } from 'vue' | ||||||
| import type { SelectValue } from 'ant-design-vue/lib/select' | import type { SelectValue } from 'ant-design-vue/lib/select' | ||||||
| import type { validateOptions } from 'ant-design-vue/lib/form/useForm' | import type { validateOptions } from 'ant-design-vue/lib/form/useForm' | ||||||
| import type { RuleError } from 'ant-design-vue/lib/form/interface' | import type { RuleError } from 'ant-design-vue/lib/form/interface' | ||||||
|  | import type { FormLayout, FormProps } from 'ant-design-vue/lib/form/Form' | ||||||
| import type { IVFormMethods } from '../hooks/useVFormMethods' | import type { IVFormMethods } from '../hooks/useVFormMethods' | ||||||
| import type { IAnyObject } from './base-type' | import type { IAnyObject } from './base-type' | ||||||
| import type { ColEx } from '@/components/Form/src/types' | import type { ColEx } from '@/components/Form/src/types' | ||||||
| import type { FormItem } from '@/components/Form' | import type { FormItem } from '@/components/Form' | ||||||
| 
 | 
 | ||||||
| type LayoutType = 'horizontal' | 'vertical' | 'inline' |  | ||||||
| type labelLayout = 'flex' | 'Grid' | type labelLayout = 'flex' | 'Grid' | ||||||
| export type PropsTabKey = 1 | 2 | 3 | export type PropsTabKey = 1 | 2 | 3 | ||||||
| type ColSpanType = number | string | type ColSpanType = number | string | ||||||
|  | @ -75,28 +75,25 @@ declare type namesType = string | string[] | ||||||
| /** | /** | ||||||
|  * 表单配置 |  * 表单配置 | ||||||
|  */ |  */ | ||||||
| export interface IFormConfig { | export type PickAntFormConfig = Pick< | ||||||
|   // 表单项配置列表
 |   FormProps, | ||||||
|   // schemas: IVFormComponent[];
 |   | 'layout' | ||||||
|   // 表单配置
 |   | 'size' | ||||||
|   // config: {
 |   | 'colon' | ||||||
|   layout?: LayoutType |   | 'labelAlign' | ||||||
|  |   | 'disabled' | ||||||
|  |   | 'labelCol' | ||||||
|  |   | 'wrapperCol' | ||||||
|  |   | 'hideRequiredMark' | ||||||
|  | > | ||||||
|  | 
 | ||||||
|  | // 使用extends 而不使用 &联结 是为了避免 type:check指令类型重载错误
 | ||||||
|  | export interface IFormConfig extends PickAntFormConfig { | ||||||
|   labelLayout?: labelLayout |   labelLayout?: labelLayout | ||||||
|   labelWidth?: number |   labelWidth?: number | ||||||
|   labelCol?: Partial<IACol> |  | ||||||
|   wrapperCol?: Partial<IACol> |  | ||||||
|   hideRequiredMark?: boolean |  | ||||||
|   // Whether to disable
 |  | ||||||
|   schemas: IVFormComponent[] |   schemas: IVFormComponent[] | ||||||
|   disabled?: boolean |  | ||||||
|   labelAlign?: 'left' | 'right' |  | ||||||
|   // Internal component size of the form
 |  | ||||||
|   size?: 'default' | 'small' | 'large' |  | ||||||
|   // };
 |  | ||||||
|   // 当前选中项
 |  | ||||||
|   currentItem?: IVFormComponent |   currentItem?: IVFormComponent | ||||||
|   activeKey?: PropsTabKey |   activeKey?: PropsTabKey | ||||||
|   colon?: boolean |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export interface AForm { | export interface AForm { | ||||||
|  | @ -118,7 +115,7 @@ export interface AForm { | ||||||
|    * @default 'horizontal' |    * @default 'horizontal' | ||||||
|    * @type string |    * @type string | ||||||
|    */ |    */ | ||||||
|   layout: 'horizontal' | 'inline' | 'vertical' |   layout: FormLayout | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * The layout for input controls, same as labelCol |    * The layout for input controls, same as labelCol | ||||||
|  |  | ||||||
|  | @ -9,18 +9,26 @@ import SvgIcon from './SvgIcon.vue' | ||||||
| import { useDesign } from '@/hooks/web/useDesign' | import { useDesign } from '@/hooks/web/useDesign' | ||||||
| import { ScrollContainer } from '@/components/Container' | import { ScrollContainer } from '@/components/Container' | ||||||
| 
 | 
 | ||||||
| import { propTypes } from '@/utils/propTypes' |  | ||||||
| import { usePagination } from '@/hooks/web/usePagination' | import { usePagination } from '@/hooks/web/usePagination' | ||||||
| import { useI18n } from '@/hooks/web/useI18n' | import { useI18n } from '@/hooks/web/useI18n' | ||||||
| import { copyText } from '@/utils/copyTextToClipboard' | import { copyText } from '@/utils/copyTextToClipboard' | ||||||
| 
 | 
 | ||||||
| const props = defineProps({ | export interface Props { | ||||||
|   value: propTypes.string, |   value?: string | ||||||
|   width: propTypes.string.def('100%'), |   width?: string | ||||||
|   pageSize: propTypes.number.def(140), |   pageSize?: number | ||||||
|   copy: propTypes.bool.def(true), |   copy?: boolean | ||||||
|   mode: propTypes.oneOf(['svg', 'iconify']).def('iconify'), |   mode?: 'svg' | 'iconify' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const props = withDefaults(defineProps<Props>(), { | ||||||
|  |   value: '', | ||||||
|  |   width: '100%', | ||||||
|  |   pageSize: 140, | ||||||
|  |   copy: false, | ||||||
|  |   mode: 'iconify', | ||||||
| }) | }) | ||||||
|  | 
 | ||||||
| const emit = defineEmits(['change', 'update:value']) | const emit = defineEmits(['change', 'update:value']) | ||||||
| 
 | 
 | ||||||
| function getIcons() { | function getIcons() { | ||||||
|  | @ -36,7 +44,7 @@ function getIcons() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function getSvgIcons() { | function getSvgIcons() { | ||||||
|   return svgIcons.map(icon => icon.replace('icon-', '')) |   return svgIcons.map((icon: string) => icon.replace('icon-', '')) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const isSvgMode = props.mode === 'svg' | const isSvgMode = props.mode === 'svg' | ||||||
|  | @ -87,7 +95,10 @@ function handleSearchChange(e: ChangeEvent) { | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <Input v-model:value="currentSelect" disabled :style="{ width }" :placeholder="t('component.icon.placeholder')" :class="prefixCls"> |   <Input | ||||||
|  |     v-model:value="currentSelect" disabled :style="{ width }" :placeholder="t('component.icon.placeholder')" | ||||||
|  |     :class="prefixCls" | ||||||
|  |   > | ||||||
|     <template #addonAfter> |     <template #addonAfter> | ||||||
|       <Popover v-model="open" placement="bottomLeft" trigger="click" :overlay-class-name="`${prefixCls}-popover`"> |       <Popover v-model="open" placement="bottomLeft" trigger="click" :overlay-class-name="`${prefixCls}-popover`"> | ||||||
|         <template #title> |         <template #title> | ||||||
|  | @ -101,12 +112,10 @@ function handleSearchChange(e: ChangeEvent) { | ||||||
|             <ScrollContainer class="border border-t-0 border-solid"> |             <ScrollContainer class="border border-t-0 border-solid"> | ||||||
|               <ul class="flex flex-wrap px-2"> |               <ul class="flex flex-wrap px-2"> | ||||||
|                 <li |                 <li | ||||||
|                   v-for="icon in getPaginationList" |                   v-for="icon in getPaginationList" :key="icon" | ||||||
|                   :key="icon" |  | ||||||
|                   :class="currentSelect === icon ? 'border border-primary' : ''" |                   :class="currentSelect === icon ? 'border border-primary' : ''" | ||||||
|                   class="mr-1 mt-1 w-1/8 flex cursor-pointer items-center justify-center border border-solid p-2 hover:border-primary" |                   class="mr-1 mt-1 w-1/8 flex cursor-pointer items-center justify-center border border-solid p-2 hover:border-primary" | ||||||
|                   :title="icon" |                   :title="icon" @click="handleClick(icon)" | ||||||
|                   @click="handleClick(icon)" |  | ||||||
|                 > |                 > | ||||||
|                   <!-- <Icon :icon="icon" :prefix="prefix" /> --> |                   <!-- <Icon :icon="icon" :prefix="prefix" /> --> | ||||||
|                   <SvgIcon v-if="isSvgMode" :name="icon" /> |                   <SvgIcon v-if="isSvgMode" :name="icon" /> | ||||||
|  |  | ||||||
|  | @ -17,10 +17,10 @@ const nodeList: FlushList = new Map() | ||||||
| let startClick: MouseEvent | let startClick: MouseEvent | ||||||
| 
 | 
 | ||||||
| if (!isServer) { | if (!isServer) { | ||||||
|   on(document, 'mousedown', (e: MouseEvent) => (startClick = e)) |   on(document, 'mousedown', (e: Event) => (startClick = e as MouseEvent)) | ||||||
|   on(document, 'mouseup', (e: MouseEvent) => { |   on(document, 'mouseup', (e: Event) => { | ||||||
|     for (const { documentHandler } of nodeList.values()) |     for (const { documentHandler } of nodeList.values()) | ||||||
|       documentHandler(e, startClick) |       documentHandler(e as MouseEvent, startClick) | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,8 +18,8 @@ const repeatDirective: Directive = { | ||||||
|       interval = null |       interval = null | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     on(el, 'mousedown', (e: MouseEvent): void => { |     on(el, 'mousedown', (e: Event): void => { | ||||||
|       if ((e as any).button !== 0) |       if ((e as MouseEvent).button !== 0) | ||||||
|         return |         return | ||||||
|       startTime = Date.now() |       startTime = Date.now() | ||||||
|       once(document as any, 'mouseup', clear) |       once(document as any, 'mouseup', clear) | ||||||
|  |  | ||||||
|  | @ -29,9 +29,9 @@ const RippleDirective: Directive & RippleProto = { | ||||||
|     const background = bg || RippleDirective.background |     const background = bg || RippleDirective.background | ||||||
|     const zIndex = RippleDirective.zIndex |     const zIndex = RippleDirective.zIndex | ||||||
| 
 | 
 | ||||||
|     el.addEventListener(options.event, (event: EventType) => { |     el.addEventListener(options.event, (event: Event) => { | ||||||
|       rippler({ |       rippler({ | ||||||
|         event, |         event: event as EventType, | ||||||
|         el, |         el, | ||||||
|         background, |         background, | ||||||
|         zIndex, |         zIndex, | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import type { CSSProperties, VNodeChild } from 'vue' | import type { CSSProperties, VNodeChild } from 'vue' | ||||||
| import type { VueTypeValidableDef, VueTypesInterface } from 'vue-types' | import type { VueTypeValidableDef, VueTypesInterface } from 'vue-types' | ||||||
| import { createTypes } from 'vue-types' | import { createTypes, toValidableType } from 'vue-types' | ||||||
| 
 | 
 | ||||||
| export type VueNode = VNodeChild | JSX.Element | export type VueNode = VNodeChild | JSX.Element | ||||||
| 
 | 
 | ||||||
|  | @ -10,7 +10,7 @@ type PropTypes = VueTypesInterface & { | ||||||
|   // readonly trueBool: VueTypeValidableDef<boolean>;
 |   // readonly trueBool: VueTypeValidableDef<boolean>;
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const propTypes = createTypes({ | const newPropTypes = createTypes({ | ||||||
|   func: undefined, |   func: undefined, | ||||||
|   bool: undefined, |   bool: undefined, | ||||||
|   string: undefined, |   string: undefined, | ||||||
|  | @ -19,17 +19,18 @@ const propTypes = createTypes({ | ||||||
|   integer: undefined, |   integer: undefined, | ||||||
| }) as PropTypes | }) as PropTypes | ||||||
| 
 | 
 | ||||||
| // propTypes.extend([
 | class propTypes extends newPropTypes { | ||||||
| //   {
 |   // a native-like validator that supports the `.validable` method
 | ||||||
| //     name: 'style',
 |   static override get style() { | ||||||
| //     getter: true,
 |     return toValidableType('style', { | ||||||
| //     type: [String, Object],
 |       type: [String, Object], | ||||||
| //     default: undefined
 |     }) | ||||||
| //   },
 |   } | ||||||
| //   {
 | 
 | ||||||
| //     name: 'VNodeChild',
 |   static override get VNodeChild() { | ||||||
| //     getter: true,
 |     return toValidableType('VNodeChild', { | ||||||
| //     type: undefined
 |       type: undefined, | ||||||
| //   }
 |     }) | ||||||
| // ])
 |   } | ||||||
|  | } | ||||||
| export { propTypes } | export { propTypes } | ||||||
|  |  | ||||||
|  | @ -109,7 +109,7 @@ export function buildProp<T = never, D extends BuildPropType<T, V, C> = never, R | ||||||
|       : undefined |       : undefined | ||||||
| 
 | 
 | ||||||
|   return { |   return { | ||||||
|     type: typeof type === 'object' && type && Object.getOwnPropertySymbols(type).includes(wrapperKey) ? type[wrapperKey] : type, |     type: typeof type === 'object' && type && Object.getOwnPropertySymbols(type).includes(wrapperKey) && type ? type[wrapperKey] : type, | ||||||
|     required: !!required, |     required: !!required, | ||||||
|     default: defaultValue, |     default: defaultValue, | ||||||
|     validator: _validator, |     validator: _validator, | ||||||
|  | @ -152,7 +152,8 @@ export function buildProps< | ||||||
| 
 | 
 | ||||||
| export const definePropType = <T>(val: any) => ({ [wrapperKey]: val }) as PropWrapper<T> | export const definePropType = <T>(val: any) => ({ [wrapperKey]: val }) as PropWrapper<T> | ||||||
| 
 | 
 | ||||||
| export const keyOf = <T>(arr: T) => Object.keys(arr as any) as Array<keyof T> | export const keyOf = <T extends object>(arr: T) => Object.keys(arr) as Array<keyof T> | ||||||
|  | 
 | ||||||
| export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) => val as Mutable<typeof val> | export const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) => val as Mutable<typeof val> | ||||||
| 
 | 
 | ||||||
| export const componentSize = ['large', 'medium', 'small', 'mini'] as const | export const componentSize = ['large', 'medium', 'small', 'mini'] as const | ||||||
|  |  | ||||||
|  | @ -115,12 +115,12 @@ export function useFormRules(formData?: Recordable) { | ||||||
|   return { getFormRules } |   return { getFormRules } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function createRule(message: string) { | function createRule(message: string): Rule[] { | ||||||
|   return [ |   return [ | ||||||
|     { |     { | ||||||
|       required: true, |       required: true, | ||||||
|       message, |       message, | ||||||
|       trigger: 'change', |       trigger: 'change', | ||||||
|     }, |     }, | ||||||
|   ] as RuleObject[] |   ] | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 xingyu
						xingyu