<template> <view class="codeDetail" :style="{ background: colorList[idx].bgColor, boxShadow: colorList[idx].shadow, }" > <capsule :showBorder="true" bgColor="transparent"> <template v-slot:top> <view class="shop-top"> <view class="back-icon" @click="backClick"> <tui-icon name="arrowleft" :size="36" color="#FFFFFF"></tui-icon> </view> <view class="shop-name">{{ title }}</view> </view> </template> </capsule> <view class="code-container"> <view class="top-img"> <image class="" :src="shopInfo.shopLogo" /> </view> <view class="code-img"> <image class="" :src="payCode" :show-menu-by-longpress="true" /> <canvas canvas-id="code" id="code"></canvas> </view> <view class="code-text">长按保存二维码</view> </view> <view class="code-logo"> <image class="" src="@/static/image/user/logo.png" /> </view> </view> </template> <script> // import drawQrcode from "@/static/js/qrcode.js"; export default { created() { // 获取本地info this.shopInfo = uni.getStorageSync("shopInfo"); }, onLoad(option) { this.idx = Number(option.type); switch (this.idx) { case 0: this.title = "商家店铺码"; // this.setCode(uni.getStorageSync("code"), "code"); break; case 1: this.title = "商家收款码"; this.payCode = uni.getStorageSync("code"); break; case 2: this.title = "兑换专区码"; // this.setCode(uni.getStorageSync("code"), "code"); break; } }, data() { return { idx: 0, title: "", shopInfo: {}, colorList: [ { bgColor: "linear-gradient(90deg, #24c4ef 0%, #46a8f7 100%)", shadow: "0px 0px 10px 0px rgba(68, 169, 246, 0.5)", }, { bgColor: "linear-gradient(90deg, #FC8756 0%, #FE5427 100%)", shadow: "0px 0px 10px 0px rgba(68, 169, 246, 0.5)", }, { bgColor: "linear-gradient(90deg, #7ADBCF 0%, #47CAA4 100%)", shadow: "0px 0px 10px 0px rgba(68, 169, 246, 0.5)", }, ], payCode: "", }; }, methods: { // 生成二维码 async setCode(url, id) { this.$loading.show("生成中..."); }, // 图片上传接口 async getImage(file) { }, backClick() { uni.navigateBack(); }, }, // 页面卸载清除缓存 onUnload() { uni.removeStorageSync("code"); }, }; </script> <style lang="scss" scoped> .codeDetail { width: 100vw; height: 100vh; position: relative; .shop-top { width: 100%; height: 100%; position: relative; z-index: 999; @include flex(center); .back-icon { position: absolute; left: 0; top: 50%; transform: translateY(-50%); } .shop-name { color: #ffffff; } } .code-container { margin: 0 auto; margin-top: 186rpx; border-radius: 32rpx; width: 606rpx; height: 724rpx; background-color: #ffffff; position: relative; .top-img { width: 144rpx; height: 144rpx; position: absolute; left: 50%; transform: translateX(-50%); top: -72rpx; image { width: 100%; height: 100%; border-radius: 50%; border: 10rpx solid #ffffff; } } .code-img { width: 404rpx; height: 404rpx; position: absolute; top: 128rpx; left: 52%; transform: translateX(-50%); image { width: 100%; height: 100%; display: block; position: relative; z-index: 1; } canvas { width: 100%; height: 100%; z-index: -2; position: fixed; top: 1000rpx; left: 1000rpx; } } .code-text { color: #666666; font-size: 28rpx; position: absolute; bottom: 32rpx; left: 50%; transform: translateX(-50%); } } .code-logo { position: absolute; right: 0; bottom: 0; padding-bottom: constant(safe-area-inset-bottom); //兼容 IOS<11.2 padding-bottom: env(safe-area-inset-bottom); //兼容 IOS>11.2 image { width: 474rpx; height: 342rpx; display: block; } } } </style>