|
@@ -0,0 +1,401 @@
|
|
|
+// nova-tourism/pages/my/sharing/index.js
|
|
|
+let {
|
|
|
+ statusBarHeight,
|
|
|
+ screenHeight
|
|
|
+} = wx.getSystemInfoSync()
|
|
|
+let custom = wx.getMenuButtonBoundingClientRect()
|
|
|
+let customHeight = custom.height
|
|
|
+let Parse = getApp().Parse;
|
|
|
+let company = getApp().globalData.company
|
|
|
+
|
|
|
+Page({
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面的初始数据
|
|
|
+ */
|
|
|
+ data: {
|
|
|
+ navHeight: 0, //导航高度_px
|
|
|
+
|
|
|
+ canv_sty: {
|
|
|
+ w: 0,
|
|
|
+ h: 0,
|
|
|
+ },
|
|
|
+ canv_bg: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20250416/pj1b4v042627175.png',
|
|
|
+ canv_qr: '',
|
|
|
+ canv_avatar: 'https://file-cloud.fmode.cn/EbxZUK5lBI/20250411/frvr1u080411965.jpg?imageView2/1/w/200/h/200',
|
|
|
+ canv_name: '微信用户',
|
|
|
+ canv_uid: '',
|
|
|
+ canv_tag: '云仙客',
|
|
|
+ canvas: null, //画布-下载所需
|
|
|
+
|
|
|
+ noBind: false, //不绑定关系
|
|
|
+ qrCodeUrl: '', //二维码原文
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面加载
|
|
|
+ */
|
|
|
+ onLoad(options) {
|
|
|
+ let navHeight = statusBarHeight + customHeight + 10
|
|
|
+ let canv_sty = {
|
|
|
+ w: screenHeight * 0.38 - 2,
|
|
|
+ h: screenHeight * 0.60
|
|
|
+ }
|
|
|
+ this.setData({
|
|
|
+ navHeight,
|
|
|
+ canv_sty
|
|
|
+ })
|
|
|
+ console.log(options);
|
|
|
+ let {
|
|
|
+ path,
|
|
|
+ noBind,
|
|
|
+ route, //扫码携带路径
|
|
|
+ uid
|
|
|
+ } = options
|
|
|
+ this.setData({
|
|
|
+ path,
|
|
|
+ noBind,
|
|
|
+ route,
|
|
|
+ uid
|
|
|
+ });
|
|
|
+ let qrCodeUrl = `https://pwa.fmode.cn/gomini/${path}/?invite=${uid}`;
|
|
|
+ if (this.data.noBind) {
|
|
|
+ qrCodeUrl = `https://pwa.fmode.cn/gomini/${path}/`;
|
|
|
+ }
|
|
|
+ if (route) {
|
|
|
+ if (this.data.noBind) {
|
|
|
+ qrCodeUrl = qrCodeUrl + `?route=${route}`
|
|
|
+ } else {
|
|
|
+ qrCodeUrl = qrCodeUrl + `&route=${route}`
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log(qrCodeUrl);
|
|
|
+ this.setData({
|
|
|
+ qrCodeUrl
|
|
|
+ })
|
|
|
+
|
|
|
+ this.refersh()
|
|
|
+ },
|
|
|
+
|
|
|
+ async refersh() {
|
|
|
+ let {
|
|
|
+ uid,
|
|
|
+ canv_avatar,
|
|
|
+ canv_name,
|
|
|
+ canv_uid,
|
|
|
+ canv_tag,
|
|
|
+ } = this.data
|
|
|
+ if (!uid) {
|
|
|
+ wx.showToast({
|
|
|
+ title: 'UID错误',
|
|
|
+ icon: 'error'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let query = new Parse.Query('_User')
|
|
|
+ let u = await query.get(uid)
|
|
|
+ canv_avatar = u?.get('avatar') || 'https://file-cloud.fmode.cn/EbxZUK5lBI/20250411/frvr1u080411965.jpg?imageView2/1/w/200/h/200'
|
|
|
+ canv_name = u?.get('nickname') || '微信用户'
|
|
|
+ canv_uid = uid
|
|
|
+ canv_tag = '云仙客'
|
|
|
+ if (u?.get('type') == 'shop-admin') {
|
|
|
+ let s_query = new Parse.Query('ShopStore')
|
|
|
+ s_query.equalTo('company', company);
|
|
|
+ s_query.equalTo('user', uid);
|
|
|
+ s_query.equalTo('isVerified', true);
|
|
|
+ s_query.notEqualTo('isDeleted', true);
|
|
|
+ let s = await s_query.first()
|
|
|
+ if (!s?.id) {
|
|
|
+ wx.showToast({
|
|
|
+ title: '暂无营业店铺',
|
|
|
+ icon: 'error'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ canv_avatar = s?.get('cover') || 'https://file-cloud.fmode.cn/EbxZUK5lBI/20250411/frvr1u080411965.jpg?imageView2/1/w/200/h/200'
|
|
|
+ canv_name = u?.get('username') || '微信用户'
|
|
|
+ canv_tag = '民宿主'
|
|
|
+ }
|
|
|
+ this.setData({
|
|
|
+ canv_avatar,
|
|
|
+ canv_name,
|
|
|
+ canv_uid,
|
|
|
+ canv_tag,
|
|
|
+ })
|
|
|
+
|
|
|
+ this.getQr()
|
|
|
+ },
|
|
|
+
|
|
|
+ /**获取二维码 */
|
|
|
+ async getQr() {
|
|
|
+ let {
|
|
|
+ qrCodeUrl
|
|
|
+ } = this.data
|
|
|
+ let that = this;
|
|
|
+ wx.request({
|
|
|
+ url: "https://server.fmode.cn/api/common/qrcode",
|
|
|
+ data: {
|
|
|
+ qrCode: qrCodeUrl,
|
|
|
+ darkColor: "#000",
|
|
|
+ lightColor: "#fff"
|
|
|
+ },
|
|
|
+ async success(res) {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ that.setData({
|
|
|
+ canv_qr: res?.data.data
|
|
|
+ })
|
|
|
+ that.draw()
|
|
|
+ } else {
|
|
|
+ wx.showToast({
|
|
|
+ title: '请先删除小程序重新授权后重试',
|
|
|
+ icon: 'none'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**复制链接 */
|
|
|
+ onCopy() {
|
|
|
+ let {
|
|
|
+ uid
|
|
|
+ } = this.data
|
|
|
+ if (!uid) {
|
|
|
+ wx.showToast({
|
|
|
+ title: 'UID为空,请退出重试',
|
|
|
+ icon: 'none'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let url = 'https://server.fmode.cn/api/wxapp/wechat/urlLink'
|
|
|
+ let query = `invite=${uid}`
|
|
|
+ if (this.data.noBind) {
|
|
|
+ query = ``
|
|
|
+ }
|
|
|
+ wx.request({
|
|
|
+ url: url,
|
|
|
+ data: {
|
|
|
+ company: company,
|
|
|
+ path: 'index',
|
|
|
+ query: query,
|
|
|
+ },
|
|
|
+ header: {
|
|
|
+ 'content-type': 'application/json'
|
|
|
+ },
|
|
|
+ method: 'POST',
|
|
|
+ dataType: 'json',
|
|
|
+ responseType: 'text',
|
|
|
+ success: (result) => {
|
|
|
+ console.log(result);
|
|
|
+ if (result?.data?.url_link) {
|
|
|
+ let path = result.data.url_link
|
|
|
+ wx.setClipboardData({
|
|
|
+ data: path,
|
|
|
+ success: function (res) {
|
|
|
+ wx.getClipboardData({
|
|
|
+ success: function (res) {
|
|
|
+ wx.showToast({
|
|
|
+ title: '复制成功',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ wx.showToast({
|
|
|
+ title: '复制错误',
|
|
|
+ icon: 'error',
|
|
|
+ image: '',
|
|
|
+ duration: 1500,
|
|
|
+ mask: false,
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fail: () => {},
|
|
|
+ complete: () => {}
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**保存图片 */
|
|
|
+ saveCanvas() {
|
|
|
+ let {
|
|
|
+ canvas
|
|
|
+ } = this.data
|
|
|
+ let that = this
|
|
|
+ wx.canvasToTempFilePath({
|
|
|
+ canvas: canvas,
|
|
|
+ success(res) {
|
|
|
+ that.setData({
|
|
|
+ saveimage: res.tempFilePath
|
|
|
+ })
|
|
|
+ wx.saveImageToPhotosAlbum({
|
|
|
+ filePath: res.tempFilePath,
|
|
|
+ success: (res) => {
|
|
|
+ wx.showToast({
|
|
|
+ title: '已下载图片',
|
|
|
+ icon: 'none'
|
|
|
+ })
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ // console.log('err',err)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ console.log(err)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /**绘制canvas */
|
|
|
+ draw() {
|
|
|
+ let {
|
|
|
+ canv_bg,
|
|
|
+ canv_qr,
|
|
|
+ canv_avatar,
|
|
|
+ canv_name,
|
|
|
+ canv_uid,
|
|
|
+ canv_tag,
|
|
|
+ } = this.data
|
|
|
+ let that = this
|
|
|
+ wx.createSelectorQuery()
|
|
|
+ .select('#myCanvas')
|
|
|
+ .fields({
|
|
|
+ node: true,
|
|
|
+ size: true
|
|
|
+ })
|
|
|
+ .exec((res) => {
|
|
|
+ const canvas = res[0].node
|
|
|
+ const ctx = canvas.getContext('2d')
|
|
|
+ const width = res[0].width
|
|
|
+ const height = res[0].height
|
|
|
+ // 初始化画布大小
|
|
|
+ const dpr = wx.getWindowInfo().pixelRatio
|
|
|
+ canvas.width = width * dpr
|
|
|
+ canvas.height = height * dpr
|
|
|
+ ctx.scale(dpr, dpr)
|
|
|
+ ctx.clearRect(0, 0, width, height)
|
|
|
+ //========背景=====
|
|
|
+ let bg = canvas.createImage()
|
|
|
+ bg.onload = () => {
|
|
|
+ ctx.drawImage(bg, 0, 0, width, height)
|
|
|
+ //========头像=========
|
|
|
+ let x = width * 0.06
|
|
|
+ let y = width * 0.06
|
|
|
+ let w = width * 0.25
|
|
|
+ let h = width * 0.25
|
|
|
+ let avatar = canvas.createImage();
|
|
|
+ avatar.onload = () => {
|
|
|
+ ctx.save();
|
|
|
+ let r = 10
|
|
|
+ ctx.beginPath()
|
|
|
+ ctx.moveTo(x + r, y)
|
|
|
+ ctx.arcTo(x + w, y, x + w, y + h, r)
|
|
|
+ ctx.arcTo(x + w, y + h, x, y + h, r)
|
|
|
+ ctx.arcTo(x, y + h, x, y, r)
|
|
|
+ ctx.arcTo(x, y, x + w, y, r)
|
|
|
+ ctx.closePath()
|
|
|
+ ctx.clip()
|
|
|
+ ctx.drawImage(avatar, x, y, w, h)
|
|
|
+ ctx.restore()
|
|
|
+ ctx.draw()
|
|
|
+ }
|
|
|
+ avatar.src = canv_avatar
|
|
|
+ //========文字========
|
|
|
+ // ctx.fillStyle = '#4F9AF7';
|
|
|
+ ctx.font = `${h*0.25}px bold Arial`;
|
|
|
+ ctx.fillText(canv_name, x + w + 8, y + (h * 0.36));
|
|
|
+ ctx.font = `${h*0.15}px Arial`;
|
|
|
+ ctx.fillText(`UID:${canv_uid}`, x + w + 8, y + (h * 0.63));
|
|
|
+ // 标签
|
|
|
+ let tag = canvas.createImage()
|
|
|
+ tag.onload = () => {
|
|
|
+ ctx.drawImage(tag, x + w + 8, y + (h * 0.7), h * 0.36+6, h * 0.21)
|
|
|
+ ctx.fillStyle = '#fff';
|
|
|
+ ctx.font = `${h*0.12}px bold Arial`;
|
|
|
+ ctx.fillText(canv_tag, x + w + 8+3, y + (h * 0.85));
|
|
|
+ }
|
|
|
+ tag.src = 'https://file-cloud.fmode.cn/EbxZUK5lBI/20250418/f1d8n1042110554.png'
|
|
|
+
|
|
|
+ //二维码
|
|
|
+ let qr = canvas.createImage()
|
|
|
+ qr.onload = () => {
|
|
|
+ ctx.drawImage(qr, width * 0.25, height * 0.5, width * 0.5, width * 0.5)
|
|
|
+ }
|
|
|
+ qr.src = canv_qr
|
|
|
+ }
|
|
|
+ bg.src = canv_bg
|
|
|
+ that.setData({
|
|
|
+ canvas
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面初次渲染完成
|
|
|
+ */
|
|
|
+ onReady() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面显示
|
|
|
+ */
|
|
|
+ onShow() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面隐藏
|
|
|
+ */
|
|
|
+ onHide() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面卸载
|
|
|
+ */
|
|
|
+ onUnload() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面相关事件处理函数--监听用户下拉动作
|
|
|
+ */
|
|
|
+ onPullDownRefresh() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面上拉触底事件的处理函数
|
|
|
+ */
|
|
|
+ onReachBottom() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户点击右上角分享
|
|
|
+ */
|
|
|
+ onShareAppMessage() {
|
|
|
+ let {
|
|
|
+ uid
|
|
|
+ } = this.data
|
|
|
+
|
|
|
+ let path = `index?invite=${uid}`
|
|
|
+ if (this.data.noBind) {
|
|
|
+ path = 'index'
|
|
|
+ }
|
|
|
+ if (this.data.route) {
|
|
|
+ if (this.data.noBind) {
|
|
|
+ qrCodeUrl = qrCodeUrl + `?route=${this.data.route}`
|
|
|
+ } else {
|
|
|
+ qrCodeUrl = qrCodeUrl + `&route=${this.data.route}`
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ title: '邀请好友',
|
|
|
+ path: path,
|
|
|
+ imageUrl: '',
|
|
|
+ }
|
|
|
+ }
|
|
|
+})
|