更新记录

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 值包括:

allqrCodeazteccodabarcode39code93code128dataMatrixean8ean13itfpdf417upcAupcErss14rssExpandedmaxiCodewxCodecode25

嵌入式组件 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 结果来源:cameraalbumimage
triggerMode 触发方式:autoclick
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.rawTextScanSuccess.option

隐私、权限声明

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

安卓:相机、相册读取 iOS:相机、相册读取 Harmony:相机

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

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

许可协议

MIT协议