jdcProject_front/src/hooks/useFetchSelect.ts
2023-01-05 17:15:18 +08:00

61 lines
1.1 KiB
TypeScript

import { onMounted, ref } from "vue"
// 定义下拉框接收的数据格式
export interface SelectOption {
value: string
label: string
disabled?: boolean
key?: string
}
// 定义入参格式
interface FetchSelectProps {
apiFun: () => Promise<any>
}
export function useFetchSelect(props: FetchSelectProps) {
const { apiFun } = props
const options = ref<SelectOption[]>([])
const loading = ref(false)
const selectedValue = ref("")
/* 调用接口请求数据 */
const loadData = () => {
loading.value = true
options.value = []
return apiFun().then(
(res) => {
loading.value = false
options.value = res.data
return res.data
},
(err) => {
// 未知错误,可能是代码抛出的错误,或是网络错误
loading.value = false
options.value = [
{
value: "-1",
label: err.message,
disabled: true
}
]
// 接着抛出错误
return Promise.reject(err)
}
)
}
onMounted(() => {
loadData()
})
return {
options,
loading,
selectedValue
}
}