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,6 +76,10 @@ watch(
 | 
				
			||||||
watch(
 | 
					watch(
 | 
				
			||||||
  () => props.params,
 | 
					  () => props.params,
 | 
				
			||||||
  () => {
 | 
					  () => {
 | 
				
			||||||
 | 
					    if (props.alwaysLoad)
 | 
				
			||||||
 | 
					      fetch()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
      !unref(isFirstLoad) && fetch()
 | 
					      !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