|
@@ -210,15 +210,15 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
return (
|
|
return (
|
|
|
<>
|
|
<>
|
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
|
- <DialogContent className="max-w-6xl max-h-[80vh] overflow-hidden flex flex-col">
|
|
|
|
|
|
|
+ <DialogContent className="max-w-6xl max-h-[80vh] overflow-hidden flex flex-col w-[95vw] sm:w-full">
|
|
|
<DialogHeader>
|
|
<DialogHeader>
|
|
|
<DialogTitle>选择残疾人</DialogTitle>
|
|
<DialogTitle>选择残疾人</DialogTitle>
|
|
|
</DialogHeader>
|
|
</DialogHeader>
|
|
|
|
|
|
|
|
- {/* 搜索区域 */}
|
|
|
|
|
|
|
+ {/* 搜索区域 - 响应式设计 */}
|
|
|
<div className="space-y-4 p-4 border rounded-lg">
|
|
<div className="space-y-4 p-4 border rounded-lg">
|
|
|
- {/* 第一行:基本信息搜索 */}
|
|
|
|
|
- <div className="grid grid-cols-4 gap-4">
|
|
|
|
|
|
|
+ {/* 第一行:基本信息搜索 - 响应式网格 */}
|
|
|
|
|
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
|
<div className="space-y-2">
|
|
<div className="space-y-2">
|
|
|
<Label htmlFor="name">姓名</Label>
|
|
<Label htmlFor="name">姓名</Label>
|
|
|
<Input
|
|
<Input
|
|
@@ -286,8 +286,8 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
</Form>
|
|
</Form>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- {/* 第三行:其他筛选条件和操作按钮 */}
|
|
|
|
|
- <div className="grid grid-cols-4 gap-4">
|
|
|
|
|
|
|
+ {/* 第三行:其他筛选条件和操作按钮 - 响应式网格 */}
|
|
|
|
|
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
|
<div className="space-y-2">
|
|
<div className="space-y-2">
|
|
|
<Label htmlFor="disabilityType">残疾类型</Label>
|
|
<Label htmlFor="disabilityType">残疾类型</Label>
|
|
|
<Select
|
|
<Select
|
|
@@ -335,21 +335,21 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
</Select>
|
|
</Select>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- {/* 空列占位 */}
|
|
|
|
|
- <div></div>
|
|
|
|
|
|
|
+ {/* 在移动端隐藏空列 */}
|
|
|
|
|
+ <div className="hidden lg:block"></div>
|
|
|
|
|
|
|
|
- <div className="flex items-end space-x-2">
|
|
|
|
|
- <Button onClick={handleSearch} data-testid="search-button">
|
|
|
|
|
|
|
+ <div className="flex items-end space-x-2 sm:col-span-2 lg:col-span-1">
|
|
|
|
|
+ <Button onClick={handleSearch} data-testid="search-button" className="flex-1 sm:flex-none">
|
|
|
搜索
|
|
搜索
|
|
|
</Button>
|
|
</Button>
|
|
|
- <Button variant="outline" onClick={handleResetSearch} data-testid="reset-button">
|
|
|
|
|
|
|
+ <Button variant="outline" onClick={handleResetSearch} data-testid="reset-button" className="flex-1 sm:flex-none">
|
|
|
重置
|
|
重置
|
|
|
</Button>
|
|
</Button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- {/* 表格区域 */}
|
|
|
|
|
|
|
+ {/* 表格区域 - 响应式设计 */}
|
|
|
<div className="flex-1 overflow-auto">
|
|
<div className="flex-1 overflow-auto">
|
|
|
{isLoadingData ? (
|
|
{isLoadingData ? (
|
|
|
<div className="flex items-center justify-center h-64">
|
|
<div className="flex items-center justify-center h-64">
|
|
@@ -357,12 +357,17 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
</div>
|
|
</div>
|
|
|
) : personsData?.data && personsData.data.length > 0 ? (
|
|
) : personsData?.data && personsData.data.length > 0 ? (
|
|
|
<>
|
|
<>
|
|
|
- <div className="border rounded-md">
|
|
|
|
|
- <Table data-testid="disabled-persons-table">
|
|
|
|
|
|
|
+ {/* 移动端提示 */}
|
|
|
|
|
+ <div className="lg:hidden mb-2 text-sm text-muted-foreground">
|
|
|
|
|
+ <p>提示:表格可以左右滑动查看所有列</p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div className="border rounded-md overflow-x-auto">
|
|
|
|
|
+ <Table data-testid="disabled-persons-table" className="min-w-full">
|
|
|
<TableHeader>
|
|
<TableHeader>
|
|
|
<TableRow>
|
|
<TableRow>
|
|
|
{mode === 'multiple' && (
|
|
{mode === 'multiple' && (
|
|
|
- <TableHead className="w-12">
|
|
|
|
|
|
|
+ <TableHead className="w-12 sticky left-0 bg-background z-10">
|
|
|
<Checkbox
|
|
<Checkbox
|
|
|
checked={selectedPersons.length === personsData.data.length}
|
|
checked={selectedPersons.length === personsData.data.length}
|
|
|
onCheckedChange={(checked) => {
|
|
onCheckedChange={(checked) => {
|
|
@@ -379,8 +384,16 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
/>
|
|
/>
|
|
|
</TableHead>
|
|
</TableHead>
|
|
|
)}
|
|
)}
|
|
|
- {columns.map((column) => (
|
|
|
|
|
- <TableHead key={column.key}>{column.label}</TableHead>
|
|
|
|
|
|
|
+ {columns.map((column, index) => (
|
|
|
|
|
+ <TableHead
|
|
|
|
|
+ key={column.key}
|
|
|
|
|
+ className={`
|
|
|
|
|
+ ${index === 0 ? 'sticky left-0 bg-background z-10' : ''}
|
|
|
|
|
+ ${['province', 'city', 'disabilityType', 'disabilityLevel', 'blacklist'].includes(column.key) ? 'hidden lg:table-cell' : ''}
|
|
|
|
|
+ `}
|
|
|
|
|
+ >
|
|
|
|
|
+ {column.label}
|
|
|
|
|
+ </TableHead>
|
|
|
))}
|
|
))}
|
|
|
</TableRow>
|
|
</TableRow>
|
|
|
</TableHeader>
|
|
</TableHeader>
|
|
@@ -393,7 +406,7 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
data-testid={`table-row-${person.id}`}
|
|
data-testid={`table-row-${person.id}`}
|
|
|
>
|
|
>
|
|
|
{mode === 'multiple' && (
|
|
{mode === 'multiple' && (
|
|
|
- <TableCell>
|
|
|
|
|
|
|
+ <TableCell className="sticky left-0 bg-background z-10">
|
|
|
<Checkbox
|
|
<Checkbox
|
|
|
checked={selectedPersons.some(p => p.id === person.id)}
|
|
checked={selectedPersons.some(p => p.id === person.id)}
|
|
|
onCheckedChange={(checked) => {
|
|
onCheckedChange={(checked) => {
|
|
@@ -408,16 +421,16 @@ const DisabledPersonSelector: React.FC<DisabledPersonSelectorProps> = ({
|
|
|
/>
|
|
/>
|
|
|
</TableCell>
|
|
</TableCell>
|
|
|
)}
|
|
)}
|
|
|
- <TableCell>{person.name}</TableCell>
|
|
|
|
|
|
|
+ <TableCell className="sticky left-0 bg-background z-10">{person.name}</TableCell>
|
|
|
<TableCell>{person.gender}</TableCell>
|
|
<TableCell>{person.gender}</TableCell>
|
|
|
<TableCell>{person.idCard}</TableCell>
|
|
<TableCell>{person.idCard}</TableCell>
|
|
|
<TableCell>{person.disabilityId}</TableCell>
|
|
<TableCell>{person.disabilityId}</TableCell>
|
|
|
<TableCell>{person.phone}</TableCell>
|
|
<TableCell>{person.phone}</TableCell>
|
|
|
- <TableCell>{person.province}</TableCell>
|
|
|
|
|
- <TableCell>{person.city}</TableCell>
|
|
|
|
|
- <TableCell>{person.disabilityType}</TableCell>
|
|
|
|
|
- <TableCell>{person.disabilityLevel}</TableCell>
|
|
|
|
|
- <TableCell>{person.isInBlackList === 1 ? '是' : '否'}</TableCell>
|
|
|
|
|
|
|
+ <TableCell className="hidden lg:table-cell">{person.province}</TableCell>
|
|
|
|
|
+ <TableCell className="hidden lg:table-cell">{person.city}</TableCell>
|
|
|
|
|
+ <TableCell className="hidden lg:table-cell">{person.disabilityType}</TableCell>
|
|
|
|
|
+ <TableCell className="hidden lg:table-cell">{person.disabilityLevel}</TableCell>
|
|
|
|
|
+ <TableCell className="hidden lg:table-cell">{person.isInBlackList === 1 ? '是' : '否'}</TableCell>
|
|
|
</TableRow>
|
|
</TableRow>
|
|
|
))}
|
|
))}
|
|
|
</TableBody>
|
|
</TableBody>
|