作者:李明骏 历史版本:1 最后编辑:李明骏 更新时间:2024-09-11 09:48
编写版本:v1.2.1
适用版本:v1.2.0+
前置条件:使用的工程需在 Webpack5 版本以上,并使用模块联邦(ModuleFederationPlugin)接入 ui-base-core 项目提供的共享组件
共享组件-选择器
一、 效果图
用户选择器:
组织选择器:
角色选择器:
岗位选择器:
二、 组件路径
选择器 baseCore/core-selector.vue
选择器-用户弹窗 baseCore/user-selector-dialog.vue
选择器-角色弹窗 baseCore/role-selector-dialog.vue
选择器-岗位弹窗 baseCore/position-selector-dialog.vue
选择器-组织弹窗 baseCore/org-selector-dialog.vue
源码:ui-base-core/src/components/core-ibps/org/selector/index.vue
三、 使用举例
选择器输入框
template
<template>
<!-- 用户选择器 -->
<core-selector
v-model="userIds"
:type="'user'"
:placeholder="'请选择用户'"
:multiple="true"
:readonly="false"
:disabled="false"
/>
<!-- 角色选择器 -->
<core-selector
v-model="roleIds"
:type="'role'"
:placeholder="'请选择角色'"
:multiple="true"
:readonly="false"
:disabled="false"
/>
<!-- 岗位选择器 -->
<core-selector
v-model="positionIds"
:type="'position'"
:placeholder="'请选择岗位'"
:multiple="true"
:readonly="false"
:disabled="false"
/>
<!-- 组织选择器 -->
<core-selector
v-model="orgIds"
:type="'org'"
:placeholder="'请选择组织'"
:multiple="true"
:readonly="false"
:disabled="false"
/>
</template>
script
<script setup>
import { defineAsyncComponent } from 'vue';
export default {
components: {
CoreSelector: defineAsyncComponent(() => import('baseCore/core-selector.vue'))
},
data() {
return {
userIds: 'id1,id2',
roleIds: '',
position: '',
orgIds: '',
}
}
}
</script>
选择器弹窗
template
<template>
<!-- 用户选择器 -->
<UserSelector
:visible="personSelectorVisible"
:targetSelectusers="userSelectList"
@dialog-callback="handleAddData"
@close="() => personSelectorVisible = false"
/>
<!-- 角色选择器 -->
<RoleSelector
:visible="roleSelectorVisible"
:targetSelectRole="roleSelectList"
@dialog-callback="handleAddData"
@close="roleSelectorVisible = false"
/>
<!-- 岗位选择器 -->
<PositionSelector
:visible="postSelectorVisible"
:targetSelectPost="positionSelectList"
@dialog-callback="handleAddData"
@close="postSelectorVisible = false"
/>
<!-- 组织选择器 -->
<OrgSelector
:visible="orgSelectorVisible"
:target-select-org="orgSelectList"
@dialog-callback="handleAddData"
@close="orgSelectorVisible = false"
/>
</template>
script
<script setup>
import { defineAsyncComponent } from 'vue';
export default {
components: {
UserSelector: defineAsyncComponent(() => import('baseCore/user-selector-dialog.vue')),
RoleSelector: defineAsyncComponent(() => import('baseCore/role-selector-dialog.vue')),
PositionSelector: defineAsyncComponent(() => import('baseCore/position-selector-dialog.vue')),
OrgSelector: defineAsyncComponent(() => import('baseCore/org-selector-dialog.vue'))
},
data() {
return {
personSelectorVisible: false,
roleSelectorVisible: false,
postSelectorVisible: false,
orgSelectorVisible: false,
userSelectList: [],
roleSelectList: [],
positionSelectList: [],
orgSelectList: []
}
},
methods: {
/**
* 添加数据
*/
handleAddData(data) {
...
}
}
}
</script>
四、 组件API
core-selector
属性
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
items | Array | - | 要显示为标签的项目数组。 |
placeholder | String | 请选择 | 当未选择任何项目时显示的占位符文本。 |
multiple | Boolean | false |
是否允许多选。 |
icon | String | el-icon-plus | 输入框前面显示的图标。 |
disabledIcon | Boolean | false |
是否禁用输入框前面的图标。 |
disabled | Boolean | false |
是否禁用整个选择器。 |
readonly | Boolean | false |
是否只读模式,影响输入框和标签的显示方式。 |
showPlaceholder | Boolean | false |
是否始终显示占位符文本。 |
readonlyText | String | original | 只读模式时的显示样式,可以是 text 或 original。 |
tagType | String | - | 标签的类型,用于样式定制。 |
tagColor | String | - | 标签的颜色,用于样式定制。 |
isNoDetail | Boolean | false |
是否不显示详细信息。 |
size | String | default | 选择器的尺寸,可以是 medium 、small 、default 等。 |
事件
事件名 | 说明 | 返回值 |
---|---|---|
tag-click | 点击标签时触发 | (event, index) |
remove | 点击标签关闭按钮时触发 | index |
user-selector-dialog
属性
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
visible | Boolean | - | 对话框是否可见 |
targetSelectusers | Array | [] | 初始选择的用户数组 |
multiple | Boolean | true |
是否支持多选 |
curParentNode | Boolean | false |
是否仅加载当前组织及以下信息 |
size | String | default | 组件尺寸 |
formData | Object | {} | 表单数据 |
事件
事件名 | 说明 | 返回值 |
---|---|---|
dialog-callback | 对话框操作完成时触发 | 当前选择用户 |
close | 对话框关闭时触发 | 无 |
role-selector-dialog
属性
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
visible | Boolean | - | 对话框是否可见 |
targetSelectRole | Array | - | 初始选择的角色数组 |
multiple | Boolean | true |
是否支持多选 |
size | String | default | 组件尺寸 |
事件
事件名 | 说明 | 返回值 |
---|---|---|
dialog-callback | 对话框操作完成时触发 | 当前选择角色 |
close | 对话框关闭时触发 | 无 |
position-selector-dialog
属性
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
visible | Boolean | - | 对话框是否可见 |
targetSelectPost | Array | - | 初始选择的岗位数组 |
multiple | Boolean | true |
是否支持多选 |
size | String | default | 组件尺寸 |
事件
事件名 | 说明 | 返回值 |
---|---|---|
dialog-callback | 对话框操作完成时触发 | 当前选择岗位 |
close | 对话框关闭时触发 | 无 |
org-selector-dialog
属性
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
visible | Boolean | - | 对话框是否可见 |
targetSelectOrg | Array | - | 初始选择的组织数组 |
multiple | Boolean | true |
是否支持多选 |
size | String | default | 组件尺寸 |
事件
事件名 | 说明 | 返回值 |
---|---|---|
dialog-callback | 对话框操作完成时触发 | 当前选择组织 |
close | 对话框关闭时触发 | 无 |