0.1.11 • Published 10 months ago

@kne/info-page v0.1.11

Weekly downloads
-
License
ISC
Repository
github
Last release
10 months ago

info-page

描述

一般用在复杂的详情展示页面,InfoPage提供了一个标准的展示信息的格式

安装

npm i --save @kne/info-page

概述

InfoPage 何时使用

一般用在复杂的详情展示页面,InfoPage 提供了一个标准的展示信息的格式

特点

  • 支持 Content 组件 Descriptions 组件的组合
  • 支持 Collapse 组件组合
  • InfoPage.PartInfoPage.Collapse 需要放在 InfoPage 之下,ContentDescriptions 可以任意组合

Content 何时使用

成组展示多个字段,常见于详情页的信息展示

特点

labelAlign 不为 auto 时会自动计算 label 的最小宽度使所有 label 的宽度等于最长的 label 宽度,使视觉上更加整齐有秩序感

示例

示例代码

  • InfoPage
  • 这里填写示例说明
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const {default: InfoPage} = _InfoPage;
const {Button} = antd;

const BaseExample = () => {
  return (
    <InfoPage>
      InfoPage
      <InfoPage.Part
        title="Part Title"
        subtitle="我是一个subtitle"
        extra={<Button>操作</Button>}
      >
        InfoPage.Part
        <InfoPage.Part
          title="Part Title"
          subtitle="我是一个subtitle"
          extra={<Button>操作</Button>}
        >
          InfoPage.InfoPage.Part
        </InfoPage.Part>
      </InfoPage.Part>
      <InfoPage.Collapse
        items={[
          {key: '1', label: 'This is default size panel header', children: <p>InfoPage.Collapse</p>},
          {key: '2', label: 'This is default size panel header2', children: <p>InfoPage.Collapse2</p>},
        ]}
      />
    </InfoPage>
  );
};

render(<BaseExample />);
  • Content
  • 展示了一个基本内容
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const { Content } = _InfoPage;
const {Space, Radio} = antd;
const {useState} = React;

const BaseExample = () => {
  const [listProps, setListProps] = useState({
    col: 1,
    size: 'default',
    labelAlign: 'left'
  });
  const onChange = (e, name) => {
    const val = e?.target.value;
    setListProps(prevState => Object.assign({}, prevState, {[name]: val}));
  };

  return (
    <Space direction='vertical' size={12}>
      <Radio.Group onChange={(e) => onChange(e, 'col')} value={listProps.col}>
        <Radio.Button value={1}>1列</Radio.Button>
        <Radio.Button value={2}>2列</Radio.Button>
        <Radio.Button value={3}>3列</Radio.Button>
      </Radio.Group>
      <Radio.Group onChange={(e) => onChange(e, 'labelAlign')} value={listProps.labelAlign}>
        <Radio.Button value='left'>左对齐</Radio.Button>
        <Radio.Button value='center'>中心对齐</Radio.Button>
        <Radio.Button value='right'>右对齐</Radio.Button>
        <Radio.Button value='auto'>自适应</Radio.Button>
      </Radio.Group>
      <Radio.Group onChange={(e) => onChange(e, 'size')} value={listProps.size}>
        <Radio.Button value='default'>默认</Radio.Button>
        <Radio.Button value='small'>small</Radio.Button>
      </Radio.Group>
      <Content
        {...listProps}
        list={[
          {label: '标题', content: '内容'},
          {label: '标题标题', content: '内容内容'},
          {label: '标题标', content: '内容内容内容内容内容内容内容内容内容内容'},
          {
            label: '标题标题标题',
            content: '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容'
          }
        ]}
        itemRender={(inner, other) => {
          return other?.index === 2 ? '此处内容额外自定义' : inner;
        }}
      />
    </Space>
  );
};

render(<BaseExample/>);
  • Descriptions
  • 展示一个信息详情
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const {Descriptions} = _InfoPage;

const BaseExample = () => {
  return (
    <Descriptions
      dataSource={[
        [
          { label: "客户名称", content: "腾讯" },
          {
            label: "发票抬头",
            content: "腾讯科技公司",
          },
        ],
        [
          { label: "发票类型", content: "增值税专用发票" },
          {
            label: "发票开具日期",
            content: "2022-08-15",
          },
        ],
        [{ label: "退票金额", content: "22000.00元" }],
        [
          {
            label: "发票号",
            content: (
              <div>
                <div>00384895992774</div>
                <div>00384895992774</div>
                <div>00384895992774</div>
                <div>00384895992774</div>
              </div>
            ),
          },
        ],
        [
          { label: "是否需要重开发票", content: "否" },
          {
            label: "是否涉及金融变动",
            content: "否",
          },
        ],
        [
          { label: "是否造成实质损失", content: "否" },
          { label: "责任归属", content: "客户原因" },
        ],
        [
          {
            label: "退票原因",
            content: "退票原因的描述退票原因的描述退票原因的描",
          },
        ],
        [{ label: "附件", content: "附件名称" }],
        [
          {label: "操作时间", content: "2022-08-01 16:32"},
          {label: "操作人", content: "西西歪", display: false},
        ],
        [
          {
            label: "超长内容",
            content:
              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容",
          },
          {
            label: "超长英文",
            content:
              "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
          },
        ],
      ]}
    />
  );
};

render(<BaseExample />);
  • CentralContent
  • 请尽量使用该组件代替Descriptions组件。该组件比Descriptions组件添加了数据格式化和灵活的空判断和自定义空展示,并且优化了排列,可以实现任何栅格大小的数据项复杂组合。实现了尾行优化,使你不必担心末尾项的宽度问题,程序会自动计算并占满该行。
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const { CentralContent } = _InfoPage;

const BaseExample = () => {
  return (<CentralContent dataSource={{
    id: 'RC00101',
    name: '张三',
    birthday: '2020-03-03',
    addTime: new Date(),
    count: 2000.1322,
    count2: 0.01234565,
    count3: 1234523,
    description: `描述描述描述描述描述描述描述描述\n描述描述描述描述描述描述描述描述\n描述描述描述描述描述描述描述描述描述描述描述描述描述描述描述`,
    description2: `描述描述描述描述描述描述描述描述`
  }} col={3} columns={[{
    name: 'id', title: 'ID', block: true
  }, {
    name: 'name', title: '姓名', span: 10
  }, {
    name: 'birthday', title: '出生日期', format: 'date'
  }, {
    name: 'addTime', title: '添加时间', format: 'datetime'
  }, {
    name: 'count', title: '数量', format: 'number-useGrouping:false-suffix:个'
  }, {
    name: 'count2', title: '百分比', format: 'number-percent money-百分比'
  }, {
    name: 'count3', title: '万元', format: 'number-suffix:万元--10000'
  }, {
    name: 'empty', title: '空值显示'
  }, {
    name: 'empty2', title: '空值显示2', placeholder: '空'
  }, {
    name: 'empty3', title: '空值显示3', emptyIsPlaceholder: false
  }, {
    name: 'description', title: '描述'
  }, {
    name: 'description2', title: '描述'
  }]} />);
};

render(<BaseExample />);
  • TableView
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const { TableView } = _InfoPage;
const { Flex } = antd;
const { useState } = React;

const dataSource = [{
  id: 'RC00101',
  name: '张三',
  birthday: '2020-03-03',
  addTime: new Date(),
  count: 2000.1322,
  count2: 0.01234565,
  count3: 1234523,
  description: `描述描述描述描述描述描述描述描述`
}, {
  id: 'RC00102',
  name: '李四',
  birthday: '2020-03-03',
  addTime: new Date(),
  count: 2000.1322,
  count2: 0.01234565,
  count3: 1234523,
  description: `描述描述描述描述描述描述描述描述`
}, {
  id: 'RC00103',
  name: '王五',
  birthday: '2020-03-03',
  addTime: new Date(),
  count: 2000.1322,
  count2: 0.01234565,
  count3: 1234523,
  description: `描述描述描述描述描述描述描述描述`
}, {
  id: 'RC00104',
  name: '马七',
  birthday: '2020-03-03',
  addTime: new Date(),
  count: 2000.1322,
  count2: 0.01234565,
  count3: 1234523,
  description: `描述描述描述描述描述描述描述描述`
}];

const columns = [{
  name: 'id', title: 'ID'
}, {
  name: 'name', title: '姓名'
}, {
  name: 'birthday', title: '出生日期', format: 'date'
}, {
  name: 'addTime', title: '添加时间', format: 'datetime'
}, {
  name: 'count', title: '数量', format: 'number'
}, {
  name: 'description', title: '描述', span: 10
}];

const WithCheckbox = () => {
  const [selectKeys, setSelectKeys] = useState([]);
  return <TableView dataSource={dataSource} columns={columns} rowSelection={{
    type: 'checkbox', allowSelectedAll: true, selectedRowKeys: selectKeys, onChange: setSelectKeys
  }} />;
};

const WithSelected = () => {
  const [selectKeys, setSelectKeys] = useState([]);
  return <TableView dataSource={dataSource} columns={columns} rowSelection={{
    selectedRowKeys: selectKeys, onChange: setSelectKeys
  }} />;
};

const BaseExample = () => {
  return <Flex vertical gap={10}>
    <TableView dataSource={dataSource} columns={columns} />
    <WithCheckbox />
    <WithSelected />
    <TableView dataSource={[]} columns={columns} />
    <TableView style={{
      height: '200px', overflowY: 'scroll'
    }} dataSource={dataSource} columns={columns} sticky/>
  </Flex>;
};

render(<BaseExample />);
  • Flow
  • _InfoPage(@kne/current-lib_info-page),(@kne/current-lib_info-page/dist/index.css),antd(antd)
const { Space, Flex, Divider } = antd;
const { Flow } = _InfoPage;
const BaseExample = () => {
  return <Flex vertical gap={8}>
    <Flow
      current={2}
      dataSource={[{
        title: 'title1', description: 'This is a description.', createTime: '2022-08-15 10:29', descriptionContent: [{
          name: '王建国1', action: '添加了备注', time: '2023-08-15 10:30', content: 'test'
        }, {
          name: '王建国2', action: '添加了备注', time: '2023-08-15 10:31', content: 'test'
        }]
      }, {
        title: '自定义DescriptionContentItem渲染样式', description: 'This is a description.', descriptionContent: [{
          name: '王建国3', action: '添加了备注', time: '08-15 10:30', content: 'test'
        }, {
          name: '王建国4', action: '添加了备注', time: '08-15 10:31', content: 'test'
        }]
      }, { title: 'title3', description: 'This is a description.' }, {
        title: 'title4', description: 'This is a description.'
      }]}
      columns={[{
        name: 'title'
      }, {
        name: 'description'
      }, {
        type: 'subTitle', name: 'createTime', format: 'datetime'
      }, {
        name: 'status'
      }, {
        type: 'actionList', name: 'descriptionContent', children: [{
          name: 'name'
        }, {
          name: 'action'
        }, {
          type: 'options', name: 'time', format: 'datetime'
        }, {
          name: 'content', render: (item, { target }) => {
            return `@@@@@${target.name}-${target.action}-${target.content}`;
          }
        }]
      }]}
    />
    <Flow
      direction="horizontal"
      progressDot
      dataSource={[{
        title: 'finish', description: 'This is a description.', status: 'finish'
      }, {
        title: 'process', description: 'This is a description.', status: 'process'
      }, {
        title: 'error', description: 'This is a description.', status: 'error'
      }, {
        title: 'wait', description: 'This is a description.', status: 'wait'
      }]}
    />

    <Flow
      direction="vertical"
      progressDot
      dataSource={[{
        title: 'finish', description: 'This is a description.', status: 'finish'
      }, {
        title: 'process', description: 'This is a description.', status: 'process'
      }, {
        title: 'error', description: 'This is a description.', status: 'error'
      }, {
        title: 'wait', description: 'This is a description.', status: 'wait'
      }]}
    />
    <Flow
      dataSource={[{
        title: 'finish', description: 'This is a description.', subTitle: '2023-08-15 10:29', status: 'finish'
      }, {
        title: 'process', description: 'This is a description.', status: 'process'
      }, {
        title: 'error', description: 'This is a description.', status: 'error'
      }, {
        title: 'wait', description: 'This is a description.', status: 'wait'
      }]}
      columns={[{ name: 'subTitle', format: 'datetime' }]}
    />
  </Flex>;
};

render(<BaseExample />);

API

InfoPage

Ant Design Card

新增参数:

属性名说明类型默认值
subtitle副标题ReactNode-
classNameInfoPageclassNamestring-

InfoPage.Part

Ant Design Card

新增参数:

属性名说明类型默认值
subtitle副标题ReactNode-
classNamePartclassNamestring-

InfoPage.Collapse

Ant Design Collapse

新增参数:

属性名说明类型默认值
classNamePartclassNamestring-

Content

属性名说明类型默认值
listContent 的内容列表listItemProps[][]
labelAlignlabel 的对齐方式可以传入的值 left,right,center,auto,为 autolabel 不计算最小宽度stringleft
col列数number1
size默认为 14px,可以传值为 smallsizesmall 时字号为 12pxstring-
gutter栅格间隔,可以写成像素值或支持响应式的对象写法来设置水平间隔 { xs: 8, sm: 16, md: 24}。或者使用数组形式同时设置 水平间距, 垂直间距number0
classNameContentclassNamestring-
itemRender接收 Content InnerInnerlabel, content, index,可以根据数据信息返回想要渲染的内容function-

listItemProps

属性名说明类型默认值
display数据是否展示,当为 function 时可以接收到 item, list 参数,item 为当前项配置,dataSource 为整个组件的 dataSource 配置boolean | functiontrue
block是否单行显示该条信息ReactNode | string-
label标题ReactNode | string-
content内容ReactNode | string-

Descriptions

属性名说明类型默认值
dataSource详情数据源,内部每个数组为一行数据,每行数据中每个对象为一列数据,每行最多包含 2 列内容,多余的会被丢弃dataSourceItemProps[]-
itemRender接收 Descriptions InnerInnerlabel, content, displaty, index,可以根据数据信息返回想要渲染的内容function-

dataSourceItemProps

属性名说明类型默认值
display数据是否展示,当为 function 时可以接收到 item, dataSource 参数,item 为当前项配置,dataSource 为整个组件的 dataSource 配置boolean | functiontrue
label数据展示的标题ReactNode | string-
content数据展示的内容ReactNode | string-
0.1.11

10 months ago

0.1.10

10 months ago

0.1.8

10 months ago

0.1.7

10 months ago

0.1.9

10 months ago

0.1.2

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.6

10 months ago

0.1.5

10 months ago

0.1.1

11 months ago

0.1.0

11 months ago

0.1.0-alpha.0

11 months ago