Browse Source

已完成 xunlian_codes.ts 的响应值结构调整,使其与 date_notes.ts 保持一致

yourname 6 months ago
parent
commit
722330d782
3 changed files with 97 additions and 43 deletions
  1. 74 10
      client/admin/api/xunlian_codes.ts
  2. 22 22
      client/admin/pages_xunlian_codes.tsx
  3. 1 11
      client/share/types_stock.ts

+ 74 - 10
client/admin/api/xunlian_codes.ts

@@ -1,22 +1,86 @@
 import axios from 'axios';
-import type { XunlianCode, XunlianCodeListResponse } from '../../share/types_stock.ts';
+import type { XunlianCode } from '../../share/types_stock.ts';
+
+
+// 训练代码列表响应
+interface XunlianCodeListResponse {
+  data: XunlianCode[];
+  pagination: {
+    current: number;
+    pageSize: number;
+    total: number;
+    totalPages: number;
+  };
+}
+
+interface XunlianCodeResponse {
+  data: XunlianCode;
+  message?: string;
+}
+
+interface XunlianCodeCreateResponse {
+  message: string;
+  data: XunlianCode;
+}
+
+interface XunlianCodeUpdateResponse {
+  message: string;
+  data: XunlianCode;
+}
+
+interface XunlianCodeDeleteResponse {
+  message: string;
+  id: number;
+}
 
 export const XunlianCodeAPI = {
-  getXunlianCodes: (params: {
+  getXunlianCodes: async (params: {
     page?: number;
     pageSize?: number;
     code?: string;
     stock_name?: string;
-  }) => axios.get<XunlianCodeListResponse>('/xunlian-codes', { params }),
+  }): Promise<XunlianCodeListResponse> => {
+    try {
+      const response = await axios.get('/xunlian-codes', { params });
+      return response.data;
+    } catch (error) {
+      throw error;
+    }
+  },
 
-  getXunlianCode: (id: number) => axios.get<XunlianCode>(`/xunlian-codes/${id}`),
+  getXunlianCode: async (id: number): Promise<XunlianCodeResponse> => {
+    try {
+      const response = await axios.get(`/xunlian-codes/${id}`);
+      return response.data;
+    } catch (error) {
+      throw error;
+    }
+  },
 
-  createXunlianCode: (data: Partial<XunlianCode>) =>
-    axios.post<XunlianCode>('/xunlian-codes', data),
+  createXunlianCode: async (data: Partial<XunlianCode>): Promise<XunlianCodeCreateResponse> => {
+    try {
+      const response = await axios.post('/xunlian-codes', data);
+      return response.data;
+    } catch (error) {
+      throw error;
+    }
+  },
 
-  updateXunlianCode: (id: number, data: Partial<XunlianCode>) =>
-    axios.put<XunlianCode>(`/xunlian-codes/${id}`, data),
+  updateXunlianCode: async (id: number, data: Partial<XunlianCode>): Promise<XunlianCodeUpdateResponse> => {
+    try {
+      const response = await axios.put(`/xunlian-codes/${id}`, data);
+      return response.data;
+    } catch (error) {
+      throw error;
+    }
+  },
 
-  deleteXunlianCode: (id: number) =>
-    axios.delete<void>(`/xunlian-codes/${id}`),
+  deleteXunlianCode: async (id: number): Promise<XunlianCodeDeleteResponse> => {
+    try {
+      const response = await axios.delete(`/xunlian-codes/${id}`);
+      return response.data;
+    } catch (error) {
+      throw error;
+    }
+  }
 };

+ 22 - 22
client/admin/pages_xunlian_codes.tsx

@@ -14,12 +14,9 @@ import weekday from 'dayjs/plugin/weekday';
 import localeData from 'dayjs/plugin/localeData';
 import 'dayjs/locale/zh-cn';
 import type { 
-  XunlianCode,
-  XunlianCodeListResponse
+  XunlianCode
 } from '../share/types_stock.ts';
 
-import { getEnumOptions } from './utils.ts';
-
 import { 
   XunlianCodeAPI
 } from './api/xunlian_codes.ts';
@@ -46,7 +43,7 @@ export const XunlianCodePage = () => {
   });
   
   // 使用React Query获取训练代码列表
-  const { data: codesData, isLoading: isListLoading, refetch } = useQuery<XunlianCodeListResponse>({
+  const { data: codeDatas, isLoading: isListLoading, refetch } = useQuery({
     queryKey: ['xunlianCodes', searchParams],
     queryFn: async () => {
       const response = await XunlianCodeAPI.getXunlianCodes({
@@ -54,26 +51,29 @@ export const XunlianCodePage = () => {
         pageSize: searchParams.limit,
         code: searchParams.code,
       });
-      return response.data;
-    },
-    placeholderData: {
-      data: [],
-      pagination: {
-        current: 1,
-        pageSize: 10,
-        total: 0,
-        totalPages: 1
-      }
+      // return response;
+      const codes = response?.data || [];
+      const pagination = {
+        current: response?.pagination?.current || 1,
+        pageSize: response?.pagination?.pageSize || 10,
+        total: response?.pagination?.total || 0,
+        totalPages: response?.pagination?.totalPages || 1
+      };
+      return { data: codes, pagination}
     }
   });
+
+  const { data: codes, pagination } = codeDatas || {
+    data: [],
+    pagination: {
+      current: 1,
+      pageSize: 10,
+      total: 0,
+      totalPages: 1
+    }
+  };
+  
   
-  const codes = React.useMemo(() => (codesData as XunlianCodeListResponse)?.data || [], [codesData]);
-  const pagination = React.useMemo(() => ({
-    current: (codesData as XunlianCodeListResponse)?.pagination?.current || 1,
-    pageSize: (codesData as XunlianCodeListResponse)?.pagination?.pageSize || 10,
-    total: (codesData as XunlianCodeListResponse)?.pagination?.total || 0,
-    totalPages: (codesData as XunlianCodeListResponse)?.pagination?.totalPages || 1
-  }), [codesData]);
   
   // 获取单个训练代码
   const fetchCode = async (id: number) => {

+ 1 - 11
client/share/types_stock.ts

@@ -179,14 +179,4 @@ export enum ClassroomStatus {
     /** 更新时间 */
     updated_at: string;
   }
-  
-  // 训练代码列表响应
-  export interface XunlianCodeListResponse {
-    data: XunlianCode[];
-    pagination: {
-      current: number;
-      pageSize: number;
-      total: number;
-      totalPages: number;
-    };
-  }
+