djm-ui

DJM UI — 企业级中后台 Vue 3 组件库
Install
npm install djm-ui
Latest Version:0.74.2
Vue:3
License:MIT
Last Updated:Oct 27, 2026
Links: Repository  ·  npm
Maintainer: shyohan

DJM UI

面向企业级中后台的 Vue 3 组件库:100 个组件、明暗主题与品牌色、中英文文案、按钮权限,自带完整文档与无障碍校验。

  • 官网与文档:https://ui.duojumi.com
  • npm:https://www.npmjs.com/package/djm-ui

环境要求

  • Vue 3.4+
  • 现代浏览器:Chrome / Edge / Firefox / Safari 最近两个大版本(不支持 IE)
  • 组件在挂载后访问 DOM,SSR 场景需在客户端调用 initTheme(),服务端只渲染结构

安装

npm i djm-ui

使用

全量注册

import { createApp } from 'vue'
import DjmUI from 'djm-ui'
import 'djm-ui/styles'
import App from './App.js'

createApp(App)
  .use(DjmUI, { locale: 'zh-CN' })
  .mount('#app')

.use(DjmUI, options) 会注册全部组件与 v-permission 指令,options.locale 可省略,默认中文。

按需引入

ESM 产物支持 tree-shaking,按名字引入即可,未使用的组件不会进入打包结果:

import { DjmButton, DjmTable } from 'djm-ui'
import 'djm-ui/styles'

只要部分组件样式时,按依赖顺序引入基础样式与组件样式:

import 'djm-ui/styles/tokens.css'          // 设计变量
import 'djm-ui/styles/theme-dark.css'      // 暗色主题
import 'djm-ui/styles/base.css'            // 基础重置与工具类
import 'djm-ui/styles/components/button.css'
import 'djm-ui/styles/components/motion.css' // 弹窗、抽屉等过渡动画

模板编译与 CSP

组件用运行时模板编写,需要带编译器的 Vue 构建;npm 里的 vue 默认是 runtime-only,打包时指向完整版:

// vite.config.js
export default {
  resolve: { alias: { vue: 'vue/dist/vue.esm-bundler.js' } }
}

运行时编译依赖 new Function,严格 CSP(script-src 不含 'unsafe-eval')下会直接报错,需要先放开 'unsafe-eval';预编译产物在规划中。

栅格

DJM UI 的栅格由 Row / Col 两部分组成,按需引入走各自路径:

import DjmRow from 'djm-ui/components/grid/row'
import DjmCol from 'djm-ui/components/grid/col'

CDN

UMD 产物复用全局 Vue,不会重复打包 Vue。Vue 必须先加载。

下面用 fastly.jsdelivr.net(jsDelivr 官方镜像);国内访问 cdn.jsdelivr.net 常被拦截,换成 unpkg.com 或 gcore.jsdelivr.net 同理:

<link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/djm-ui@0.74.2/dist/djm-ui.min.css" />
<script src="https://fastly.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script>
<script src="https://fastly.jsdelivr.net/npm/djm-ui@0.74.2/dist/djm-ui.umd.min.js"></script>

<script>
  Vue.createApp({
    template: '<DjmButton variant="primary">按钮</DjmButton>'
  }).use(DjmUI).mount('#app')
</script>

后台模板

需要开箱即用的后台壳(侧边 / 顶部通栏 / 混合 / 双列、页签、用户菜单、皮肤面板、窄屏抽屉)和页面范式时,安装配套模板包:

npm i djm-ui-admin

模板自带登录、个人中心、修改密码、账号设置、异常页,以及用户 / 部门 / 数据字典 / 文件四个业务页,统一走 api 适配层注入数据,不含演示数据。详见 admin/README.md 与文档站「Admin 后台模板」。

响应式

组件按容器宽度自适应,不依赖具体业务布局,断点与行为如下:

断点 行为
≤1320px 顶部菜单布局收起横向菜单,改用侧栏抽屉
≤960px 侧栏改为抽屉;个人资料、修改密码等左右两栏改为上下堆叠
≤760px 栅格强制单列、横向表单标签上移、行内筛选竖排、列表页整页自然滚动;日期范围只显示一个月,日期时间面板改为上下排
≤620px 顶栏搜索收成图标,点开后铺满顶栏
≤420px 隐藏皮肤按钮、分页按钮压缩、日期区间上下排

组件自身的窄屏处理:

  • 表格、周日程、甘特图、看板在容器内横向滚动,不把页面撑宽
  • 下拉、日期、颜色、树选择等浮层按视口自动向上翻转并限制在视口内,超高时面板内部滚动
  • 图标类按钮(清空、关闭、展开)在手机端扩大透明点击区,文字操作按钮补充高度
  • 动态字段、导入向导、批量操作条等复合组件在手机上改为单列排布

主题与主色

import { initTheme, toggleTheme, setPrimaryColor, resetPrimaryColor, PRESET_COLORS } from 'djm-ui'

initTheme()                 // 启动时恢复上次选择
toggleTheme()               // light / dark
setPrimaryColor('#12855a')  // 自定义主色,自动推导整套色阶
resetPrimaryColor()         // 回到默认蓝

外观与导航

示例应用右上角「皮肤」面板可以自由组合,选择写入 localStorage,刷新后保留:

项目 可选值
主题预设 经典浅色 / 深海夜色 / 深色侧栏 / 混合导航 / 顶部通栏 / 双列菜单
导航布局 侧边、顶部通栏、混合(顶部一级 + 侧栏二级)
侧栏配色 跟随主题、浅色、深色、品牌色,可与全局明暗相反(左深右浅 / 左浅右深)
菜单样式 单列内嵌、双列(一级一列、二级一列,三层菜单用分组标题展示)

侧栏单独配色时会按当前主色重新推导一套色阶,换主色侧栏同步变化。空间不够时自动降级:≤1320px 混合布局收起顶部一级菜单改抽屉,≤1100px 双列菜单退回单列,≤960px 统一变成抽屉。

AI 助手(MCP)

组件库内置 MCP(Model Context Protocol)服务,AI 编程助手可以在写页面前查询当前版本的组件清单、props、事件、插槽、示例与 DSL:

npm i -D djm-ui
npx djm-ui-mcp

在 Cursor / Trae / Claude Code 的 MCP 配置里加入:

{
  "mcpServers": {
    "djm-ui": { "command": "npx", "args": ["djm-ui-mcp"] }
  }
}

提供 8 个工具:get_component_list、get_component_doc、get_component_props、search_components、get_component_examples、get_component_dsl、get_installation_guide、get_library_info。

manifest 在每次构建时由文档页生成,随包版本发布;npm test 校验数据完整性,npm run test:mcp 校验 stdio 服务与工具调用。

国际化

import { setLocale, localeState, t } from 'djm-ui'

setLocale('en-US')
localeState.code          // 当前语言
t('table.empty')          // 取文案,支持 t('diff.expand', { count: 12 })

按钮权限

import { setPermissions } from 'djm-ui'

setPermissions(['user:add', 'user:edit'])
<DjmButton v-permission="'user:add'">新增用户</DjmButton>
<DjmButton v-permission.disable="['user:export']">导出</DjmButton>

没有权限时元素被移除;加 .disable 修饰符则只禁用置灰。界面显隐不能替代服务端校验。

构建产物

文件 用途
dist/djm-ui.esm.js / .min.js 现代打包器入口,Vue 作为 peer 外置
dist/djm-ui.cjs / .min.cjs CommonJS 环境
dist/djm-ui.umd.js / .min.js 浏览器 <script>,读取全局 Vue
dist/djm-ui.css / .min.css 组件库样式,不含示例应用样式

本地开发

npm run dev        # 官网 http://localhost:5180(首页落地页,/app/ 示例应用,/docs/ 文档,/admin/ 模板介绍)
npm run docs       # 文档站 http://localhost:5181
npm run dev:admin  # 后台模板 demo(admin/demo,Vite)
npm test           # 语法 + 模板编译 + 类名命名空间 + 组件一致性审计
npm run typecheck  # 类型声明校验
npm run build      # 构建样式与 ESM / CJS / UMD
npm run visual     # 视觉回归

官网部署

官网跑在 ui.duojumi.com,宝塔静态站点,目录 /www/wwwroot/ui.duojumi.com:

路径 内容
/ 落地页(仓库根 index.html,自带 SEO meta 与 JSON-LD)
/admin/ 后台模板介绍页(admin/index.html,只传这一个文件)
/app/ 示例应用(app/index.html)
/docs/ 组件文档(docs/)
/robots.txt、/sitemap.xml、/llms.txt 搜索引擎与 AI 索引

文档页依赖仓库里的 docs/、src/styles、vendor/ 保持相对路径,所以整块同步:

./scripts/deploy-docs.sh

脚本先删远端旧目录再整块解包,最后统一改成 www:www + 目录 755 / 文件 644,服务器上不用手工改文件。默认走 root@100.112.203.74 + ~/.ssh/jzjl_deploy,可用 DJM_DOCS_HOST / DJM_DOCS_KEY / DJM_DOCS_PATH 覆盖。Nginx 配置见 deploy/nginx/ui.duojumi.com.conf。

换一台机器

代码和脚本都在仓库里,凭据不进 git,换机器要单独带三样:

凭据 位置 用途 怎么拿
部署私钥 ~/.ssh/jzjl_deploy(ed25519,无口令) 部署官网 从原机器拷一份;或把 jzjl_deploy.pub 追加到服务器 root 的 ~/.ssh/authorized_keys
GitLab 账号 远程是 https://yohan.cloud:8081/DJM/dimui.git 拉取与推送 在 GitLab 里建个人访问令牌,克隆时当密码用
npm 令牌 ~/.npmrc 的 //registry.npmjs.org/:_authToken= 发布到 npm npm login,或在 npmjs 后台生成 Automation token

初始化顺序:

git clone https://yohan.cloud:8081/DJM/dimui.git
cd dimui && npm install

# 放私钥并收紧权限,缺了它部署脚本会直接报错
cp /path/to/jzjl_deploy ~/.ssh/ && chmod 600 ~/.ssh/jzjl_deploy

# 逐项验证
ssh -i ~/.ssh/jzjl_deploy root@100.112.203.74 hostname   # 能打印主机名即可
./scripts/deploy-docs.sh                                  # 部署一遍官网
npm whoami --registry=https://registry.npmjs.org           # 打印 shyohan 即可发布

注意:本机 npm 默认源是 npmmirror 镜像,npm publish 依赖 package.json 里的 publishConfig.registry 走官方源;npm whoami、npm view 这类命令要显式加 --registry=https://registry.npmjs.org,否则会报未登录。

发布

npm run release -- patch   # 或 minor / major / 1.2.3
npm publish                # 组件库
cd admin && npm publish    # 后台模板,与组件库同版本号

发布前需在 CHANGELOG.md 顶部补好对应版本段落,脚本会拒绝在没有更新说明时改版本号。release 会一起同步 src/index.js、落地页、README、快速开始、llms.txt 与 admin/package.json 的版本号。

许可

MIT

Related Packages

@wil-works/evoke-business-ui

Evoke Business UI — 纯 JS Vue3 中后台组件库,内置 Remix Icon 图标体系(图表能力...

2,822 0
@alanlee97/lee-ui

基于 Vue 3 的轻量级 UI 组件库

909
@yymojo-tec/mojo-ui

Mojo UI 是 YYmojo 旗下维护的 UI 组件库。

9,973
whelk-ui

Vue3 Component Library for NearBeach

5,447
@finmars/ui

Finmars UI library for Vue 3 applications.

3,230

Version History

Version Released Vue License
0.74.2 ^3.4.0 MIT
0.74.1 ^3.4.0 MIT
0.74.0 ^3.4.0 MIT
0.73.2 ^3.4.0 MIT
0.73.1 ^3.4.0 MIT
Pre-releases (1)
Version Released License
0.0.0-stage