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>
相关推荐
郑州光合科技余经理7 小时前
可独立部署的Java同城O2O系统架构:技术落地
java·开发语言·前端·后端·小程序·系统架构·uni-app
雪芽蓝域zzs7 小时前
uniapp 取消滚动条
uni-app
2401_865854889 小时前
Uniapp和Flutter哪个更适合企业级开发?
flutter·uni-app
雪芽蓝域zzs9 小时前
uniapp 省市区三级联动
前端·javascript·uni-app
总爱写点小BUG9 小时前
UniApp 图标方案终极排坑:告别 FontClass,拥抱真 SVG 组件化
前端框架·uni-app
Rysxt_1 天前
UniApp获取安卓系统权限教程
android·uni-app
木子啊1 天前
ProCamera 智能水印相机解决方案 (UniApp)
数码相机·uni-app·水印相机·小程序水印
木子啊1 天前
Uni-app跨页面通信三剑客
前端·uni-app·传参
Rysxt_2 天前
UniApp五大UI框架与uni-ui核心区别对比
uni-app·uni-ui
2501_915918412 天前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone