From 38039e8dc0cd2e9897086d7e5dc25c5dd9dd7db0 Mon Sep 17 00:00:00 2001 From: "LAPTOP-EJ2PF6VA\\genie" Date: Fri, 6 Mar 2026 23:55:18 +0800 Subject: [PATCH] leave add leavetpe_name --- lib/leave/leave_api.dart | 28 +++++++++++++++++++++++++--- lib/leave/leave_model.dart | 10 +++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/leave/leave_api.dart b/lib/leave/leave_api.dart index 288c2b0..e28fbe5 100644 --- a/lib/leave/leave_api.dart +++ b/lib/leave/leave_api.dart @@ -7,15 +7,30 @@ class LeaveApiService { final GenericApiService _apiService = GenericApiService(); // 新增:獲取所有啟用的假別清單 + // 實作快取:Key 為 leavetype_id, Value 為 leavetype_name + static final Map _leaveTypeCache = {}; + + // *** 關聯取得假別名稱 define + // 新增:提供外部存取快取的介面 + static String getTypeName(String id) => _leaveTypeCache[id] ?? id; + Future> fetchLeaveTypes() async { - // 這裡通常不需要特別的 filter,或可根據公司邏輯過濾性別等 - return await _apiService.fetchList( + // 1. 從 API 取得原始資料 + final List types = await _apiService.fetchList( tableName: "hrs_leavetype", pk: "leavetype_id", - queryFilter: "1^100^leavetype_id^*^^^", // 取得前100筆 + queryFilter: "1^100^leavetype_id^*^^^", fromJson: (json) => LeaveType.fromJson(json), ); + + // 2. 更新快取池 + for (var type in types) { + _leaveTypeCache[type.id] = type.name; + } + + return types; } + // *** 關聯取得假別名稱 define // 查詢員工清單 (代理人) Future>> fetchEmployees(String keyword) async { @@ -41,6 +56,13 @@ class LeaveApiService { // 獲取個人請假紀錄 Future> fetchLeaves(String personId) async { + // *** 關聯取得假別名稱,存到 Cache + // 若快取為空,先執行一次同步 + if (_leaveTypeCache.isEmpty) { + await fetchLeaveTypes(); + } + // *** 關聯取得假別名稱,存到 Cache + // 排序:按單據日期降冪 String queryFilter = "1^100^billdate^*^start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)^^personid^$personId"; diff --git a/lib/leave/leave_model.dart b/lib/leave/leave_model.dart index 1784308..0635ba5 100644 --- a/lib/leave/leave_model.dart +++ b/lib/leave/leave_model.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'leave_api.dart'; // 假別模型 260110 class LeaveType { @@ -58,6 +59,12 @@ class Leave { }); factory Leave.fromJson(Map json) { + // 取的假別關聯名稱 + final String typeId = json['leavetype'] as String? ?? ''; + + // 自動映射名稱:若 API 有給就用 API 的,沒有就去 Service 快取找 + final String typeName = json['leavetype_name'] ?? LeaveApiService.getTypeName(typeId); + return Leave( billNo: json['billno'] as String? ?? '', billDate: json['billdate'] != null ? DateTime.tryParse(json['billdate']) : null, @@ -65,7 +72,8 @@ class Leave { agentId: json['agentid'] as String? ?? '', agentName: json['agentname'] ?? '', /// 假設 API 會 Join 姓名 leaveType: json['leavetype'] as String? ?? '', - leaveTypeName: json['leavetype_name'] ?? json['leavetype'] ?? '', + // leaveTypeName: json['leavetype_name'] ?? json['leavetype'] ?? '', + leaveTypeName: typeName, // 這裡現在保證有值 startTime: json['starttime'] != null ? DateTime.tryParse(json['starttime']) : null, endTime: json['endtime'] != null ? DateTime.tryParse(json['endtime']) : null, days: double.tryParse(json['days']?.toString() ?? '0') ?? 0,