Parcourir la source

✨ feat(stock): 优化股票数据处理流程

- 在前端 StockDataPage 中添加 JSON 格式化显示,提高数据可读性
- 重构 CreateStockDataDto 和 UpdateStockDataDto,使用 Schema 继承优化代码结构
- 添加 data 字段的 JSON 字符串转换功能,支持从字符串自动解析为对象

🐛 fix(stock): 修复股票数据解析问题

- 为 data 字段添加错误处理,解析失败时返回空对象而非抛出异常
- 优化 DTO 定义,确保前后端数据格式一致
yourname il y a 5 mois
Parent
commit
405096c5a0

+ 1 - 1
src/client/admin/pages/StockDataPage.tsx

@@ -85,7 +85,7 @@ export const StockDataPage: React.FC = () => {
     setCurrentItem(record);
     form.setFieldsValue({
       code: record.code,
-      data: record.data,
+      data: JSON.stringify(record.data, null, 2 ),
     });
     setIsModalVisible(true);
   };

+ 22 - 24
src/server/modules/stock/stock-data.entity.ts

@@ -37,32 +37,30 @@ export const StockDataSchema = z.object({
   updatedAt: z.date().openapi({ description: '更新时间', example: '2025-05-21T21:22:06Z' })
 });
 
-export const CreateStockDataDto = z.object({
-  code: z.string().max(255).openapi({ description: '股票代码', example: '001339' }),
-  data: z.record(z.any()).openapi({ 
-    description: '股票数据', 
-    example: { 
-      date: '2025-05-21', 
-      open: 15.68, 
-      close: 16.25, 
-      high: 16.50, 
-      low: 15.50, 
-      volume: 1250000 
-    } 
+export const CreateStockDataDto = StockDataSchema.omit({
+  id: true,
+  createdAt: true,
+  updatedAt: true
+}).partial().extend({
+  data: z.string().transform((val) => {
+    try {
+      return JSON.parse(val)
+    } catch (error) {
+      return {}
+    }
   })
 });
 
-export const UpdateStockDataDto = z.object({
-  code: z.string().max(255).optional().openapi({ description: '股票代码', example: '001339' }),
-  data: z.record(z.any()).optional().openapi({ 
-    description: '股票数据', 
-    example: { 
-      date: '2025-05-21', 
-      open: 15.68, 
-      close: 16.25, 
-      high: 16.50, 
-      low: 15.50, 
-      volume: 1250000 
-    } 
+export const UpdateStockDataDto = StockDataSchema.omit({
+  id: true,
+  createdAt: true,
+  updatedAt: true
+}).partial().extend({
+  data: z.string().transform((val) => {
+    try {
+      return JSON.parse(val)
+    } catch (error) {
+      return {}
+    }
   })
 });