소스 검색

♻️ refactor(activities): 移除活动类型(type)相关字段

- 从ActivityEntity中删除type枚举和对应的数据库列
- 移除createActivitySchema和updateActivitySchema中的type验证规则
- 删除listActivitiesSchema中的type查询参数
- 清理route.schema.ts中引用的ActivityType枚举
- 移除getActivitySchema和activityListResponseSchema中的type字段

🐛 fix(web): 修复活动表单错误处理

- 为活动表单添加错误处理函数,在提交失败时打印错误信息到控制台
yourname 3 달 전
부모
커밋
21d90175bc

+ 0 - 11
packages/server/src/modules/activities/activity.entity.ts

@@ -3,10 +3,6 @@ import { RouteEntity } from '../routes/route.entity';
 import { LocationEntity } from '../locations/location.entity';
 import { DeleteStatus, DisabledStatus } from '../../share/types';
 
-export enum ActivityType {
-  DEPARTURE = 'departure', // 去程活动
-  RETURN = 'return'        // 返程活动
-}
 
 @Entity({ name: 'activities' })
 export class ActivityEntity {
@@ -19,13 +15,6 @@ export class ActivityEntity {
   @Column({ name: 'description', type: 'text', nullable: true, comment: '活动描述' })
   description!: string | null;
 
-  @Column({
-    name: 'type',
-    type: 'enum',
-    enum: ActivityType,
-    comment: '活动类型: departure(去程), return(返程)'
-  })
-  type!: ActivityType;
 
   @Column({ name: 'start_date', type: 'timestamp', comment: '开始日期' })
   startDate!: Date;

+ 0 - 14
packages/server/src/modules/activities/activity.schema.ts

@@ -1,15 +1,11 @@
 import { z } from 'zod';
 import { DisabledStatus } from '../../share/types';
-import { ActivityType } from './activity.entity';
 import { locationInfoSchema } from '../locations/location.schema';
 
 // 活动创建Schema
 export const createActivitySchema = z.object({
   name: z.string().min(1, '活动名称不能为空').max(255, '活动名称不能超过255个字符'),
   description: z.string().max(1000, '活动描述不能超过1000个字符').optional().nullable(),
-  type: z.nativeEnum(ActivityType, {
-    message: '活动类型必须是departure(去程)或return(返程)'
-  }),
   startDate: z.coerce.date('开始日期格式不正确'),
   endDate: z.coerce.date('结束日期格式不正确'),
   venueLocationId: z.number().int().positive('举办地点ID必须为正整数'),
@@ -22,9 +18,6 @@ export const createActivitySchema = z.object({
 export const updateActivitySchema = z.object({
   name: z.string().min(1, '活动名称不能为空').max(255, '活动名称不能超过255个字符').optional(),
   description: z.string().max(1000, '活动描述不能超过1000个字符').optional().nullable(),
-  type: z.nativeEnum(ActivityType, {
-    message: '活动类型必须是departure(去程)或return(返程)'
-  }).optional(),
   startDate: z.coerce.date('开始日期格式不正确').optional(),
   endDate: z.coerce.date('结束日期格式不正确').optional(),
   venueLocationId: z.number().int().positive('举办地点ID必须为正整数').optional(),
@@ -44,9 +37,6 @@ export const getActivitySchema = z.object({
   id: z.number().int().positive('ID必须为正整数'),
   name: z.string().min(1, '活动名称不能为空').max(255, '活动名称不能超过255个字符'),
   description: z.string().max(1000, '活动描述不能超过1000个字符').optional().nullable(),
-  type: z.nativeEnum(ActivityType, {
-    message: '活动类型必须是departure(去程)或return(返程)'
-  }),
   startDate: z.coerce.date(),
   endDate: z.coerce.date(),
   venueLocationId: z.number().int().positive('举办地点ID必须为正整数'),
@@ -61,7 +51,6 @@ export const getActivitySchema = z.object({
 // 活动列表查询Schema
 export const listActivitiesSchema = z.object({
   keyword: z.string().optional(),
-  type: z.nativeEnum(ActivityType).optional(),
   isDisabled: z.coerce.number().int().optional(),
   page: z.coerce.number().int().min(1).default(1),
   pageSize: z.coerce.number().int().min(1).max(100).default(20),
@@ -74,9 +63,6 @@ export const activityListResponseSchema = z.object({
   id: z.number().int().positive('ID必须为正整数'),
   name: z.string().min(1, '活动名称不能为空').max(255, '活动名称不能超过255个字符'),
   description: z.string().max(1000, '活动描述不能超过1000个字符').optional().nullable(),
-  type: z.nativeEnum(ActivityType, {
-    message: '活动类型必须是departure(去程)或return(返程)'
-  }),
   startDate: z.coerce.date(),
   endDate: z.coerce.date(),
   venueLocationId: z.number().int().positive('举办地点ID必须为正整数'),

+ 0 - 8
packages/server/src/modules/routes/route.schema.ts

@@ -16,11 +16,6 @@ export enum TravelMode {
   CHARTER = 'charter'  // 包车
 }
 
-// 活动类型枚举
-export enum ActivityType {
-  DEPARTURE = 'departure', // 去程活动
-  RETURN = 'return'        // 返程活动
-}
 
 // 路线创建Schema
 export const createRouteSchema = z.object({
@@ -141,9 +136,6 @@ export const routeListResponseSchema = z.object({
   activity: z.object({
     id: z.number().int().positive('活动ID必须为正整数'),
     name: z.string().min(1, '活动名称不能为空').max(255, '活动名称不能超过255个字符'),
-    type: z.enum([ActivityType.DEPARTURE, ActivityType.RETURN], {
-      message: '活动类型必须是departure(去程)或return(返程)'
-    }),
   }).optional(),
 });
 

+ 3 - 1
web/src/client/admin/components/ActivityForm.tsx

@@ -82,7 +82,9 @@ export const ActivityForm: React.FC<ActivityFormProps> = ({
 
   return (
     <Form {...form}>
-      <form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-6">
+      <form onSubmit={form.handleSubmit(handleSubmit, (errors) => {
+        console.error('表单验证错误:', errors);
+      })} className="space-y-6">
         <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
           {/* 活动名称 */}
           <FormField