You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

753 lines
16 KiB

4 years ago
<template>
<view class="content">
<view class="memberBanner">
<image mode="widthFix" :src="packages.poster"></image>
</view>
<view class="memberCon">
<view class="topTit">
<text class="titInner">
4 years ago
<text class="titCon"><text class="f_blue">
<block v-if="packages.price>0"><text class="f_big">{{packages.price}}</text></block>
<block v-else><text class="f_big">免费</text></block>
</text>{{packages.name}}</text>
4 years ago
<text class="line"></text>
</text>
</view>
4 years ago
<view class="title flex_center" style="display: none;">
4 years ago
<view class="i_left">
<image src="../../../../static/i_left.png"></image>
</view>
<view class="tit_center">套餐项目</view>
<view class="i_right">
<image src="../../../../static/i_right.png"></image>
</view>
</view>
4 years ago
<view class="mealCol flex_start flex_wrap" style="display: none;">
4 years ago
<block v-for="(mod, i) in packages.items">
<view class="colInfo">
4 years ago
<view class="flex_between" style="align-items: unset;"><text
class="colInfoText">{{mod.product_type.name}}</text><text
class="f_black">{{((mod.num!=""&&mod.num!=undefined)? mod.num:"1")}}{{((mod.unit!=""&&mod.unit!=undefined)? mod.unit:"次")}}</text>
</view>
4 years ago
</view>
</block>
</view>
<view class="memberPop">
<view class="cardOuter">
<view :class="cardActive" @click="cardActive">
4 years ago
<view class="note">
<u-parse :domain="domain" :html="packages.content"></u-parse>
</view>
4 years ago
</view>
</view>
</view>
</view>
4 years ago
<view class="footer">
<view class="menuLink">
<navigator url="../../../../pages/home/home" open-type="switchTab">
<view class="menuCol">
<text class="iconfont icon-home"></text>
<text>首页</text>
</view>
</navigator>
4 years ago
<view class="menuCol" @click="shareOpen" v-if="user_info.promotion == 1">
4 years ago
<text class="iconfont icon-Share"></text>
<text>分享</text>
</view>
4 years ago
<button open-type="contact" class="menuCol" style="display: flex;
flex-direction: column;
line-height: inherit;
4 years ago
background: none;
padding: unset;">
<text class="iconfont icon-Icon_customerservice"></text>
<text>客服</text>
</button>
</view>
<view class="buyBtn" @click="goBuy"></view>
4 years ago
</view>
4 years ago
4 years ago
<uni-popup ref="shareCode" :mask-click="true" type="bottom" class="shareBox">
<view class="codeOuter">
<view class="shareCon" @click="shareClose">
<canvas style="width:80%;margin-left:10%;position: absolute;"
:style="{ height:(shareHeight*scare) + 'px', marginTop:(cropperH-(shareHeight*scare))/2+'rpx'}"
canvas-id="firstCanvas" id="firstCanvas"></canvas>
<!-- <image class="shareBg" mode="widthFix" src="../../static/bg_haibao@2x.png"></image> -->
<!-- <image class="code" src="../../static/300_qr.png"></image> -->
</view>
<view class="shareBott" :style="{display: shareBtnDisplay}">
<button class="shareCol" @click="shareClose" open-type="share"
style="border-radius:0;flex:1;">发给朋友</button>
<button class="shareCol" @click="save" style="border-radius:0;flex:1;">保存相册</button>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
let sysInfo = uni.getSystemInfoSync();
let SCREEN_WIDTH = sysInfo.screenWidth
let SCREEN_HEIGHT = sysInfo.screenHeight;
let WindowHeight = sysInfo.windowHeight;
let windowWidth = sysInfo.windowWidth;
import {
weixin
} from '../../../../utils/weixin.js';
export default {
data() {
return {
cardActive: 0,
img: '',
user_info: {
promotion: ''
},
shareBtnDisplay: 'none',
// 动态的宽高
cropperW: SCREEN_WIDTH,
cropperH: SCREEN_HEIGHT,
packages: [],
sharePath: "",
scare: 1,
shareHeight: 500,
4 years ago
domain: "",
id: "",
promotion_id: ""
4 years ago
}
},
onLoad(option) {
4 years ago
console.log(weixin.getBaseUrl())
this.domain = weixin.getBaseUrl();
if (!weixin.isNull(option.promotion_id)) {
4 years ago
uni.setStorageSync("base_promotion_id", option.promotion_id)
}
4 years ago
if (!weixin.isNull(option.id)) {
4 years ago
this.id = option.id;
this.getPackages();
}
4 years ago
const scene = decodeURIComponent(option.scene);
if (!weixin.isNull(scene)) {
console.log(scene)
this.id = weixin.getParam(scene, "id");
4 years ago
if (!weixin.isNull(weixin.getParam(scene, "promotion_id"))) {
this.promotion_id = weixin.getParam(scene, "promotion_id");
4 years ago
uni.setStorageSync("base_promotion_id", this.promotion_id);
4 years ago
}
4 years ago
this.getPackages();
}
4 years ago
weixin.getOpenidInfo(info => {
4 years ago
this.user_info = info.user_info
4 years ago
}, false)
this.scare = windowWidth / 375;
},
onShow() {
if (this.checkLogin()) {
this.getPackages()
}
},
4 years ago
onShareAppMessage() {
var url='packages/packageBuy/pages/packageInfo/index?id=' + this.id + '&promotion_id=' + this.user_info.id;
console.log(url)
return {
title: this.packages.name,
path: url,
imageUrl: this.img
}
},
onShareTimeline() {
4 years ago
return {
title: this.packages.name,
4 years ago
path: 'packages/packageBuy/pages/packageInfo/index?id=' + this.id + '&promotion_id=' + this.user_info.id,
4 years ago
imageUrl: this.img
}
},
methods: {
4 years ago
4 years ago
shareOpen() {
uni.showLoading({
title: '加载中'
});
var that = this;
this.$refs.shareCode.open();
uni.getImageInfo({
src: this.packages.poster,
success: rbg => {
this.img = rbg.path;
this.getAvatar();
}
});
},
getAvatar: function() {
4 years ago
let userProfile = uni.getStorageSync('user_profile');
if (!weixin.isNull(userProfile)) {
uni.getImageInfo({
src: userProfile.avatarUrl, // 头像
success: rlogo => {
this.imgAvatar = rlogo.path;
this.draw();
}
});
} else {
this.imgAvatar = "../../../../static/avatar.jpg";
this.draw();
4 years ago
}
},
draw: function() {
var that = this;
uni.request({
url: this.baseUrl + '/api/member/get-wxa-qrcode',
method: 'GET',
data: {
path: 'packages/packageBuy/pages/packageInfo/index',
4 years ago
scene: 'id=' + this.id + '&promotion_id=' + this.user_info.id
4 years ago
},
success: r => {
if (r.data.status === 1) {
uni.getImageInfo({
src: this.baseUrl + r.data.data, // 二维码
success: res => {
var ctx = uni.createCanvasContext('firstCanvas')
var w = SCREEN_WIDTH * 0.8;
var h = this.shareHeight * this.scare;
// ctx.fillStyle = '#fff';
// ctx.fillRect(0, 0, 214, 342);
ctx.drawImage('../../../../static/bg_haibao@2x.jpg', 0, 0,
w, h
); //(SCREEN_HEIGHT - 50 - SCREEN_WIDTH * 0.8 * 1.65) /2, SCREEN_WIDTH * 0.8, SCREEN_WIDTH * 0.8 * 1.5);
ctx.drawImage('../../../../static/bg_haibao1.png', 20, 30 +
40,
w -
40, h - 100);
/* SCREEN_WIDTH *
0.15, (SCREEN_HEIGHT - SCREEN_WIDTH * 0.6 * 1.65) /
2, SCREEN_WIDTH * 0.695, SCREEN_WIDTH * 0.6 * 1.5); */
ctx.drawImage(this.img, 20, 30 + 40, w -
40, (h - 60 - 60) * 0.5);
/* SCREEN_WIDTH * 0.15, (SCREEN_HEIGHT - SCREEN_WIDTH *
0.6 * 1.65) /
2, SCREEN_WIDTH * 0.695, SCREEN_WIDTH * 0.695 / 1.6); */
let packagesFirst = this.packages
ctx.font = "22rpx bold";
// 设置颜色
ctx.fillStyle = "#fff";
// 绘制文字参数要写的字x坐标y坐标
ctx.fillText("会员福利孕产礼包", 20, 50);
ctx.font = "16rpx bold";
// 设置颜色
ctx.fillStyle = "#000";
// 绘制文字参数要写的字x坐标y坐标
ctx.fillText("专享大礼包", 40, (h + 50) * 0.5 + 20);
ctx.font = "14rpx bold";
// 设置颜色
ctx.fillStyle = "#3377b7";
// 绘制文字参数要写的字x坐标y坐标
ctx.fillText("¥" + packagesFirst.price + "" + packagesFirst
.name, 40, (h + 50) * 0.5 + 20 + 30);
let user_info = uni.getStorageSync("user_info_yunyubang");
var img = this.imgAvatar;
that.circleImg(ctx,
img,
40, h - 60 - w * 0.15,
w * 0.15 / 2);
ctx.font = "12rpx normal";
// 设置颜色
ctx.fillStyle = "#000";
// 绘制文字参数要写的字x坐标y坐标
ctx.fillText(user_info.name,
40, h - 40);
this.circleImg(ctx, res.path, w - 40 - w * 0.2, h - 40 -
w *
0.2, w * 0.2 / 2);
ctx.draw(),
// r: 半径
setTimeout(() => {
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
fileType: 'jpg',
success: (res) => {
this.shareBtnDisplay =
'flex'
uni.hideLoading();
this.sharePath = res
.tempFilePath;
},
})
}, 100)
}
})
} else {
uni.hideLoading()
this.$refs.shareCode.close()
this.alert(r.data.msg)
}
}
})
},
circleImg: function(ctx, img, x, y, r) {
ctx.save()
var d = 2 * r;
var cx = x + r;
var cy = y + r;
ctx.arc(cx, cy, r, 0, 2 * Math.PI);
ctx.clip();
ctx.drawImage(img, x, y, d, d);
ctx.restore();
},
shareClose() {
this.$refs.shareCode.close()
},
open() {
this.$refs.popup.open('top')
},
close() {
this.$refs.popup.close()
},
goBuy() {
if (this.checkLogin()) {
let package_id = this.id;
4 years ago
uni.navigateTo({
url: "../buyMember/buyMember?package_id=" + package_id
4 years ago
});
}
},
//保存图片时h5端不能直接保存只能通过预览长按保存
save() {
let _this = this;
// #ifdef H5
uni.previewImage({
urls: [_this.sharePath]
})
// #endif
// #ifdef APP-PLUS||MP-WEIXIN
uni.saveImageToPhotosAlbum({
filePath: _this.sharePath,
success: function() {
_this.$refs.shareCode.close()
_this.alert('保存成功')
}
});
// #endif
},
getPackages() {
// this.reqByToken('/api/member/get-packages', {}, r => {
// this.packages = r
// }, 'GET')
weixin.request({
api: '/api/member/get-packages-info/' + this.id,
method: 'GET',
utilSuccess: r => {
r.data.poster = this.baseUrl + r.data.poster;
this.packages = r.data
},
utilFail: r => {
console.log(r);
}
})
},
}
}
</script>
<style>
page {
background: linear-gradient(to right, #488e4c 0%, #039786 100%);
padding-bottom: 160rpx;
}
</style>
4 years ago
<style lang="scss" scoped>
button::after {
border: none
}
.footer {
width: 100%;
height: 112rpx;
background: #FFFFFF;
box-shadow: 0px -1rpx 0px 0px #DEDEDE;
padding: 0 30rpx;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
position: fixed;
bottom: 0;
left: 0;
.menuLink {
display: flex;
justify-content: flex-start;
align-items: center;
color: #333;
.menuCol {
margin: 0 30rpx;
font-size: 20rpx;
text {
display: block;
}
.iconfont {
font-size: 36rpx;
margin-bottom: 6rpx;
}
}
}
.buyBtn {
width: 220rpx;
height: 72rpx;
background: linear-gradient(90deg, #FF7E95 0%, #FF447B 100%);
border-radius: 36rpx;
font-size: 28rpx;
font-weight: 500;
text-align: center;
line-height: 72rpx;
color: #fff;
}
}
4 years ago
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.memberBanner {
display: block;
width: 100%;
image {
display: block;
width: 100%;
}
}
.joinBox {
width: 100%;
box-sizing: border-box;
position: fixed;
z-index: 5;
left: 0;
bottom: 0;
box-shadow: -5rpx 0px 20rpx rgba(0, 0, 0, 0.1);
button {
width: 100%;
height: 100rpx;
color: #fff;
font-size: 28rpx;
text-align: center;
line-height: 100rpx;
text-align: center;
background: linear-gradient(to bottom, #FF578A 0%, #FF578A 100%);
}
}
.popBox {
background: #fff;
width: 100%;
}
.shareIcon {
position: fixed;
width: 136rpx;
height: 136rpx;
bottom: 30rpx;
right: 30rpx;
z-index: 9;
image {
display: block;
width: 136rpx;
height: 136rpx;
}
}
.memberPop {
background: #fff;
width: 100%;
.title {
font-size: 36rpx;
color: #000;
text-align: center;
padding: 25rpx 0;
}
.i_close {
display: block;
width: 38rpx;
height: 36rpx;
position: absolute;
top: 30rpx;
right: 30rpx;
}
.cardOuter {
display: flex;
flex-direction: column;
padding: 20rpx;
.note {
color: #999;
font-size: 24rpx;
text-align: left;
}
.cardCol {
flex: 1;
height: 156rpx;
margin: 0 15rpx 15rpx 15rpx;
border-radius: 8rpx;
box-sizing: border-box;
border: 2rpx solid #F5DFB5;
font-size: 28rpx;
color: #999;
text-align: center;
line-height: 2;
padding: 10rpx 30rpx;
.cardTit {
color: #333;
font-size: 32rpx;
font-weight: 700;
}
}
.cardCol.cur {
border: 2rpx solid #E40280;
box-shadow: 0 0 15rpx rgba(228, 2, 128, 0.4);
color: #FF578A;
.cardTit {
color: #FF578A;
}
}
}
.buyNow {
width: 500rpx;
height: 80rpx;
border-radius: 40rpx;
color: #fff;
font-size: 30rpx;
text-align: center;
line-height: 80rpx;
text-align: center;
background: #FF578A;
margin: 30rpx auto 0 auto;
}
}
.shareBox {
background: rgba(0, 0, 0, 0.5);
}
.codeOuter {
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
// padding-top: 13vh;
box-sizing: border-box;
position: relative;
}
.shareCon {
// width: 500rpx;
// margin: 0 auto;
//position: absolute;
//top: 45%;
//left: 50%;
// transform: translate(-50%, -50%);
.code {
width: 300rpx;
height: 300rpx;
display: block;
position: absolute;
left: 50%;
margin-left: -150rpx;
top: 50%;
margin-top: -150rpx;
}
}
.shareBott {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
display: flex;
justify-content: flex-start;
.shareCol {
width: 50%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
font-size: 30rpx;
background: #FF578A;
color: #fff;
}
.shareCol:first-child {
background: #e8e8e8;
color: #666;
}
}
.memberCon {
width: 690rpx;
background: #fff;
border-radius: 8rpx;
padding: 30rpx 0;
box-sizing: border-box;
margin-top: 20rpx;
flex-direction: column !important;
.topTit {
font-size: 33rpx;
color: #302c2f;
font-weight: 700;
padding: 0 30rpx;
.titInner {
position: relative;
}
.titCon {
position: relative;
z-index: 3;
}
.line {
display: inline-block;
height: 30rpx;
width: 110%;
position: absolute;
left: 0;
bottom: 0;
background: linear-gradient(to bottom, #FDFEFD 0%, #91E4C1 100%);
z-index: 1;
}
.f_blue {
color: #0079b8;
}
.f_big {
font-size: 43rpx;
padding: 0 5rpx;
}
}
.title {
padding: 20rpx 30rpx;
.i_left {
image {
display: block;
width: 23rpx;
height: 23rpx;
}
}
.i_right {
image {
display: block;
width: 23rpx;
height: 23rpx;
}
}
.tit_center {
font-size: 28rpx;
color: #0c967f;
font-weight: bold;
min-width: 250rpx;
text-align: center;
}
}
4 years ago
.mealCol {
4 years ago
padding: 0 20rpx;
.width_453 {
width: 480rpx !important;
}
.colInfo {
width: 100%;
margin: 10rpx;
background: #def6eb;
height: 50rpx;
border-radius: 25rpx;
padding: 0 30rpx;
font-size: 26rpx;
font-weight: 700;
line-height: 50rpx;
box-sizing: border-box;
color: #079683;
.f_black {
color: #044238;
}
.colInfoText {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
flex: 1;
}
}
.colInfo:nth-child(even) {
margin: 10rpx 0 10rpx 10rpx;
}
}
}
</style>