diff --git a/src/subpackage/groupon/pages/exchange_success.vue b/src/subpackage/groupon/pages/exchange_success.vue index 0596970..1b69aa2 100644 --- a/src/subpackage/groupon/pages/exchange_success.vue +++ b/src/subpackage/groupon/pages/exchange_success.vue @@ -4,6 +4,7 @@ import { reactive, ref } from "vue"; import textLine from "../components/text_line.vue"; import { getOrder, orderGet } from "../api"; import { routeTo, showModal } from "@/utils/polish"; +import { previewBase64Image } from "@/utils"; const orderInfo = ref({}); onLoad(oprions => { getOrderNoFn({ verify_token: oprions?.verify_token ?? '' }) @@ -49,7 +50,7 @@ function copyBtn(){ // 预览核销码 function previewCode(){ - uni.previewImage({ urls: [orderInfo.value?.verify_qrcode] }) + previewBase64Image(orderInfo.value?.verify_qrcode) } function toOrderDetail(){ diff --git a/src/subpackage/order/pages/detail.vue b/src/subpackage/order/pages/detail.vue index 79e5b0c..1b051cf 100644 --- a/src/subpackage/order/pages/detail.vue +++ b/src/subpackage/order/pages/detail.vue @@ -10,6 +10,7 @@ import venueInfoAsync from "@/subpackage/groupon/components/venue_info.vue"; import { orderGet, cancelCheck, orderCancel, getCreateOrderProxyData } from "../api"; import { get_zh_day } from "@/utils"; import { showLoad, hideLoad, showNone } from "@/utils/polish"; +import { previewBase64Image } from "@/utils"; const orderInfo = ref({}); const cancelModalRef = ref(null); // order_type 0场地 1/2次卡 @@ -30,7 +31,7 @@ function getOrderInfo({ brand_id, order_no }){ } function previewImg(img){ - uni.previewImage({ urls: [ img ] }); + previewBase64Image(img) } function phoneClick(){ diff --git a/src/subpackage/order/pages/enter_code.vue b/src/subpackage/order/pages/enter_code.vue index c80146f..1e578e5 100644 --- a/src/subpackage/order/pages/enter_code.vue +++ b/src/subpackage/order/pages/enter_code.vue @@ -2,7 +2,9 @@ import { onLoad } from '@dcloudio/uni-app'; import { reactive, ref } from 'vue'; import server from '@/api/server'; +import { previewBase64Image } from "@/utils"; const codeInfo = ref({}); // 核销码信息 + onLoad(option => { server.post({ url: '/stadium/order/session/get' + `/${option?.code_id ?? ''}`, @@ -42,7 +44,7 @@ function codeMaskImgPath(status){ // 预览核销码 function previewCode(e){ if(isShowCodeMask(e))return; - uni.previewImage({ urls: [e.verify_qrcode] }) + previewBase64Image(e.verify_qrcode); } diff --git a/src/utils/index.js b/src/utils/index.js index 691545b..ce8a3ec 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -103,3 +103,34 @@ export function formatDate(timestamp) { return `${year}-${month}-${day}`; } + + +/** + * 预览 Base64 图片 + * @param {string} base64 - base64 图片字符串(可包含 data:image/png;base64, 前缀) + */ +export function previewBase64Image(base64) { + const fs = tt.getFileSystemManager(); + // 去掉前缀,如果有的话 + const pureBase64 = base64.replace(/^data:image\/\w+;base64,/, ''); + // 获取用户数据路径(替代 tt.env.USER_DATA_PATH) + const userDataPath = tt.getEnvInfoSync().common.USER_DATA_PATH; + // 生成临时文件路径 + const filePath = `${userDataPath}/preview_${Date.now()}.png`; + // 写入临时文件 + fs.writeFile({ + filePath, + data: pureBase64, + encoding: 'base64', + success: () => { + // 调用预览 + tt.previewImage({ + current: filePath, + urls: [filePath], + success: () => console.log('预览成功'), + fail: (err) => console.error('预览失败', err) + }); + }, + fail: (err) => console.error('写入文件失败', err) + }); +}