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>
相关推荐
游戏开发爱好者83 小时前
App Store 上传 IPA 自动化,.p8 密钥认证与 CI/CD 接入实战
android·运维·ci/cd·小程序·uni-app·自动化·iphone
游戏开发爱好者84 小时前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
AI_AGENT_DEV_AI14 小时前
原生 APP 开发的开发优点
uni-app
JackieDYH1 天前
uniapp-通知滚动组件+轮播图组件封装-案例
uni-app·轮播图·通知
2501_915921432 天前
appuploader-cli 命令行上传 IPA 到 App Store Connect upload CI 集成
android·ci/cd·小程序·https·uni-app·iphone·webview
结网的兔子2 天前
【前端开发】UniApp 项目地图选型与Web-APP跨端迁移方案
前端·uni-app
2501_916007473 天前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
PedroQue993 天前
uni-app路由插件化:解锁高效开发新姿势
前端·uni-app
2501_915909063 天前
iOS 证书创建与管理 类型限制 p12 密码与云备份实操
android·ios·小程序·https·uni-app·iphone·webview
anyup3 天前
【2026年8月】uView Pro 千星,还拿到了 GVP
前端·uni-app·github