2023-02-01 18:09:44 +08:00
|
|
|
import { ref, onMounted } from "vue"
|
2023-01-05 17:15:18 +08:00
|
|
|
|
2023-05-21 10:42:50 +08:00
|
|
|
type OptionValue = string | number
|
2023-02-01 18:09:44 +08:00
|
|
|
|
|
|
|
/** Select 需要的数据格式 */
|
2023-05-21 09:51:41 +08:00
|
|
|
interface SelectOption {
|
2023-05-21 10:42:50 +08:00
|
|
|
value: OptionValue
|
2023-01-05 17:15:18 +08:00
|
|
|
label: string
|
|
|
|
disabled?: boolean
|
|
|
|
}
|
|
|
|
|
2023-02-01 18:09:44 +08:00
|
|
|
/** 接口响应格式 */
|
2023-05-21 09:51:41 +08:00
|
|
|
interface ApiData {
|
2023-02-01 18:09:44 +08:00
|
|
|
code: number
|
2023-05-21 09:51:41 +08:00
|
|
|
data: SelectOption[]
|
2023-02-01 18:09:44 +08:00
|
|
|
message: string
|
2023-01-05 17:15:18 +08:00
|
|
|
}
|
|
|
|
|
2023-02-01 18:09:44 +08:00
|
|
|
/** 入参格式,暂时只需要传递 api 函数即可 */
|
2023-05-21 09:51:41 +08:00
|
|
|
interface FetchSelectProps {
|
|
|
|
api: () => Promise<ApiData>
|
2023-02-01 18:09:44 +08:00
|
|
|
}
|
2023-01-05 17:15:18 +08:00
|
|
|
|
2023-05-21 09:51:41 +08:00
|
|
|
export function useFetchSelect(props: FetchSelectProps) {
|
2023-02-01 18:09:44 +08:00
|
|
|
const { api } = props
|
2023-01-05 17:15:18 +08:00
|
|
|
|
2023-02-01 18:09:44 +08:00
|
|
|
const loading = ref<boolean>(false)
|
2023-05-21 09:51:41 +08:00
|
|
|
const options = ref<SelectOption[]>([])
|
2023-05-21 10:42:50 +08:00
|
|
|
const value = ref<OptionValue>("")
|
2023-01-05 17:15:18 +08:00
|
|
|
|
2023-02-01 18:09:44 +08:00
|
|
|
/** 调用接口获取数据 */
|
2023-01-05 17:15:18 +08:00
|
|
|
const loadData = () => {
|
|
|
|
loading.value = true
|
|
|
|
options.value = []
|
2023-02-01 18:09:44 +08:00
|
|
|
api()
|
|
|
|
.then((res) => {
|
2023-01-05 17:15:18 +08:00
|
|
|
options.value = res.data
|
2023-02-01 18:09:44 +08:00
|
|
|
})
|
|
|
|
.finally(() => {
|
2023-01-05 17:15:18 +08:00
|
|
|
loading.value = false
|
2023-02-01 18:09:44 +08:00
|
|
|
})
|
2023-01-05 17:15:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
loadData()
|
|
|
|
})
|
|
|
|
|
|
|
|
return {
|
|
|
|
loading,
|
2023-02-01 18:09:44 +08:00
|
|
|
options,
|
|
|
|
value
|
2023-01-05 17:15:18 +08:00
|
|
|
}
|
|
|
|
}
|