更新记录

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 放大绘制并导出,条宽取整
  • 新增 qualityhigh / 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)。


目录

  1. 功能一览
  2. 安装
  3. 快速上手
  4. 进阶用法
  5. 支持的码制
  6. Props
  7. Events
  8. 方法 ref
  9. 插槽
  10. 多端说明
  11. 常见问题
  12. 相对旧组件的提升
  13. 注意事项
  14. 版本

功能一览

能力 说明
多码制 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" />

进阶用法

内容变化自动刷新

默认 autoMaketrue,改 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 rpxpx
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

注意事项

  1. 仅 Vue3;工程 vueVersion: "3"
  2. 必须在 vue 页面使用 canvas。
  3. 发布只需拷贝 uni_modules/kex-barcode
  4. 部分码制对内容校验严格,失败时请核对位数与字符集。

版本

changelog.md。当前文档对应 1.0.3

隐私、权限声明

1. 本插件需要申请的系统权限列表:

保存到相册时需相册权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。