• 中文
  • ProDescriptions Playground

    属性展示
    import {
      ProCard,
      ProDescriptions,
      ProForm,
      ProFormDependency,
      ProFormDigit,
      ProFormList,
      ProFormSelect,
      ProFormSwitch,
      ProFormText,
      ProFormTextArea,
    } from '@ant-design/pro-components';
    import { useState } from 'react';
    
    const valueTypeArray = [
      'password',
      'money',
      'textarea',
      'option',
      'date',
      'dateWeek',
      'dateMonth',
      'dateQuarter',
      'dateYear',
      'dateRange',
      'dateTimeRange',
      'dateTime',
      'time',
      'timeRange',
      'text',
      'select',
      'checkbox',
      'rate',
      'radio',
      'radioButton',
      'index',
      'indexBorder',
      'progress',
      'percent',
      'digit',
      'second',
      'avatar',
      'code',
      'switch',
      'fromNow',
      'image',
      'jsonCode',
    ];
    
    const initialValues = {
      title: '高级定义列表',
      column: '3',
      columns: [
        {
          title: '文本',
          key: 'text',
          dataIndex: 'id',
        },
        {
          title: '状态',
          key: 'state',
          dataIndex: 'state',
          valueType: 'select',
          valueEnum: {
            all: { text: '全部', status: 'Default' },
            open: {
              text: '未解决',
              status: 'Error',
            },
            closed: {
              text: '已解决',
              status: 'Success',
            },
          },
        },
        {
          title: '状态2',
          key: 'state2',
          dataIndex: 'state2',
        },
        {
          title: '时间',
          key: 'date',
          dataIndex: 'date',
          valueType: 'date',
        },
        {
          title: 'money',
          key: 'money',
          dataIndex: 'money',
          valueType: 'money',
        },
        {
          title: '百分比',
          key: 'percent',
          dataIndex: 'percent',
          valueType: 'percent',
        },
        {
          title: '操作',
          valueType: 'option',
          render: () => [
            <a target="_blank" rel="noopener noreferrer" key="link">
              链路
            </a>,
            <a target="_blank" rel="noopener noreferrer" key="warning">
              报警
            </a>,
            <a target="_blank" rel="noopener noreferrer" key="view">
              查看
            </a>,
          ],
        },
      ],
    };
    
    const Demo = () => {
      const [values, setValues] = useState<Record<string, any>>(initialValues);
      return (
        <>
          <ProCard
            variant="outlined"
            split="vertical"
            headerBordered
            style={{
              minHeight: 500,
            }}
          >
            <ProCard colSpan="calc(100% - 580px)">
              <ProDescriptions
                title="高级定义列表"
                {...values}
                columns={values?.columns?.filter(Boolean) || []}
                request={async () => {
                  return Promise.resolve({
                    success: true,
                    data: {
                      id: '这是一段文本columns',
                      date: '20200809',
                      money: '1212100',
                      state: 'all',
                      state2: 'open',
                      percent: '20%',
                    },
                  });
                }}
              />
            </ProCard>
            <ProForm
              initialValues={values}
              onValuesChange={(_, allValue) => {
                setValues({ ...initialValues, ...allValue });
              }}
              submitter={false}
            >
              <ProCard
                colSpan="580px"
                title="配置菜单"
                tabs={{
                  items: [
                    {
                      label: '基本配置',
                      key: 'base',
                      children: (
                        <>
                          <ProFormText label="标题" name="title" />
                          <ProForm.Group>
                            <ProFormSelect
                              name="layout"
                              label="布局"
                              initialValue="horizontal"
                              options={[
                                {
                                  label: '水平',
                                  value: 'horizontal',
                                },
                                {
                                  label: '垂直',
                                  value: 'vertical',
                                },
                              ]}
                            />
                            <ProFormSwitch
                              label="加载中"
                              tooltip="loading"
                              name="loading"
                            />
                            <ProFormSelect
                              name="size"
                              label="尺寸"
                              initialValue="default"
                              options={[
                                {
                                  label: '大',
                                  value: 'default',
                                },
                                {
                                  label: '中',
                                  value: 'middle',
                                },
                                {
                                  label: '小',
                                  value: 'small',
                                },
                              ]}
                            />
    
                            <ProFormSwitch
                              label="边框"
                              tooltip="bordered"
                              name="bordered"
                            />
                            <ProFormDigit width="xs" label="列数" name="column" />
                          </ProForm.Group>
                        </>
                      ),
                    },
                    {
                      label: '列配置',
                      key: 'columns',
                      children: (
                        <ProFormList
                          name="columns"
                          label="列配置"
                          creatorButtonProps={{
                            position: 'top',
                          }}
                          itemRender={({ listDom, action }) => {
                            return (
                              <ProCard
                                variant="outlined"
                                style={{
                                  marginBlockEnd: 8,
                                  position: 'relative',
                                }}
                              >
                                <div
                                  style={{
                                    position: 'absolute',
                                    top: -2,
                                    right: 4,
                                  }}
                                >
                                  {action}
                                </div>
                                {listDom}
                              </ProCard>
                            );
                          }}
                        >
                          <ProForm.Group size={16} key="Group">
                            <ProFormText label="标题" name="title" />
                            <ProFormDigit
                              width="xs"
                              initialValue={1}
                              label="占据列数"
                              name="span"
                            />
                            <ProFormSelect
                              width="xs"
                              label="值类型"
                              name="valueType"
                              options={valueTypeArray.map((value) => ({
                                label: value,
                                value,
                              }))}
                            />
                            <ProFormSelect
                              label="dataIndex"
                              width="xs"
                              name="dataIndex"
                              valueEnum={{
                                age: 'age',
                                address: 'address',
                                name: 'name',
                                time: 'time',
                                description: 'string',
                              }}
                            />
                          </ProForm.Group>
                          <ProFormDependency
                            key="valueType"
                            name={['valueType', 'valueEnum']}
                          >
                            {({ valueType, valueEnum }) => {
                              if (valueType !== 'select') {
                                return null;
                              }
                              return (
                                <ProFormTextArea
                                  formItemProps={{
                                    style: {
                                      marginBlockStart: 8,
                                    },
                                  }}
                                  fieldProps={{
                                    value: JSON.stringify(valueEnum),
                                  }}
                                  normalize={(value) => {
                                    return JSON.parse(value);
                                  }}
                                  label="数据枚举"
                                  name="valueEnum"
                                />
                              );
                            }}
                          </ProFormDependency>
                        </ProFormList>
                      ),
                    },
                  ],
                }}
                style={{
                  width: 500,
                }}
              />
            </ProForm>
          </ProCard>
    
          <div
            style={{
              marginTop: '20px',
              padding: '20px',
              backgroundColor: '#f5f5f5',
              borderRadius: '6px',
            }}
          >
            <h4>ProDescriptions 动态配置 Props 说明:</h4>
            <ul>
              <li>
                <strong>title</strong>: 描述列表标题,支持动态修改
              </li>
              <li>
                <strong>column</strong>: 列数,支持动态调整
              </li>
              <li>
                <strong>columns</strong>: 列配置数组,支持动态增删改
              </li>
              <li>
                <strong>request</strong>: 异步请求函数,返回数据
              </li>
            </ul>
            <h4>ProCard 布局配置:</h4>
            <ul>
              <li>
                <strong>variant</strong>: 卡片变体样式,'outlined' 表示带边框
              </li>
              <li>
                <strong>split</strong>: 分割方式,'vertical' 表示垂直分割
              </li>
              <li>
                <strong>headerBordered</strong>: 是否显示头部边框
              </li>
              <li>
                <strong>colSpan</strong>: 列跨度,支持 calc() 计算
              </li>
            </ul>
            <h4>ProForm 表单配置:</h4>
            <ul>
              <li>
                <strong>initialValues</strong>: 表单初始值
              </li>
              <li>
                <strong>onValuesChange</strong>: 值变化时的回调函数
              </li>
              <li>
                <strong>submitter</strong>: 提交按钮配置,false 表示不显示
              </li>
            </ul>
            <h4>基本配置选项:</h4>
            <ul>
              <li>
                <strong>layout</strong>: 布局方式,horizontal/vertical
              </li>
              <li>
                <strong>loading</strong>: 是否显示加载状态
              </li>
              <li>
                <strong>size</strong>: 尺寸,default/middle/small
              </li>
              <li>
                <strong>bordered</strong>: 是否显示边框
              </li>
            </ul>
            <h4>列配置选项:</h4>
            <ul>
              <li>
                <strong>title</strong>: 列标题
              </li>
              <li>
                <strong>span</strong>: 占据列数
              </li>
              <li>
                <strong>valueType</strong>: 值类型,支持多种类型
              </li>
              <li>
                <strong>dataIndex</strong>: 数据字段名
              </li>
              <li>
                <strong>valueEnum</strong>: 枚举值配置(仅 select 类型)
              </li>
            </ul>
            <h4>ProFormList 特点:</h4>
            <ul>
              <li>
                <strong>动态列表</strong>: 支持动态添加和删除列配置
              </li>
              <li>
                <strong>itemRender</strong>: 自定义列表项渲染
              </li>
              <li>
                <strong>creatorButtonProps</strong>: 创建按钮配置
              </li>
            </ul>
            <h4>ProFormDependency 依赖配置:</h4>
            <ul>
              <li>
                <strong>条件渲染</strong>: 根据 valueType 条件显示表单项
              </li>
              <li>
                <strong>JSON 解析</strong>: 自动解析和格式化 valueEnum
              </li>
              <li>
                <strong>实时更新</strong>: 依赖字段变化时实时更新
              </li>
            </ul>
            <h4>ValueType 支持类型:</h4>
            <ul>
              <li>
                <strong>基础类型</strong>: text, password, textarea, code
              </li>
              <li>
                <strong>数字类型</strong>: money, percent, digit, second
              </li>
              <li>
                <strong>日期类型</strong>: date, dateTime, time 等
              </li>
              <li>
                <strong>选择类型</strong>: select, checkbox, radio 等
              </li>
              <li>
                <strong>特殊类型</strong>: avatar, image, switch, progress 等
              </li>
            </ul>
            <h4>使用场景:</h4>
            <ul>
              <li>
                <strong>配置工具</strong>: 构建动态配置界面
              </li>
              <li>
                <strong>可视化编辑</strong>: 可视化编辑组件配置
              </li>
              <li>
                <strong>原型设计</strong>: 快速原型设计和验证
              </li>
              <li>
                <strong>调试工具</strong>: 调试和测试组件配置
              </li>
            </ul>
            <h4>最佳实践:</h4>
            <ul>
              <li>
                <strong>状态管理</strong>: 合理管理配置状态
              </li>
              <li>
                <strong>实时预览</strong>: 提供实时预览功能
              </li>
              <li>
                <strong>配置验证</strong>: 对配置进行验证
              </li>
              <li>
                <strong>用户体验</strong>: 提供直观的配置界面
              </li>
            </ul>
          </div>
        </>
      );
    };
    
    export default () => (
      <div style={{ padding: 24 }}>
        <Demo />
      </div>
    );