fix: tree select
							parent
							
								
									bcc16e85ca
								
							
						
					
					
						commit
						cbbc4c0d5e
					
				|  | @ -121,6 +121,7 @@ | ||||||
|     "antv", |     "antv", | ||||||
|     "brotli", |     "brotli", | ||||||
|     "browserslist", |     "browserslist", | ||||||
|  |     "Cascader", | ||||||
|     "codemirror", |     "codemirror", | ||||||
|     "commitlint", |     "commitlint", | ||||||
|     "cropperjs", |     "cropperjs", | ||||||
|  |  | ||||||
|  | @ -11,14 +11,12 @@ import { useI18n } from '@/hooks/web/useI18n' | ||||||
| defineOptions({ name: 'ApiCascader' }) | defineOptions({ name: 'ApiCascader' }) | ||||||
| 
 | 
 | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|   value: { |   value: propTypes.array.def([]), | ||||||
|     type: Array, |  | ||||||
|   }, |  | ||||||
|   api: { |   api: { | ||||||
|     type: Function as PropType<(arg?: Recordable) => Promise<Option[]>>, |     type: Function as PropType<(arg?: Recordable) => Promise<Option[]>>, | ||||||
|     default: null, |     default: null, | ||||||
|   }, |   }, | ||||||
|   numberToString: propTypes.bool, |   numberToString: propTypes.bool.def(false), | ||||||
|   resultField: propTypes.string.def(''), |   resultField: propTypes.string.def(''), | ||||||
|   labelField: propTypes.string.def('label'), |   labelField: propTypes.string.def('label'), | ||||||
|   valueField: propTypes.string.def('value'), |   valueField: propTypes.string.def('value'), | ||||||
|  | @ -55,7 +53,7 @@ const apiData = ref<any[]>([]) | ||||||
| const options = ref<Option[]>([]) | const options = ref<Option[]>([]) | ||||||
| const loading = ref<boolean>(false) | const loading = ref<boolean>(false) | ||||||
| const emitData = ref<any[]>([]) | const emitData = ref<any[]>([]) | ||||||
| const isFirstLoad = ref(true) | const isFirstLoad = ref(false) | ||||||
| const { t } = useI18n() | const { t } = useI18n() | ||||||
| // Embedded in the form, just use the hook binding to perform form verification | // Embedded in the form, just use the hook binding to perform form verification | ||||||
| const [state]: any = useRuleFormItem(props, 'value', 'change', emitData) | const [state]: any = useRuleFormItem(props, 'value', 'change', emitData) | ||||||
|  | @ -150,10 +148,10 @@ watch( | ||||||
|   () => props.initFetchParams, |   () => props.initFetchParams, | ||||||
|   () => { |   () => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       !unref(isFirstLoad) && initialFetch() |       initialFetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       initialFetch() |       !unref(isFirstLoad) && initialFetch() | ||||||
|   }, |   }, | ||||||
|   { deep: true }, |   { deep: true }, | ||||||
| ) | ) | ||||||
|  | @ -175,8 +173,10 @@ function handleRenderDisplay({ labels, selectedOptions }) { | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <Cascader v-model:value="state" :options="options" :load-data="loadData" change-on-select |   <Cascader | ||||||
|     :display-render="handleRenderDisplay" @change="handleChange"> |     v-model:value="state" :options="options" :load-data="loadData" change-on-select | ||||||
|  |     :display-render="handleRenderDisplay" @change="handleChange" | ||||||
|  |   > | ||||||
|     <template v-if="loading" #suffixIcon> |     <template v-if="loading" #suffixIcon> | ||||||
|       <LoadingOutlined spin /> |       <LoadingOutlined spin /> | ||||||
|     </template> |     </template> | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ import { useAttrs } from '@/hooks/core/useAttrs' | ||||||
| import { propTypes } from '@/utils/propTypes' | import { propTypes } from '@/utils/propTypes' | ||||||
| 
 | 
 | ||||||
| defineOptions({ name: 'ApiRadioGroup' }) | defineOptions({ name: 'ApiRadioGroup' }) | ||||||
|  | 
 | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|   api: { |   api: { | ||||||
|     type: Function as PropType<(arg?: Recordable | string) => Promise<OptionsItem[]>>, |     type: Function as PropType<(arg?: Recordable | string) => Promise<OptionsItem[]>>, | ||||||
|  | @ -70,10 +71,10 @@ watch( | ||||||
|   () => props.params, |   () => props.params, | ||||||
|   () => { |   () => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       !unref(isFirstLoad) && fetch() |       fetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       fetch() |       !unref(isFirstLoad) && fetch() | ||||||
|   }, |   }, | ||||||
|   { deep: true }, |   { deep: true }, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -76,7 +76,11 @@ watch( | ||||||
| watch( | watch( | ||||||
|   () => props.params, |   () => props.params, | ||||||
|   () => { |   () => { | ||||||
|     !unref(isFirstLoad) && fetch() |     if (props.alwaysLoad) | ||||||
|  |       fetch() | ||||||
|  | 
 | ||||||
|  |     else | ||||||
|  |       !unref(isFirstLoad) && fetch() | ||||||
|   }, |   }, | ||||||
|   { deep: true }, |   { deep: true }, | ||||||
| ) | ) | ||||||
|  | @ -129,8 +133,10 @@ function handleChange(_, ...args) { | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <Select v-bind="$attrs" v-model:value="state" :options="getOptions" @dropdown-open-change="handleFetch" |   <Select | ||||||
|     @change="handleChange"> |     v-bind="$attrs" v-model:value="state" :options="getOptions" @dropdown-open-change="handleFetch" | ||||||
|  |     @change="handleChange" | ||||||
|  |   > | ||||||
|     <template v-for="item in Object.keys($slots)" #[item]="data"> |     <template v-for="item in Object.keys($slots)" #[item]="data"> | ||||||
|       <slot :name="item" v-bind="data || {}" /> |       <slot :name="item" v-bind="data || {}" /> | ||||||
|     </template> |     </template> | ||||||
|  |  | ||||||
|  | @ -39,10 +39,10 @@ watch( | ||||||
|   () => props.params, |   () => props.params, | ||||||
|   () => { |   () => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       !unref(isFirstLoaded) && fetch() |       fetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       fetch() |       !unref(isFirstLoaded) && fetch() | ||||||
|   }, |   }, | ||||||
|   { deep: true }, |   { deep: true }, | ||||||
| ) | ) | ||||||
|  | @ -51,10 +51,10 @@ watch( | ||||||
|   () => props.immediate, |   () => props.immediate, | ||||||
|   (v) => { |   (v) => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       v && !isFirstLoaded.value && fetch() |       v && fetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       v && fetch() |       v && !isFirstLoaded.value && fetch() | ||||||
|   }, |   }, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -12,12 +12,12 @@ defineOptions({ name: 'ApiTreeSelect' }) | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|   api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> }, |   api: { type: Function as PropType<(arg?: Recordable) => Promise<Recordable>> }, | ||||||
|   params: { type: Object }, |   params: { type: Object }, | ||||||
|   immediate: { type: Boolean, default: true }, |   immediate: propTypes.bool.def(true), | ||||||
|   resultField: propTypes.string.def(''), |   resultField: propTypes.string.def(''), | ||||||
|   handleTree: { type: String, default: '' }, |   handleTree: propTypes.string.def(''), | ||||||
|   parentId: { type: Number, default: 0 }, |   parentId: propTypes.number.def(0), | ||||||
|   parentLabel: { type: String, default: '' }, |   parentLabel: propTypes.string.def(''), | ||||||
|   parentFiled: { type: String, default: 'name' }, |   parentFiled: propTypes.string.def('name'), | ||||||
|   alwaysLoad: propTypes.bool.def(true), |   alwaysLoad: propTypes.bool.def(true), | ||||||
| }) | }) | ||||||
| const emit = defineEmits(['optionsChange', 'change']) | const emit = defineEmits(['optionsChange', 'change']) | ||||||
|  | @ -41,10 +41,10 @@ watch( | ||||||
|   () => props.params, |   () => props.params, | ||||||
|   () => { |   () => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       !unref(isFirstLoaded) && fetch() |       fetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       fetch() |       !unref(isFirstLoaded) && fetch() | ||||||
|   }, |   }, | ||||||
|   { deep: true }, |   { deep: true }, | ||||||
| ) | ) | ||||||
|  | @ -53,10 +53,10 @@ watch( | ||||||
|   () => props.immediate, |   () => props.immediate, | ||||||
|   (v) => { |   (v) => { | ||||||
|     if (props.alwaysLoad) |     if (props.alwaysLoad) | ||||||
|       v && !isFirstLoaded.value && fetch() |       v && fetch() | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|       v && fetch() |       v && !isFirstLoaded.value && fetch() | ||||||
|   }, |   }, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -52,7 +52,7 @@ export const basicProps = Object.assign({}, modalProps, { | ||||||
| 
 | 
 | ||||||
|   confirmLoading: { type: Boolean }, |   confirmLoading: { type: Boolean }, | ||||||
| 
 | 
 | ||||||
|   destroyOnClose: { type: Boolean }, |   destroyOnClose: { type: Boolean, default: true }, | ||||||
| 
 | 
 | ||||||
|   footer: Object as PropType<VueNode>, |   footer: Object as PropType<VueNode>, | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -52,7 +52,10 @@ async function handleSubmit() { | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <BasicModal v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" @ok="handleSubmit"> |   <BasicModal | ||||||
|  |     v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" | ||||||
|  |     @ok="handleSubmit" | ||||||
|  |   > | ||||||
|     <BasicForm @register="registerForm" /> |     <BasicForm @register="registerForm" /> | ||||||
|   </BasicModal> |   </BasicModal> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 xingyu
						xingyu