rj-react-ui

1.1.5 • Public • Published

RJ-REACT-UI

[TOC]

DataTable

数据表格

props

属性 名称 类型 是否必须 默认值 可用值 示例说明
simpleRender 简单呈现 bool true 提高渲染性能。当设置为 true 时 header 按设置顺序显示,不能使用排序,header 中 displayOrder 及 hidden 属性无效,header 与row 对应不依赖 key,按数组顺序呈现等。
loaded 加载是否已完成 bool true
hideLoader 隐藏加载动画 bool false
showCheckbox 在行标题显示复选框 bool false
hideRowNumber 隐藏行号 bool false
openRowSelect 开启行选模式 bool false
pagination 分页属性 object
toolbar 工具栏 Toolbar
query 查询栏 ConditionQueryPanel
header 表头 array
rows array
footer 汇总 array 合计、小计
getCheckedValues 获取勾选行 func 返回已勾选行值数组,其值为在 rows 中每行定义的 value 值
setLoaded 设置表格数据加载状态 func 参数为 true 或 false 控制表格中的加载动画显示。当 hideLoader 为 false 时有效。

props.pagination

分页属性

属性 名称 类型 是否必须 默认值 说明
searchPositionTop 结果中搜索框顶部显示 bool false
positionTop 顶部显示 bool false
hide 隐藏分页 bool false
remote 远程分页 bool false 从远程服务器获取行,关闭表内分页
rowCount 行数 number
pageCount 总页数 number
pageSize 每页显示数据行数 number 20
pageNumber 当前页数 number

props.header

表头数组

列描述:

属性 名称 类型 是否必须 默认值 说明
key string true
text 标题文本 string true 排序函数
operationColumn 是否为操作列 bool false
width 宽度 number
minWidth 最小可变宽度 number
maxWidth 最大可变宽度 number
fixed 固定宽度 bool false
sortable 可排序 bool false
sort 排序函数 function 接收参数(prev, next)
dataType 列数据类型 string 可选值:string, number, date, bool
className 样式名称 string
style 内联样式 object
textAlign 标题文本对齐方式 string center 可选值:left, center, right

示例:

[
    {
        text: '',
        width: 80,
        minWidth: 60,
        maxWidth: 100,
        fixed: true,
        sortable: true,
        dataType: '',
        className: '',
        style: {},
        textAlign: 'center',
        sort: (prev, next)=>{}
    },
]

props.rows

数据行数组

[{value:{}, cells:[cell]}]

数据行属性:

属性 名称 类型 是否必须 默认值 说明
key string true 必须与header中的key相对应
value 行值 object false
cells 数据单元 array true [cell]

cell可为字符串或对象,为对象时属性:

属性 名称 类型 是否必须 默认值 说明
operationColumn 是否为操作列 bool false
content 内容 object 如果设置该值则值和格式化函数无效
value any
text 文本 string
format 格式化函数 function 接收参数(value)
className 样式名称 string
style 内联样式 object
textAlign 标题文本对齐方式 string center 可选值:left, center, right

示例:

[
    {
        value: 1,
        cells: [
            {
                operationColumn: true,
                content: (<Icon icon="edit" />),
                text: '',
                value: 1,
                format: (value)=>Formatter.toPriceDash(value),
                className: '',
                style: {},
                textAlign: 'center',
            },
            ...
        ]
    },
    ...
]

props.footer

表尾汇总行数组

[
    {
        type: 'sub', 
        label: '',
        cells: {
            [headKey]: {}
        }
    },
]
属性 名称 类型 是否必须 默认值 说明
type 当前页内计算 string total 可选值为:sub,表示小计行,如果表格只有一页则小计行不显示; total,表示合计行
label string
cells 文本 object(key pairs) 表头键值对,headKey对应header中每列设置的key值

cells值属性:

属性 名称 类型 是否必须 默认值 说明
inCurrentPage 当前页内计算 bool false
value any
text 文本 string
content 内容 object 设置后,无value值时有效,格式化函数无效
format 格式化函数 function 接收参数(value)
className 样式名称 string
style 内联样式 object
textAlign 标题文本对齐方式 string center 可选值:left, center, right
aggregate 内容聚合函数 string count 可选值:count, sum, avg, max, min
customerAggregate 自定义聚合函数 function 如果设置该函数,则设置的内置聚合函数无效

示例:

[
    {
        type: 'sub',
        cells: {
            amount:{
                inCurrentPage: true,
                text: '',
                value: 1,
                customerAggregate: (rows, columnIndex) => { }, 
                format: (value)=>Formatter.toPriceDash(value),
                className: '',
                style: {},
                textAlign: 'center',
            },
        }
    },
]

表格示例:

import React, { Component } from 'react';

import { Formatter, Convert } from 'rj-utils';
import { DataTable, Toolbar, ConditionQueryPanel, Input, Button, Icon } from 'rj-react-ui';

export default class TestTable extends Component {
    constructor(props){
        super(props);
        this.state = {
            licenseNumber: '',
            agencyID: '',
            data: [

            ],
        };
    }

    handleAddClick = () => {
        // TODO
    }

    handleQpIcLicenseNumber = (e) => {
        this.setState({licenseNumber: e.target.value});
    }

    handleQpIcAgencyID = (value) => {
        this.setState({agencyID: value});
    }

    handleSearch = () => {
        // TODO search
    }

    render() {
        let toolbar = (
            <Toolbar>
                <Button rjStyle="primary" onClick={this.handleAddClick}>
                    <Icon icon="plus-circle" /><span>ADD</span>
                </Button>
            </Toolbar>
        );

        let query = (
            <ConditionQueryPanel onSearch={this.handleSearch}>
                <ul>
                    <li>
                        <label>车牌号码:</label>
                        <Input placeholder="车牌号码"
                            value={this.state.licenseNumber}
                            onChange={this.handleQpIcLicenseNumber} />
                    </li>
                    <li>
                        <label>服务机构:</label>
                        <Input type="select" value={this.state.agencyID} onChange={this.handleQpIcAgencyID} />
                    </li>
                </ul>
            </ConditionQueryPanel>
        );

        let header =
            [
                { key: 'operation', text: '操作', width: 80, fixed: true, operationColumn: true },
                { key: 'agencyName', text: '机构', width: 60, sortable: true },
                { key: 'customerName', text: '客户名称', width: 80, sortable: true },
                { key: 'channelName', text: '渠道名称', width: 80, sortable: true },
                { key: 'amount', text: '金额', width: 100, sortable: true },
                { key: 'createTime', text: '制单日期', width: 100, sortable: true, fixed: true },
            ];
        
        let rows = this.state.data.map((item, index) => {
            let edStyle = {};
            if (item.ExpireDays < 0) {
                edStyle = { backgroundColor: '#ffffcc' };
            }

            return {
                cells: [
                    {
                        key: 'operation',
                        operationColumn: true,
                        content: [
                            <Icon key="dm" icon="detail-ms-o" onClick={()=>{}} />,
                        ]
                    },
                    { key: 'agencyName', value: item.AgencyName },
                    { key: 'customerName', value: item.CustomerName },
                    { key: 'channelName', value: item.ChannelName },
                    {
                        key: 'amount',
                        value: item.Amount,
                        textAlign: 'right',
                        format: (value) => Formatter.toPriceDash(value)
                    },
                    { key: 'createTime', value: item.CreateTime },
                ]
            };
        });

        let footer = [
            {
                type: 'sub',
                label: '小计',
                cells: {
                    agencyName: {
                        inCurrentPage: true,
                        aggregate: 'count',
                        format: (value) => `${value}辆`
                    },
                    amount: {
                        inCurrentPage: true,
                        aggregate: 'sum',
                        format: (value) => Formatter.toPriceDash(value),
                        textAlign: 'right',
                    },
                }
            },
            {
                type: 'total',
                label: '合计',
                cells: {
                    agencyName: {
                        aggregate: 'count',
                        format: (value) => `${value} 辆`
                    },
                    amount: {
                        aggregate: 'sum',
                        format: (value) => Formatter.toPriceDash(value),
                        textAlign: 'right',
                    },
                }
            },
        ];

        let pagination = {};

        return (
            <DataTable 
                toolbar={toolbar}
                query={query}
                header={header}
                rows={rows}
                footer={footer}
                pagination={pagination} />
        );
    }
}

Modal

模态窗口

props

属性 名称 类型 是否必须 默认值 可用值 示例说明
show 是否显示 bool true
max 最大化 bool false
title 标题 string 对话框
width 宽度 number 600
height 高度 number 500
minWidth 最小宽度 number
minHeight 最小高度 number
icons 标题栏右边显示的图标按钮 array Modal.MODAL_ICON ['resize', 'reload']
hideButtons 隐藏底部操作面板按钮栏 bool false
resizeable 窗口是否拖动改变大小 bool true
buttons 显示的按钮 array [Modal.MODAL_BUTTON.CONFIRM, Modal.MODAL_BUTTON.CANCEL] Modal.MODAL_BUTTON
padding 内边距 string 10px
confirmLoading 确认按钮加载状态 bool false true时确定按钮显示为loading状态
onConfirm 确定回调 func
onCancel 取消回调 func
onClose 关闭回调 func
onReload 重新加载回调 func
onResize 窗口大小改变回调 func
onDownload 下载回调 func
onOpenNew 新窗口打开回调 func

样式说明

Modal 内容为 flex 布局,即 style 的 display 值为 flex。

示例代码

import React, { Component } from 'react';
import { Modal, Button } from 'rj-react-ui';

export default class TestModalPage extends Component {
    constructor(props){
        super(props);
        this.state = { show:false };
    }

    handleToggleModal = () => {
        this.setState({show: !this.state.show});
    }

    handleModalConfirm = () => {
        alert('confirm');
    }

    render() {
        <div>
            <Button onClick={this.handleToggleModal}>显示隐藏对话框</Button>
            <Modal show={this.state.show} onConfirm={this.handleModalConfirm}>
                这是对话框内容
            </Modal>
        </div>
    }
}


Modal.MODAL_ICON

对话框右上角图标

名称 说明
DOWNLOAD download 下载
RELOAD reload 重新加载
RESIZE resize 最大化/还原
OPEN_NEW open_new 新窗口打开

Modal.MODAL_BUTTON

对话框按钮

常量 说明
CONFIRM confirm 确定或是
CANCEL cancel 取消或否

Modal.MODAL_BUTTON_TYPE

按钮样式

常量 说明
DEFAULT default 默认
YES_NO yes_no 是否

ModalEnhance

Modal高阶组件

ModalEnhance 作用是在 HTML 页面中的 body 顶层结尾创建 Modal 的宿主结点,用 ModalEnhance 扩展的组件采用 show 方法直接调用。 特别说明: 用 ModalEnhance 时,在 Modal 上需要绑定 onClose, onCancel, onConfirm 事件,一般情况下 onClose 和 onCancel 绑定 props.onClose 和 props.onCancel。

show方法说明

show方法接受一个对象参数,该对象参数可取属性为 Modal 的 props 属性

示例代码

// BaseEdit.jsx

import React, { Component } from 'react';
import { Modal, ModalEnhance, Button } from 'rj-react-ui';

class BaseEdit extends Component {
    constructor(props){
        super(props);
    }

    handleModalConfirm = () => {
        // TODO
        this.props.onConfirm();
    }

    render() {
            <Modal title="编辑基础信息"
                onClose={this.props.onClose}
                onCancel={this.props.onCancel}
                onConfirm={this.handleModalConfirm}>
                {this.props.data.text}
            </Modal>
    }
}

export default ModalEnhance(BaseEdit)

// Index.jsx

import React, { Component } from 'react';
import { Button } from 'rj-react-ui';

import BaseEdit from './BaseEdit.jsx';

export default class BaseEdit extends Component {
    constructor(props){
        super(props);
    }

    handleEditClick = ()=> {
        BaseEdit.show({
            data: { text: '编辑内容' },
            onConfirm: ()=> {
                // TODO 确认回调处理
            }
        });
    }

    render() {
        return (<Button onClick={this.handleEditClick}>编辑</Button>);
    }
}

Readme

Keywords

none

Package Sidebar

Install

npm i rj-react-ui

Weekly Downloads

37

Version

1.1.5

License

MIT

Unpacked Size

553 kB

Total Files

8

Last publish

Collaborators

  • cheney0618