ソースを参照

♻️ refactor(passengers): 重构乘客管理页面代码结构

- 优化类型定义,使用RPC方式通过hono/client的InferResponseType提取Passenger类型
- 移除未使用的import语句,包括useEffect、TaroButton、CardHeader和CardTitle等
- 优化乘客数据获取,添加分页参数(page=1, pageSize=100)并检查响应格式
- 简化参数传递,将id.toString()改为直接传递id
- 更新输入框onChange事件处理方式,使用value参数代替e.target.value
- 删除未使用的Passenger接口定义和navigateToAddPage函数
- 统一导入语句格式,添加类型导入(type)标记

🐛 fix(passengers): 修复搜索和表单输入功能问题

- 修复搜索框onChange事件处理,正确更新搜索关键词
- 修复乘客姓名、证件号码和手机号输入框onChange事件,确保表单数据正确更新
- 移除手机号输入框的maxLength和type="number"限制,允许更灵活的输入格式
yourname 3 ヶ月 前
コミット
f3ea3a65a3
1 ファイル変更22 行追加31 行削除
  1. 22 31
      mini/src/pages/passengers/passengers.tsx

+ 22 - 31
mini/src/pages/passengers/passengers.tsx

@@ -1,10 +1,10 @@
-import { useState, useEffect } from 'react'
-import { View, Text, ScrollView, Input, Button as TaroButton } from '@tarojs/components'
+import { useState } from 'react'
+import { View, Text, ScrollView } from '@tarojs/components'
 import Taro from '@tarojs/taro'
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
 import { Navbar } from '@/components/ui/navbar'
 import { Button } from '@/components/ui/button'
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
+import { Card, CardContent } from '@/components/ui/card'
 import { Input as ShadcnInput } from '@/components/ui/input'
 import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog'
 import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'
@@ -12,17 +12,10 @@ import { Label } from '@/components/ui/label'
 import { useAuth } from '@/utils/auth'
 import { passengerClient } from '@/api'
 import { IdType } from '@/types/passenger.types'
+import type { InferResponseType } from 'hono/client'
 
-interface Passenger {
-  id: number
-  name: string
-  idType: IdType
-  idNumber: string
-  phone: string
-  isDefault: boolean
-  createdAt: string
-  updatedAt: string
-}
+// 使用RPC方式提取类型
+type Passenger = InferResponseType<typeof passengerClient.$get, 200>['data'][0]
 
 const PassengersPage: React.FC = () => {
   const { user } = useAuth()
@@ -43,8 +36,14 @@ const PassengersPage: React.FC = () => {
   const { data: passengers = [], isLoading } = useQuery({
     queryKey: ['passengers'],
     queryFn: async () => {
-      const response = await passengerClient.$get()
-      return await response.json()
+      const response = await passengerClient.$get({ query: { page: 1, pageSize: 100 } })
+      const result = await response.json()
+      // 检查响应是否包含data字段
+      if ('data' in result) {
+        return result
+      }
+      // 如果响应是错误格式,返回空数据
+      return { data: [], total: 0, page: 1, pageSize: 100 }
     },
     enabled: !!user
   })
@@ -70,8 +69,8 @@ const PassengersPage: React.FC = () => {
   // 更新乘客
   const updateMutation = useMutation({
     mutationFn: async ({ id, data }: { id: number; data: Partial<Passenger> }) => {
-      const response = await passengerClient[':id'].$patch({
-        param: { id: id.toString() },
+      const response = await passengerClient[':id'].$put({
+        param: { id },
         json: data
       })
       return await response.json()
@@ -91,7 +90,7 @@ const PassengersPage: React.FC = () => {
   // 删除乘客
   const deleteMutation = useMutation({
     mutationFn: async (id: number) => {
-      await passengerClient[':id'].$delete({ param: { id: id.toString() } })
+      await passengerClient[':id'].$delete({ param: { id } })
     },
     onSuccess: () => {
       queryClient.invalidateQueries({ queryKey: ['passengers'] })
@@ -107,7 +106,7 @@ const PassengersPage: React.FC = () => {
   const setDefaultMutation = useMutation({
     mutationFn: async (id: number) => {
       const response = await passengerClient[':id']['set-default'].$post({
-        param: { id: id.toString() }
+        param: { id }
       })
       return await response.json()
     },
@@ -219,12 +218,6 @@ const PassengersPage: React.FC = () => {
     })
   }
 
-  // 跳转到独立添加页面
-  const navigateToAddPage = () => {
-    Taro.navigateTo({
-      url: '/pages/passengers/add-passenger?from=management'
-    })
-  }
 
   if (!user) {
     return (
@@ -272,7 +265,7 @@ const PassengersPage: React.FC = () => {
             <ShadcnInput
               placeholder="输入姓名、手机号或证件号"
               value={searchKeyword}
-              onChange={(e) => setSearchKeyword(e.target.value)}
+              onChange={(value) => setSearchKeyword(value)}
               className="w-full"
             />
           </View>
@@ -399,7 +392,7 @@ const PassengersPage: React.FC = () => {
                   id="name"
                   placeholder="请输入姓名"
                   value={formData.name}
-                  onChange={(e) => setFormData({ ...formData, name: e.target.value })}
+                  onChange={(value) => setFormData({ ...formData, name: value })}
                 />
               </View>
 
@@ -428,7 +421,7 @@ const PassengersPage: React.FC = () => {
                   id="idNumber"
                   placeholder="请输入证件号码"
                   value={formData.idNumber}
-                  onChange={(e) => setFormData({ ...formData, idNumber: e.target.value })}
+                  onChange={(value) => setFormData({ ...formData, idNumber: value })}
                 />
               </View>
 
@@ -438,9 +431,7 @@ const PassengersPage: React.FC = () => {
                   id="phone"
                   placeholder="请输入手机号"
                   value={formData.phone}
-                  onChange={(e) => setFormData({ ...formData, phone: e.target.value })}
-                  type="number"
-                  maxLength={11}
+                  onChange={(value) => setFormData({ ...formData, phone: value })}
                 />
               </View>
             </View>