作者:李明骏  历史版本: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 选择器的尺寸,可以是 mediumsmalldefault 等。

事件

事件名 说明 返回值
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 对话框关闭时触发