@xdmp-open/ui-shared

XDMP platform shared Vue 3 components, directives and theme tokens
2,147
Install
npm install @xdmp-open/ui-shared
Latest Version:0.1.13
Vue:3
License:Apache-2.0
Last Updated:Oct 19, 2026
Links: npm
Maintainer: linkwith

@xdmp-open/ui-shared

XDMP 平台共享 Vue 3 组件库:业务通用组件、指令、样式主题与工具函数,自应用壳 xdmp-frontend/src 原样下沉(行为与样式零变化,仅做包化改造)。

vue、element-plus、@element-plus/icons-vue、echarts、@xdmp-open/sdk-admin 为 peerDependencies(宿主应用提供);vue-router 为可选 peer(仅 BackPage/PageDecs/PageDataInfo/PageMoreDataInfo 运行时使用宿主注入的 $router/$route)。

安装

pnpm add @xdmp-open/ui-shared

快速开始

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import UiShared, {
  setupPermissionDirective,
  registerSvgIcons,
  setupBinaryApi
} from '@xdmp-open/ui-shared'
import 'element-plus/dist/index.css'
import '@xdmp-open/ui-shared/style.css' // 组件 scoped 样式
import '@xdmp-open/ui-shared/styles'   // 全局主题(Element Plus CSS vars,主色 #0070FF)+ 过渡/按钮样式

const app = createApp(App)
app.use(ElementPlus)
app.use(UiShared) // 全局注册全部组件 + v-emoji / v-highlight 指令

// v-permission 指令需注入权限判定(包不再依赖宿主 store)
setupPermissionDirective(app, (roles) =>
  roles.some((role) => store.getters.roles.includes(role))
)

// IconSelect 的 SVG 图标列表由宿主注入(原为包内 import.meta.glob 应用图标目录)
const svgFiles = import.meta.glob('@/icons/svg/*.svg', { eager: true })
registerSvgIcons(
  Object.keys(svgFiles).map((k) => k.split('/').pop()!.replace(/\.svg$/, ''))
)

// AvatarUpload / FileUpload 依赖的二进制文件 API(xdmp-admin BinaryResource):
// 注入 sdk-core 请求引擎(评审结论:upload 组件只依赖 sdk-admin 的 binary api)
import { sdkClient } from '@/sdk'
setupBinaryApi(sdkClient)

也可按需单组件引入:

import { Pagination, XdmpDrawer } from '@xdmp-open/ui-shared'

注意:组件不再依赖宿主全局注册 element-plus 组件;但 PageDecs 等模板中的 xdmp-icon-*/el-icon-xdmp-* 图标字体 class、SvgIcon 的 SVG sprite(#icon-*) 仍由宿主应用提供(与原实现一致)。

组件清单

导出名 来源(应用壳) 说明
XdmpDrawer components/xdmpDrawer 抽屉容器(el-drawer 封装,footer 取消/确定)
SearchForm components/SearchForm 配置式搜索表单(内部依赖 MultipleTree)
Pagination components/Pagination 分页(el-pagination 封装,含 scrollTo)
TreeSelect components/TreeSelect 树下拉选择
MultipleTree views/components/multipleTree.vue 多选树下拉(SearchForm 内部依赖,随包迁移)
BackPage components/BackPage 返回栏(使用宿主 $router)
PageDataInfo components/pageDataInfo 详情信息列表(脱敏/复制/Accesskey)
PageDecs components/pageDecs 页面标题+描述(背景图已随包携带)
PageMoreDataInfo components/pageMoreDataInfo 分组详情信息(查看更多展开)
IconSelect components/IconSelect 图标选择器(SVG 图标需 registerSvgIcons 注入)
SvgIcon components/SvgIcon SVG sprite 图标(sprite 由宿主提供)
KeyboardChart / LineMarkerChart / MixChart components/Charts echarts 示例图表(依赖 peer echarts)
ChartComponent components/ChartComponent echarts 配置式图表
VueCountTo components/VueCountTo 数字滚动
ScaleSrceen components/scaleSrceen 大屏自适应缩放(组件名 VScaleScreen)
AvatarUpload components/Upload/AvatarUpload 头像上传(需 setupBinaryApi 注入)
FileUpload components/Upload/FileUpload 文件上传(需 setupBinaryApi 注入)

指令

指令 注册方式 说明
v-emoji install 自动注册 过滤 input/textarea 中的 emoji/utf8mb4 字符
v-highlight install 自动注册 pre code 块行号 + highlight.js 高亮
v-permission setupPermissionDirective(app, hasPermission) 注入式权限判定,无权限时移除元素

工具函数

  • $on / $off / $once / $emit —— Vue 2→3 事件桥(gogocodeTransfer)
  • scrollTo、debounce、isExternal
  • Encrypt —— 原 this.$Encrypt globalProperties 的显式 import 替代(encode/decode/randomEncode/randomDecode)
  • registerSvgIcons / useIcons —— IconSelect 图标数据源
  • setupBinaryApi(client) / binaryUpload / binaryDownloadBlob —— 二进制文件 API(注入式,基于 @xdmp-open/sdk-admin 的 BinaryResource)
  • chartResizeMixin —— echarts resize mixin(原 components/Charts/mixins/resize)

样式

  • @xdmp-open/ui-shared/style.css —— 全部组件 scoped 样式(构建时抽取)
  • @xdmp-open/ui-shared/styles —— 全局样式(element-variables 主题 CSS vars、transition、btn 等)
  • SCSS 源文件同步发布于 dist/styles/*.scss(子路径 ./styles/*.scss),供需要 @use 变量/mixin 的宿主使用

开发

pnpm build      # vite lib mode + d.ts(vite-plugin-dts)+ sass 编译全局样式
pnpm test       # vitest + @vue/test-utils + jsdom
pnpm typecheck  # vue-tsc --noEmit

Related Packages

@xdmp-open/ui-iot

XDMP platform IoT business page components: project/thing/sense/monitor/cockpit...

4,482
@xdmp-open/ui-admin

XDMP platform admin business page components (Vue 3 + Element Plus)

2,419
@xdmp-open/ui-lowcode

XDMP low-code compatibility facade: re-exports core + Element adapter

1,193
mcl-ui-framework

A Vue 3 UI framework with Element Plus and custom components

6,066
@hanvzur/aor-ui

一个基于Vue3 和Element Plus 的自定义组件库

304

Version History

Version Released License
0.1.13 Apache-2.0
0.1.12 Apache-2.0
0.1.11 Apache-2.0
0.1.10 Apache-2.0
0.1.9 Apache-2.0