From 47af2611c1d2205a32d20d620a8388421f24f247 Mon Sep 17 00:00:00 2001 From: zhangjing Date: Tue, 26 Sep 2023 16:54:38 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=9C=80=E6=96=B0]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/interfaces/user.js | 102 +++++++------- pages/user/code/code.js | 283 +++++++++++++++++++------------------- pages/user/code/code.json | 4 +- pages/user/code/code.wxml | 55 ++++---- pages/user/code/code.wxss | 166 +++------------------- static/share_00.png | Bin 0 -> 11044 bytes static/share_01.png | Bin 0 -> 10184 bytes 7 files changed, 244 insertions(+), 366 deletions(-) create mode 100644 static/share_00.png create mode 100644 static/share_01.png diff --git a/api/interfaces/user.js b/api/interfaces/user.js index 07e26ec..8ce6297 100644 --- a/api/interfaces/user.js +++ b/api/interfaces/user.js @@ -1,49 +1,55 @@ - /* - * 手太欠 - * 愿这世界都如故事里一样 美好而动人~ -*/ - -import { req } from "../request" - -// 用户中心 -const userIndex = () => req({ - url: "user" -}) - -// 用户设置 -const userSetup = () => req({ - url: "user/setting" -}) - -//修改用户信息 -const setting = (key, data) => req({ - url: "user/setting/" + key, - method: "PUT", - data: data -}) - -// 我的推广码 -const invitesCode = data => req({ - url: "user/invite", - data: data -}) - -// 小程序码 -const miniShare = data => req({ - url: "user/mini_share", - data: data -}) - -// 帮助分类 -const helpsNav = () => req({ - url: "cms/categories/helps" -}) - -export default ({ - userIndex, - userSetup, - setting, - invitesCode, - miniShare, - helpsNav + /* + * 手太欠 + * 愿这世界都如故事里一样 美好而动人~ +*/ + +import { req } from "../request" + +// 用户中心 +const userIndex = () => req({ + url: "user" +}) + +// 用户设置 +const userSetup = () => req({ + url: "user/setting" +}) + +//修改用户信息 +const setting = (key, data) => req({ + url: "user/setting/" + key, + method: "PUT", + data: data +}) + +// 我的推广码 +const invitesCode = data => req({ + url: "user/invite", + data: data +}) + +// 小程序码 +const miniShare = data => req({ + url: "user/mini_share", + data: data +}) + +// 帮助分类 +const helpsNav = () => req({ + url: "cms/categories/helps" +}) + +// 邀请码背景 +const poster = (data) => req({ + url: "agent/poster", + data: data +}) +export default ({ + userIndex, + userSetup, + setting, + invitesCode, + miniShare, + helpsNav, + poster }) \ No newline at end of file diff --git a/pages/user/code/code.js b/pages/user/code/code.js index e6bdfce..539ef61 100644 --- a/pages/user/code/code.js +++ b/pages/user/code/code.js @@ -1,71 +1,90 @@ + /* * 手太欠 * 愿这世界都如故事里一样 美好而动人~ */ Page({ - /** * 页面的初始数据 */ data: { - barHeight : getApp().globalData.barHeight, // 状态栏高度 - shareSee : false, //分享弹出 - inviteText : '', //邀请码 - inviteCode : '', //二维码 - - //海报 - canvas : '' + nameInfo: '', // 用户名 + invite : '', // 邀请码 + qrcode : '', // 二维码 + posters : [], // 海报数组 + current : 0, // 选项卡下标 }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad(options) { - // 初始化画布 - wx.createSelectorQuery().select('#coverCanvas').fields({node: true, size: true}).exec(canvasNode => { - const canvas = canvasNode[0].node - canvas.width = 375 - canvas.height = 800 - this.setData({ - canvas - }) - }) - }, - /** * 生命周期函数--监听页面显示 */ - onShow() { - // 获取信息 - this.inviteInfo(); + onLoad() { + let miniShareFun = wx.$api.user.poster({ type: '2' }) + // wx.$api.user.poster({ url: 'pages/mall/index' }).then(res => { + // console.log(res.data) + // this.setData({ + // nameInfo : res.data.name, + // posters : res.data.posters, + // qrcode : res.data.qrcode + // }) + // }) - // 小程序码 - this.ShareInfo(); - }, + wx.showLoading({ + title: '加载中...', + mask : true + }) - /** - * 获取信息 - */ - inviteInfo() { - wx.$api.user.invitesCode().then(res => { + Promise.all([miniShareFun]).then(res => { + let miniShareData = res[0].data this.setData({ - inviteText : res.data.invite + posters : miniShareData.posters, + qrcode : miniShareData.qrcode, + invite : miniShareData.invite, + current : 0 }) - }).catch(err => {}) + // wx.getImageInfo({ + // src : miniShareData.qrcode, + // success : qrcodePath => { + // this.setData({ + // qrcode : qrcodePath.path, + // posters : miniShareData.posters, + // nameName : miniShareData.name, + // current: 0 + // }) + // } + // }) + wx.hideLoading() + }) + }, + swiperChange(e) { + let index = e.detail.current + this.setData({ + current: index + }) }, - /** - * 小程序码 + * 检查授权信息 */ - ShareInfo() { - wx.$api.user.miniShare({ - url: '/pages/index/index' - }).then(res => { - this.setData({ - inviteCode: res.data.qrcode - }) - }).catch(err => {}) + onCheckSetting(){ + wx.getSetting({ + success: res => { + if(res.authSetting['scope.writePhotosAlbum'] || res.authSetting['scope.writePhotosAlbum'] === undefined){ + this.onCanvas() + return + } + wx.showModal({ + title : '提示', + content : '暂未授权小程序写入您的相册,无法存储海报', + confirmColor: '#144592', + confirmText : '去设置', + success: res => { + if (res.confirm) { + wx.openSetting() + } + } + }) + } + }) }, /** @@ -73,113 +92,99 @@ Page({ */ onCanvas(){ wx.showLoading({ - title: '生成图片中...', + title: '加载中...', mask : true }) - const canvas = this.data.canvas - const ctx = canvas.getContext('2d') - const codeImgEl = canvas.createImage() - const backBackEl = canvas.createImage() + wx.getImageInfo({ + src: this.data.posters[this.data.current].cover, + success: imgInfo => { + wx.hideLoading() + wx.showLoading({ + title : '生成海报中...', + mask : true + }) + let posterSrc = imgInfo.path + let posterW = this.data.posters[this.data.current].width + let posterH = this.data.posters[this.data.current].height + let posterY = this.data.posters[this.data.current].position.y + let posterX = this.data.posters[this.data.current].position.x + let qrcodeSize = this.data.posters[this.data.current].position.size + let qrcodeSrc = this.data.qrcode - codeImgEl.src = this.data.inviteCode //二维码 - backBackEl.src = 'https://cdn.shuiganying.com/images/2023/03/31/30a1fde15c33efce2c182ef5fb7073fd.jpg' //背景素材 - const codeImgLoding = new Promise((resolve, reason) => { - codeImgEl.onload = () => { - resolve() - } - }) - const backBackLoding = new Promise((resolve, reason) => { - backBackEl.onload = () => { - resolve() - } - }) - Promise.all([codeImgLoding, backBackLoding]).then(() => { - ctx.drawImage(backBackEl, 0, 0, 375, 800) - // 绘制[二维码-白色背景] - ctx.fillStyle = "#ffffff"; - ctx.fillRect(30, 400, 130, 130); + wx.createSelectorQuery().select('#canvas').fields({ node: true, size: true }).exec(res => { + const canvas = res[0].node; + const ctx = canvas.getContext("2d"); + const img = canvas.createImage() + const code = canvas.createImage() + const dpr = wx.getSystemInfoSync().pixelRatio - // 绘制[二维码-白色背景黑框] - ctx.strokeStyle = "#0e2c58"; - ctx.lineWidth = 2 - ctx.strokeRect(29, 399, 132, 132); + // 设置画布 + canvas.width = posterW * dpr + canvas.height = posterH * dpr + ctx.scale(dpr, dpr) + // 清理画布 + ctx.clearRect(0, 0, canvas.width, canvas.height) + // 绘制背景 + img.src = posterSrc + img.onload = () => { + ctx.drawImage(img, 0, 0, posterW, posterH) + + // 绘制图片二维码 + code.src = qrcodeSrc + code.onload = () => { + ctx.arc( posterX + qrcodeSize/2, posterY + qrcodeSize/2, qrcodeSize/2 + 5, 0, 2 * Math.PI ); + ctx.fillStyle = "#ffffff"; + ctx.fill(); + ctx.drawImage(code, posterX, posterY, qrcodeSize, qrcodeSize) - // 绘制[二维码] - ctx.drawImage(codeImgEl, 40, 410, 110, 110) - - // 文字 - ctx.font = "bold 14px Arial"; //字体大小 - ctx.fillStyle = "#0e2c58"; //字体颜色 - ctx.textAlign = "center" - ctx.fillText('扫描二维码了解更多', 96, 560); - - wx.hideLoading() - wx.canvasToTempFilePath({ - canvas: this.data.canvas, - success : res => { - wx.saveImageToPhotosAlbum({ - filePath: res.tempFilePath, - success: saveRes => { - wx.showToast({ - title: '海报已保存至您的相册', - icon : 'none' - }) - this.setData({ - shareSee: false - }) - }, - fail: () => { - wx.hideLoading() - wx.showModal({ - title: '提示', - content: '暂未授权小程序写入您的相册,无法存储海报', - confirmColor: '#e50d01', - confirmText: '去设置', - success: res => { - if (res.confirm) { - wx.openSetting() - } + // 保存海报 + wx.canvasToTempFilePath({ + canvas : canvas, + width : canvas.width, + height : canvas.height, + destWidth : canvas.width, + destHeight : canvas.height, + quality : 1, + success : paths => { + wx.saveImageToPhotosAlbum({ + filePath: paths.tempFilePath, + success: res => { + wx.showToast({ + title : '海报已保存', + }) + } + }) + }, + fail: () => { + wx.hideLoading() + wx.showModal({ + title: '提示', + content: '暂未授权小程序写入您的相册,无法存储海报', + confirmColor: '#e50d01', + confirmText: '去设置', + success: res => { + if (res.confirm) { + wx.openSetting() + } + } + }) } }) } - }) - }, - }) - }).catch(err => { - wx.showToast({ - title: '图片加载失败', - icon : 'none' - }) + } + }) + } }) }, - /** - * 分享弹出 - */ - shareTap() { - this.setData({ - shareSee: !this.data.shareSee - }) - }, - - // 返回上一页 - returnGo() { - wx.navigateBack({ - delta: 1 - }) - }, - - /** + /** * 微信分享 */ onShareAppMessage(){ - this.setData({ - shareSee: false - }) return { - title : '水感应修复、紧致、舒缓喷雾', - path : "/pages/index/index?invite=" + wx.getStorageSync("invite"), - imageUrl: "https://cdn.shuiganying.com/images/2023/04/04/9cd9968136e7efd85028fba69e4c587a.jpg" + title : '锶源昆仑', + path : "/pages/index/index?invite=" + this.data.invite, + imageUrl: "http://cdn.siyuankunlun.com/materials/2022/09/14/code.jpg" } } }) \ No newline at end of file diff --git a/pages/user/code/code.json b/pages/user/code/code.json index f7efdab..2392939 100644 --- a/pages/user/code/code.json +++ b/pages/user/code/code.json @@ -1,4 +1,4 @@ { "usingComponents": {}, - "navigationStyle": "custom" - } \ No newline at end of file + "navigationBarTitleText": "邀请码" +} \ No newline at end of file diff --git a/pages/user/code/code.wxml b/pages/user/code/code.wxml index 4206743..a7c1a56 100644 --- a/pages/user/code/code.wxml +++ b/pages/user/code/code.wxml @@ -1,35 +1,32 @@ - - - - - - - - - - 扫描二维码了解更多 - - - - 分享 - - + + - - - - - - - - - - 保存二维码 + + + 保存海报 - 取消 + + \ No newline at end of file diff --git a/pages/user/code/code.wxss b/pages/user/code/code.wxss index 6e9d51a..8d3ed26 100644 --- a/pages/user/code/code.wxss +++ b/pages/user/code/code.wxss @@ -1,148 +1,18 @@ -/* 返回上一页 */ -.navigation{ - position: fixed; - top: 0; - left: 0; - z-index: 99; - width: 100%; - height: 90rpx; - background-color: transparent; - transition: .2s; -} - -.navigation.active { - background-color: transparent; -} - -.navigation-arrow { - width: 44rpx; - height: 44rpx; - margin: 20rpx 15rpx 0 20rpx; -} - - -/* 二维码 */ -.code { - width: 100vw; - height: 100vh; - position: relative; -} - -.code-back { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; -} - -.code-cont { - width: 400rpx; - position: absolute; - z-index: 9; - text-align: center; - left: 0; - bottom: 30%; -} - -.code-img{ - margin: 0 auto 20rpx; - overflow: hidden; - width: 260rpx; - height: 260rpx; - border: 4rpx solid #144592; - background-color: #ffffff; - padding: 10rpx; - box-sizing: border-box; -} - -.code-img image { - width: 100%; -} - -.code-text { - color: #144592; - font-size: 28rpx; - font-weight: 600; -} - -.code-share { - position: absolute; - z-index: 10; - left: 0; - bottom: 13%; - background: linear-gradient(to right, #3f7fff, #568fff); - width: 50rpx; - text-align: center; - border-radius: 0 26rpx 26rpx 0; - padding: 30rpx 15rpx 30rpx 12rpx; - box-shadow: 0 0 6rpx 6rpx rgba(0, 0, 0, .2); -} - -.code-share-name { - writing-mode:vertical-rl; - font-size: 30rpx; - padding-left: 4rpx; - color: #fff; -} - -.code-share image { - width: 36rpx; - height: 36rpx; - margin-bottom: 5rpx; -} - -.sharePop { - position: fixed; - width: 100%; - z-index: 99; - left: 0; - bottom: 0; - background-color: #0a1930; - display: none; -} - -.sharePop.active { - display: block; -} - -.shareCont-label image { - width: 60rpx; - height: 60rpx; - display: block; - margin: 0 auto 10rpx; -} - -.shareCancel { - border-top: 2rpx solid #0e2c58; - color: #ffffff; - width: 100%; - text-align: center; - line-height: 100rpx; -} - -.shareCont{ - display: flex; - padding: 30rpx 0; -} - -.shareCont-label { - color: #ffffff; - flex: 2; - text-align: center; - font-size: 28rpx; -} - -.codeShare-button { - background-color: transparent; - padding: 0; - font-weight: normal; -} - -/* canvas */ -.canvas-img { - position: fixed; - left: -10000%; - top: 0; - z-index: 99; -} \ No newline at end of file + +.content{ display: flex; align-items: center; flex-direction: column; justify-content: center; background: white; box-shadow: brown; min-height: 100vh;} + +/* 海报预览 */ +.poster{ width: 550rpx; height: 900rpx; background: white; box-shadow: 0 0 10rpx 10rpx rgba(0, 0, 0, .05); border-radius: 20rpx; overflow: hidden; } +.poster-item{ width: 550rpx; height: 900rpx; background-position: center; background-size: cover; position: relative; } +.poster-qrocde{ position: absolute; background-color: white; padding: 10rpx; border-radius: 50%;} + +/* 分享功能 */ +.tool{ display: flex; align-items: center; justify-content: space-around; width: 70vw; margin-top: 80rpx; } +.tool-item{ text-align: center; } +.tool-item[size="mini"]{ padding: 0; margin: 0; background-color: transparent; } +.tool-icon{ background: #f7f8f9; width: 88rpx; height: 88rpx; border-radius: 50%; vertical-align: top; } +.tool-text{ color: gray; font-size: 30rpx; line-height: 40rpx; margin-top: 10rpx; font-weight: normal;} + +/* canvas */ +.canvas{ background: #ddd; position: absolute; top: 0; left:-200%; } + diff --git a/static/share_00.png b/static/share_00.png new file mode 100644 index 0000000000000000000000000000000000000000..321697765a44e7055a4c3b978e2d84229a0e63b7 GIT binary patch literal 11044 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 C`j