Select Git revision
employee.ts
employee.ts 3.13 KiB
import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { Employee } from '@/types/Employee'
import * as employeeService from '@/services/employee'
export const useEmployeeStore = defineStore('employee', () => {
const employees = ref<Employee[]>([])
const loading = ref<boolean>(false)
const error = ref<string | null>(null)
const IMAGE_BASE_URL = import.meta.env.VITE_EMP_IMAGE_BASE || ''
const FALLBACK_IMAGE = '/images/noimage.jpg'
// ✅ ดึงรายการ Employee ทั้งหมดจาก backend และแปะ path รูป
async function fetchEmployees() {
loading.value = true
error.value = null
try {
const res = await employeeService.listEmployees()
employees.value = res.map((e) => ({
...e,
image: e.image ? IMAGE_BASE_URL + e.image : FALLBACK_IMAGE
}))
} catch (err: any) {
error.value = err.message || 'Unknown Error'
} finally {
loading.value = false
}
}
// ✅ ดึง Employee รายการเดียว พร้อมแปะ path รูป
async function fetchEmployee(id: number): Promise<Employee | null> {
loading.value = true
error.value = null
try {
const res = await employeeService.getEmployee(id)
return {
...res,
image: res.image ? IMAGE_BASE_URL + res.image : FALLBACK_IMAGE
}
} catch (err: any) {
error.value = err.message || 'Unknown Error'
return null
} finally {
loading.value = false
}
}
// ✅ สร้าง Employee ใหม่
async function addEmployee(payload: Partial<Employee>) {
loading.value = true
error.value = null
try {
const newEmployee = await employeeService.createEmployee(payload)
newEmployee.image = newEmployee.image ? IMAGE_BASE_URL + newEmployee.image : FALLBACK_IMAGE
employees.value.push(newEmployee)
} catch (err: any) {
error.value = err.message || 'Unknown Error'
} finally {
loading.value = false
}
}
// ✅ อัปเดตข้อมูล Employee
async function editEmployee(id: number, payload: Partial<Employee>) {
loading.value = true
error.value = null
try {
const updated = await employeeService.updateEmployee(id, payload)
updated.image = updated.image ? IMAGE_BASE_URL + updated.image : FALLBACK_IMAGE