add chart code
This commit is contained in:
@@ -11,6 +11,67 @@ class GenericApiService {
|
||||
// [修改] 移除 const COMMON_API_URL,改為方法獲取
|
||||
static const String BASE_IP = "https://api.gex.com.tw:8033";
|
||||
|
||||
// 修改後的動態 URL 產生器,支援傳入不同的 store procedure 與回傳 dataset 數
|
||||
String _getProcedureUrl(String endpoint, String version) {
|
||||
final String db = AuthManager().currentCompany ?? "demo"; //
|
||||
final String dbAll = "eis_$db"; //
|
||||
return "$BASE_IP/xapi/v2/$dbAll/$endpoint/$version/"; //
|
||||
}
|
||||
|
||||
/// 呼叫 Store Procedure 的通用方法
|
||||
/// [T] : 目標資料模型
|
||||
/// [procedureEndpoint] : 端點名稱 (例如: 'sp_get_channel_sales_stats')
|
||||
/// [version] : 版本號,預設為 "2"
|
||||
/// [params] : 傳遞給 SP 的參數 Map
|
||||
/// [fromJson] : 將 Map 轉換為物件的工廠方法
|
||||
Future<List<T>> fetchProcedure<T>({
|
||||
required String procedureEndpoint,
|
||||
String version = "2",
|
||||
required Map<String, String> params,
|
||||
required T Function(Map<String, dynamic>) fromJson,
|
||||
}) async {
|
||||
String? token = await AuthManager.getToken();
|
||||
if (token == null) throw Exception('未登入:找不到有效 Token');
|
||||
|
||||
final Map<String, String> body = {"token": token, ...params};
|
||||
final String url = _getProcedureUrl(procedureEndpoint, version);
|
||||
|
||||
try {
|
||||
final response = await http.post(
|
||||
Uri.parse(url),
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: body,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final Map<String, dynamic> responseData = json.decode(response.body);
|
||||
final int code = responseData['code'] ?? responseData['Code'] ?? -1;
|
||||
|
||||
if (code == 0) {
|
||||
final dynamic dataObject = responseData['data'];
|
||||
|
||||
if (dataObject is List) {
|
||||
return dataObject.map((j) => fromJson(j as Map<String, dynamic>)).toList();
|
||||
} else if (dataObject is Map<String, dynamic>) {
|
||||
return [fromJson(dataObject)];
|
||||
}
|
||||
return []; // 數據格式不符回傳空清單
|
||||
} else {
|
||||
print("API 錯誤: ${responseData['msg'] ?? responseData['message']}");
|
||||
return []; // Code 不為 0 回傳空清單
|
||||
}
|
||||
} else {
|
||||
// [關鍵修正] statusCode 不為 200 時拋出異常或回傳空清單
|
||||
throw Exception('HTTP 錯誤: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print("fetchProcedure 發生異常: $e");
|
||||
rethrow; // 重新拋出異常讓呼叫端處理
|
||||
}
|
||||
// [關鍵修正] 確保函式末端一定有回傳值,解決截圖中的錯誤
|
||||
}
|
||||
|
||||
// 以下是 orm_api
|
||||
String _getDynamicUrl() {
|
||||
// 從 AuthManager 獲取目前登入的公司別,若無則預設 eis_demo
|
||||
final String db = AuthManager().currentCompany ?? "demo";
|
||||
|
||||
Reference in New Issue
Block a user