| | |
| | | import type { UnwrapRef } from 'vue'; |
| | | import { reactive, readonly, computed, getCurrentInstance } from 'vue'; |
| | | import { reactive, readonly, computed, getCurrentInstance, watchEffect } from 'vue'; |
| | | |
| | | import { isEqual } from 'lodash-es'; |
| | | |
| | | export function useRuleFormItem<T extends Indexable>( |
| | | export function useRuleFormItem<T extends Recordable>( |
| | | props: T, |
| | | key: keyof T = 'value', |
| | | changeEvent = 'change' |
| | |
| | | |
| | | const defaultState = readonly(innerState); |
| | | |
| | | const setState = (val: UnwrapRef<T[keyof T]>) => { |
| | | const setState = (val: UnwrapRef<T[keyof T]>): void => { |
| | | innerState.value = val as T[keyof T]; |
| | | }; |
| | | const state = computed({ |
| | | |
| | | watchEffect(() => { |
| | | innerState.value = props[key]; |
| | | }); |
| | | |
| | | const state: any = computed({ |
| | | get() { |
| | | return innerState.value; |
| | | }, |
| | | set(value) { |
| | | if (isEqual(value, defaultState.value)) return; |
| | | |
| | | innerState.value = value as T[keyof T]; |
| | | emit?.(changeEvent, value); |
| | | }, |