crud-page-react 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +15 -1
- package/dist/index.esm.js +44 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +44 -3
- package/dist/index.js.map +1 -1
- package/dist/types/schema.d.ts +31 -1
- package/package.json +2 -3
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/types/schema.ts","../src/components/DynamicFilter.tsx","../src/components/DynamicTable.tsx","../src/types/validationRules.ts","../src/components/DynamicForm.tsx","../src/components/CrudPage.tsx"],"sourcesContent":["/** API 请求函数类型 */\nexport interface ApiRequest {\n <T = unknown>(url: string, options?: RequestInit): Promise<T>;\n}\n\n/**\n * 数据类型:描述字段存储的值类型。\n *\n * 嵌套对象不再作为独立类型,而是通过 key 的点分路径(dot-path)表达,\n * 例如 `emergencyContact.name`、`emergencyContact.phone`。\n * 框架会自动将 Form 数据写入/读出对应的嵌套路径。\n */\nexport type DataType =\n | 'string' // 字符串\n | 'number' // 数字\n | 'boolean' // 布尔\n | 'datetime' // 日期时间\n | 'date' // 仅日期\n | 'array' // 基本类型数组(string[] / number[]),配合 multiselect / checkbox\n | 'objectArray'; // 对象数组(object[]),配合 editableTable,需配置 itemFields\n\n/** UI 组件类型:描述字段渲染使用的组件 */\nexport type WidgetType =\n // ── 基础输入 ──────────────────────────────\n | 'input' // 单行输入框(string 默认)\n | 'textarea' // 多行文本域\n | 'inputNumber' // 数字输入框(number 默认)\n // ── 选择类 ────────────────────────────────\n | 'select' // 单选下拉\n | 'multiselect' // 多选下拉(array 默认)\n | 'radio' // 单选按钮组\n | 'checkbox' // 多选复选框\n | 'switch' // 开关(boolean 默认)\n // ── 日期时间 ──────────────────────────────\n | 'datePicker' // 日期/时间选择(date/datetime 默认)\n | 'rangePicker' // 日期范围选择\n | 'timePicker' // 时间点选择\n // ── 对象数组 ──────────────────────────────\n | 'editableTable' // 行内可编辑表格(objectArray 默认)\n // ── JSON 原始编辑 ─────────────────────────\n | 'jsonInput'; // 原始 JSON 文本域(fallback)\n\n/** 兼容旧版 —— 不再推荐直接使用 */\nexport type FieldType = DataType;\n\nexport interface SelectOption {\n label: string;\n value: string | number | boolean;\n color?: string;\n}\n\n/**\n * 筛选项配置 —— 仅放筛选独有配置。\n * options / placeholder / dateFormat 统一在 FieldSchema.config 里配置。\n */\nexport interface FilterConfig {\n /** 覆盖字段级 widget,指定筛选组件类型 */\n widget?: WidgetType;\n /** inputNumber 时可开启数字范围(min/max 两个输入框) */\n range?: boolean;\n defaultValue?: unknown;\n}\n\n/** 表格列配置 */\nexport interface TableColumnConfig {\n width?: number;\n fixed?: 'left' | 'right';\n sortable?: boolean;\n ellipsis?: boolean;\n}\n\n/**\n * 表单字段配置 —— 仅放表单独有配置。\n * options / placeholder / dateFormat / rows 统一在 FieldSchema.config 里配置。\n */\nexport interface FormFieldConfig {\n /** 覆盖字段级 widget,指定表单组件类型 */\n widget?: WidgetType;\n required?: boolean;\n min?: number;\n max?: number;\n step?: number;\n}\n\n/**\n * 字段级共用组件配置。\n * filter 和 form 均可读取,无需在两处重复填写。\n */\nexport interface FieldConfig {\n /** 下拉/多选/单选等组件的选项列表 */\n options?: SelectOption[];\n /** 输入框、选择框等的占位提示文字 */\n placeholder?: string;\n /** 日期/时间组件的显示格式,如 'YYYY-MM-DD' */\n dateFormat?: string;\n /** textarea / jsonInput 的行数 */\n rows?: number;\n}\n\n/**\n * 对象数组(objectArray)中每个 item 的字段定义。\n * 故意保持简单:不支持嵌套 objectArray,不支持 dot-path key。\n */\nexport interface ArrayItemField {\n /** item 对象的属性名,不使用点分路径 */\n key: string;\n label: string;\n /** 不允许嵌套数组 */\n type: Exclude<DataType, 'array' | 'objectArray'>;\n /** 不允许嵌套 editableTable */\n widget?: Exclude<WidgetType, 'editableTable'>;\n config?: Pick<FieldConfig, 'options' | 'placeholder' | 'dateFormat'>;\n required?: boolean;\n /** 列宽(px) */\n width?: number;\n}\n\n/**\n * 字段定义。\n *\n * ### 点分路径(dot-path)规则\n * `key` 支持点分路径表达嵌套结构,例如:\n * - `emergencyContact.name`\n * - `emergencyContact.phone`\n *\n * Form 层会自动将值写入 / 读取对应的嵌套对象属性;\n * 具有相同前缀的字段在表单中会被归为同一视觉分组,并显示分组标题。\n */\nexport interface FieldSchema {\n key: string;\n label: string;\n /** 数据类型(值的类型) */\n type: DataType;\n /**\n * 默认 UI 组件类型;可被 filter / form 级别的 widget 覆盖。\n * 不填时由 defaultWidgetForType 推导。\n */\n widget?: WidgetType;\n filter?: boolean | FilterConfig;\n table?: boolean | TableColumnConfig;\n form?: boolean | FormFieldConfig;\n /**\n * 字段级共用组件配置(options、placeholder、dateFormat 等)。\n * filter 和 form 均从这里读取,不再重复配置。\n */\n config?: FieldConfig;\n render?: string;\n /**\n * 对象数组子字段定义,仅 type='objectArray' 时生效。\n * 配置后 widget 默认推导为 'editableTable'。\n */\n itemFields?: ArrayItemField[];\n /**\n * 校验规则 key 数组,引用 validationRules.ts 中内置或自定义规则的 key。\n * 例如 `rules: ['phone_cn', 'max_len_50']`\n * 注意:required 规则通过 form.required 单独控制,无需在此重复。\n */\n rules?: string[];\n}\n\nexport type ActionType = 'edit' | 'delete' | 'view' | 'custom';\n\nexport interface ActionPermission {\n role?: string[];\n condition?: string;\n}\n\nexport interface ActionApiConfig {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n responseType?: 'json' | 'blob' | 'text';\n}\n\nexport interface ActionSchema {\n key: string;\n label: string;\n type: ActionType;\n icon?: string;\n danger?: boolean;\n color?: string;\n permission?: ActionPermission;\n condition?: Record<string, unknown>;\n confirm?: {\n title: string;\n content?: string;\n };\n api?: ActionApiConfig; // 保持向后兼容\n apiKey?: string; // 新增:引用统一 API 配置的 key\n}\n\nexport interface PaginationConfig {\n pageSize?: number;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n}\n\nexport interface CrudPageSchema {\n id: string;\n title: string;\n api: {\n list: ActionApiConfig;\n create?: ActionApiConfig;\n update?: ActionApiConfig;\n delete?: ActionApiConfig;\n detail?: ActionApiConfig;\n // 支持自定义 API 配置\n [key: string]: ActionApiConfig | undefined;\n };\n fields: FieldSchema[];\n actions?: ActionSchema[];\n pagination?: PaginationConfig;\n rowKey?: string;\n createButtonLabel?: string;\n}\n\n/* ─── 工具函数 ──────────────────────────────────────── */\n\n/**\n * 根据数据类型推导默认 UI 组件\n *\n * string → input\n * number → inputNumber\n * boolean → switch\n * date → datePicker\n * datetime → datePicker\n * array → multiselect\n * objectArray → editableTable\n */\nexport function defaultWidgetForType(type: DataType): WidgetType {\n switch (type) {\n case 'number': return 'inputNumber';\n case 'boolean': return 'switch';\n case 'date':\n case 'datetime': return 'datePicker';\n case 'array': return 'multiselect';\n case 'objectArray': return 'editableTable';\n default: return 'input'; // string\n }\n}\n\n/** 获取实际生效的组件类型(context.widget > field.widget > type 推导) */\nexport function getEffectiveWidget(\n field: FieldSchema,\n config?: FilterConfig | FormFieldConfig,\n): WidgetType {\n if (config?.widget) return config.widget;\n if (field.widget) return field.widget;\n return defaultWidgetForType(field.type);\n}\n\n/**\n * 从嵌套对象按点分路径取值\n *\n * getNestedValue({ a: { b: 1 } }, 'a.b') → 1\n * getNestedValue({ x: [1, 2] }, 'x') → [1, 2]\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((acc: unknown, key) => {\n if (acc != null && typeof acc === 'object' && !Array.isArray(acc)) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 从点分路径 key 中提取分组前缀(第一个 segment)。\n * 无前缀的顶层字段返回 null。\n *\n * 'emergencyContact.name' → 'emergencyContact'\n * 'name' → null\n */\nexport function getFieldGroupPrefix(key: string): string | null {\n const idx = key.indexOf('.');\n return idx >= 0 ? key.slice(0, idx) : null;\n}","import { useState } from 'react';\nimport { Form, Input, InputNumber, Select, Switch, DatePicker, Button, Row, Col, Space, Radio } from 'antd';\nimport { SearchOutlined, ReloadOutlined } from '@ant-design/icons';\nimport type { CrudPageSchema, FieldSchema, FilterConfig, SelectOption } from '../types/schema';\nimport { getEffectiveWidget } from '../types/schema';\n\nconst { RangePicker } = DatePicker;\n\ninterface DynamicFilterProps {\n schema: CrudPageSchema;\n onSearch: (values: Record<string, unknown>) => void;\n onReset: () => void;\n}\n\n/** 解析 FilterConfig */\nfunction getFilterConfig(field: FieldSchema): FilterConfig | undefined {\n if (!field.filter || typeof field.filter === 'boolean') return undefined;\n return field.filter as FilterConfig;\n}\n\n/** 获取选项列表(从 field.config 读取) */\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 渲染单个筛选组件 */\nfunction renderFilterInput(field: FieldSchema, cfg?: FilterConfig): React.ReactNode {\n const widget = getEffectiveWidget(field, cfg);\n const placeholder = field.config?.placeholder;\n const dateFormat = field.config?.dateFormat;\n const options = getOptions(field);\n const style = { width: '100%' };\n\n switch (widget) {\n case 'input':\n return <Input placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'textarea':\n return <Input.TextArea placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'inputNumber': {\n if (cfg?.range) {\n return (\n <Space>\n <Form.Item name={`${field.key}_min`} noStyle>\n <InputNumber placeholder=\"最小值\" />\n </Form.Item>\n <span>~</span>\n <Form.Item name={`${field.key}_max`} noStyle>\n <InputNumber placeholder=\"最大值\" />\n </Form.Item>\n </Space>\n );\n }\n return <InputNumber placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n\n case 'select':\n return (\n <Select allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'multiselect':\n return (\n <Select mode=\"multiple\" allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'radio':\n return (\n <Radio.Group style={style}>\n {options.map((o) => (\n <Radio key={String(o.value)} value={o.value}>{o.label}</Radio>\n ))}\n </Radio.Group>\n );\n\n case 'switch':\n return <Switch />;\n\n case 'datePicker': {\n const showTime = field.type === 'datetime';\n return <DatePicker showTime={showTime} format={dateFormat} style={style} />;\n }\n\n case 'rangePicker': {\n const showTime = field.type === 'datetime';\n return <RangePicker showTime={showTime} format={dateFormat} style={style} />;\n }\n\n case 'timePicker':\n return <DatePicker picker=\"time\" format={dateFormat ?? 'HH:mm:ss'} style={style} />;\n\n case 'jsonInput':\n return <Input placeholder={placeholder ?? `搜索 ${field.label}`} style={style} />;\n\n default:\n return <Input placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n}\n\nexport default function DynamicFilter({ schema, onSearch, onReset }: DynamicFilterProps) {\n const [form] = Form.useForm();\n const [expanded, setExpanded] = useState(false);\n\n const filterFields = schema.fields.filter(\n (f) => f.filter !== false && f.filter !== undefined && f.type !== 'objectArray',\n );\n\n const handleFinish = (values: Record<string, unknown>) => {\n onSearch(values);\n };\n\n const handleReset = () => {\n form.resetFields();\n onReset();\n };\n\n const colSpan = { xs: 24, sm: 12, md: 12, lg: 8, xl: 6, xxl: 6 };\n\n const visibleFields = expanded ? filterFields : filterFields.slice(0, 4);\n\n return (\n <Form form={form} onFinish={handleFinish} layout=\"vertical\">\n <Row gutter={[16, 0]}>\n {visibleFields.map((field) => {\n const cfg = getFilterConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n\n // inputNumber 数字范围:name 不放在 Form.Item 上,由内部子 Form.Item 承载\n const isNumberRange = widget === 'inputNumber' && cfg?.range;\n\n return (\n <Col key={field.key} {...colSpan}>\n <Form.Item\n label={field.label}\n name={isNumberRange ? undefined : field.key}\n valuePropName={widget === 'switch' ? 'checked' : 'value'}\n >\n {renderFilterInput(field, cfg)}\n </Form.Item>\n </Col>\n );\n })}\n\n {/* 操作按钮 */}\n <Col {...colSpan}>\n <Form.Item label=\" \">\n <Space>\n <Button type=\"primary\" htmlType=\"submit\" icon={<SearchOutlined />}>\n 搜索\n </Button>\n <Button onClick={handleReset} icon={<ReloadOutlined />}>\n 重置\n </Button>\n {filterFields.length > 4 && (\n <Button type=\"link\" onClick={() => setExpanded(!expanded)}>\n {expanded ? '收起' : '展开'}\n </Button>\n )}\n </Space>\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n}\n","import { Table, Tag, Switch, Space, Button, Popconfirm, Tooltip, message, Dropdown } from 'antd';\nimport { EyeOutlined, EditOutlined, DeleteOutlined, CopyOutlined, MoreOutlined } from '@ant-design/icons';\nimport type { ColumnsType } from 'antd/es/table';\nimport dayjs from 'dayjs';\nimport type { CrudPageSchema, FieldSchema, TableColumnConfig, SelectOption } from '../types/schema';\nimport { getEffectiveWidget, getNestedValue } from '../types/schema';\n\ninterface DynamicTableProps {\n schema: CrudPageSchema;\n data: Record<string, unknown>[];\n loading: boolean;\n pagination: {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number, pageSize: number) => void;\n };\n onView: (record: Record<string, unknown>) => void;\n onEdit: (record: Record<string, unknown>) => void;\n onDelete: (record: Record<string, unknown>) => void;\n onCustomAction?: (actionKey: string, record: Record<string, unknown>) => void;\n}\n\nfunction getTableConfig(field: FieldSchema): TableColumnConfig | undefined {\n if (!field.table || typeof field.table === 'boolean') return undefined;\n return field.table as TableColumnConfig;\n}\n\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 格式化单元格显示值 */\nfunction renderCell(field: FieldSchema, value: unknown): React.ReactNode {\n if (value == null || value === '') return <span style={{ color: '#ccc' }}>-</span>;\n\n const widget = getEffectiveWidget(field);\n\n // ── 布尔类 ──────────────────────────────────────────────\n if (field.type === 'boolean' || widget === 'switch') {\n return <Switch checked={Boolean(value)} disabled size=\"small\" />;\n }\n\n // ── 下拉/单选(有 options) ──────────────────────────────\n if (widget === 'select' || widget === 'radio') {\n const options = getOptions(field);\n const opt = options.find((o) => o.value === value);\n if (opt) {\n return opt.color ? <Tag color={opt.color}>{opt.label}</Tag> : <span>{opt.label}</span>;\n }\n return <span>{String(value)}</span>;\n }\n\n // ── 多选(multiselect / checkbox,值为数组) ─────────────\n if (widget === 'multiselect' || widget === 'checkbox') {\n const arr = Array.isArray(value) ? value : [value];\n const options = getOptions(field);\n return (\n <Space size={4} wrap>\n {arr.map((v) => {\n const opt = options.find((o) => o.value === v);\n return opt ? (\n <Tag key={String(v)} color={opt.color}>{opt.label}</Tag>\n ) : (\n <Tag key={String(v)}>{String(v)}</Tag>\n );\n })}\n </Space>\n );\n }\n\n // ── 日期/时间 ────────────────────────────────────────────\n if (widget === 'datePicker') {\n const fmt = field.config?.dateFormat ?? (field.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n const d = dayjs(value as string);\n return d.isValid() ? <span>{d.format(fmt)}</span> : <span>{String(value)}</span>;\n }\n\n if (widget === 'rangePicker') {\n if (Array.isArray(value)) {\n const fmt = field.config?.dateFormat ?? 'YYYY-MM-DD';\n return <span>{value.map((v) => (v ? dayjs(v as string).format(fmt) : '-')).join(' ~ ')}</span>;\n }\n }\n\n if (widget === 'timePicker') {\n const fmt = field.config?.dateFormat ?? 'HH:mm:ss';\n const d = dayjs(value as string);\n return d.isValid() ? <span>{d.format(fmt)}</span> : <span>{String(value)}</span>;\n }\n\n // ── 普通数组(array 基本类型) ───────────────────────────\n if (field.type === 'array' && Array.isArray(value)) {\n return (\n <Space size={4} wrap>\n {(value as unknown[]).map((v, i) => (\n <Tag key={i}>{String(v)}</Tag>\n ))}\n </Space>\n );\n }\n\n // ── objectArray / editableTable:显示 N 条记录 ──────────\n if (field.type === 'objectArray' || widget === 'editableTable') {\n const arr = Array.isArray(value) ? value : [];\n return <span style={{ color: '#888' }}>{arr.length} 条记录</span>;\n }\n\n // ── jsonInput(对象序列化为字符串) ──────────────────────\n if (widget === 'jsonInput') {\n if (typeof value === 'object') {\n const str = JSON.stringify(value);\n return (\n <Tooltip title={<pre style={{ margin: 0, fontSize: 11 }}>{JSON.stringify(value, null, 2)}</pre>}>\n <span style={{ cursor: 'help', fontFamily: 'monospace', fontSize: 12 }}>\n {str.length > 40 ? str.slice(0, 40) + '…' : str}\n </span>\n </Tooltip>\n );\n }\n return <span>{String(value)}</span>;\n }\n\n return <span>{String(value)}</span>;\n}\n\nexport default function DynamicTable({\n schema,\n data,\n loading,\n pagination,\n onView,\n onEdit,\n onDelete,\n onCustomAction,\n}: DynamicTableProps) {\n const tableFields = schema.fields.filter((f) => f.table !== false && f.table !== undefined);\n\n const columns: ColumnsType<Record<string, unknown>> = tableFields.map((field) => {\n const cfg = getTableConfig(field);\n const isNested = field.key.includes('.');\n\n return {\n title: field.label,\n // 点分路径使用数组形式,Ant Design Table 支持嵌套取值\n dataIndex: isNested ? field.key.split('.') : field.key,\n key: field.key,\n width: cfg?.width,\n fixed: cfg?.fixed,\n ellipsis: cfg?.ellipsis,\n sorter: cfg?.sortable,\n render: (_value: unknown, record: Record<string, unknown>) => {\n // 统一使用 getNestedValue 以支持多层点分路径\n const actualValue = isNested ? getNestedValue(record, field.key) : _value;\n return renderCell(field, actualValue);\n },\n };\n });\n\n const copyJson = (record: Record<string, unknown>) => {\n navigator.clipboard.writeText(JSON.stringify(record, null, 2))\n .then(() => void message.success('已复制 JSON'))\n .catch(() => void message.error('复制失败'));\n };\n\n // 操作列(有 schema.actions 或始终存在,以便展示复制按钮)\n columns.push({\n title: '操作',\n key: '__actions',\n fixed: 'right',\n width: 200, // 固定宽度,因为现在有下拉菜单\n render: (_: unknown, record: Record<string, unknown>) => {\n const actions = schema.actions ?? [];\n \n // 分离基础操作和自定义操作\n const basicActions = actions.filter(action => \n action.type === 'view' || action.type === 'edit' || action.type === 'delete'\n );\n const customActions = actions.filter(action => action.type === 'custom');\n\n // 构建下拉菜单项(仅包含自定义操作)\n const dropdownItems = customActions.map(action => ({\n key: action.key,\n label: action.label,\n onClick: () => onCustomAction?.(action.key, record),\n danger: action.danger,\n }));\n\n return (\n <Space size={4}>\n {basicActions.map((action) => {\n if (action.type === 'view') {\n return (\n <Tooltip key={action.key} title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n icon={<EyeOutlined />}\n onClick={() => onView(record)}\n />\n </Tooltip>\n );\n }\n if (action.type === 'edit') {\n return (\n <Tooltip key={action.key} title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n icon={<EditOutlined />}\n onClick={() => onEdit(record)}\n />\n </Tooltip>\n );\n }\n if (action.type === 'delete') {\n return (\n <Popconfirm\n key={action.key}\n title={action.confirm?.title ?? '确定删除?'}\n description={action.confirm?.content}\n onConfirm={() => onDelete(record)}\n okText=\"确定\"\n cancelText=\"取消\"\n okButtonProps={{ danger: true }}\n >\n <Tooltip title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n icon={<DeleteOutlined />}\n />\n </Tooltip>\n </Popconfirm>\n );\n }\n return null;\n })}\n \n {/* 复制JSON功能 - 独立按钮 */}\n <Tooltip title=\"复制 JSON\">\n <Button\n type=\"link\"\n size=\"small\"\n icon={<CopyOutlined />}\n onClick={() => copyJson(record)}\n />\n </Tooltip>\n \n {/* 自定义操作下拉菜单 - 仅在有自定义操作时显示,放在最后 */}\n {customActions.length > 0 && (\n <Dropdown\n menu={{ items: dropdownItems }}\n trigger={['click']}\n placement=\"bottomRight\"\n >\n <Tooltip title=\"其它操作\">\n <Button\n type=\"link\"\n size=\"small\"\n icon={<MoreOutlined />}\n />\n </Tooltip>\n </Dropdown>\n )}\n </Space>\n );\n },\n });\n\n return (\n <Table\n rowKey={schema.rowKey ?? 'id'}\n columns={columns}\n dataSource={data}\n loading={loading}\n scroll={{ x: 'max-content' }}\n pagination={{\n current: pagination.current,\n pageSize: pagination.pageSize,\n total: pagination.total,\n showSizeChanger: true,\n showTotal: schema.pagination?.showTotal\n ? (total) => `共 ${total} 条`\n : undefined,\n onChange: pagination.onChange,\n pageSizeOptions: schema.pagination?.pageSizeOptions ?? [10, 20, 50],\n }}\n />\n );\n}\n","import type { Rule } from 'antd/es/form';\n\n/** 校验规则配置(内置 + 自定义均使用此结构) */\nexport interface ValidationRuleConfig {\n key: string;\n label: string;\n description?: string;\n message: string;\n /** 正则字符串(将转为 RegExp) */\n pattern?: string;\n /** 最小值(number)或最小长度(string) */\n min?: number;\n /** 最大值(number)或最大长度(string) */\n max?: number;\n /** antd 内置类型校验 */\n type?: 'string' | 'number' | 'email' | 'url' | 'integer';\n /** 是否不允许纯空白字符 */\n whitespace?: boolean;\n /** 是否内置(内置规则不可删除) */\n builtin?: boolean;\n}\n\n/** 内置规则集 */\nexport const BUILTIN_RULES: ValidationRuleConfig[] = [\n {\n key: 'phone_cn',\n label: '手机号(中国大陆)',\n description: '1 开头的 11 位数字',\n message: '请输入正确的手机号',\n pattern: '^1[3-9]\\\\d{9}$',\n builtin: true,\n },\n {\n key: 'email',\n label: '邮箱地址',\n description: '标准电子邮箱格式',\n message: '请输入正确的邮箱地址',\n type: 'email',\n builtin: true,\n },\n {\n key: 'url',\n label: 'URL 链接',\n description: '以 http/https 开头的合法 URL',\n message: '请输入正确的 URL 地址',\n type: 'url',\n builtin: true,\n },\n {\n key: 'id_card_cn',\n label: '居民身份证(中国)',\n description: '18 位二代身份证号码',\n message: '请输入正确的身份证号',\n pattern: '^[1-9]\\\\d{5}(18|19|20)\\\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\\\d|3[01])\\\\d{3}[\\\\dXx]$',\n builtin: true,\n },\n {\n key: 'positive_integer',\n label: '正整数',\n description: '大于 0 的整数',\n message: '请输入正整数',\n pattern: '^[1-9]\\\\d*$',\n builtin: true,\n },\n {\n key: 'non_negative_integer',\n label: '非负整数',\n description: '0 或大于 0 的整数',\n message: '请输入非负整数',\n pattern: '^\\\\d+$',\n builtin: true,\n },\n {\n key: 'chinese',\n label: '纯中文',\n description: '只能包含中文字符',\n message: '只能输入中文字符',\n pattern: '^[\\\\u4e00-\\\\u9fa5]+$',\n builtin: true,\n },\n {\n key: 'alphanumeric',\n label: '字母和数字',\n description: '只能包含英文字母和数字',\n message: '只能输入字母和数字',\n pattern: '^[a-zA-Z0-9]+$',\n builtin: true,\n },\n {\n key: 'no_special_chars',\n label: '无特殊字符',\n description: '只允许中文、字母、数字、下划线、短横线',\n message: '不能包含特殊字符',\n pattern: '^[a-zA-Z0-9\\\\u4e00-\\\\u9fa5_-]+$',\n builtin: true,\n },\n {\n key: 'ip_address',\n label: 'IPv4 地址',\n description: '标准 IPv4 地址格式',\n message: '请输入正确的 IP 地址',\n pattern: '^((25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)$',\n builtin: true,\n },\n {\n key: 'date_format',\n label: '日期格式 (YYYY-MM-DD)',\n description: '格式如 2024-01-01',\n message: '请输入正确的日期格式,如 2024-01-01',\n pattern: '^\\\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01])$',\n builtin: true,\n },\n {\n key: 'no_whitespace',\n label: '不含空格',\n description: '不允许包含任何空白字符',\n message: '不能包含空格',\n pattern: '^\\\\S+$',\n builtin: true,\n },\n {\n key: 'min_len_2',\n label: '最少 2 个字符',\n description: '字符串长度不少于 2',\n message: '长度不能少于 2 个字符',\n min: 2,\n builtin: true,\n },\n {\n key: 'max_len_50',\n label: '最多 50 个字符',\n description: '字符串长度不超过 50',\n message: '长度不能超过 50 个字符',\n max: 50,\n builtin: true,\n },\n {\n key: 'max_len_200',\n label: '最多 200 个字符',\n description: '字符串长度不超过 200',\n message: '长度不能超过 200 个字符',\n max: 200,\n builtin: true,\n },\n {\n key: 'bank_card',\n label: '银行卡号',\n description: '16-19 位纯数字',\n message: '请输入正确的银行卡号',\n pattern: '^\\\\d{16,19}$',\n builtin: true,\n },\n {\n key: 'plate_cn',\n label: '车牌号(中国)',\n description: '含新能源车牌在内的中国大陆车牌',\n message: '请输入正确的车牌号',\n pattern: '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁夏][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$',\n builtin: true,\n },\n {\n key: 'postal_code_cn',\n label: '邮政编码(中国)',\n description: '6 位数字邮编',\n message: '请输入正确的邮政编码',\n pattern: '^\\\\d{6}$',\n builtin: true,\n },\n];\n\nconst CUSTOM_RULES_STORAGE_KEY = 'dynamic_crud_custom_rules';\n\nexport function loadCustomRules(): ValidationRuleConfig[] {\n try {\n const raw = localStorage.getItem(CUSTOM_RULES_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as ValidationRuleConfig[]) : [];\n } catch {\n return [];\n }\n}\n\nexport function saveCustomRules(rules: ValidationRuleConfig[]): void {\n try {\n localStorage.setItem(CUSTOM_RULES_STORAGE_KEY, JSON.stringify(rules));\n } catch { /* ignore */ }\n}\n\n/** 获取所有规则(内置 + 自定义) */\nexport function getAllRules(): ValidationRuleConfig[] {\n return [...BUILTIN_RULES, ...loadCustomRules()];\n}\n\n/** 根据 key 查找规则 */\nexport function getRuleByKey(key: string): ValidationRuleConfig | undefined {\n return getAllRules().find(r => r.key === key);\n}\n\n/** 将规则配置转为 Ant Design Form Rule */\nexport function ruleConfigToAntdRule(config: ValidationRuleConfig): Rule {\n const rule: Record<string, unknown> = { message: config.message };\n if (config.pattern) {\n rule.pattern = new RegExp(config.pattern);\n }\n if (config.type) {\n rule.type = config.type;\n }\n if (config.min !== undefined) {\n rule.min = config.min;\n }\n if (config.max !== undefined) {\n rule.max = config.max;\n }\n if (config.whitespace !== undefined) {\n rule.whitespace = config.whitespace;\n }\n return rule as Rule;\n}\n\n/** 将一组规则 key 转为 Ant Design Form Rules 数组 */\nexport function keysToAntdRules(keys: string[]): Rule[] {\n return keys\n .map(k => getRuleByKey(k))\n .filter((c): c is ValidationRuleConfig => c !== undefined)\n .map(ruleConfigToAntdRule);\n}","import { useEffect, useState } from 'react';\nimport {\n Modal, Form, Input, InputNumber, Select, Switch,\n DatePicker, Radio, Checkbox, Space, Card, Divider,\n Button, Table, message,\n} from 'antd';\nimport { PlusOutlined, DeleteOutlined, CodeOutlined, FormOutlined } from '@ant-design/icons';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\ndayjs.extend(customParseFormat);\nimport type { CrudPageSchema, FieldSchema, FormFieldConfig, SelectOption, ArrayItemField } from '../types/schema';\nimport { getEffectiveWidget, getFieldGroupPrefix, getNestedValue } from '../types/schema';\nimport { keysToAntdRules } from '../types/validationRules';\n\ntype FormMode = 'create' | 'edit' | 'view';\n\ninterface DynamicFormProps {\n schema: CrudPageSchema;\n mode: FormMode;\n visible: boolean;\n initialValues?: Record<string, unknown>;\n onSubmit: (values: Record<string, unknown>) => void;\n onCancel: () => void;\n}\n\nfunction getFormConfig(field: FieldSchema): FormFieldConfig | undefined {\n if (!field.form || typeof field.form === 'boolean') return undefined;\n return field.form as FormFieldConfig;\n}\n\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 将 camelCase 前缀转为可读标签(仅首字母大写) */\nfunction prefixToLabel(prefix: string): string {\n return prefix.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase()).trim();\n}\n\n/** 设置嵌套对象指定路径的值(修改原对象) */\nfunction setNestedValue(\n obj: Record<string, unknown>,\n path: string[],\n value: unknown,\n): void {\n let cur = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const k = path[i];\n if (cur[k] == null || typeof cur[k] !== 'object' || Array.isArray(cur[k])) {\n cur[k] = {};\n }\n cur = cur[k] as Record<string, unknown>;\n }\n cur[path[path.length - 1]] = value;\n}\n\n/** 行内可编辑表格 cell 组件 */\nfunction EditableCellInput({\n itemField,\n disabled,\n value,\n onChange,\n}: {\n itemField: ArrayItemField;\n disabled: boolean;\n value?: unknown; // Form.Item 注入\n onChange?: (val: unknown) => void; // Form.Item 注入\n}) {\n const ph = itemField.config?.placeholder ?? `请输入${itemField.label}`;\n switch (itemField.type) {\n case 'number':\n return (\n <InputNumber\n disabled={disabled}\n placeholder={ph}\n value={value as number | null | undefined}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n />\n );\n case 'boolean':\n // Form.Item 默认 valuePropName=\"value\",这里手动映射到 checked\n return (\n <Switch\n disabled={disabled}\n checked={value as boolean}\n onChange={(checked) => onChange?.(checked)}\n />\n );\n case 'date':\n case 'datetime': {\n const fmt = itemField.config?.dateFormat ?? (itemField.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n // value 可能是字符串(来自 initialValues)或 dayjs 对象(用户选择后)\n const pickerValue = value != null\n ? (dayjs.isDayjs(value) ? value : dayjs(value as string))\n : null;\n return (\n <DatePicker\n disabled={disabled}\n format={fmt}\n value={pickerValue}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n />\n );\n }\n case 'string': {\n if (itemField.widget === 'select' && itemField.config?.options?.length) {\n return (\n <Select\n disabled={disabled}\n allowClear\n placeholder={ph}\n value={value as string | undefined}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n >\n {itemField.config.options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>{o.label}</Select.Option>\n ))}\n </Select>\n );\n }\n return (\n <Input\n disabled={disabled}\n placeholder={ph}\n value={value as string | undefined}\n onChange={(e) => onChange?.(e.target.value)}\n />\n );\n }\n default:\n return (\n <Input\n disabled={disabled}\n placeholder={ph}\n value={value as string | undefined}\n onChange={(e) => onChange?.(e.target.value)}\n />\n );\n }\n}\n\nfunction renderFormInput(\n field: FieldSchema,\n cfg: FormFieldConfig | undefined,\n disabled: boolean,\n): React.ReactNode {\n const widget = getEffectiveWidget(field, cfg);\n const options = getOptions(field);\n const placeholder = field.config?.placeholder;\n const rows = field.config?.rows;\n const style = { width: '100%' };\n\n switch (widget) {\n case 'input':\n return <Input disabled={disabled} placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'textarea':\n return (\n <Input.TextArea\n disabled={disabled}\n rows={rows ?? 4}\n placeholder={placeholder ?? `请输入 ${field.label}`}\n style={style}\n />\n );\n\n case 'jsonInput':\n return (\n <Input.TextArea\n disabled={disabled}\n rows={rows ?? 5}\n placeholder={placeholder ?? '请输入 JSON'}\n style={{ ...style, fontFamily: 'monospace', fontSize: 12 }}\n />\n );\n\n case 'inputNumber':\n return (\n <InputNumber\n disabled={disabled}\n min={cfg?.min}\n max={cfg?.max}\n step={cfg?.step ?? 1}\n placeholder={placeholder ?? `请输入 ${field.label}`}\n style={style}\n />\n );\n\n case 'select':\n return (\n <Select disabled={disabled} allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'multiselect':\n return (\n <Select\n mode=\"multiple\"\n disabled={disabled}\n allowClear\n placeholder={placeholder ?? `请选择 ${field.label}`}\n style={style}\n >\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'radio':\n return (\n <Radio.Group disabled={disabled}>\n {options.map((o) => (\n <Radio key={String(o.value)} value={o.value}>{o.label}</Radio>\n ))}\n </Radio.Group>\n );\n\n case 'checkbox':\n return (\n <Checkbox.Group disabled={disabled}>\n <Space wrap>\n {options.map((o) => (\n <Checkbox key={String(o.value)} value={o.value}>{o.label}</Checkbox>\n ))}\n </Space>\n </Checkbox.Group>\n );\n\n case 'switch':\n return <Switch disabled={disabled} />;\n\n case 'datePicker': {\n const showTime = field.type === 'datetime';\n const format = field.config?.dateFormat ?? (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n return <DatePicker disabled={disabled} showTime={showTime} format={format} style={style} />;\n }\n\n case 'rangePicker': {\n const showTime = field.type === 'datetime';\n const format = field.config?.dateFormat ?? (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n return <DatePicker.RangePicker disabled={disabled} showTime={showTime} format={format} style={style} />;\n }\n\n case 'timePicker':\n return (\n <DatePicker\n picker=\"time\"\n disabled={disabled}\n format={field.config?.dateFormat ?? 'HH:mm:ss'}\n style={style}\n />\n );\n\n case 'editableTable': {\n const itemFields = field.itemFields ?? [];\n return (\n <Form.List name={field.key}>\n {(listFields, { add, remove }) => {\n const columns = [\n ...itemFields.map((itemField) => ({\n title: itemField.label,\n dataIndex: itemField.key,\n width: itemField.width,\n render: (_: unknown, record: { name: number }) => (\n <Form.Item\n name={[record.name, itemField.key]}\n rules={itemField.required ? [{ required: true, message: `${itemField.label}必填` }] : undefined}\n style={{ margin: 0 }}\n >\n <EditableCellInput itemField={itemField} disabled={disabled} />\n </Form.Item>\n ),\n })),\n ...(!disabled\n ? [{\n title: '',\n width: 50,\n render: (_: unknown, record: { name: number }) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={() => remove(record.name)}\n />\n ),\n }]\n : []),\n ];\n return (\n <div>\n <Table\n size=\"small\"\n dataSource={listFields.map((f) => ({ ...f, _key: f.key }))}\n rowKey=\"_key\"\n columns={columns}\n pagination={false}\n style={{ marginBottom: 8 }}\n />\n {!disabled && (\n <Button\n type=\"dashed\"\n icon={<PlusOutlined />}\n onClick={() => add({})}\n block\n >\n 添加一行\n </Button>\n )}\n </div>\n );\n }}\n </Form.List>\n );\n }\n\n default:\n return <Input disabled={disabled} placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n}\n\n/**\n * 将接口数据转为 Form 使用的初始值。\n *\n * - 顶层字段:直接展开(与原来相同)\n * - dot-path 字段(如 `emergencyContact.name`):\n * API 返回的数据已是嵌套结构,form.setFieldsValue 可直接识别\n * - 日期字段:将字符串转为 dayjs 对象\n */\nfunction normalizeInitialValues(\n fields: FieldSchema[],\n values?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!values) return {};\n // 深拷贝,避免修改原对象\n const result: Record<string, unknown> = JSON.parse(JSON.stringify(values)) as Record<string, unknown>;\n\n fields.forEach((field) => {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n if (widget !== 'datePicker' && widget !== 'rangePicker' && widget !== 'timePicker') return;\n\n const path = field.key.split('.');\n const val = path.length > 1 ? getNestedValue(result, field.key) : result[field.key];\n if (val == null) return;\n\n if (widget === 'rangePicker' && Array.isArray(val)) {\n setNestedValue(result, path, (val as (string | dayjs.Dayjs)[]).map((v) => {\n if (!v) return null;\n return dayjs.isDayjs(v) ? v : dayjs(v as string);\n }));\n } else if (val) {\n // 检查是否已经是 dayjs 对象,避免重复转换\n if (dayjs.isDayjs(val)) {\n setNestedValue(result, path, val);\n } else {\n // timePicker 存储的是纯时间字符串(如 \"09:30:00\"),需要带 format 解析\n const fmt = widget === 'timePicker'\n ? (field.config?.dateFormat ?? 'HH:mm:ss')\n : undefined;\n setNestedValue(result, path, fmt ? dayjs(val as string, fmt) : dayjs(val as string));\n }\n }\n });\n\n return result;\n}\n\n/** 将 Form 值序列化为提交数据(dayjs → ISO string) */\nfunction serializeValues(\n fields: FieldSchema[],\n values: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = JSON.parse(JSON.stringify(values)) as Record<string, unknown>;\n\n fields.forEach((field) => {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n if (widget !== 'datePicker' && widget !== 'rangePicker' && widget !== 'timePicker') return;\n\n const path = field.key.split('.');\n // 必须从原始 values 读(dayjs 对象仍存在),\n // 不能从 result 读——JSON.parse(JSON.stringify) 已把 dayjs 序列化为 ISO 字符串,\n // 导致 dayjs.isDayjs() 全部失败(rangePicker 变成 [null, null])。\n const val = path.length > 1 ? getNestedValue(values, field.key) : values[field.key];\n if (val == null) return;\n\n if (widget === 'timePicker' && dayjs.isDayjs(val)) {\n const fmt = field.config?.dateFormat ?? 'HH:mm:ss';\n setNestedValue(result, path, (val as ReturnType<typeof dayjs>).format(fmt));\n } else if (widget === 'datePicker' && dayjs.isDayjs(val)) {\n setNestedValue(result, path, (val as ReturnType<typeof dayjs>).toISOString());\n } else if (widget === 'rangePicker' && Array.isArray(val)) {\n setNestedValue(\n result,\n path,\n (val as ReturnType<typeof dayjs>[]).map((v) => (v && dayjs.isDayjs(v) ? v.toISOString() : null)),\n );\n }\n });\n\n return result;\n}\n\n/** 渲染单个 Form.Item */\nfunction renderField(field: FieldSchema, disabled: boolean): React.ReactNode {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n const required = !disabled && (cfg?.required ?? false);\n\n // editableTable 使用 Form.List,不能再套 Form.Item name\n if (widget === 'editableTable') {\n return (\n <Form.Item key={field.key} label={field.label} style={{ marginBottom: 14 }}>\n {renderFormInput(field, cfg, disabled)}\n </Form.Item>\n );\n }\n\n const namePath = field.key.includes('.') ? field.key.split('.') : field.key;\n const extraRules = field.rules && !disabled ? keysToAntdRules(field.rules) : [];\n const validationRules = [\n ...(required ? [{ required: true, message: `请输入 ${field.label}` }] : []),\n ...extraRules,\n ];\n\n return (\n <Form.Item\n key={field.key}\n label={field.label}\n name={namePath}\n valuePropName={widget === 'switch' ? 'checked' : 'value'}\n rules={validationRules}\n style={{ marginBottom: 14 }}\n >\n {renderFormInput(field, cfg, disabled)}\n </Form.Item>\n );\n}\n\nexport default function DynamicForm({\n schema,\n mode,\n visible,\n initialValues,\n onSubmit,\n onCancel,\n}: DynamicFormProps) {\n const [form] = Form.useForm();\n const [rawJsonMode, setRawJsonMode] = useState(false);\n const [rawJsonText, setRawJsonText] = useState('');\n const [rawJsonError, setRawJsonError] = useState('');\n const disabled = mode === 'view';\n const entityName = schema.title.replace(/管理$/, '');\n\n const titleMap: Record<FormMode, string> = {\n create: `新增${entityName}`,\n edit: `编辑${entityName}`,\n view: `查看${entityName}`,\n };\n\n const formFields = schema.fields.filter((f) => {\n if (mode === 'view') return f.table !== false && f.table !== undefined;\n return f.form !== false && f.form !== undefined;\n });\n\n useEffect(() => {\n if (!visible) {\n form.resetFields();\n setRawJsonMode(false);\n setRawJsonText('');\n setRawJsonError('');\n } else {\n // 模态框打开时,根据模式设置表单值\n if (mode === 'create') {\n // 新增模式:清空表单并确保没有残留数据\n form.resetFields();\n // 延迟一下确保resetFields完成\n setTimeout(() => {\n form.setFieldsValue({});\n }, 0);\n } else {\n // 编辑/查看模式设置初始值\n const normalized = normalizeInitialValues(formFields, initialValues);\n form.setFieldsValue(normalized);\n }\n }\n }, [visible, mode, initialValues, form, formFields]);\n\n const switchToRaw = () => {\n // getFieldsValue(true) 返回 store 全量数据(含 id 等非 Form.Item 字段)\n const rawValues = disabled\n ? (initialValues ?? {})\n : (form.getFieldsValue(true) as Record<string, unknown>);\n const serialized = disabled ? rawValues : serializeValues(formFields, rawValues);\n setRawJsonText(JSON.stringify(serialized, null, 2));\n setRawJsonError('');\n setRawJsonMode(true);\n };\n\n const switchToForm = () => {\n if (!disabled) {\n try {\n const parsed = JSON.parse(rawJsonText) as Record<string, unknown>;\n form.setFieldsValue(normalizeInitialValues(formFields, parsed));\n setRawJsonError('');\n } catch {\n setRawJsonError('JSON 格式错误,请修正后再切换');\n return;\n }\n }\n setRawJsonMode(false);\n };\n\n const handleOk = async () => {\n if (disabled) { onCancel(); return; }\n if (rawJsonMode) {\n try {\n const parsed = JSON.parse(rawJsonText) as Record<string, unknown>;\n onSubmit(parsed);\n } catch {\n setRawJsonError('JSON 格式错误,无法提交');\n }\n return;\n }\n const values = await form.validateFields();\n onSubmit(serializeValues(formFields, values as Record<string, unknown>));\n };\n\n /**\n * 将字段列表按 dot-path 前缀分组渲染:\n * - 无前缀字段:直接渲染\n * - 有前缀的字段:相同前缀聚合到一个带标题的 Card 中\n */\n const renderFieldGroups = () => {\n const nodes: React.ReactNode[] = [];\n let i = 0;\n while (i < formFields.length) {\n const field = formFields[i];\n const prefix = getFieldGroupPrefix(field.key);\n\n if (!prefix) {\n nodes.push(renderField(field, disabled));\n i++;\n } else {\n // 收集相同前缀的连续字段\n const groupFields: FieldSchema[] = [];\n while (i < formFields.length && getFieldGroupPrefix(formFields[i].key) === prefix) {\n groupFields.push(formFields[i]);\n i++;\n }\n nodes.push(\n <div key={prefix} style={{ marginBottom: 16 }}>\n <Divider style={{ fontSize: 13, color: '#666', margin: '8px 0 12px' }}>\n {prefixToLabel(prefix)}\n </Divider>\n <Card\n size=\"small\"\n style={{ background: '#fafafa', borderRadius: 6 }}\n styles={{ body: { paddingBottom: 4 } }}\n >\n {groupFields.map((gf) => renderField(gf, disabled))}\n </Card>\n </div>,\n );\n }\n }\n return nodes;\n };\n\n const copyRawJson = () => {\n const json = rawJsonMode\n ? rawJsonText\n : JSON.stringify(\n disabled\n ? (initialValues ?? {})\n : serializeValues(formFields, form.getFieldsValue(true) as Record<string, unknown>),\n null, 2,\n );\n navigator.clipboard.writeText(json)\n .then(() => void message.success('已复制 JSON'))\n .catch(() => void message.error('复制失败'));\n };\n\n const modalTitle = (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', paddingRight: 32 }}>\n <span>{titleMap[mode]}</span>\n <Space size={8}>\n <Button\n size=\"small\"\n type=\"text\"\n icon={rawJsonMode ? <FormOutlined /> : <CodeOutlined />}\n onClick={rawJsonMode ? switchToForm : switchToRaw}\n >\n {rawJsonMode ? '表单视图' : 'Raw JSON'}\n </Button>\n </Space>\n </div>\n );\n\n return (\n <Modal\n title={modalTitle}\n open={visible}\n onOk={handleOk}\n onCancel={onCancel}\n okText={disabled ? '关闭' : '确认'}\n cancelText=\"取消\"\n cancelButtonProps={disabled ? { style: { display: 'none' } } : {}}\n width={720}\n destroyOnClose\n >\n {/* Form 始终挂载,切换模式时仅用 display 隐藏,防止卸载导致 store 重置 */}\n <div style={{ display: rawJsonMode ? 'none' : undefined }}>\n <Form\n form={form}\n layout=\"vertical\"\n initialValues={{}} // 不依赖initialValues,完全通过useEffect控制\n >\n {renderFieldGroups()}\n </Form>\n </div>\n\n {rawJsonMode && (\n <div>\n <Input.TextArea\n value={rawJsonText}\n onChange={disabled ? undefined : (e) => { setRawJsonText(e.target.value); setRawJsonError(''); }}\n readOnly={disabled}\n rows={20}\n style={{ fontFamily: 'monospace', fontSize: 12, resize: 'vertical' }}\n status={rawJsonError ? 'error' : undefined}\n />\n {rawJsonError && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{rawJsonError}</div>\n )}\n {!disabled && (\n <div style={{ marginTop: 8, textAlign: 'right' }}>\n <Button size=\"small\" icon={<CodeOutlined />} onClick={copyRawJson}>复制 JSON</Button>\n </div>\n )}\n </div>\n )}\n </Modal>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { Button, message, Typography, ConfigProvider } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport zhCN from 'antd/locale/zh_CN';\nimport type { Locale } from 'antd/es/locale';\nimport type { CrudPageSchema, ActionSchema, ActionApiConfig, ApiRequest } from '../types/schema';\nimport DynamicFilter from './DynamicFilter';\nimport DynamicTable from './DynamicTable';\nimport DynamicForm from './DynamicForm';\n\nconst { Title } = Typography;\n\ninterface CrudPageProps {\n schema: CrudPageSchema;\n initialData?: Record<string, unknown>[];\n apiRequest?: ApiRequest;\n /** Ant Design 语言配置,默认为中文 */\n locale?: Locale;\n}\n\n/** 动态替换 URL 模板中的占位符 */\nfunction buildUrl(template: string, record: Record<string, unknown>): string {\n return template.replace(/:(\\w+)/g, (match, fieldName) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/** 处理模板数据,支持 {{fieldName}} 格式的变量替换 */\nfunction processTemplateData(data: Record<string, unknown>, record: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n \n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'string' && value.includes('{{') && value.includes('}}')) {\n // 替换模板变量 {{fieldName}}\n result[key] = value.replace(/\\{\\{(\\w+)\\}\\}/g, (match, fieldName) => {\n const fieldValue = record[fieldName];\n return fieldValue !== undefined ? String(fieldValue) : match;\n });\n } else {\n result[key] = value;\n }\n }\n \n return result;\n}\n\n\n/** 通用请求封装 */\nasync function apiRequest<T = unknown>(\n url: string,\n options?: RequestInit,\n): Promise<T> {\n const res = await fetch(url, {\n headers: { 'Content-Type': 'application/json' },\n ...options,\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json() as Promise<T>;\n}\n\n/** 从接口响应中提取列表和总数(兼容常见结构) */\nfunction extractListResponse(json: unknown): { list: Record<string, unknown>[]; total: number } {\n if (!json || typeof json !== 'object') return { list: [], total: 0 };\n const obj = json as Record<string, unknown>;\n const data = obj.data ?? obj.result ?? obj;\n if (Array.isArray(data)) return { list: data as Record<string, unknown>[], total: data.length };\n if (data && typeof data === 'object') {\n const inner = data as Record<string, unknown>;\n const list = (inner.list ?? inner.records ?? inner.data ?? []) as Record<string, unknown>[];\n const total = Number(inner.total ?? inner.count ?? list.length);\n return { list, total };\n }\n return { list: [], total: 0 };\n}\n\nconst CrudPage: React.FC<CrudPageProps> = ({ \n schema, \n initialData = [], \n apiRequest: customApiRequest,\n locale = zhCN \n}) => {\n const rowKey = schema.rowKey || 'id';\n\n // 使用传入的apiRequest或默认的\n const request = customApiRequest || apiRequest;\n\n // 初始数据引用\n const initialDataRef = useRef<Record<string, unknown>[]>(initialData);\n\n const [data, setData] = useState<Record<string, unknown>[]>([]);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n const [filterParams, setFilterParams] = useState<Record<string, unknown>>({});\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(schema.pagination?.pageSize || 10);\n const [modalState, setModalState] = useState<{\n open: boolean;\n mode: 'create' | 'edit' | 'view';\n record?: Record<string, unknown>;\n }>({ open: false, mode: 'create' });\n\n const [messageApi, contextHolder] = message.useMessage();\n\n // ---------- 初始化数据 ----------\n const initializeData = useCallback(() => {\n if (initialDataRef.current.length > 0) {\n setData(initialDataRef.current);\n setTotal(initialDataRef.current.length);\n }\n }, []);\n\n // ---------- 获取列表 ----------\n const fetchList = useCallback(async (\n params: Record<string, unknown> = filterParams,\n p: number = page,\n ps: number = pageSize,\n ) => {\n if (!schema.api.list) {\n // 没有配置 API,使用初始数据\n initializeData();\n return;\n }\n\n const listApiConfig = schema.api.list;\n\n setLoading(true);\n try {\n // 构建查询参数\n const query = new URLSearchParams({ page: String(p), pageSize: String(ps) });\n Object.entries(params).forEach(([k, v]) => {\n if (v !== undefined && v !== null && v !== '') query.set(k, String(v));\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: listApiConfig.method || 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...listApiConfig.headers\n }\n };\n\n // 如果是 POST 请求,将查询参数放到请求体中\n let url = listApiConfig.url;\n if (listApiConfig.method === 'POST') {\n const queryParams: Record<string, string> = {};\n query.forEach((value, key) => {\n queryParams[key] = value;\n });\n const requestData = {\n ...queryParams,\n ...listApiConfig.data\n };\n options.body = JSON.stringify(requestData);\n } else {\n url = `${url}?${query}`;\n }\n\n const json = await request(url, options);\n const { list, total: tot } = extractListResponse(json);\n setData(list);\n setTotal(tot);\n } catch (error) {\n console.error('Failed to fetch list:', error);\n messageApi.error('获取数据失败,请检查网络连接或联系管理员');\n // 如果有初始数据,显示初始数据\n if (initialDataRef.current.length > 0) {\n initializeData();\n } else {\n setData([]);\n setTotal(0);\n }\n } finally {\n setLoading(false);\n }\n }, [request, schema.api.list, filterParams, page, pageSize, initializeData, messageApi]);\n\n // 初始加载 & 参数变化时重新请求\n useEffect(() => {\n fetchList(filterParams, page, pageSize);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterParams, page, pageSize]);\n\n // ---------- 搜索 ----------\n const handleSearch = useCallback((params: Record<string, unknown>) => {\n setFilterParams(params);\n setPage(1);\n }, []);\n\n // ---------- 翻页 ----------\n const handlePageChange = useCallback((p: number, ps: number) => {\n setPage(p);\n setPageSize(ps);\n }, []);\n\n // ---------- 删除 ----------\n const handleDelete = useCallback(async (record: Record<string, unknown>) => {\n if (!schema.api.delete) {\n messageApi.error('删除功能未配置');\n return;\n }\n\n const deleteApiConfig = schema.api.delete;\n\n try {\n // 构建 URL,动态替换占位符\n let url = deleteApiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: deleteApiConfig.method || 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...deleteApiConfig.headers\n }\n };\n\n // 处理请求体数据\n if (deleteApiConfig.data && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(deleteApiConfig.method || 'DELETE')) {\n const processedData = processTemplateData(deleteApiConfig.data, record);\n options.body = JSON.stringify({\n ...processedData,\n recordId: record[rowKey],\n timestamp: new Date().toISOString()\n });\n }\n\n await request(url, options);\n messageApi.success('删除成功');\n fetchList();\n } catch (error) {\n console.error('Delete failed:', error);\n messageApi.error('删除失败,请稍后重试');\n }\n }, [request, schema.api.delete, fetchList, messageApi, rowKey]);\n\n // ---------- 操作列点击 ----------\n const handleAction = useCallback(async (action: ActionSchema, record: Record<string, unknown>) => {\n if (action.type === 'view') {\n setModalState({ open: true, mode: 'view', record });\n } else if (action.type === 'edit') {\n setModalState({ open: true, mode: 'edit', record });\n } else if (action.type === 'delete') {\n handleDelete(record);\n } else if (action.type === 'custom') {\n // 处理自定义 action 的 API 调用\n let apiConfig: ActionApiConfig | undefined;\n \n // 优先使用 apiKey 引用统一配置,向后兼容 api 直接配置\n if (action.apiKey) {\n const apiDef = schema.api[action.apiKey];\n if (typeof apiDef === 'string') {\n // 简单字符串 URL 配置\n apiConfig = {\n url: apiDef,\n method: 'GET',\n responseType: 'json'\n };\n } else if (apiDef && typeof apiDef === 'object') {\n // 完整的 API 配置对象\n apiConfig = apiDef as ActionApiConfig;\n }\n } else if (action.api) {\n // 向后兼容:使用 action.api 配置\n apiConfig = action.api;\n }\n\n if (!apiConfig) {\n messageApi.error(`${action.label}未配置 API`);\n return;\n }\n\n try {\n // 构建 URL,动态替换占位符\n let url = apiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: apiConfig.method || 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...apiConfig.headers\n }\n };\n\n // 处理请求体数据\n if (apiConfig.data && ['POST', 'PUT', 'PATCH'].includes(apiConfig.method || 'GET')) {\n // 支持模板变量替换\n const processedData = processTemplateData(apiConfig.data, record);\n options.body = JSON.stringify({\n ...processedData,\n recordId: record[rowKey],\n timestamp: new Date().toISOString()\n });\n }\n\n // 调用 API\n const response = await request(url, options);\n \n // 处理特殊响应类型\n if (apiConfig.responseType === 'blob') {\n // 处理文件下载\n const blob = new Blob([response as BlobPart]);\n const downloadUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = `${action.key}.pdf`;\n a.click();\n URL.revokeObjectURL(downloadUrl);\n messageApi.success(`${action.label}成功`);\n } else {\n // 处理 JSON 响应\n const result = response as { success?: boolean; message?: string };\n if (result.success !== false) {\n messageApi.success(`${action.label}成功`);\n // 刷新数据\n await fetchList();\n } else {\n messageApi.error(result.message || `${action.label}失败`);\n }\n }\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n messageApi.error(`${action.label}失败`);\n }\n }\n }, [handleDelete, rowKey, request, messageApi, fetchList]);\n\n // ---------- 新增 / 编辑提交 ----------\n const handleFormOk = useCallback(async (values: Record<string, unknown>) => {\n const isCreate = modalState.mode === 'create';\n\n if (isCreate) {\n if (!schema.api.create) {\n messageApi.error('新增功能未配置');\n return;\n }\n\n const createApiConfig = schema.api.create;\n\n try {\n // 构建请求选项\n const options: RequestInit = {\n method: createApiConfig.method || 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...createApiConfig.headers\n }\n };\n\n // 处理请求体数据\n let requestData = { ...values };\n if (createApiConfig.data) {\n const processedData = processTemplateData(createApiConfig.data, values);\n requestData = {\n ...requestData,\n ...processedData,\n timestamp: new Date().toISOString()\n };\n }\n \n options.body = JSON.stringify(requestData);\n\n await request(createApiConfig.url, options);\n messageApi.success('新增成功');\n setModalState({ open: false, mode: 'create' });\n fetchList();\n } catch (error) {\n console.error('Create failed:', error);\n messageApi.error('新增失败,请稍后重试');\n }\n } else {\n if (!schema.api.update) {\n messageApi.error('编辑功能未配置');\n return;\n }\n\n const updateApiConfig = schema.api.update;\n\n try {\n // 构建 URL,动态替换占位符\n let url = updateApiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = values[fieldName];\n return value !== undefined ? String(value) : match;\n });\n\n // 构建请求选项\n const options: RequestInit = {\n method: updateApiConfig.method || 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n ...updateApiConfig.headers\n }\n };\n\n // 处理请求体数据\n let requestData = { ...values };\n if (updateApiConfig.data) {\n const processedData = processTemplateData(updateApiConfig.data, values);\n requestData = {\n ...requestData,\n ...processedData,\n timestamp: new Date().toISOString()\n };\n }\n \n options.body = JSON.stringify(requestData);\n\n await request(url, options);\n messageApi.success('编辑成功');\n setModalState({ open: false, mode: 'create' });\n fetchList();\n } catch (error) {\n console.error('Update failed:', error);\n messageApi.error('编辑失败,请稍后重试');\n }\n }\n }, [\n request, modalState.mode, schema.api, fetchList, messageApi,\n ]);\n\n return (\n <ConfigProvider locale={locale}>\n <div style={{ padding: 24, background: '#f5f6fa', minHeight: '100vh' }}>\n {contextHolder}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 16 }}>\n <Title level={4} style={{ margin: 0 }}>{schema.title}</Title>\n {schema.api.create && (\n <Button\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={() => setModalState({ open: true, mode: 'create', record: undefined })}\n >\n {schema.createButtonLabel || '新增'}\n </Button>\n )}\n </div>\n\n <DynamicFilter schema={schema} onSearch={handleSearch} onReset={() => handleSearch({})} />\n\n <DynamicTable\n schema={schema}\n data={data}\n loading={loading}\n pagination={{\n current: page,\n pageSize,\n total,\n onChange: handlePageChange,\n }}\n onView={(record) => handleAction({ key: 'view', label: '查看', type: 'view' }, record)}\n onEdit={(record) => handleAction({ key: 'edit', label: '编辑', type: 'edit' }, record)}\n onDelete={(record) => handleDelete(record)}\n onCustomAction={(actionKey, record) => {\n const action = schema.actions?.find(a => a.key === actionKey);\n if (action) handleAction(action, record);\n }}\n />\n\n <DynamicForm\n schema={schema}\n visible={modalState.open}\n mode={modalState.mode}\n initialValues={modalState.record}\n onSubmit={handleFormOk}\n onCancel={() => setModalState({ open: false, mode: 'create' })}\n />\n </div>\n </ConfigProvider>\n );\n};\n\nexport default CrudPage;\n"],"names":["getOptions","_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/types/schema.ts","../src/components/DynamicFilter.tsx","../src/components/DynamicTable.tsx","../src/types/validationRules.ts","../src/components/DynamicForm.tsx","../src/components/CrudPage.tsx"],"sourcesContent":["/** API 请求函数类型 */\nexport interface ApiRequest {\n <T = unknown>(url: string, options?: RequestInit): Promise<T>;\n}\n\n/**\n * 数据类型:描述字段存储的值类型。\n *\n * 嵌套对象不再作为独立类型,而是通过 key 的点分路径(dot-path)表达,\n * 例如 `emergencyContact.name`、`emergencyContact.phone`。\n * 框架会自动将 Form 数据写入/读出对应的嵌套路径。\n */\nexport type DataType =\n | 'string' // 字符串\n | 'number' // 数字\n | 'boolean' // 布尔\n | 'datetime' // 日期时间\n | 'date' // 仅日期\n | 'array' // 基本类型数组(string[] / number[]),配合 multiselect / checkbox\n | 'objectArray'; // 对象数组(object[]),配合 editableTable,需配置 itemFields\n\n/** UI 组件类型:描述字段渲染使用的组件 */\nexport type WidgetType =\n // ── 基础输入 ──────────────────────────────\n | 'input' // 单行输入框(string 默认)\n | 'textarea' // 多行文本域\n | 'inputNumber' // 数字输入框(number 默认)\n // ── 选择类 ────────────────────────────────\n | 'select' // 单选下拉\n | 'multiselect' // 多选下拉(array 默认)\n | 'radio' // 单选按钮组\n | 'checkbox' // 多选复选框\n | 'switch' // 开关(boolean 默认)\n // ── 日期时间 ──────────────────────────────\n | 'datePicker' // 日期/时间选择(date/datetime 默认)\n | 'rangePicker' // 日期范围选择\n | 'timePicker' // 时间点选择\n // ── 对象数组 ──────────────────────────────\n | 'editableTable' // 行内可编辑表格(objectArray 默认)\n // ── JSON 原始编辑 ─────────────────────────\n | 'jsonInput'; // 原始 JSON 文本域(fallback)\n\n/** 兼容旧版 —— 不再推荐直接使用 */\nexport type FieldType = DataType;\n\nexport interface SelectOption {\n label: string;\n value: string | number | boolean;\n color?: string;\n}\n\n/**\n * 筛选项配置 —— 仅放筛选独有配置。\n * options / placeholder / dateFormat 统一在 FieldSchema.config 里配置。\n */\nexport interface FilterConfig {\n /** 覆盖字段级 widget,指定筛选组件类型 */\n widget?: WidgetType;\n /** inputNumber 时可开启数字范围(min/max 两个输入框) */\n range?: boolean;\n defaultValue?: unknown;\n}\n\n/** 表格列配置 */\nexport interface TableColumnConfig {\n width?: number;\n fixed?: 'left' | 'right';\n sortable?: boolean;\n ellipsis?: boolean;\n}\n\n/**\n * 表单字段配置 —— 仅放表单独有配置。\n * options / placeholder / dateFormat / rows 统一在 FieldSchema.config 里配置。\n */\nexport interface FormFieldConfig {\n /** 覆盖字段级 widget,指定表单组件类型 */\n widget?: WidgetType;\n required?: boolean;\n min?: number;\n max?: number;\n step?: number;\n}\n\n/**\n * 字段级共用组件配置。\n * filter 和 form 均可读取,无需在两处重复填写。\n */\nexport interface FieldConfig {\n /** 下拉/多选/单选等组件的选项列表 */\n options?: SelectOption[];\n /** 输入框、选择框等的占位提示文字 */\n placeholder?: string;\n /** 日期/时间组件的显示格式,如 'YYYY-MM-DD' */\n dateFormat?: string;\n /** textarea / jsonInput 的行数 */\n rows?: number;\n}\n\n/**\n * 对象数组(objectArray)中每个 item 的字段定义。\n * 故意保持简单:不支持嵌套 objectArray,不支持 dot-path key。\n */\nexport interface ArrayItemField {\n /** item 对象的属性名,不使用点分路径 */\n key: string;\n label: string;\n /** 不允许嵌套数组 */\n type: Exclude<DataType, 'array' | 'objectArray'>;\n /** 不允许嵌套 editableTable */\n widget?: Exclude<WidgetType, 'editableTable'>;\n config?: Pick<FieldConfig, 'options' | 'placeholder' | 'dateFormat'>;\n required?: boolean;\n /** 列宽(px) */\n width?: number;\n}\n\n/**\n * 字段定义。\n *\n * ### 点分路径(dot-path)规则\n * `key` 支持点分路径表达嵌套结构,例如:\n * - `emergencyContact.name`\n * - `emergencyContact.phone`\n *\n * Form 层会自动将值写入 / 读取对应的嵌套对象属性;\n * 具有相同前缀的字段在表单中会被归为同一视觉分组,并显示分组标题。\n */\nexport interface FieldSchema {\n key: string;\n label: string;\n /** 数据类型(值的类型) */\n type: DataType;\n /**\n * 默认 UI 组件类型;可被 filter / form 级别的 widget 覆盖。\n * 不填时由 defaultWidgetForType 推导。\n */\n widget?: WidgetType;\n filter?: boolean | FilterConfig;\n table?: boolean | TableColumnConfig;\n form?: boolean | FormFieldConfig;\n /**\n * 字段级共用组件配置(options、placeholder、dateFormat 等)。\n * filter 和 form 均从这里读取,不再重复配置。\n */\n config?: FieldConfig;\n render?: string;\n /**\n * 对象数组子字段定义,仅 type='objectArray' 时生效。\n * 配置后 widget 默认推导为 'editableTable'。\n */\n itemFields?: ArrayItemField[];\n /**\n * 校验规则 key 数组,引用 validationRules.ts 中内置或自定义规则的 key。\n * 例如 `rules: ['phone_cn', 'max_len_50']`\n * 注意:required 规则通过 form.required 单独控制,无需在此重复。\n */\n rules?: string[];\n}\n\nexport type ActionType = 'edit' | 'delete' | 'view' | 'custom';\n\nexport interface ActionPermission {\n role?: string[];\n condition?: string;\n}\n\nexport interface ActionApiConfig {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n responseType?: 'json' | 'blob' | 'text';\n}\n\nexport interface ActionSchema {\n key: string;\n label: string;\n type: ActionType;\n icon?: string;\n danger?: boolean;\n color?: string;\n permission?: ActionPermission;\n /**\n * 操作按钮显示条件\n * 支持字段值匹配:{ status: ['active', 'pending'] }\n * 支持嵌套字段:{ 'user.role': ['admin'] }\n */\n condition?: ActionCondition;\n confirm?: {\n title: string;\n content?: string;\n };\n api?: ActionApiConfig; // 保持向后兼容\n apiKey?: string; // 新增:引用统一 API 配置的 key\n}\n\nexport interface PaginationConfig {\n pageSize?: number;\n pageSizeOptions?: number[];\n showTotal?: boolean;\n}\n\nexport interface CrudPageSchema {\n id: string;\n title: string;\n api: {\n list: ActionApiConfig;\n create?: ActionApiConfig;\n update?: ActionApiConfig;\n delete?: ActionApiConfig;\n detail?: ActionApiConfig;\n // 支持自定义 API 配置\n [key: string]: ActionApiConfig | undefined;\n };\n fields: FieldSchema[];\n actions?: ActionSchema[];\n pagination?: PaginationConfig;\n rowKey?: string;\n createButtonLabel?: string;\n}\n\n/* ─── 工具函数 ──────────────────────────────────────── */\n\n/**\n * 根据数据类型推导默认 UI 组件\n *\n * string → input\n * number → inputNumber\n * boolean → switch\n * date → datePicker\n * datetime → datePicker\n * array → multiselect\n * objectArray → editableTable\n */\nexport function defaultWidgetForType(type: DataType): WidgetType {\n switch (type) {\n case 'number': return 'inputNumber';\n case 'boolean': return 'switch';\n case 'date':\n case 'datetime': return 'datePicker';\n case 'array': return 'multiselect';\n case 'objectArray': return 'editableTable';\n default: return 'input'; // string\n }\n}\n\n/** 获取实际生效的组件类型(context.widget > field.widget > type 推导) */\nexport function getEffectiveWidget(\n field: FieldSchema,\n config?: FilterConfig | FormFieldConfig,\n): WidgetType {\n if (config?.widget) return config.widget;\n if (field.widget) return field.widget;\n return defaultWidgetForType(field.type);\n}\n\n/**\n * 从嵌套对象按点分路径取值\n *\n * getNestedValue({ a: { b: 1 } }, 'a.b') → 1\n * getNestedValue({ x: [1, 2] }, 'x') → [1, 2]\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((acc: unknown, key) => {\n if (acc != null && typeof acc === 'object' && !Array.isArray(acc)) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * 从点分路径 key 中提取分组前缀(第一个 segment)。\n * 无前缀的顶层字段返回 null。\n *\n * 'emergencyContact.name' → 'emergencyContact'\n * 'name' → null\n */\nexport function getFieldGroupPrefix(key: string): string | null {\n const idx = key.indexOf('.');\n return idx >= 0 ? key.slice(0, idx) : null;\n}\n\n/**\n * 操作按钮显示条件配置\n * 支持两种格式:\n * 1. 字段值匹配:{ fieldName: [value1, value2] } - 当字段值在数组中时显示\n * 2. 自定义表达式:{ expression: \"record.status === 'active'\" } - 使用表达式判断\n */\nexport interface ActionCondition {\n [fieldName: string]: (string | number | boolean)[];\n}\n\n/**\n * 检查操作按钮是否应该显示\n *\n * @param condition - 条件配置\n * @param record - 当前行数据\n * @returns 是否应该显示该操作\n *\n * @example\n * // 字段值匹配\n * shouldShowAction({ status: ['active', 'pending'] }, { status: 'active' }) → true\n * shouldShowAction({ status: ['active', 'pending'] }, { status: 'deleted' }) → false\n *\n * // 支持嵌套字段(点分路径)\n * shouldShowAction({ 'user.role': ['admin'] }, { user: { role: 'admin' } }) → true\n */\nexport function shouldShowAction(\n condition: ActionCondition | undefined,\n record: Record<string, unknown>,\n): boolean {\n if (!condition || Object.keys(condition).length === 0) {\n return true; // 没有条件时默认显示\n }\n\n for (const [fieldPath, allowedValues] of Object.entries(condition)) {\n // 支持点分路径获取嵌套值\n const actualValue = getNestedValue(record, fieldPath);\n\n // 检查值是否在允许的值列表中\n if (!allowedValues.includes(actualValue as string | number | boolean)) {\n return false;\n }\n }\n\n return true;\n}","import { useState } from 'react';\nimport { Form, Input, InputNumber, Select, Switch, DatePicker, Button, Row, Col, Space, Radio } from 'antd';\nimport { SearchOutlined, ReloadOutlined } from '@ant-design/icons';\nimport type { CrudPageSchema, FieldSchema, FilterConfig, SelectOption } from '../types/schema';\nimport { getEffectiveWidget } from '../types/schema';\n\nconst { RangePicker } = DatePicker;\n\ninterface DynamicFilterProps {\n schema: CrudPageSchema;\n onSearch: (values: Record<string, unknown>) => void;\n onReset: () => void;\n}\n\n/** 解析 FilterConfig */\nfunction getFilterConfig(field: FieldSchema): FilterConfig | undefined {\n if (!field.filter || typeof field.filter === 'boolean') return undefined;\n return field.filter as FilterConfig;\n}\n\n/** 获取选项列表(从 field.config 读取) */\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 渲染单个筛选组件 */\nfunction renderFilterInput(field: FieldSchema, cfg?: FilterConfig): React.ReactNode {\n const widget = getEffectiveWidget(field, cfg);\n const placeholder = field.config?.placeholder;\n const dateFormat = field.config?.dateFormat;\n const options = getOptions(field);\n const style = { width: '100%' };\n\n switch (widget) {\n case 'input':\n return <Input placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'textarea':\n return <Input.TextArea placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'inputNumber': {\n if (cfg?.range) {\n return (\n <Space>\n <Form.Item name={`${field.key}_min`} noStyle>\n <InputNumber placeholder=\"最小值\" />\n </Form.Item>\n <span>~</span>\n <Form.Item name={`${field.key}_max`} noStyle>\n <InputNumber placeholder=\"最大值\" />\n </Form.Item>\n </Space>\n );\n }\n return <InputNumber placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n\n case 'select':\n return (\n <Select allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'multiselect':\n return (\n <Select mode=\"multiple\" allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'radio':\n return (\n <Radio.Group style={style}>\n {options.map((o) => (\n <Radio key={String(o.value)} value={o.value}>{o.label}</Radio>\n ))}\n </Radio.Group>\n );\n\n case 'switch':\n return <Switch />;\n\n case 'datePicker': {\n const showTime = field.type === 'datetime';\n return <DatePicker showTime={showTime} format={dateFormat} style={style} />;\n }\n\n case 'rangePicker': {\n const showTime = field.type === 'datetime';\n return <RangePicker showTime={showTime} format={dateFormat} style={style} />;\n }\n\n case 'timePicker':\n return <DatePicker picker=\"time\" format={dateFormat ?? 'HH:mm:ss'} style={style} />;\n\n case 'jsonInput':\n return <Input placeholder={placeholder ?? `搜索 ${field.label}`} style={style} />;\n\n default:\n return <Input placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n}\n\nexport default function DynamicFilter({ schema, onSearch, onReset }: DynamicFilterProps) {\n const [form] = Form.useForm();\n const [expanded, setExpanded] = useState(false);\n\n const filterFields = schema.fields.filter(\n (f) => f.filter !== false && f.filter !== undefined && f.type !== 'objectArray',\n );\n\n const handleFinish = (values: Record<string, unknown>) => {\n onSearch(values);\n };\n\n const handleReset = () => {\n form.resetFields();\n onReset();\n };\n\n const colSpan = { xs: 24, sm: 12, md: 12, lg: 8, xl: 6, xxl: 6 };\n\n const visibleFields = expanded ? filterFields : filterFields.slice(0, 4);\n\n return (\n <Form form={form} onFinish={handleFinish} layout=\"vertical\">\n <Row gutter={[16, 0]}>\n {visibleFields.map((field) => {\n const cfg = getFilterConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n\n // inputNumber 数字范围:name 不放在 Form.Item 上,由内部子 Form.Item 承载\n const isNumberRange = widget === 'inputNumber' && cfg?.range;\n\n return (\n <Col key={field.key} {...colSpan}>\n <Form.Item\n label={field.label}\n name={isNumberRange ? undefined : field.key}\n valuePropName={widget === 'switch' ? 'checked' : 'value'}\n >\n {renderFilterInput(field, cfg)}\n </Form.Item>\n </Col>\n );\n })}\n\n {/* 操作按钮 */}\n <Col {...colSpan}>\n <Form.Item label=\" \">\n <Space>\n <Button type=\"primary\" htmlType=\"submit\" icon={<SearchOutlined />}>\n 搜索\n </Button>\n <Button onClick={handleReset} icon={<ReloadOutlined />}>\n 重置\n </Button>\n {filterFields.length > 4 && (\n <Button type=\"link\" onClick={() => setExpanded(!expanded)}>\n {expanded ? '收起' : '展开'}\n </Button>\n )}\n </Space>\n </Form.Item>\n </Col>\n </Row>\n </Form>\n );\n}\n","import { Table, Tag, Switch, Space, Button, Popconfirm, Tooltip, message, Dropdown } from 'antd';\nimport { EyeOutlined, EditOutlined, DeleteOutlined, CopyOutlined, MoreOutlined } from '@ant-design/icons';\nimport type { ColumnsType } from 'antd/es/table';\nimport dayjs from 'dayjs';\nimport type { CrudPageSchema, FieldSchema, TableColumnConfig, SelectOption } from '../types/schema';\nimport { getEffectiveWidget, getNestedValue, shouldShowAction } from '../types/schema';\n\ninterface DynamicTableProps {\n schema: CrudPageSchema;\n data: Record<string, unknown>[];\n loading: boolean;\n pagination: {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number, pageSize: number) => void;\n };\n onView: (record: Record<string, unknown>) => void;\n onEdit: (record: Record<string, unknown>) => void;\n onDelete: (record: Record<string, unknown>) => void;\n onCustomAction?: (actionKey: string, record: Record<string, unknown>) => void;\n}\n\nfunction getTableConfig(field: FieldSchema): TableColumnConfig | undefined {\n if (!field.table || typeof field.table === 'boolean') return undefined;\n return field.table as TableColumnConfig;\n}\n\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 格式化单元格显示值 */\nfunction renderCell(field: FieldSchema, value: unknown): React.ReactNode {\n if (value == null || value === '') return <span style={{ color: '#ccc' }}>-</span>;\n\n const widget = getEffectiveWidget(field);\n\n // ── 布尔类 ──────────────────────────────────────────────\n if (field.type === 'boolean' || widget === 'switch') {\n return <Switch checked={Boolean(value)} disabled size=\"small\" />;\n }\n\n // ── 下拉/单选(有 options) ──────────────────────────────\n if (widget === 'select' || widget === 'radio') {\n const options = getOptions(field);\n const opt = options.find((o) => o.value === value);\n if (opt) {\n return opt.color ? <Tag color={opt.color}>{opt.label}</Tag> : <span>{opt.label}</span>;\n }\n return <span>{String(value)}</span>;\n }\n\n // ── 多选(multiselect / checkbox,值为数组) ─────────────\n if (widget === 'multiselect' || widget === 'checkbox') {\n const arr = Array.isArray(value) ? value : [value];\n const options = getOptions(field);\n return (\n <Space size={4} wrap>\n {arr.map((v) => {\n const opt = options.find((o) => o.value === v);\n return opt ? (\n <Tag key={String(v)} color={opt.color}>{opt.label}</Tag>\n ) : (\n <Tag key={String(v)}>{String(v)}</Tag>\n );\n })}\n </Space>\n );\n }\n\n // ── 日期/时间 ────────────────────────────────────────────\n if (widget === 'datePicker') {\n const fmt = field.config?.dateFormat ?? (field.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n const d = dayjs(value as string);\n return d.isValid() ? <span>{d.format(fmt)}</span> : <span>{String(value)}</span>;\n }\n\n if (widget === 'rangePicker') {\n if (Array.isArray(value)) {\n const fmt = field.config?.dateFormat ?? 'YYYY-MM-DD';\n return <span>{value.map((v) => (v ? dayjs(v as string).format(fmt) : '-')).join(' ~ ')}</span>;\n }\n }\n\n if (widget === 'timePicker') {\n const fmt = field.config?.dateFormat ?? 'HH:mm:ss';\n const d = dayjs(value as string);\n return d.isValid() ? <span>{d.format(fmt)}</span> : <span>{String(value)}</span>;\n }\n\n // ── 普通数组(array 基本类型) ───────────────────────────\n if (field.type === 'array' && Array.isArray(value)) {\n return (\n <Space size={4} wrap>\n {(value as unknown[]).map((v, i) => (\n <Tag key={i}>{String(v)}</Tag>\n ))}\n </Space>\n );\n }\n\n // ── objectArray / editableTable:显示 N 条记录 ──────────\n if (field.type === 'objectArray' || widget === 'editableTable') {\n const arr = Array.isArray(value) ? value : [];\n return <span style={{ color: '#888' }}>{arr.length} 条记录</span>;\n }\n\n // ── jsonInput(对象序列化为字符串) ──────────────────────\n if (widget === 'jsonInput') {\n if (typeof value === 'object') {\n const str = JSON.stringify(value);\n return (\n <Tooltip title={<pre style={{ margin: 0, fontSize: 11 }}>{JSON.stringify(value, null, 2)}</pre>}>\n <span style={{ cursor: 'help', fontFamily: 'monospace', fontSize: 12 }}>\n {str.length > 40 ? str.slice(0, 40) + '…' : str}\n </span>\n </Tooltip>\n );\n }\n return <span>{String(value)}</span>;\n }\n\n return <span>{String(value)}</span>;\n}\n\nexport default function DynamicTable({\n schema,\n data,\n loading,\n pagination,\n onView,\n onEdit,\n onDelete,\n onCustomAction,\n}: DynamicTableProps) {\n const tableFields = schema.fields.filter((f) => f.table !== false && f.table !== undefined);\n\n const columns: ColumnsType<Record<string, unknown>> = tableFields.map((field) => {\n const cfg = getTableConfig(field);\n const isNested = field.key.includes('.');\n\n return {\n title: field.label,\n // 点分路径使用数组形式,Ant Design Table 支持嵌套取值\n dataIndex: isNested ? field.key.split('.') : field.key,\n key: field.key,\n width: cfg?.width,\n fixed: cfg?.fixed,\n ellipsis: cfg?.ellipsis,\n sorter: cfg?.sortable,\n render: (_value: unknown, record: Record<string, unknown>) => {\n // 统一使用 getNestedValue 以支持多层点分路径\n const actualValue = isNested ? getNestedValue(record, field.key) : _value;\n return renderCell(field, actualValue);\n },\n };\n });\n\n const copyJson = (record: Record<string, unknown>) => {\n navigator.clipboard.writeText(JSON.stringify(record, null, 2))\n .then(() => void message.success('已复制 JSON'))\n .catch(() => void message.error('复制失败'));\n };\n\n // 操作列(有 schema.actions 或始终存在,以便展示复制按钮)\n columns.push({\n title: '操作',\n key: '__actions',\n fixed: 'right',\n width: 200, // 固定宽度,因为现在有下拉菜单\n render: (_: unknown, record: Record<string, unknown>) => {\n const actions = schema.actions ?? [];\n \n // 分离基础操作和自定义操作,并根据 condition 过滤\n const basicActions = actions.filter(action => {\n // 检查是否是基础操作类型\n const isBasicAction = action.type === 'view' || action.type === 'edit' || action.type === 'delete';\n if (!isBasicAction) return false;\n // 检查 condition 条件\n return shouldShowAction(action.condition as Record<string, (string | number | boolean)[]> | undefined, record);\n });\n \n const customActions = actions.filter(action => {\n if (action.type !== 'custom') return false;\n // 检查 condition 条件\n return shouldShowAction(action.condition as Record<string, (string | number | boolean)[]> | undefined, record);\n });\n\n // 构建下拉菜单项(仅包含自定义操作)\n const dropdownItems = customActions.map(action => ({\n key: action.key,\n label: action.label,\n onClick: () => onCustomAction?.(action.key, record),\n danger: action.danger,\n }));\n\n return (\n <Space size={4}>\n {basicActions.map((action) => {\n if (action.type === 'view') {\n return (\n <Tooltip key={action.key} title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n icon={<EyeOutlined />}\n onClick={() => onView(record)}\n />\n </Tooltip>\n );\n }\n if (action.type === 'edit') {\n return (\n <Tooltip key={action.key} title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n icon={<EditOutlined />}\n onClick={() => onEdit(record)}\n />\n </Tooltip>\n );\n }\n if (action.type === 'delete') {\n return (\n <Popconfirm\n key={action.key}\n title={action.confirm?.title ?? '确定删除?'}\n description={action.confirm?.content}\n onConfirm={() => onDelete(record)}\n okText=\"确定\"\n cancelText=\"取消\"\n okButtonProps={{ danger: true }}\n >\n <Tooltip title={action.label}>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n icon={<DeleteOutlined />}\n />\n </Tooltip>\n </Popconfirm>\n );\n }\n return null;\n })}\n \n {/* 复制JSON功能 - 独立按钮 */}\n <Tooltip title=\"复制 JSON\">\n <Button\n type=\"link\"\n size=\"small\"\n icon={<CopyOutlined />}\n onClick={() => copyJson(record)}\n />\n </Tooltip>\n \n {/* 自定义操作下拉菜单 - 仅在有自定义操作时显示,放在最后 */}\n {customActions.length > 0 && (\n <Dropdown\n menu={{ items: dropdownItems }}\n trigger={['click']}\n placement=\"bottomRight\"\n >\n <Tooltip title=\"其它操作\">\n <Button\n type=\"link\"\n size=\"small\"\n icon={<MoreOutlined />}\n />\n </Tooltip>\n </Dropdown>\n )}\n </Space>\n );\n },\n });\n\n return (\n <Table\n rowKey={schema.rowKey ?? 'id'}\n columns={columns}\n dataSource={data}\n loading={loading}\n scroll={{ x: 'max-content' }}\n pagination={{\n current: pagination.current,\n pageSize: pagination.pageSize,\n total: pagination.total,\n showSizeChanger: true,\n showTotal: schema.pagination?.showTotal\n ? (total) => `共 ${total} 条`\n : undefined,\n onChange: pagination.onChange,\n pageSizeOptions: schema.pagination?.pageSizeOptions ?? [10, 20, 50],\n }}\n />\n );\n}\n","import type { Rule } from 'antd/es/form';\n\n/** 校验规则配置(内置 + 自定义均使用此结构) */\nexport interface ValidationRuleConfig {\n key: string;\n label: string;\n description?: string;\n message: string;\n /** 正则字符串(将转为 RegExp) */\n pattern?: string;\n /** 最小值(number)或最小长度(string) */\n min?: number;\n /** 最大值(number)或最大长度(string) */\n max?: number;\n /** antd 内置类型校验 */\n type?: 'string' | 'number' | 'email' | 'url' | 'integer';\n /** 是否不允许纯空白字符 */\n whitespace?: boolean;\n /** 是否内置(内置规则不可删除) */\n builtin?: boolean;\n}\n\n/** 内置规则集 */\nexport const BUILTIN_RULES: ValidationRuleConfig[] = [\n {\n key: 'phone_cn',\n label: '手机号(中国大陆)',\n description: '1 开头的 11 位数字',\n message: '请输入正确的手机号',\n pattern: '^1[3-9]\\\\d{9}$',\n builtin: true,\n },\n {\n key: 'email',\n label: '邮箱地址',\n description: '标准电子邮箱格式',\n message: '请输入正确的邮箱地址',\n type: 'email',\n builtin: true,\n },\n {\n key: 'url',\n label: 'URL 链接',\n description: '以 http/https 开头的合法 URL',\n message: '请输入正确的 URL 地址',\n type: 'url',\n builtin: true,\n },\n {\n key: 'id_card_cn',\n label: '居民身份证(中国)',\n description: '18 位二代身份证号码',\n message: '请输入正确的身份证号',\n pattern: '^[1-9]\\\\d{5}(18|19|20)\\\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\\\d|3[01])\\\\d{3}[\\\\dXx]$',\n builtin: true,\n },\n {\n key: 'positive_integer',\n label: '正整数',\n description: '大于 0 的整数',\n message: '请输入正整数',\n pattern: '^[1-9]\\\\d*$',\n builtin: true,\n },\n {\n key: 'non_negative_integer',\n label: '非负整数',\n description: '0 或大于 0 的整数',\n message: '请输入非负整数',\n pattern: '^\\\\d+$',\n builtin: true,\n },\n {\n key: 'chinese',\n label: '纯中文',\n description: '只能包含中文字符',\n message: '只能输入中文字符',\n pattern: '^[\\\\u4e00-\\\\u9fa5]+$',\n builtin: true,\n },\n {\n key: 'alphanumeric',\n label: '字母和数字',\n description: '只能包含英文字母和数字',\n message: '只能输入字母和数字',\n pattern: '^[a-zA-Z0-9]+$',\n builtin: true,\n },\n {\n key: 'no_special_chars',\n label: '无特殊字符',\n description: '只允许中文、字母、数字、下划线、短横线',\n message: '不能包含特殊字符',\n pattern: '^[a-zA-Z0-9\\\\u4e00-\\\\u9fa5_-]+$',\n builtin: true,\n },\n {\n key: 'ip_address',\n label: 'IPv4 地址',\n description: '标准 IPv4 地址格式',\n message: '请输入正确的 IP 地址',\n pattern: '^((25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)$',\n builtin: true,\n },\n {\n key: 'date_format',\n label: '日期格式 (YYYY-MM-DD)',\n description: '格式如 2024-01-01',\n message: '请输入正确的日期格式,如 2024-01-01',\n pattern: '^\\\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\\\d|3[01])$',\n builtin: true,\n },\n {\n key: 'no_whitespace',\n label: '不含空格',\n description: '不允许包含任何空白字符',\n message: '不能包含空格',\n pattern: '^\\\\S+$',\n builtin: true,\n },\n {\n key: 'min_len_2',\n label: '最少 2 个字符',\n description: '字符串长度不少于 2',\n message: '长度不能少于 2 个字符',\n min: 2,\n builtin: true,\n },\n {\n key: 'max_len_50',\n label: '最多 50 个字符',\n description: '字符串长度不超过 50',\n message: '长度不能超过 50 个字符',\n max: 50,\n builtin: true,\n },\n {\n key: 'max_len_200',\n label: '最多 200 个字符',\n description: '字符串长度不超过 200',\n message: '长度不能超过 200 个字符',\n max: 200,\n builtin: true,\n },\n {\n key: 'bank_card',\n label: '银行卡号',\n description: '16-19 位纯数字',\n message: '请输入正确的银行卡号',\n pattern: '^\\\\d{16,19}$',\n builtin: true,\n },\n {\n key: 'plate_cn',\n label: '车牌号(中国)',\n description: '含新能源车牌在内的中国大陆车牌',\n message: '请输入正确的车牌号',\n pattern: '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁夏][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$',\n builtin: true,\n },\n {\n key: 'postal_code_cn',\n label: '邮政编码(中国)',\n description: '6 位数字邮编',\n message: '请输入正确的邮政编码',\n pattern: '^\\\\d{6}$',\n builtin: true,\n },\n];\n\nconst CUSTOM_RULES_STORAGE_KEY = 'dynamic_crud_custom_rules';\n\nexport function loadCustomRules(): ValidationRuleConfig[] {\n try {\n const raw = localStorage.getItem(CUSTOM_RULES_STORAGE_KEY);\n return raw ? (JSON.parse(raw) as ValidationRuleConfig[]) : [];\n } catch {\n return [];\n }\n}\n\nexport function saveCustomRules(rules: ValidationRuleConfig[]): void {\n try {\n localStorage.setItem(CUSTOM_RULES_STORAGE_KEY, JSON.stringify(rules));\n } catch { /* ignore */ }\n}\n\n/** 获取所有规则(内置 + 自定义) */\nexport function getAllRules(): ValidationRuleConfig[] {\n return [...BUILTIN_RULES, ...loadCustomRules()];\n}\n\n/** 根据 key 查找规则 */\nexport function getRuleByKey(key: string): ValidationRuleConfig | undefined {\n return getAllRules().find(r => r.key === key);\n}\n\n/** 将规则配置转为 Ant Design Form Rule */\nexport function ruleConfigToAntdRule(config: ValidationRuleConfig): Rule {\n const rule: Record<string, unknown> = { message: config.message };\n if (config.pattern) {\n rule.pattern = new RegExp(config.pattern);\n }\n if (config.type) {\n rule.type = config.type;\n }\n if (config.min !== undefined) {\n rule.min = config.min;\n }\n if (config.max !== undefined) {\n rule.max = config.max;\n }\n if (config.whitespace !== undefined) {\n rule.whitespace = config.whitespace;\n }\n return rule as Rule;\n}\n\n/** 将一组规则 key 转为 Ant Design Form Rules 数组 */\nexport function keysToAntdRules(keys: string[]): Rule[] {\n return keys\n .map(k => getRuleByKey(k))\n .filter((c): c is ValidationRuleConfig => c !== undefined)\n .map(ruleConfigToAntdRule);\n}","import { useEffect, useState } from 'react';\nimport {\n Modal, Form, Input, InputNumber, Select, Switch,\n DatePicker, Radio, Checkbox, Space, Card, Divider,\n Button, Table, message,\n} from 'antd';\nimport { PlusOutlined, DeleteOutlined, CodeOutlined, FormOutlined } from '@ant-design/icons';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\ndayjs.extend(customParseFormat);\nimport type { CrudPageSchema, FieldSchema, FormFieldConfig, SelectOption, ArrayItemField } from '../types/schema';\nimport { getEffectiveWidget, getFieldGroupPrefix, getNestedValue } from '../types/schema';\nimport { keysToAntdRules } from '../types/validationRules';\n\ntype FormMode = 'create' | 'edit' | 'view';\n\ninterface DynamicFormProps {\n schema: CrudPageSchema;\n mode: FormMode;\n visible: boolean;\n initialValues?: Record<string, unknown>;\n onSubmit: (values: Record<string, unknown>) => void;\n onCancel: () => void;\n}\n\nfunction getFormConfig(field: FieldSchema): FormFieldConfig | undefined {\n if (!field.form || typeof field.form === 'boolean') return undefined;\n return field.form as FormFieldConfig;\n}\n\nfunction getOptions(field: FieldSchema): SelectOption[] {\n return field.config?.options ?? [];\n}\n\n/** 将 camelCase 前缀转为可读标签(仅首字母大写) */\nfunction prefixToLabel(prefix: string): string {\n return prefix.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase()).trim();\n}\n\n/** 设置嵌套对象指定路径的值(修改原对象) */\nfunction setNestedValue(\n obj: Record<string, unknown>,\n path: string[],\n value: unknown,\n): void {\n let cur = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const k = path[i];\n if (cur[k] == null || typeof cur[k] !== 'object' || Array.isArray(cur[k])) {\n cur[k] = {};\n }\n cur = cur[k] as Record<string, unknown>;\n }\n cur[path[path.length - 1]] = value;\n}\n\n/** 行内可编辑表格 cell 组件 */\nfunction EditableCellInput({\n itemField,\n disabled,\n value,\n onChange,\n}: {\n itemField: ArrayItemField;\n disabled: boolean;\n value?: unknown; // Form.Item 注入\n onChange?: (val: unknown) => void; // Form.Item 注入\n}) {\n const ph = itemField.config?.placeholder ?? `请输入${itemField.label}`;\n switch (itemField.type) {\n case 'number':\n return (\n <InputNumber\n disabled={disabled}\n placeholder={ph}\n value={value as number | null | undefined}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n />\n );\n case 'boolean':\n // Form.Item 默认 valuePropName=\"value\",这里手动映射到 checked\n return (\n <Switch\n disabled={disabled}\n checked={value as boolean}\n onChange={(checked) => onChange?.(checked)}\n />\n );\n case 'date':\n case 'datetime': {\n const fmt = itemField.config?.dateFormat ?? (itemField.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n // value 可能是字符串(来自 initialValues)或 dayjs 对象(用户选择后)\n const pickerValue = value != null\n ? (dayjs.isDayjs(value) ? value : dayjs(value as string))\n : null;\n return (\n <DatePicker\n disabled={disabled}\n format={fmt}\n value={pickerValue}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n />\n );\n }\n case 'string': {\n if (itemField.widget === 'select' && itemField.config?.options?.length) {\n return (\n <Select\n disabled={disabled}\n allowClear\n placeholder={ph}\n value={value as string | undefined}\n onChange={(v) => onChange?.(v)}\n style={{ width: '100%' }}\n >\n {itemField.config.options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>{o.label}</Select.Option>\n ))}\n </Select>\n );\n }\n return (\n <Input\n disabled={disabled}\n placeholder={ph}\n value={value as string | undefined}\n onChange={(e) => onChange?.(e.target.value)}\n />\n );\n }\n default:\n return (\n <Input\n disabled={disabled}\n placeholder={ph}\n value={value as string | undefined}\n onChange={(e) => onChange?.(e.target.value)}\n />\n );\n }\n}\n\nfunction renderFormInput(\n field: FieldSchema,\n cfg: FormFieldConfig | undefined,\n disabled: boolean,\n): React.ReactNode {\n const widget = getEffectiveWidget(field, cfg);\n const options = getOptions(field);\n const placeholder = field.config?.placeholder;\n const rows = field.config?.rows;\n const style = { width: '100%' };\n\n switch (widget) {\n case 'input':\n return <Input disabled={disabled} placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n\n case 'textarea':\n return (\n <Input.TextArea\n disabled={disabled}\n rows={rows ?? 4}\n placeholder={placeholder ?? `请输入 ${field.label}`}\n style={style}\n />\n );\n\n case 'jsonInput':\n return (\n <Input.TextArea\n disabled={disabled}\n rows={rows ?? 5}\n placeholder={placeholder ?? '请输入 JSON'}\n style={{ ...style, fontFamily: 'monospace', fontSize: 12 }}\n />\n );\n\n case 'inputNumber':\n return (\n <InputNumber\n disabled={disabled}\n min={cfg?.min}\n max={cfg?.max}\n step={cfg?.step ?? 1}\n placeholder={placeholder ?? `请输入 ${field.label}`}\n style={style}\n />\n );\n\n case 'select':\n return (\n <Select disabled={disabled} allowClear placeholder={placeholder ?? `请选择 ${field.label}`} style={style}>\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'multiselect':\n return (\n <Select\n mode=\"multiple\"\n disabled={disabled}\n allowClear\n placeholder={placeholder ?? `请选择 ${field.label}`}\n style={style}\n >\n {options.map((o) => (\n <Select.Option key={String(o.value)} value={o.value}>\n {o.label}\n </Select.Option>\n ))}\n </Select>\n );\n\n case 'radio':\n return (\n <Radio.Group disabled={disabled}>\n {options.map((o) => (\n <Radio key={String(o.value)} value={o.value}>{o.label}</Radio>\n ))}\n </Radio.Group>\n );\n\n case 'checkbox':\n return (\n <Checkbox.Group disabled={disabled}>\n <Space wrap>\n {options.map((o) => (\n <Checkbox key={String(o.value)} value={o.value}>{o.label}</Checkbox>\n ))}\n </Space>\n </Checkbox.Group>\n );\n\n case 'switch':\n return <Switch disabled={disabled} />;\n\n case 'datePicker': {\n const showTime = field.type === 'datetime';\n const format = field.config?.dateFormat ?? (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n return <DatePicker disabled={disabled} showTime={showTime} format={format} style={style} />;\n }\n\n case 'rangePicker': {\n const showTime = field.type === 'datetime';\n const format = field.config?.dateFormat ?? (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');\n return <DatePicker.RangePicker disabled={disabled} showTime={showTime} format={format} style={style} />;\n }\n\n case 'timePicker':\n return (\n <DatePicker\n picker=\"time\"\n disabled={disabled}\n format={field.config?.dateFormat ?? 'HH:mm:ss'}\n style={style}\n />\n );\n\n case 'editableTable': {\n const itemFields = field.itemFields ?? [];\n return (\n <Form.List name={field.key}>\n {(listFields, { add, remove }) => {\n const columns = [\n ...itemFields.map((itemField) => ({\n title: itemField.label,\n dataIndex: itemField.key,\n width: itemField.width,\n render: (_: unknown, record: { name: number }) => (\n <Form.Item\n name={[record.name, itemField.key]}\n rules={itemField.required ? [{ required: true, message: `${itemField.label}必填` }] : undefined}\n style={{ margin: 0 }}\n >\n <EditableCellInput itemField={itemField} disabled={disabled} />\n </Form.Item>\n ),\n })),\n ...(!disabled\n ? [{\n title: '',\n width: 50,\n render: (_: unknown, record: { name: number }) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={() => remove(record.name)}\n />\n ),\n }]\n : []),\n ];\n return (\n <div>\n <Table\n size=\"small\"\n dataSource={listFields.map((f) => ({ ...f, _key: f.key }))}\n rowKey=\"_key\"\n columns={columns}\n pagination={false}\n style={{ marginBottom: 8 }}\n />\n {!disabled && (\n <Button\n type=\"dashed\"\n icon={<PlusOutlined />}\n onClick={() => add({})}\n block\n >\n 添加一行\n </Button>\n )}\n </div>\n );\n }}\n </Form.List>\n );\n }\n\n default:\n return <Input disabled={disabled} placeholder={placeholder ?? `请输入 ${field.label}`} style={style} />;\n }\n}\n\n/**\n * 将接口数据转为 Form 使用的初始值。\n *\n * - 顶层字段:直接展开(与原来相同)\n * - dot-path 字段(如 `emergencyContact.name`):\n * API 返回的数据已是嵌套结构,form.setFieldsValue 可直接识别\n * - 日期字段:将字符串转为 dayjs 对象\n */\nfunction normalizeInitialValues(\n fields: FieldSchema[],\n values?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!values) return {};\n // 深拷贝,避免修改原对象\n const result: Record<string, unknown> = JSON.parse(JSON.stringify(values)) as Record<string, unknown>;\n\n fields.forEach((field) => {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n if (widget !== 'datePicker' && widget !== 'rangePicker' && widget !== 'timePicker') return;\n\n const path = field.key.split('.');\n const val = path.length > 1 ? getNestedValue(result, field.key) : result[field.key];\n if (val == null) return;\n\n if (widget === 'rangePicker' && Array.isArray(val)) {\n setNestedValue(result, path, (val as (string | dayjs.Dayjs)[]).map((v) => {\n if (!v) return null;\n return dayjs.isDayjs(v) ? v : dayjs(v as string);\n }));\n } else if (val) {\n // 检查是否已经是 dayjs 对象,避免重复转换\n if (dayjs.isDayjs(val)) {\n setNestedValue(result, path, val);\n } else {\n // timePicker 存储的是纯时间字符串(如 \"09:30:00\"),需要带 format 解析\n const fmt = widget === 'timePicker'\n ? (field.config?.dateFormat ?? 'HH:mm:ss')\n : undefined;\n setNestedValue(result, path, fmt ? dayjs(val as string, fmt) : dayjs(val as string));\n }\n }\n });\n\n return result;\n}\n\n/** 将 Form 值序列化为提交数据(dayjs → ISO string) */\nfunction serializeValues(\n fields: FieldSchema[],\n values: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = JSON.parse(JSON.stringify(values)) as Record<string, unknown>;\n\n fields.forEach((field) => {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n if (widget !== 'datePicker' && widget !== 'rangePicker' && widget !== 'timePicker') return;\n\n const path = field.key.split('.');\n // 必须从原始 values 读(dayjs 对象仍存在),\n // 不能从 result 读——JSON.parse(JSON.stringify) 已把 dayjs 序列化为 ISO 字符串,\n // 导致 dayjs.isDayjs() 全部失败(rangePicker 变成 [null, null])。\n const val = path.length > 1 ? getNestedValue(values, field.key) : values[field.key];\n if (val == null) return;\n\n if (widget === 'timePicker' && dayjs.isDayjs(val)) {\n const fmt = field.config?.dateFormat ?? 'HH:mm:ss';\n setNestedValue(result, path, (val as ReturnType<typeof dayjs>).format(fmt));\n } else if (widget === 'datePicker' && dayjs.isDayjs(val)) {\n setNestedValue(result, path, (val as ReturnType<typeof dayjs>).toISOString());\n } else if (widget === 'rangePicker' && Array.isArray(val)) {\n setNestedValue(\n result,\n path,\n (val as ReturnType<typeof dayjs>[]).map((v) => (v && dayjs.isDayjs(v) ? v.toISOString() : null)),\n );\n }\n });\n\n return result;\n}\n\n/** 渲染单个 Form.Item */\nfunction renderField(field: FieldSchema, disabled: boolean): React.ReactNode {\n const cfg = getFormConfig(field);\n const widget = getEffectiveWidget(field, cfg);\n const required = !disabled && (cfg?.required ?? false);\n\n // editableTable 使用 Form.List,不能再套 Form.Item name\n if (widget === 'editableTable') {\n return (\n <Form.Item key={field.key} label={field.label} style={{ marginBottom: 14 }}>\n {renderFormInput(field, cfg, disabled)}\n </Form.Item>\n );\n }\n\n const namePath = field.key.includes('.') ? field.key.split('.') : field.key;\n const extraRules = field.rules && !disabled ? keysToAntdRules(field.rules) : [];\n const validationRules = [\n ...(required ? [{ required: true, message: `请输入 ${field.label}` }] : []),\n ...extraRules,\n ];\n\n return (\n <Form.Item\n key={field.key}\n label={field.label}\n name={namePath}\n valuePropName={widget === 'switch' ? 'checked' : 'value'}\n rules={validationRules}\n style={{ marginBottom: 14 }}\n >\n {renderFormInput(field, cfg, disabled)}\n </Form.Item>\n );\n}\n\nexport default function DynamicForm({\n schema,\n mode,\n visible,\n initialValues,\n onSubmit,\n onCancel,\n}: DynamicFormProps) {\n const [form] = Form.useForm();\n const [rawJsonMode, setRawJsonMode] = useState(false);\n const [rawJsonText, setRawJsonText] = useState('');\n const [rawJsonError, setRawJsonError] = useState('');\n const disabled = mode === 'view';\n const entityName = schema.title.replace(/管理$/, '');\n\n const titleMap: Record<FormMode, string> = {\n create: `新增${entityName}`,\n edit: `编辑${entityName}`,\n view: `查看${entityName}`,\n };\n\n const formFields = schema.fields.filter((f) => {\n if (mode === 'view') return f.table !== false && f.table !== undefined;\n return f.form !== false && f.form !== undefined;\n });\n\n useEffect(() => {\n if (!visible) {\n form.resetFields();\n setRawJsonMode(false);\n setRawJsonText('');\n setRawJsonError('');\n } else {\n // 模态框打开时,根据模式设置表单值\n if (mode === 'create') {\n // 新增模式:清空表单并确保没有残留数据\n form.resetFields();\n // 延迟一下确保resetFields完成\n setTimeout(() => {\n form.setFieldsValue({});\n }, 0);\n } else {\n // 编辑/查看模式设置初始值\n const normalized = normalizeInitialValues(formFields, initialValues);\n form.setFieldsValue(normalized);\n }\n }\n }, [visible, mode, initialValues, form, formFields]);\n\n const switchToRaw = () => {\n // getFieldsValue(true) 返回 store 全量数据(含 id 等非 Form.Item 字段)\n const rawValues = disabled\n ? (initialValues ?? {})\n : (form.getFieldsValue(true) as Record<string, unknown>);\n const serialized = disabled ? rawValues : serializeValues(formFields, rawValues);\n setRawJsonText(JSON.stringify(serialized, null, 2));\n setRawJsonError('');\n setRawJsonMode(true);\n };\n\n const switchToForm = () => {\n if (!disabled) {\n try {\n const parsed = JSON.parse(rawJsonText) as Record<string, unknown>;\n form.setFieldsValue(normalizeInitialValues(formFields, parsed));\n setRawJsonError('');\n } catch {\n setRawJsonError('JSON 格式错误,请修正后再切换');\n return;\n }\n }\n setRawJsonMode(false);\n };\n\n const handleOk = async () => {\n if (disabled) { onCancel(); return; }\n if (rawJsonMode) {\n try {\n const parsed = JSON.parse(rawJsonText) as Record<string, unknown>;\n onSubmit(parsed);\n } catch {\n setRawJsonError('JSON 格式错误,无法提交');\n }\n return;\n }\n const values = await form.validateFields();\n onSubmit(serializeValues(formFields, values as Record<string, unknown>));\n };\n\n /**\n * 将字段列表按 dot-path 前缀分组渲染:\n * - 无前缀字段:直接渲染\n * - 有前缀的字段:相同前缀聚合到一个带标题的 Card 中\n */\n const renderFieldGroups = () => {\n const nodes: React.ReactNode[] = [];\n let i = 0;\n while (i < formFields.length) {\n const field = formFields[i];\n const prefix = getFieldGroupPrefix(field.key);\n\n if (!prefix) {\n nodes.push(renderField(field, disabled));\n i++;\n } else {\n // 收集相同前缀的连续字段\n const groupFields: FieldSchema[] = [];\n while (i < formFields.length && getFieldGroupPrefix(formFields[i].key) === prefix) {\n groupFields.push(formFields[i]);\n i++;\n }\n nodes.push(\n <div key={prefix} style={{ marginBottom: 16 }}>\n <Divider style={{ fontSize: 13, color: '#666', margin: '8px 0 12px' }}>\n {prefixToLabel(prefix)}\n </Divider>\n <Card\n size=\"small\"\n style={{ background: '#fafafa', borderRadius: 6 }}\n styles={{ body: { paddingBottom: 4 } }}\n >\n {groupFields.map((gf) => renderField(gf, disabled))}\n </Card>\n </div>,\n );\n }\n }\n return nodes;\n };\n\n const copyRawJson = () => {\n const json = rawJsonMode\n ? rawJsonText\n : JSON.stringify(\n disabled\n ? (initialValues ?? {})\n : serializeValues(formFields, form.getFieldsValue(true) as Record<string, unknown>),\n null, 2,\n );\n navigator.clipboard.writeText(json)\n .then(() => void message.success('已复制 JSON'))\n .catch(() => void message.error('复制失败'));\n };\n\n const modalTitle = (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', paddingRight: 32 }}>\n <span>{titleMap[mode]}</span>\n <Space size={8}>\n <Button\n size=\"small\"\n type=\"text\"\n icon={rawJsonMode ? <FormOutlined /> : <CodeOutlined />}\n onClick={rawJsonMode ? switchToForm : switchToRaw}\n >\n {rawJsonMode ? '表单视图' : 'Raw JSON'}\n </Button>\n </Space>\n </div>\n );\n\n return (\n <Modal\n title={modalTitle}\n open={visible}\n onOk={handleOk}\n onCancel={onCancel}\n okText={disabled ? '关闭' : '确认'}\n cancelText=\"取消\"\n cancelButtonProps={disabled ? { style: { display: 'none' } } : {}}\n width={720}\n destroyOnClose\n >\n {/* Form 始终挂载,切换模式时仅用 display 隐藏,防止卸载导致 store 重置 */}\n <div style={{ display: rawJsonMode ? 'none' : undefined }}>\n <Form\n form={form}\n layout=\"vertical\"\n initialValues={{}} // 不依赖initialValues,完全通过useEffect控制\n >\n {renderFieldGroups()}\n </Form>\n </div>\n\n {rawJsonMode && (\n <div>\n <Input.TextArea\n value={rawJsonText}\n onChange={disabled ? undefined : (e) => { setRawJsonText(e.target.value); setRawJsonError(''); }}\n readOnly={disabled}\n rows={20}\n style={{ fontFamily: 'monospace', fontSize: 12, resize: 'vertical' }}\n status={rawJsonError ? 'error' : undefined}\n />\n {rawJsonError && (\n <div style={{ color: '#ff4d4f', fontSize: 12, marginTop: 4 }}>{rawJsonError}</div>\n )}\n {!disabled && (\n <div style={{ marginTop: 8, textAlign: 'right' }}>\n <Button size=\"small\" icon={<CodeOutlined />} onClick={copyRawJson}>复制 JSON</Button>\n </div>\n )}\n </div>\n )}\n </Modal>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { Button, message, Typography, ConfigProvider } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport zhCN from 'antd/locale/zh_CN';\nimport type { Locale } from 'antd/es/locale';\nimport type { CrudPageSchema, ActionSchema, ActionApiConfig, ApiRequest } from '../types/schema';\nimport DynamicFilter from './DynamicFilter';\nimport DynamicTable from './DynamicTable';\nimport DynamicForm from './DynamicForm';\n\nconst { Title } = Typography;\n\ninterface CrudPageProps {\n schema: CrudPageSchema;\n initialData?: Record<string, unknown>[];\n apiRequest?: ApiRequest;\n /** Ant Design 语言配置,默认为中文 */\n locale?: Locale;\n}\n\n/** 动态替换 URL 模板中的占位符 */\nfunction buildUrl(template: string, record: Record<string, unknown>): string {\n return template.replace(/:(\\w+)/g, (match, fieldName) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/** 处理模板数据,支持 {{fieldName}} 格式的变量替换 */\nfunction processTemplateData(data: Record<string, unknown>, record: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n \n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'string' && value.includes('{{') && value.includes('}}')) {\n // 替换模板变量 {{fieldName}}\n result[key] = value.replace(/\\{\\{(\\w+)\\}\\}/g, (match, fieldName) => {\n const fieldValue = record[fieldName];\n return fieldValue !== undefined ? String(fieldValue) : match;\n });\n } else {\n result[key] = value;\n }\n }\n \n return result;\n}\n\n\n/** 通用请求封装 */\nasync function apiRequest<T = unknown>(\n url: string,\n options?: RequestInit,\n): Promise<T> {\n const res = await fetch(url, {\n headers: { 'Content-Type': 'application/json' },\n ...options,\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json() as Promise<T>;\n}\n\n/** 从接口响应中提取列表和总数(兼容常见结构) */\nfunction extractListResponse(json: unknown): { list: Record<string, unknown>[]; total: number } {\n if (!json || typeof json !== 'object') return { list: [], total: 0 };\n const obj = json as Record<string, unknown>;\n const data = obj.data ?? obj.result ?? obj;\n if (Array.isArray(data)) return { list: data as Record<string, unknown>[], total: data.length };\n if (data && typeof data === 'object') {\n const inner = data as Record<string, unknown>;\n const list = (inner.list ?? inner.records ?? inner.data ?? []) as Record<string, unknown>[];\n const total = Number(inner.total ?? inner.count ?? list.length);\n return { list, total };\n }\n return { list: [], total: 0 };\n}\n\nconst CrudPage: React.FC<CrudPageProps> = ({ \n schema, \n initialData = [], \n apiRequest: customApiRequest,\n locale = zhCN \n}) => {\n const rowKey = schema.rowKey || 'id';\n\n // 使用传入的apiRequest或默认的\n const request = customApiRequest || apiRequest;\n\n // 初始数据引用\n const initialDataRef = useRef<Record<string, unknown>[]>(initialData);\n\n const [data, setData] = useState<Record<string, unknown>[]>([]);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n const [filterParams, setFilterParams] = useState<Record<string, unknown>>({});\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(schema.pagination?.pageSize || 10);\n const [modalState, setModalState] = useState<{\n open: boolean;\n mode: 'create' | 'edit' | 'view';\n record?: Record<string, unknown>;\n }>({ open: false, mode: 'create' });\n\n const [messageApi, contextHolder] = message.useMessage();\n\n // ---------- 初始化数据 ----------\n const initializeData = useCallback(() => {\n if (initialDataRef.current.length > 0) {\n setData(initialDataRef.current);\n setTotal(initialDataRef.current.length);\n }\n }, []);\n\n // ---------- 获取列表 ----------\n const fetchList = useCallback(async (\n params: Record<string, unknown> = filterParams,\n p: number = page,\n ps: number = pageSize,\n ) => {\n if (!schema.api.list) {\n // 没有配置 API,使用初始数据\n initializeData();\n return;\n }\n\n const listApiConfig = schema.api.list;\n\n setLoading(true);\n try {\n // 构建查询参数\n const query = new URLSearchParams({ page: String(p), pageSize: String(ps) });\n Object.entries(params).forEach(([k, v]) => {\n if (v !== undefined && v !== null && v !== '') query.set(k, String(v));\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: listApiConfig.method || 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...listApiConfig.headers\n }\n };\n\n // 如果是 POST 请求,将查询参数放到请求体中\n let url = listApiConfig.url;\n if (listApiConfig.method === 'POST') {\n const queryParams: Record<string, string> = {};\n query.forEach((value, key) => {\n queryParams[key] = value;\n });\n const requestData = {\n ...queryParams,\n ...listApiConfig.data\n };\n options.body = JSON.stringify(requestData);\n } else {\n url = `${url}?${query}`;\n }\n\n const json = await request(url, options);\n const { list, total: tot } = extractListResponse(json);\n setData(list);\n setTotal(tot);\n } catch (error) {\n console.error('Failed to fetch list:', error);\n messageApi.error('获取数据失败,请检查网络连接或联系管理员');\n // 如果有初始数据,显示初始数据\n if (initialDataRef.current.length > 0) {\n initializeData();\n } else {\n setData([]);\n setTotal(0);\n }\n } finally {\n setLoading(false);\n }\n }, [request, schema.api.list, filterParams, page, pageSize, initializeData, messageApi]);\n\n // 初始加载 & 参数变化时重新请求\n useEffect(() => {\n fetchList(filterParams, page, pageSize);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterParams, page, pageSize]);\n\n // ---------- 搜索 ----------\n const handleSearch = useCallback((params: Record<string, unknown>) => {\n setFilterParams(params);\n setPage(1);\n }, []);\n\n // ---------- 翻页 ----------\n const handlePageChange = useCallback((p: number, ps: number) => {\n setPage(p);\n setPageSize(ps);\n }, []);\n\n // ---------- 删除 ----------\n const handleDelete = useCallback(async (record: Record<string, unknown>) => {\n if (!schema.api.delete) {\n messageApi.error('删除功能未配置');\n return;\n }\n\n const deleteApiConfig = schema.api.delete;\n\n try {\n // 构建 URL,动态替换占位符\n let url = deleteApiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: deleteApiConfig.method || 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...deleteApiConfig.headers\n }\n };\n\n // 处理请求体数据\n if (deleteApiConfig.data && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(deleteApiConfig.method || 'DELETE')) {\n const processedData = processTemplateData(deleteApiConfig.data, record);\n options.body = JSON.stringify({\n ...processedData,\n recordId: record[rowKey],\n timestamp: new Date().toISOString()\n });\n }\n\n await request(url, options);\n messageApi.success('删除成功');\n fetchList();\n } catch (error) {\n console.error('Delete failed:', error);\n messageApi.error('删除失败,请稍后重试');\n }\n }, [request, schema.api.delete, fetchList, messageApi, rowKey]);\n\n // ---------- 操作列点击 ----------\n const handleAction = useCallback(async (action: ActionSchema, record: Record<string, unknown>) => {\n if (action.type === 'view') {\n setModalState({ open: true, mode: 'view', record });\n } else if (action.type === 'edit') {\n setModalState({ open: true, mode: 'edit', record });\n } else if (action.type === 'delete') {\n handleDelete(record);\n } else if (action.type === 'custom') {\n // 处理自定义 action 的 API 调用\n let apiConfig: ActionApiConfig | undefined;\n \n // 优先使用 apiKey 引用统一配置,向后兼容 api 直接配置\n if (action.apiKey) {\n const apiDef = schema.api[action.apiKey];\n if (typeof apiDef === 'string') {\n // 简单字符串 URL 配置\n apiConfig = {\n url: apiDef,\n method: 'GET',\n responseType: 'json'\n };\n } else if (apiDef && typeof apiDef === 'object') {\n // 完整的 API 配置对象\n apiConfig = apiDef as ActionApiConfig;\n }\n } else if (action.api) {\n // 向后兼容:使用 action.api 配置\n apiConfig = action.api;\n }\n\n if (!apiConfig) {\n messageApi.error(`${action.label}未配置 API`);\n return;\n }\n\n try {\n // 构建 URL,动态替换占位符\n let url = apiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = record[fieldName];\n return value !== undefined ? String(value) : match;\n });\n \n // 构建请求选项\n const options: RequestInit = {\n method: apiConfig.method || 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...apiConfig.headers\n }\n };\n\n // 处理请求体数据\n if (apiConfig.data && ['POST', 'PUT', 'PATCH'].includes(apiConfig.method || 'GET')) {\n // 支持模板变量替换\n const processedData = processTemplateData(apiConfig.data, record);\n options.body = JSON.stringify({\n ...processedData,\n recordId: record[rowKey],\n timestamp: new Date().toISOString()\n });\n }\n\n // 调用 API\n const response = await request(url, options);\n \n // 处理特殊响应类型\n if (apiConfig.responseType === 'blob') {\n // 处理文件下载\n const blob = new Blob([response as BlobPart]);\n const downloadUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = `${action.key}.pdf`;\n a.click();\n URL.revokeObjectURL(downloadUrl);\n messageApi.success(`${action.label}成功`);\n } else {\n // 处理 JSON 响应\n const result = response as { success?: boolean; message?: string };\n if (result.success !== false) {\n messageApi.success(`${action.label}成功`);\n // 刷新数据\n await fetchList();\n } else {\n messageApi.error(result.message || `${action.label}失败`);\n }\n }\n } catch (error) {\n console.error(`Action ${action.key} failed:`, error);\n messageApi.error(`${action.label}失败`);\n }\n }\n }, [handleDelete, rowKey, request, messageApi, fetchList]);\n\n // ---------- 新增 / 编辑提交 ----------\n const handleFormOk = useCallback(async (values: Record<string, unknown>) => {\n const isCreate = modalState.mode === 'create';\n\n if (isCreate) {\n if (!schema.api.create) {\n messageApi.error('新增功能未配置');\n return;\n }\n\n const createApiConfig = schema.api.create;\n\n try {\n // 构建请求选项\n const options: RequestInit = {\n method: createApiConfig.method || 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...createApiConfig.headers\n }\n };\n\n // 处理请求体数据\n let requestData = { ...values };\n if (createApiConfig.data) {\n const processedData = processTemplateData(createApiConfig.data, values);\n requestData = {\n ...requestData,\n ...processedData,\n timestamp: new Date().toISOString()\n };\n }\n \n options.body = JSON.stringify(requestData);\n\n await request(createApiConfig.url, options);\n messageApi.success('新增成功');\n setModalState({ open: false, mode: 'create' });\n fetchList();\n } catch (error) {\n console.error('Create failed:', error);\n messageApi.error('新增失败,请稍后重试');\n }\n } else {\n if (!schema.api.update) {\n messageApi.error('编辑功能未配置');\n return;\n }\n\n const updateApiConfig = schema.api.update;\n\n try {\n // 构建 URL,动态替换占位符\n let url = updateApiConfig.url;\n url = url.replace(/:(\\w+)/g, (match: string, fieldName: string) => {\n const value = values[fieldName];\n return value !== undefined ? String(value) : match;\n });\n\n // 构建请求选项\n const options: RequestInit = {\n method: updateApiConfig.method || 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n ...updateApiConfig.headers\n }\n };\n\n // 处理请求体数据\n let requestData = { ...values };\n if (updateApiConfig.data) {\n const processedData = processTemplateData(updateApiConfig.data, values);\n requestData = {\n ...requestData,\n ...processedData,\n timestamp: new Date().toISOString()\n };\n }\n \n options.body = JSON.stringify(requestData);\n\n await request(url, options);\n messageApi.success('编辑成功');\n setModalState({ open: false, mode: 'create' });\n fetchList();\n } catch (error) {\n console.error('Update failed:', error);\n messageApi.error('编辑失败,请稍后重试');\n }\n }\n }, [\n request, modalState.mode, schema.api, fetchList, messageApi,\n ]);\n\n return (\n <ConfigProvider locale={locale}>\n <div style={{ padding: 24, background: '#f5f6fa', minHeight: '100vh' }}>\n {contextHolder}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 16 }}>\n <Title level={4} style={{ margin: 0 }}>{schema.title}</Title>\n {schema.api.create && (\n <Button\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={() => setModalState({ open: true, mode: 'create', record: undefined })}\n >\n {schema.createButtonLabel || '新增'}\n </Button>\n )}\n </div>\n\n <DynamicFilter schema={schema} onSearch={handleSearch} onReset={() => handleSearch({})} />\n\n <DynamicTable\n schema={schema}\n data={data}\n loading={loading}\n pagination={{\n current: page,\n pageSize,\n total,\n onChange: handlePageChange,\n }}\n onView={(record) => handleAction({ key: 'view', label: '查看', type: 'view' }, record)}\n onEdit={(record) => handleAction({ key: 'edit', label: '编辑', type: 'edit' }, record)}\n onDelete={(record) => handleDelete(record)}\n onCustomAction={(actionKey, record) => {\n const action = schema.actions?.find(a => a.key === actionKey);\n if (action) handleAction(action, record);\n }}\n />\n\n <DynamicForm\n schema={schema}\n visible={modalState.open}\n mode={modalState.mode}\n initialValues={modalState.record}\n onSubmit={handleFormOk}\n onCancel={() => setModalState({ open: false, mode: 'create' })}\n />\n </div>\n </ConfigProvider>\n );\n};\n\nexport default CrudPage;\n"],"names":["getOptions","_jsx","_jsxs"],"mappings":"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"}
|