usePage增加许多配置项,另外增加一些回调函数、插槽等等,修改逻辑增强配置灵活性
zk authored at 2023-11-21 17:42:23
1.42 KiB
NewLife.QuickVue
import { storeToRefs } from "pinia";
import { Ref, ref, toRef, toRefs, watch } from "vue";
import { usePageApi } from "../api/page";
import { useEnumOptions } from "../stores/enumOptions";
import { OptionEmits, OptionProps } from "../utils/optionProps";

export default function useOptions (props: OptionProps, emits: OptionEmits) {
  const enumOptions = useEnumOptions()
  // console.log('enumOptions', toRef(enumOptions.options, props.storeKey), props.storeKey)
  const myOptions = props.storeKey ? (toRef(enumOptions.options, props.storeKey) as Ref<EmptyObjectType[] | undefined>) : ref(props.options);
  watch(() => props.options, (val: EmptyArrayType) => {
    myOptions.value = val
  })
  if (props.storeKey) {
    enumOptions.setOptions(props.storeKey).then((res: EmptyObjectType) => {
      emits('optionRequestAfter', myOptions)
    })
  } else if (props.api) {
    props.api().then((res: EmptyObjectType) => {
      myOptions.value = props.resultKey ? getByKey(res, props.resultKey) : res
      emits('optionRequestAfter', myOptions)
    })
  } else if (props.url) {
    usePageApi().getTableData(props.url, { pageIndex: 0 }).then(res => {
      myOptions.value = props.resultKey ? getByKey(res, props.resultKey) : res
      emits('optionRequestAfter', myOptions)
    })
  }
  return {
    myOptions
  }
}

function getByKey (data: {[k in string]: any}, key: string): any {
  return key.split('.').reduce((total, item) => total[item], data)
}