更新记录
1.0.0(2026-07-17) 下载此版本
- 首发:Vue3 条形码组件,兼容 App(vue) / H5 / 各小程序 / 鸿蒙
- 多码制:CODE128 / CODE39 / EAN / UPC / ITF / MSI / Codabar / Pharmacode
- 相对旧 jnpf-barcode / tki-barcode:
- 修正 UPC 误映射 UPCE
- 编码校验失败有明确错误与重试
- v-model、内容变化自动重绘
- 下方可读标签、复制、保存相册、卡片外观
- 空状态 / 加载中 / 失败态插槽
- 支付宝 canvas 条件编译;无多余 hideLoading
- 去表单耦合,业务直接传值即可
- 高清输出:按设备 pixelRatio 放大绘制并导出,条宽取整
- 新增
quality:high/medium/low或自定义倍率 1~4 - 点击条码图支持全屏预览(
preview默认开启);ref.preview()可命令式打开 - 更清晰:默认 3~4 倍 物理像素整数绘制(去掉 ctx.scale,部分端更锐利)
- 默认条宽
3、高度100;展示图pixelated减少插值发糊
平台兼容性
uni-app(3.8.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | 4.4 | 12 | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
kex-barcode
跨端条形码生成组件(uni-app Vue3 / <script setup>)。
在 tki-barcode / JsBarcode 思路上重做:更易用、错误可感知、多端更稳,并修正原版 UPC 映射问题。
支持:H5 / App(vue 页)/ 微信小程序 / 支付宝小程序 / 其它小程序 / 鸿蒙。
请在 vue 页面使用(依赖 canvas,不支持 nvue)。
目录
功能一览
| 能力 | 说明 |
|---|---|
| 多码制 | CODE128 / CODE39 / EAN13·8 / UPC / ITF / MSI / Codabar 等 |
| v-model | modelValue 绑定条码内容,改值可自动重绘 |
| 自动生成 | loadMake + autoMake |
| 展示优化 | 图片铺满容器 fit、卡片外观 appearance="card" |
| 可读标签 | 图下显示内容;长按可复制 |
| 复制 / 保存 / 预览 | 内置按钮或 ref.copy() / ref.save() / ref.preview();点击图片默认全屏预览 |
| 状态完善 | 空状态、加载中、校验失败提示与重试 |
| 插槽 | empty / loading / error |
| 修正缺陷 | 原版 UPC 误指向 UPCE 已修复 |
安装
拷贝到业务项目:
你的项目/uni_modules/kex-barcode/
easycom 自动注册,页面直接写标签,无需 import。
要求:uni-app Vue3;App 使用 vue 页。
演示页:首页 → kex-barcode,或 /pages/demos/barcode/index。
快速上手
1. 最少代码
<template>
<kex-barcode v-model="code" />
</template>
<script setup>
import { ref } from 'vue'
const code = ref('KEX20260717001')
</script>
2. 指定码制与样式
<template>
<kex-barcode
v-model="code"
format="CODE128"
:bar-width="2"
:height="90"
line-color="#1c1917"
background="#ffffff"
appearance="card"
/>
</template>
<script setup>
import { ref } from 'vue'
const code = ref('ABC-123456')
</script>
3. EAN-13 商品码
<!-- 内容需符合 EAN13 规则(12 位数字 + 校验或 13 位) -->
<kex-barcode v-model="ean" format="EAN13" :display-value="true" />
const ean = ref('6901234567892')
4. 带操作按钮(复制 / 保存相册)
<kex-barcode
v-model="code"
:show-actions="true"
:copyable="true"
:saveable="true"
/>
点击条码图默认会 全屏预览(preview 默认为 true)。
5. 关闭预览 / 改为点击复制
<!-- 不预览 -->
<kex-barcode v-model="code" :preview="false" />
<!-- 不预览,点击复制内容 -->
<kex-barcode v-model="code" :preview="false" :click-copy="true" />
进阶用法
内容变化自动刷新
默认 autoMake 为 true,改 v-model 即可重绘:
<template>
<input v-model="code" placeholder="输入条码内容" />
<kex-barcode v-model="code" />
</template>
手动触发重绘
<template>
<kex-barcode ref="bcRef" :model-value="code" :auto-make="false" :load-make="false" />
<button @click="bcRef.make()">生成</button>
</template>
<script setup>
import { ref } from 'vue'
const code = ref('HELLO')
const bcRef = ref(null)
</script>
自定义空 / 错状态
<kex-barcode v-model="code">
<template #empty>
<text>请先填写单号</text>
</template>
<template #error="{ message }">
<text>生成失败:{{ message }}</text>
</template>
</kex-barcode>
点击图片复制
需先关闭预览,否则点击会进入预览:
<kex-barcode v-model="code" :preview="false" :click-copy="true" @copy="onCopy" />
兼容旧 prop 名 val
<kex-barcode :val="staticText" format="code128" />
modelValue 优先;未传 v-model 时可用 val。
支持的码制
| format | 说明 | 内容要求(简述) |
|---|---|---|
| CODE128(默认) | 通用,字母数字 | 较宽松 |
| CODE128A / B / C | 子集 | 按子集字符集 |
| CODE39 | 工业常用 | 大写字母、数字等 |
| EAN13 / EAN8 | 商品条码 | 数字位数与校验位 |
| EAN5 / EAN2 | 附加码 | 数字 |
| UPC / UPCE | 北美商品码 | 数字规则 |
| ITF / ITF14 | 交叉 25 | 偶数位数字等 |
| MSI 系列 | 库存等 | 数字 |
| CODABAR | 物流等 | 特定起止符 |
| PHARMACODE | 医药 | 数字范围 |
format 大小写不敏感,code128 / CODE128 均可。
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| modelValue | String | Number | '' |
v-model 条码内容 |
| val | String | Number | — | 兼容旧写法(无 v-model 时) |
| format | String | CODE128 |
码制 |
| barWidth | Number | 3 |
单条宽度(见 unit) |
| height | Number | 100 |
条码高度(见 unit) |
| unit | String | rpx |
rpx 或 px |
| lineColor | String | #1c1917 |
条颜色 |
| background | String | #ffffff |
背景色 |
| displayValue | Boolean | false |
canvas 内是否画文字 |
| showLabel | Boolean | true |
图下是否显示可读文字 |
| labelText | String | '' |
覆盖标签文案 |
| textAlign | String | center |
left / center / right |
| textPosition | String | bottom |
top / bottom |
| textMargin | Number | 4 |
条与文字间距 |
| fontSize | Number | 24 |
文字大小(unit) |
| fontColor | String | #1c1917 |
文字颜色 |
| margin | Number | 10 |
四周边距 |
| autoMake | Boolean | true |
内容/样式变化自动重绘 |
| loadMake | Boolean | true |
挂载后自动生成 |
| fit | Boolean | true |
图片宽度 100% 自适应 |
| displayWidth | Number | 0 |
fit=false 时展示宽(px) |
| appearance | String | plain |
plain / card |
| emptyText | String | 暂无条码内容 |
空状态文案 |
| showRetry | Boolean | true |
失败时显示重试 |
| showActions | Boolean | false |
显示复制/保存按钮区 |
| copyable | Boolean | true |
显示复制(需 showActions) |
| saveable | Boolean | true |
显示保存(需 showActions) |
| clickCopy | Boolean | false |
点击图片复制内容(仅当 preview=false 时生效) |
| preview | Boolean | true |
点击条码图全屏预览(uni.previewImage) |
| quality | String | Number | 'high' |
清晰度:high(默认 3~4x)/ medium(2x)/ low(1x),或传 1~4 |
Events
| 事件 | 参数 | 说明 |
|---|---|---|
| update:modelValue | value | v-model(本组件通常只读展示,一般由外部改值) |
| success | { path, value, format } |
生成成功,path 为临时图片路径 |
| result | path |
同成功时的图片路径(兼容旧习惯) |
| fail | err |
编码失败或导出失败 |
| click | { value, path, event } |
点击条码图(预览/复制之前触发) |
| copy | value |
复制成功 |
| save | path |
保存相册成功 |
| preview | path |
打开全屏预览时 |
方法 ref
bcRef.value.make() // 重新生成
bcRef.value.clear() // 清空展示
bcRef.value.copy() // 复制内容
bcRef.value.save() // 保存到相册
bcRef.value.preview() // 全屏预览当前条码图
bcRef.value.getResult() // 返回当前图片路径
bcRef.value.formats // 支持的码制列表
插槽
| 插槽 | 参数 | 说明 |
|---|---|---|
| empty | — | 无内容时 |
| loading | — | 生成中 |
| error | { message } |
失败时 |
多端说明
| 端 | 支持 | 说明 |
|---|---|---|
| H5 | √ | canvas → 临时图 |
| App(vue) | √ | 同上;保存需相册权限 |
| 微信小程序 | √ | |
| 支付宝小程序 | √ | canvas API 已条件编译 |
| 其它小程序 / 鸿蒙 | √ | |
| nvue | - | 请用 vue 页 |
常见问题
1. 条码不显示?
- 确认
v-model/val有内容 - EAN/UPC 等内容不符合规则会进失败态,看错误文案或点重试
- 重新编译(非仅热更新)
2. 条码看起来模糊?
默认已按屏幕像素比 3~4 倍 在物理像素上绘制。仍觉得糊可:
<kex-barcode v-model="code" :quality="4" :bar-width="4" :height="120" />
3. 保存到相册失败?
需用户授权相册权限;App 端失败时会尝试引导打开设置。
4. 和旧 jnpf-barcode 表单关联怎么迁?
旧组件用 dataType + formData + relationField 拼值。新组件只负责展示,在页面里自己拼好字符串再传入:
const code = computed(() => `${form.orderNo}${form.sku}`)
<kex-barcode v-model="code" />
5. 单位用 px 还是 rpx?
默认 unit="rpx",与设计稿一致。若按物理像素精细控制,设 unit="px"。
相对旧组件的提升
| 点 | 旧 Barcode / tki | kex-barcode |
|---|---|---|
| 框架 | Vue2 Options | Vue3 <script setup> |
| 表单耦合 | 强(formData) | 无,纯展示 |
| UPC | 误映射 UPCE | 已修正 |
| 错误反馈 | 弱 / 可能空白 | 失败文案 + 重试 |
| 自动更新 | 靠 key 强刷 | autoMake 监听 |
| 复制保存 | 基本无 | 内置 |
| 空/载入态 | 无 | 有 |
| hideLoading | 可能误关全局 loading | 已去掉 |
| 文档 | 几乎无 | 本 readme |
注意事项
- 仅 Vue3;工程
vueVersion: "3"。 - 必须在 vue 页面使用 canvas。
- 发布只需拷贝
uni_modules/kex-barcode。 - 部分码制对内容校验严格,失败时请核对位数与字符集。
版本
见 changelog.md。当前文档对应 1.0.3。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 8
赞赏 0
下载 12436589
赞赏 1934
赞赏
京公网安备:11010802035340号