$ cnpm install @uyun/ec-user-picker
当前版本:3.x
作者:沈挺
用户选择组件。
用于选择租户下的所有用户或用户组。
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
disabled | 是否禁用 | boolean | false |
selectionType | 多选/单选,checkbox 或radio |
string | checkbox |
showUsers | 是否显示用户模块 | boolean | true |
showGroups | 是否显示用户组模块 | boolean | true |
getUsers | 自定义获取用户数据的接口,参考 自定义接口 | getUsers | - |
getGroups | 自定义获取用户组数据的接口,参考 自定义接口 | getGroups | - |
getDeparts | 自定义获取部门数据的接口,参考 自定义接口 | getDeparts | - |
getDepartList | 自定义搜索部门数据的接口,参考 自定义接口 | getDepartList | - |
value | 已选择项 | ValueObject | - |
onChange | 改变选中项时的回调 | function(value) | - |
children | 自定义扩展列表,参考 自定义扩展列表 | ReactNode | - |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
productName | 产品名称,传入后只会获取当前产品下的数据 | string | - |
mode | 设置模式 | string: default inline dropdown select |
default |
getPopupContainer | 菜单渲染父节点,mode 为 select 时有效 |
Function(triggerNode) | triggerNode => triggerNode.parentNode |
width | 下拉内容的渲染宽度,mode 为 dropdown 或 select 时有效 |
number | - |
maxHeight | 下拉内容的渲染最大高度,mode 为 dropdown 或 select 时有效 |
number | 460 |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
appId | 产品 id,传入后只会获取当前产品下的数据 | string | - |
showTags | 是否显示标签模块 | boolean | true |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
rowKeyMap | 模块与数据 key 的映射关系 | object | - |
数据格式参考:
{
// 用户
users: [
{
userId: '...',
account: 'admin',
realname: 'admin',
departs: ['顶级部门'],
...
}
],
// 用户组
groups: [
{
groupId: '...',
name: '用户组',
...
}
],
// 自定义扩展列表的数据
others: [
{ ... }
]
}
当默认的数据源无法满足业务需求时,可自定义组件中的接口,需要注意请求参数的传递和确保返回正确的数据格式。由于数据量较大,所以返回的分页信息中不包含数据总数。
以getUsers
为例:
import UserPicker from '@uyun/ec-user-picker'
import { getUsers } from '@uyun/ec-user-picker/lib/services/api'
...
<UserPicker
getUsers={params => {
return getUsers({
// params 是页面中的分页、搜索等信息,
// 可根据情况将这个对象更改为符合自定义接口的参数,
// 例如,产品要求将用户数据源限制在某一个范围内,
// 就可通过自定义接口参数来过滤用户数据。
...params,
userIds: ['...', '...']
})
.then(data => {
// data 是请求后获得的数据,
// 可根据情况将这个数组更改为组件要求的数据格式,
// 例如,自定义接口中用户唯一标识为 'id',而组件要求的则是 `userId`,
// 那么你应该在此将所有用户数据中的 'id' 更改为 'userId'。
return data
})
}}
value={this.state.value}
onChange={this.onChange}
/>
...
请求参数传递:
参数 | 说明 | 类型 |
---|---|---|
appId | 应用 id,筛选当前产品的用户 | string |
userInfo | 用户信息,多字段查询,可为姓名、账号、邮箱 | string |
userIds | 用户 id 组,筛选属于其中的用户 | string |
departId | 部门 id,筛选当前部⻔的用户 | string |
groupId | 用户组 id,筛选当前用户组的用户 | string |
pageIndex | 当前页数 | number |
pageSize | 每页条数 | number |
返回数据格式:
参数 | 说明 | 类型 |
---|---|---|
pageNo | 当前页数 | number |
pageSize | 每页条数 | number |
records | 用户列表 | object[] |
请求参数传递:
参数 | 说明 | 类型 |
---|---|---|
appId | 应用 id,筛选当前产品的用户组 | string |
name | 用户组名称 | string |
pageIndex | 当前页数 | number |
pageSize | 每页条数 | number |
返回数据格式:
参数 | 说明 | 类型 |
---|---|---|
pageNo | 当前页数 | number |
pageSize | 每页条数 | number |
records | 用户列表 | object[] |
请求参数传递:
参数 | 说明 | 类型 |
---|---|---|
parent_depart_id | 上级部门 id,获取此部门下属的部门列表,获取顶级部门时传 0 |
string |
返回数据格式:
参数 | 说明 | 类型 |
---|---|---|
- | 部门列表 | object[] |
请求参数传递:
参数 | 说明 | 类型 |
---|---|---|
name | 部门名称 | string |
返回数据格式:
参数 | 说明 | 类型 |
---|---|---|
- | 部门列表 | object[] |
当业务需求需要使用除用户和用户组以外的数据源时,可对组件进行额外扩展,添加多个自定义选择项列表。进行扩展时,需要注意自定义的组件要满足一定要求。
以扩展一个部门
列表为例:
// 自定义扩展组件通过 selectedRowKeys 进行选择项的显示,
// 调用 onSelect 和 onSelectAll 进行数据的向上传递,
// 最后通过其它属性控制页面的布局和搜索等功能。
class UserPickerPane extends React.Component {
// 必填
onSelect = (record, selected, selectedRows) => {
const { type, rowKey, onSelect } = this.props
if (onSelect) {
onSelect(type, rowKey, record, selected, selectedRows)
}
}
// 必填
onSelectAll = (selected, selectedRows, changeRows) => {
const { type, rowKey, onSelectAll } = this.props
if (onSelectAll) {
onSelectAll(type, rowKey, selected, selectedRows, changeRows)
}
}
render () {
const {
rowKey, size, columns, dataSource,
pagination, selectedRowKeys,
} = this.props
return (
<div>
<Form layout='inline'>
<Form.Item>
<Input.Search placeholder='请输入关键字' />
</Form.Item>
</Form>
<Table
rowKey={rowKey}
size={size}
columns={columns}
dataSource={dataSource}
rowSelection={{
selectedRowKeys,
onSelect: this.onSelect,
onSelectAll: this.onSelectAll,
}}
pagination={pagination}
/>
</div>
)
}
}
...
state = {
value: {
users: [],
groups: [],
// 部门列表的选择项
departs: []
}
}
...
<UserPicker
value={this.state.value}
onChange={this.onChange}
>
{/* 使用自定义组件时,需要传入文档中标注的必填项 */}
<UserPickerPane
// 必填,对应 value 中的字段名
type='departs'
// 必填,数据的唯一标识
rowKey='departId'
// 必填,标签显示文字
tab='部门'
columns={[
{
title: '名称',
dataIndex: 'name'
}
]}
dataSource={departsData}
// 必填,回填到选择框的 Option,需要在 title 中传入 Tooltip 组件
renderTag={record => (
<Option
title={
<Tooltip title={record.name}>
{record.name}
</Tooltip>
}
>
{record.name}
</Option>
)}
/>
</UserPicker>
...
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
type | 扩展类型,对应 value 中的字段名 | string | - |
rowKey | 扩展数据的唯一标识 | string | - |
tab | 扩展的标签显示文字 | string | - |
renderTag | 扩展回填到选择框的 Option,需要在 title 中传入 Tooltip 组件 | function(record) => ReactNode | - |
Copyright 2013 - present © cnpmjs.org