Pārlūkot izejas kodu

✨ feat(activity): 添加活动地点选择功能

- 引入MapPin图标用于地点选择
- 添加LocationSelect组件到活动表单
- 实现活动地点选择字段,包含必填验证
- 为地点选择添加表单标签和描述信息

♻️ refactor(location): 修改地点选择组件过滤行为

- 设置Command组件shouldFilter为false,优化地点搜索体验
yourname 4 mēneši atpakaļ
vecāks
revīzija
144de5aafc

+ 25 - 1
src/client/admin/components/ActivityForm.tsx

@@ -6,11 +6,12 @@ import { Input } from '@/client/components/ui/input';
 import { Textarea } from '@/client/components/ui/textarea';
 import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/client/components/ui/select';
 import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/client/components/ui/form';
-import { Calendar } from 'lucide-react';
+import { Calendar, MapPin } from 'lucide-react';
 import { format } from 'date-fns';
 import { createActivitySchema, updateActivitySchema } from '@/server/modules/activities/activity.schema';
 import type { CreateActivityInput, UpdateActivityInput } from '@/server/modules/activities/activity.schema';
 import { ActivityType } from '@/server/modules/activities/activity.entity';
+import { LocationSelect } from './LocationSelect';
 
 // 将Date对象格式化为 datetime-local 输入框需要的格式
 const formatDateTimeForInput = (date: Date): string => {
@@ -168,6 +169,29 @@ export const ActivityForm: React.FC<ActivityFormProps> = ({
           )}
         />
 
+        {/* 举办地点 */}
+        <FormField
+          control={form.control}
+          name="venueLocationId"
+          render={({ field }) => (
+            <FormItem>
+              <FormLabel>举办地点 *</FormLabel>
+              <FormControl>
+                <LocationSelect
+                  placeholder="请选择举办地点"
+                  value={field.value}
+                  onValueChange={field.onChange}
+                  data-testid="venue-location-select"
+                />
+              </FormControl>
+              <FormDescription>
+                活动举办的具体地点
+              </FormDescription>
+              <FormMessage />
+            </FormItem>
+          )}
+        />
+
         <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
           {/* 开始日期 */}
           <FormField

+ 1 - 1
src/client/admin/components/LocationSelect.tsx

@@ -128,7 +128,7 @@ export const LocationSelect = ({
         </Button>
       </PopoverTrigger>
       <PopoverContent className="w-full p-0" align="start">
-        <Command>
+        <Command shouldFilter={false}>
           <CommandInput
             placeholder="搜索地点名称、地址或区域..."
             value={search}