uniapp+<script setup lang=“ts“>解析后端返回的图片流并将二维码展示在页面中

页面展示

apiFox请求

封装公用的ts

复制代码
import config from '@/../config/config';
const URL = `${config.apiDomain}${config.apiBase}/order/genVerificationQr`;
interface GenQrParams {
    orderNo: string;
    width: number;
    height: number;
}

// 生成核销二维码接口
export const genVerificationQr = (params: GenQrParams) => {
    const accessToken = uni.getStorageSync('access_token');
    return new Promise<string>((resolve, reject) => {
        uni.request({
            url: `${URL}`, // 注意补充完整的接口URL
            method: 'GET',
            header: {
                Authorization: 'Bearer ' + accessToken,
            },
            data: params,
            responseType: 'arraybuffer',
            success: (res) => {
                if (res.statusCode === 200 && res.data) {
                    try {
                        // 将arraybuffer转换为base64格式
                        const base64Str = wx?.arrayBufferToBase64(res.data as ArrayBuffer);
                        if (!base64Str) {
                            throw new Error('转换base64失败');
                        }
                        // 生成正确的dataURL(根据实际图片类型调整mime类型,这里假设是png)
                        const imageSrc = `data:image/png;base64,${base64Str}`;
                        resolve(imageSrc); // 成功时返回imageSrc
                    } catch (err) {
                        reject(err); // 转换过程出错时 reject
                    }
                } else {
                    reject(new Error(`请求失败,状态码:${res.statusCode}`));
                }
            },
            fail: (err) => {
                reject(err); // 网络请求失败时 reject
            },
        });
    });
};

页面使用

复制代码
<template>
        <view class="qr-code-box flex-column-center">
                        <image :src="currentImg" class="qr-code-img" />
                        <view class="qr-code-text">请将此二维码呈现给工作人员为您核销订单</view>
                    </view>
</template>

<script setup lang="ts">
import { onMounted, nextTick } from 'vue';
import { genVerificationQr } from '@/utils/createQrCode'; 
interface PropsType {
    orderNo: any;
}
const props = withDefaults(defineProps<PropsType>(), {
    orderNo: 0,
});
const { orderNo } = toRefs(props);


const getGenVerificationQr = async () => {
    currentImg.value = ''; //每次请求前置空
    let params = {
        orderNo: orderNo.value,
        width: 200,
        height: 200,
    };
    nextTick(async () => {
        // 调用接口生成二维码
        const qrImageSrc = await genVerificationQr(params);
        // 将结果赋值给页面的image src
        currentImg.value = qrImageSrc; // 假设页面中有qrImage这个数据变量
    });
};




onMounted(() => {
    getGenVerificationQr();
});


</script>

<style lang="scss">
@import './index.scss';
</style>
相关推荐
万物得其道者成11 小时前
UniApp 多端滑块验证码插件 zxj-slide-verify 实用指南
uni-app
蓝帆傲亦13 小时前
支付宝小程序性能暴增秘籍:UniApp项目极限优化全攻略
小程序·uni-app
2501_916008891 天前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
QT.qtqtqtqtqt1 天前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
喵喵虫1 天前
uniapp修改封装组件失败 styleIsolation
uni-app
游戏开发爱好者82 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
2501_915106322 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106322 天前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
宠友信息2 天前
2025社交+IM及时通讯社区APP仿小红书小程序
java·spring boot·小程序·uni-app·web app
“负拾捌”2 天前
python + uniapp 结合腾讯云实现实时语音识别功能(WebSocket)
python·websocket·微信小程序·uni-app·大模型·腾讯云·语音识别