Skip to content

功能组件 · AntDesign ​

核心 API 请查阅 功能组件-通用篇,本文档仅说明 AntDesign 框架下的特化配置。

导入路径 ​

javascript
import { $initHook } from '@jiess/plus/react';

AntDesign 特化组件 ​

Jiess 组件AntDesign 组件说明
$ButtonButton按钮
$TagTag标签
$DividerDivider分割线
$BadgeBadge徽章
$TooltipTooltip工具提示
$PopoverPopover弹出框
$CollapseCollapse折叠面板
$SpinSpin加载中

AntDesign 按钮类型 ​

javascript
{
    $Button: {
        children: '操作',
        type: 'primary',      // 'primary' / 'default' / 'dashed' / 'text' / 'link'
        size: 'middle',       // 'large' / 'middle' / 'small'
        danger: false,        // 危险按钮
        loading: false,
        ghost: false,         // 幽灵按钮
        block: false,         // 块级按钮
        shape: 'default',     // 'default' / 'circle' / 'round'
        icon: <EditOutlined />,
    },
}

AntDesign 标签类型 ​

javascript
{
    $Tag: {
        children: '已审核',
        color: 'success',     // preset: 'success'/'processing'/'error'/'warning' + 自定义色值
        closable: true,
        visible: true,
        icon: <CheckCircleOutlined />,
    },
}

AntDesign 功能组件示例 ​

表格操作列的确认按钮 ​

javascript
{
    $Space: {
        children: [
            { $Button: { children: '编辑', type: 'primary', onClick: edit } },
            {
                $Popconfirm: {
                    title: '确定要删除这条记录吗?',
                    onConfirm: () => del(row),
                    children: {
                        $Button: { children: '删除', danger: true },
                    },
                },
            },
        ],
    },
}

加载状态 ​

javascript
{
    $Spin: {
        spinning: isLoading,
        tip: '数据加载中...',
        children: {
            $JiessTable: { /* 表格内容 */ },
        },
    },
}

实战示例 ​

示例1:状态标签组合(多状态映射 + 表格列) ​

jsx
// 状态枚举 → 标签映射表
const statusTagMap = {
    draft: { text: '草稿', color: 'default' },
    pending: { text: '待审核', color: 'processing' },
    approved: { text: '已通过', color: 'success' },
    rejected: { text: '已拒绝', color: 'error' },
    published: { text: '已发布', color: 'blue' },
};

// 在表格列中使用
$JiessTable({
    $fields: [
        {
            $label: '状态',
            $name: 'status',
            $TableField: {
                render(row) {
                    const cfg = statusTagMap[row.status] || { text: row.status, color: 'default' };
                    return (
                        <Tag color={cfg.color}>
                            {cfg.text}
                        </Tag>
                    );
                },
            },
        },
    ],
});

// 独立使用的多状态标签组
{
    $Space: {
        size: 'small',
        children: [
            { $Tag: { children: '已审核', color: 'success' } },
            { $Tag: { children: '紧急', color: 'error' } },
            { $Tag: { children: 'VIP', color: 'gold', icon: <CrownOutlined /> } },
            { $Tag: { children: '新功能', color: 'blue' } },
        ],
    },
}

示例2:Spin 加载 + 表格(全屏/局部加载) ​

jsx
// 局部加载:表格数据加载中
{
    $Spin: {
        spinning: tableLoading,
        tip: '数据加载中...',
        children: {
            $JiessTable: {
                rowKey: 'id',
                action: '/api/users',
                $fields: [
                    { $label: '姓名', $name: 'name', $width: 120 },
                    { $label: '邮箱', $name: 'email', $width: 200 },
                    { $label: '状态', $name: 'status', $width: 80 },
                ],
            },
        },
    },
}

// 全页加载:弹框提交中
{
    $Spin: {
        spinning: submitting,
        tip: '正在保存...',
        size: 'large',
        children: {
            $Form: {
                layout: 'vertical',
                children: {
                    name: { $Input: { $label: '姓名', $rules: [{ required: true }] } },
                    email: { $Input: { $label: '邮箱', $rules: [{ email: true }] } },
                },
            },
        },
    },
}

示例3:操作列完整组合(按钮 + Popconfirm + 权限控制) ​

jsx
// 表格操作列:根据权限显示不同按钮
$JiessTable({
    $fields: [
        {
            $label: '操作',
            $TableField: {
                render(row) {
                    return (
                        <Space wrap>
                            <Button type="link" onClick={() => viewDetail(row)}>
                                查看
                            </Button>
                            {hasEditPerm && (
                                <Button type="link" onClick={() => editRow(row)}>
                                    编辑
                                </Button>
                            )}
                            {hasDeletePerm && (
                                <Popconfirm
                                    title={
                                        <span>
                                            确认删除 <strong>{row.name}</strong> ?
                                        </span>
                                    }
                                    description="删除后数据不可恢复"
                                    okText="确认删除"
                                    cancelText="取消"
                                    okButtonProps={{ danger: true }}
                                    onConfirm={() => deleteRow(row)}
                                >
                                    <Button type="link" danger>
                                        删除
                                    </Button>
                                </Popconfirm>
                            )}
                            {hasAuditPerm && row.status === 'pending' && (
                                <Button type="link" style={{ color: '#52c41a' }} onClick={() => auditRow(row)}>
                                    审核
                                </Button>
                            )}
                        </Space>
                    );
                },
            },
        },
    ],
});

注意事项 ​

事项说明
Button typeAntd 的 type='text' 和 type='link' 与 ElementPlus 不同
PopconfirmAntd 独有的确认气泡组件,ElementPlus 用 Popover 模拟
Tag.CheckableTag通过 $Tag 的 checkable: true 使用

下一步 ​