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>
相关推荐
2501_9160074720 分钟前
专业的 IPA 处理工具 构建可维护、可回滚的 iOS 成品加工与加固流水线
android·ios·小程序·https·uni-app·iphone·webview
游戏开发爱好者824 分钟前
Charles抓包工具怎么用 Charles抓包教程、网络调试技巧与HTTPS配置全流程
网络·ios·小程序·https·uni-app·php·webview
万岳科技程序员小金31 分钟前
在线教育系统源码选型对比:PHP、Java、Flutter、UniApp谁更适合?
java·uni-app·php·软件开发·在线教育系统源码·教育app开发·教育软件开发
不会写DN41 分钟前
如何实现UniApp登录拦截?
前端·javascript·vue.js·typescript·uni-app·vue
chéng ௹1 小时前
uniapp APP和微信小程序横屏模式
微信小程序·小程序·uni-app
iOS阿玮8 小时前
碰到一个不听劝的老板,喜提4.3a!
uni-app·app·apple
聊询QQ:2769988516 小时前
基于Matlab的转速开环恒压频比异步电动机调速系统设计报告与仿真程序
uni-app
2501_9151063219 小时前
iOS 抓不到包怎么办?从 HTTPS 代理排查到 TCP 数据流捕获的全链路解决方案
android·tcp/ip·ios·小程序·https·uni-app·iphone
游戏开发爱好者819 小时前
APP上架苹果应用商店经验教训与注意事项
android·ios·小程序·https·uni-app·iphone·webview
济南壹软网络科技有限公司19 小时前
沉浸式体验革命:壹软科技2025新版盲盒源码前端3D渲染与个性化运营技术解析
前端·科技·uni-app·开源·php·盲盒源码