61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
// Base
|
|
import * as base from './_crud-base'
|
|
|
|
// Types
|
|
import type { Specialist } from '~/models/specialist'
|
|
import type { TreeItem } from '~/models/_base'
|
|
|
|
const path = '/api/v1/specialist'
|
|
const name = 'specialist'
|
|
|
|
export function create(data: any) {
|
|
return base.create(path, data, name)
|
|
}
|
|
|
|
export function getList(params: any = null) {
|
|
return base.getList(path, params, name)
|
|
}
|
|
|
|
export function getDetail(id: number | string) {
|
|
return base.getDetail(path, id, name)
|
|
}
|
|
|
|
export function update(id: number | string, data: any) {
|
|
return base.update(path, id, data, name)
|
|
}
|
|
|
|
export function remove(id: number | string) {
|
|
return base.remove(path, id, name)
|
|
}
|
|
|
|
export async function getValueLabelList(params: any = null): Promise<{ value: string; label: string }[]> {
|
|
let data: { value: string; label: string }[] = []
|
|
const result = await getList(params)
|
|
if (result.success) {
|
|
const resultData = result.body?.data || []
|
|
data = resultData.map((item: Specialist) => ({
|
|
value: item.id ? Number(item.id) : item.code,
|
|
label: item.name,
|
|
parent: item.unit_id ? Number(item.unit_id) : null,
|
|
}))
|
|
}
|
|
return data
|
|
}
|
|
|
|
/**
|
|
* Convert specialist response to TreeItem[] with subspecialist children
|
|
* @param specialists Array of specialist objects from API
|
|
* @returns TreeItem[]
|
|
*/
|
|
export function getValueTreeItems(specialists: any[]): TreeItem[] {
|
|
return specialists.map((specialist: Specialist) => ({
|
|
value: specialist.id ? String(specialist.id) : specialist.code,
|
|
label: specialist.name,
|
|
hasChildren: Array.isArray(specialist.subspecialists) && specialist.subspecialists.length > 0,
|
|
children:
|
|
Array.isArray(specialist.subspecialists) && specialist.subspecialists.length > 0
|
|
? getValueTreeItems(specialist.subspecialists)
|
|
: undefined,
|
|
}))
|
|
}
|