更新记录
1.0.0(2026-07-19) 下载此版本
初次提交
平台兼容性
uni-app x(4.66)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | √ | 11 | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | × | √ |
laoqianjunzi-scan
laoqianjunzi-scan 是一个面向 uni-app x / uni-app 的统一扫码插件,围绕“同一套 API 覆盖全屏扫码、嵌入式扫码、图片识别、二维码生成与能力探测”来设计。
文档只说明当前插件的正式能力与公开 API,不涉及旧插件、旧接口或兼容层。
功能概览
- 全屏扫码:通过
openScan()拉起插件内部扫码页,支持标题、提示文案、扫描框、补光灯、相册按钮与多码策略配置。 - 嵌入式扫码:通过
laoqianjunzi-scan组件把扫码预览直接嵌入业务页面。 - 图片识别:支持本地图片路径、Base64、URL、直接选图识别。
- 二维码生成:通过
createQrCodeImage()生成二维码图片文件。 - 统一结果模型:所有扫码结果都归一到
ScanSuccess/ScanItem/ScanPayload。 - 运行时能力探测:通过
getScanCapabilities()判断当前平台是否支持多码、变焦、预热、镜头切换等能力。 - 会话状态追踪:通过
getCurrentSession()获取当前扫码会话快照。
适用版本
| 项目 | 要求 |
|---|---|
| HBuilderX | 5.07+ |
| uni-app | 4.66+ |
| uni-app x | 4.66+ |
平台支持
插件包当前声明支持:Android、iOS、Harmony、Web、微信小程序。
能力矩阵
| 能力 | Android | iOS | Harmony | Web | 微信小程序 |
|---|---|---|---|---|---|
| 全屏扫码 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 嵌入式扫码 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 图片识别 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 连续扫码 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 多码返回 | 支持 | 支持 | 支持 | 支持 | 不支持 |
| 自动变焦 | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
| 手动变焦 | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
| 补光灯 | 支持 | 支持 | 支持 | 视浏览器能力而定 | 支持 |
| 镜头切换 | 支持 | 支持 | 不支持 | 支持 | 支持 |
| 运行时预热 | 支持 | 支持 | 支持 | 支持 | 不支持 |
| 二维码生成 | 支持 | 支持 | 支持 | 支持 | 支持 |
建议在业务中先调用 getScanCapabilities(),再按平台动态开启多码、自动变焦、预热等高级特性。
安装与引入
将插件安装到项目 uni_modules 后,可直接从 utssdk/index.uts 引入 API:
import {
openScan,
pickImageAndScan,
createQrCodeImage,
getScanCapabilities
} from '@/uni_modules/laoqianjunzi-scan/utssdk/index.uts'
嵌入式组件可直接使用 easycom:
<laoqianjunzi-scan @scan="handleScan"></laoqianjunzi-scan>
快速开始
1. 打开全屏扫码
openScan({
mode: 'page',
continuous: false,
multiCodePolicy: 'first',
allowAlbum: true,
defaultTorchOn: false,
parseSemantic: true,
outputAllCodeData: false,
formats: ['all'],
legacyFormatMask: 'all',
ui: {
brandTitle: '***',
hintText: '将二维码或条码放入取景框内即可自动识别',
showAlbumButton: true,
showTorchButton: true,
showCloseButton: true,
showCornerMarkers: true,
showScanLine: true,
localeText: null
},
success: (result) => {
console.log('scan success', result.primary.rawText)
},
fail: (error) => {
console.log('scan fail', error.errMsg)
},
cancel: () => {
console.log('scan cancel')
},
complete: null
})
2. 页面内嵌扫码
<template>
<laoqianjunzi-scan
:autoOpen="false"
:allowAlbum="true"
:continuous="true"
:outputAllCodeData="false"
:multiCodePolicy="'first'"
:formatMask="'all'"
@scan="handleScan"
@error="handleError"
@cancel="handleCancel"
></laoqianjunzi-scan>
</template>
组件内部已经集成了开始扫码、关闭、补光灯、识别图片等控制按钮,适合作为业务页里的直接演示或中型表单辅助录入区。
3. 直接选图识别
pickImageAndScan({
parseSemantic: true,
outputAllCodeData: false,
formats: ['all'],
legacyFormatMask: 'all',
success: (result) => {
console.log('image scan', result.primary.rawText)
},
fail: (error) => {
console.log(error.errMsg)
},
cancel: () => {
console.log('user cancel')
},
complete: null
})
4. 生成二维码图片
createQrCodeImage({
content: 'https://example.com',
width: 480,
height: 480,
margin: 2,
foregroundColor: '#0D5E54',
backgroundColor: '#FFFFFF',
fileName: 'demo-qrcode.png',
success: (filePath) => {
console.log(filePath)
},
fail: (error) => {
console.log(error.errMsg)
},
complete: null
})
5. 读取能力探测结果
const capabilities = getScanCapabilities()
console.log(capabilities.page)
console.log(capabilities.multiCode)
console.log(capabilities.autoZoom)
公开 API
扫码与识别
| 方法 | 说明 |
|---|---|
openScan(options) |
打开全屏扫码流程。 |
closeScan(sessionId) |
关闭当前扫码会话。 |
pauseScan(sessionId, paused) |
暂停或恢复当前扫码会话。 |
scanImageByPath(options) |
识别本地图片路径。 |
scanImageByBase64(options) |
识别 Base64 图片。 |
pickImageAndScan(options) |
打开相册并识别所选图片。 |
scanImageByUrl(options) |
下载远程图片后再识别。 |
warmupScanRuntime(options) |
预热扫码运行时。 |
getScanCapabilities() |
返回当前平台能力开关。 |
getCurrentSession() |
返回当前活跃会话快照,没有会话时返回 null。 |
二维码生成
| 方法 | 说明 |
|---|---|
createQrCodeImage(options) |
生成二维码图片。 |
openScan() 常用参数
| 参数 | 类型 | 说明 |
|---|---|---|
mode |
'page' \| 'embedded' \| 'image' |
当前调用场景。全屏扫码请传 'page'。 |
continuous |
boolean \| null |
是否连续扫码。 |
continuousDelay |
number \| null |
连续扫码的结果节流间隔,单位毫秒。 |
multiCodePolicy |
'first' \| 'all' \| 'pick' \| null |
多码时只取首个、返回全部或让用户选一个。 |
allowAlbum |
boolean \| null |
是否显示相册识别入口。 |
onlyFromCamera |
boolean \| null |
是否只允许相机识别。 |
autoZoom |
boolean \| null |
是否允许自动变焦。 |
manualZoom |
boolean \| null |
是否显示手动变焦控件。 |
openSound |
boolean \| null |
识别成功时是否播放提示音。 |
openVibrate |
boolean \| null |
识别成功时是否震动提示。 |
defaultTorchOn |
boolean \| null |
打开页面时是否默认开启补光灯。 |
parseSemantic |
boolean \| null |
是否把结果解析为 URL、WiFi、电话、短信等语义对象。 |
outputAllCodeData |
boolean \| null |
是否输出全部码结果。 |
preferUltraWideCamera |
boolean \| null |
iOS 场景下优先使用超广角。 |
cameraPosition |
'back' \| 'front' \| null |
默认镜头方向。 |
previewRotation |
number \| null |
Android 预览旋转角度。 |
timeoutMs |
number \| null |
超时关闭时间,单位毫秒。 |
duplicateWindowMs |
number \| null |
重复结果去重窗口期。 |
maxResultCount |
number \| null |
最多返回的结果条数。 |
formats |
ScanCodeFormat[] \| null |
本次识别允许的码制列表。 |
legacyFormatMask |
string \| null |
字符串形式的码制补充配置。 |
ui |
ScanUiStyle \| null |
控制标题、提示文案、遮罩、扫描框、按钮可见性、本地化文案等。 |
success |
(result) => void |
成功回调。 |
fail |
(error) => void |
失败回调。 |
cancel |
(() => void) \| null |
取消回调。 |
complete |
((payload) => void) \| null |
完成回调。 |
码制枚举
支持的 formats 值包括:
all、qrCode、aztec、codabar、code39、code93、code128、dataMatrix、ean8、ean13、itf、pdf417、upcA、upcE、rss14、rssExpanded、maxiCode、wxCode、code25。
嵌入式组件 laoqianjunzi-scan
组件属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
autoOpen |
boolean |
false |
页面渲染后是否立即开始扫码。 |
allowAlbum |
boolean |
true |
是否显示识别图片按钮。 |
continuous |
boolean |
true |
是否连续扫码。 |
duplicateWindowMs |
number |
1200 |
连续扫码时的去重窗口。 |
continuousDelay |
number |
800 |
连续扫码结果节流时间。 |
openSound |
boolean |
true |
是否开启成功提示音。 |
openVibrate |
boolean |
false |
是否开启震动提示。 |
autoZoom |
boolean |
false |
是否启用自动变焦。 |
preferUltraWideCamera |
boolean |
false |
iOS 下是否优先超广角。 |
defaultTorchOn |
boolean |
false |
初始是否打开补光灯。 |
timeoutMs |
number |
20000 |
超时时间。 |
outputAllCodeData |
boolean |
false |
是否输出全部识别结果。 |
multiCodePolicy |
string |
'first' |
多码处理策略。 |
maxResultCount |
number |
0 |
返回结果数量上限,0 表示不限制。 |
formatMask |
string |
'0' |
字符串形式的码制过滤参数。 |
cameraPosition |
string |
'back' |
默认镜头。 |
previewRotation |
number |
0 |
Android 预览旋转角度。 |
组件事件
| 事件 | 参数 | 说明 |
|---|---|---|
scan |
ScanSuccess |
成功识别时触发。 |
error |
string |
识别失败、权限异常或运行错误时触发。 |
cancel |
无 | 用户取消选图等流程时触发。 |
组件实例方法
组件内部实现了以下同名方法:openScanner()、closeScanner()、toggleTorch()、pickImage()、switchCamera()。
如果你通过模板 ref 获取到组件实例,可按需调用这些方法;如果只是常规业务接入,直接使用组件内置按钮即可。
返回结果结构
ScanSuccess
| 字段 | 说明 |
|---|---|
session |
当前会话快照。 |
source |
结果来源:camera、album、image。 |
triggerMode |
触发方式:auto 或 click。 |
engine |
当前平台实际使用的识别引擎标识。 |
elapsedMs |
本次识别耗时。 |
pickedIndex |
多码场景下最终选中的结果索引。 |
items |
本次识别得到的全部结果列表。 |
primary |
主结果。 |
option |
主结果对应的语义对象。 |
optionArr |
多结果语义数组。 |
imagePath |
如果来自图片识别,则可能返回图片路径。 |
rawExtras |
平台原始扩展信息。 |
debugTrail |
调试轨迹。 |
ScanItem
| 字段 | 说明 |
|---|---|
rawText |
原始识别文本。 |
normalizedText |
归一化后的识别文本。 |
format |
当前结果的码制。 |
semanticType |
当前结果的语义类型。 |
scanCodeType |
视觉类别:二维码、条码或未知。 |
payload |
结构化语义数据。 |
bounds |
识别框位置。 |
points |
角点列表。 |
示例页面
插件自带两类页面:
pages/index.uvue:对外演示页,集中展示能力探测、全屏扫码、嵌入式扫码、图片识别和二维码生成。pages/scan-dialog/index.uvue:插件内部全屏扫码承载页,由openScan()自动拉起,业务侧无需手动跳转。
如果你想快速验证插件效果,直接打开 uni_modules/laoqianjunzi-scan/pages/index 即可。
权限与接入建议
- Android / iOS:需要相机权限;使用图片识别时还需要相册读取权限。
- Harmony:需要相机权限;图片识别和文件写入能力依赖当前平台运行环境。
- Web:相机、补光灯、镜头切换受浏览器能力与 HTTPS 环境影响。
- 微信小程序:多码、自动变焦、预热等高级能力请先用
getScanCapabilities()判定。 - 如果业务页需要滚动展示多个说明块,App 端请用
scroll-view承载页面内容。
调试建议
- 先跑
getScanCapabilities(),确认当前平台能力边界。 - 先在
pages/index.uvue验证公开 API,再迁移到业务页。 - 多码、自动变焦、补光灯、镜头切换这些体验差异较大的功能,建议分平台逐项验证。
- 如果需要和业务表单联动,优先消费
ScanSuccess.primary.rawText与ScanSuccess.option。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-scan
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1169
赞赏 2
下载 12440709
赞赏 1934
赞赏
京公网安备:11010802035340号