'use client'; import { useEffect, useState } from 'react'; import { AnimatePresence, Reorder } from 'framer-motion'; import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerClose, } from '@/components/ui/drawer'; import { Switch } from '@/components/ui/switch'; import ConfirmModal from './ConfirmModal'; import { CloseIcon, DragIcon, ResetIcon, SettingsIcon } from './Icons'; /** * 移动端表格个性化设置弹框(底部抽屉,基于 Drawer 组件) * @param {Object} props * @param {boolean} props.open - 是否打开 * @param {() => void} props.onClose - 关闭回调 * @param {Array<{id: string, header: string}>} props.columns - 非冻结列(id + 表头名称) * @param {Record} [props.columnVisibility] - 列显示状态映射(id => 是否显示) * @param {(newOrder: string[]) => void} props.onColumnReorder - 列顺序变更回调 * @param {(id: string, visible: boolean) => void} props.onToggleColumnVisibility - 列显示/隐藏切换回调 * @param {() => void} props.onResetColumnOrder - 重置列顺序回调 * @param {() => void} props.onResetColumnVisibility - 重置列显示/隐藏回调 * @param {boolean} [props.showFullFundName] - 是否展示完整基金名称 * @param {(show: boolean) => void} [props.onToggleShowFullFundName] - 切换是否展示完整基金名称回调 */ export default function MobileSettingModal({ open, onClose, columns = [], columnVisibility, onColumnReorder, onToggleColumnVisibility, onResetColumnOrder, onResetColumnVisibility, showFullFundName, onToggleShowFullFundName, }) { const [resetConfirmOpen, setResetConfirmOpen] = useState(false); useEffect(() => { if (!open) setResetConfirmOpen(false); }, [open]); const handleReorder = (newItems) => { const newOrder = newItems.map((item) => item.id); onColumnReorder?.(newOrder); }; return ( <> { if (!v) onClose(); }} direction="bottom" > 个性化设置
{onToggleShowFullFundName && (
展示完整基金名称 { onToggleShowFullFundName?.(!!checked); }} title={showFullFundName ? '关闭' : '开启'} />
)}

表头设置

拖拽调整列顺序

{(onResetColumnOrder || onResetColumnVisibility) && ( )}
{columns.length === 0 ? (
暂无可配置列
) : ( {columns.map((item, index) => (
{item.header} {onToggleColumnVisibility && ( { onToggleColumnVisibility(item.id, !!checked); }} title={columnVisibility?.[item.id] === false ? '显示' : '隐藏'} /> )}
))}
)}
{resetConfirmOpen && ( } confirmVariant="primary" onConfirm={() => { onResetColumnOrder?.(); onResetColumnVisibility?.(); setResetConfirmOpen(false); }} onCancel={() => setResetConfirmOpen(false)} confirmText="重置" /> )} ); }