diff --git a/app.wxss b/app.wxss
index 115f3a6..ae93720 100644
--- a/app.wxss
+++ b/app.wxss
@@ -113,4 +113,18 @@ page{
max-width: 100%;
height: auto;
object-fit: cover;
+}
+
+.icon-fenxiang {
+ position: absolute;
+ right: 20rpx;
+ margin-top: 20rpx;
+ width: 60rpx;
+ line-height: 60rpx;
+ background: rgba(0, 0, 0, 0.4);
+ border-radius: 50%;
+ text-align: center;
+ color: #fff;
+ font-size: 36rpx;
+ z-index: 1;
}
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
index 6b75438..e8d62a2 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -157,9 +157,21 @@ Page({
limit:1
}).then(res=>{
if(res.data[0] && res.data[0].fast_sales_sku[0]){
- this.setData({
- saleProduct:res.data[0].fast_sales_sku[0]
- })
+ if(res.data[0].fast_sales_sku.length > 0){
+ let price = res.data[0].fast_sales_sku[0].price
+ let data = res.data[0].fast_sales_sku[0]
+ for (let item of res.data[0].fast_sales_sku){
+ if (price > item.price) price = item.price
+ }
+ data.price = price
+ this.setData({
+ saleProduct:data
+ })
+ }else{
+ this.setData({
+ saleProduct:res.data[0].fast_sales_sku[0]
+ })
+ }
}
})
commonApi._post("product/get_product_by_tag",{
@@ -167,9 +179,23 @@ Page({
offset:0,
limit:1
}).then(res=>{
- this.setData({
- roadProduct:res.data.list[0]
- })
+ if(res.data.list.length > 0){
+ let price = res.data.list[0].price
+ for(let item of res.data.list ){
+ if(item.price > price){
+ price = item.price
+ }
+ }
+ let data = res.data.list[0]
+ data.price = price
+ this.setData({
+ roadProduct:data
+ })
+ }else{
+ this.setData({
+ roadProduct:[111]
+ })
+ }
})
},
getFourProduct:function(){
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
index 62f9538..035ef39 100644
--- a/pages/index/index.wxml
+++ b/pages/index/index.wxml
@@ -8,11 +8,12 @@
搜索想要的旅游产品或服务
-
-
+
+
-
+
@@ -52,15 +53,18 @@
场馆预约
-
+
非遗专卖
-
+
剧场演出
-
+
文创特产
@@ -71,38 +75,45 @@
-
+
特惠新品超值商品限时抢购
-
-
+
+
+
限时特惠
新品推荐
+ ¥{{saleProduct.price?saleProduct.price/100:0}}
精品线路四季苏州最是江南
-
+
-
-
+
+
+
四季苏州
最是江南
+ ¥{{roadProduct.price?roadProduct.price/100:0}}
-
+
@@ -119,16 +130,21 @@
-->
-
+
+
-
-
-
+
+
+
+
-
+
+
更多
@@ -192,7 +208,8 @@
-
+
+
@@ -228,12 +245,12 @@
团队预约
-
+
精彩回顾
-
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片到相册
+
+
+
+
+
+
+
+
+ 微信识别二维码
+
+
+
+
+
+ 保存到相册
+
\ No newline at end of file
diff --git a/pages/info/activityInfo/index.wxss b/pages/info/activityInfo/index.wxss
index 95184c5..cba4f6b 100644
--- a/pages/info/activityInfo/index.wxss
+++ b/pages/info/activityInfo/index.wxss
@@ -4,6 +4,9 @@
height: 330rpx;
display: block;
}
+.swiper{
+ position: relative;
+}
.top-box {
margin: 25rpx;
margin-top: -25rpx;
@@ -143,4 +146,82 @@
color: #fff;
font-size: 25rpx;
float: right;
+}
+
+
+.mask-content {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+}
+.mask-content .icon-close {
+ position: absolute;
+ right: 40rpx;
+ top: 40rpx;
+}
+
+.share-img-box {
+ /* width: 551rpx; */
+ position: static;
+ background: none;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+.share-img {
+ display: block;
+ width: 551rpx;
+}
+.share-tips {
+ width: 426rpx;
+ height: 150rpx;
+ background: #FFFFFF;
+ border-radius: 25rpx;
+ margin-top: 25rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 65rpx;
+ color: #999;
+ font-size: 24rpx;
+ text-align: center;
+ line-height: 40rpx;
+}
+.share-tips .img {
+ display: block;
+ width: 55rpx;
+ margin: 0 auto;
+ margin-bottom: 4rpx;
+}
+.tipimg {
+ position: absolute;
+ left: 50%;
+ margin-left: 16rpx;
+ width: 24rpx;
+ height: 24rpx;
+ background: #D62828;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 34rpx;
+}
+.tipimg image {
+ width: 21rpx;
+ display: block;
+
+}
+.save-btn {
+ width: 403rpx;
+ line-height: 77rpx;
+ background: #D62828;
+ border-radius: 39rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 31rpx;
+ font-weight: 500;
+ margin-top: 50rpx;
}
\ No newline at end of file
diff --git a/pages/info/cardInfo/index.js b/pages/info/cardInfo/index.js
index ff2ab40..c917ec0 100644
--- a/pages/info/cardInfo/index.js
+++ b/pages/info/cardInfo/index.js
@@ -3,6 +3,7 @@ let device = wx.getSystemInfoSync();
const ratio = device.windowWidth / 750;
import commonApi from "../../../utils/https/common"
import util from "../../../utils/util"
+import QRCode from '../../../utils/weapp-qrcode.js'
let app = getApp()
Page({
@@ -10,164 +11,428 @@ Page({
* 页面的初始数据
*/
data: {
- fixed:false,
- type:1,
- info:null,
- top:0,
- retailId:""
+ fixed: false,
+ type: 1,
+ info: null,
+ top: 0,
+ retailId: "",
+ shareImg: null,
+ showShareFlag: false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
- if(options.id){
+ if (options.id) {
this.setData({
- id:options.id
+ id: options.id
})
}
else {
util.back();
return;
}
- if(options.retailId){
+ if (options.retailId) {
this.setData({
- retailId:options.retailId
+ retailId: options.retailId
})
}
let rect = wx.getMenuButtonBoundingClientRect();
let height = (rect.top - device.statusBarHeight) * 2 + rect.height + device.statusBarHeight;
console.log(height)
this.setData({
- top:height
+ top: height
})
let api = commonApi._post;
- if(wx.getStorageSync("jstrip_token")){
+ if (wx.getStorageSync("jstrip_token")) {
api = commonApi.user_post;
}
- api("product/get_product_detail",{
- id:options.id
- }).then(res=>{
- res.data.display_tags = (res.data.display_tags?res.data.display_tags.split(","):[]).splice(0,2);
+ api("product/get_product_detail", {
+ id: options.id
+ }).then(res => {
+ res.data.display_tags = (res.data.display_tags ? res.data.display_tags.split(",") : []).splice(0, 2);
// 如果带有指定skuid的话 那么取指定的sku展示
- if(options.skuid){
- for(let i = 0;i{
- item.sku_model.recharge = item.sku_model.recharge?item.sku_model.recharge.split(","):[];
- item.sku_model.recharge.map(item=>{
+ res.data.sku.map(item => {
+ item.sku_model.recharge = item.sku_model.recharge ? item.sku_model.recharge.split(",") : [];
+ item.sku_model.recharge.map(item => {
item = Number(item);
})
})
this.setData({
- info:res.data
+ info: res.data
})
this.BroswerRecord();
})
},
- changeMenu:function(e){
- let index = e.currentTarget.dataset.index,that = this;
- const query=wx.createSelectorQuery(); //创建节点查询器
- query.select("#box"+index).boundingClientRect() //选择toViewid获取位置信息
+ changeMenu: function (e) {
+ let index = e.currentTarget.dataset.index, that = this;
+ const query = wx.createSelectorQuery(); //创建节点查询器
+ query.select("#box" + index).boundingClientRect() //选择toViewid获取位置信息
query.selectViewport().scrollOffset() //获取页面查询位置的
- query.exec(function(res) {
+ query.exec(function (res) {
let scrollTop = res[0].top + res[1].scrollTop - 110 * ratio - that.data.top;
wx.pageScrollTo({
scrollTop: scrollTop + 4,
duration: 0
})
that.setData({
- type:index
+ type: index
})
})
},
- order:function(){
+ order: function () {
app.globalData.couponInfo = null;
app.globalData.product = {
- product:this.data.info,
- sku:this.data.info.sku[0]
+ product: this.data.info,
+ sku: this.data.info.sku[0]
}
app.globalData.retailId = this.data.retailId;
wx.navigateTo({
url: '/pages/order/card/index'
})
},
- onPageScroll:function(e){
- let that = this,height = this.data.top;
+ onPageScroll: function (e) {
+ let that = this, height = this.data.top;
let topHeight = height;
- wx.createSelectorQuery().select('#menus').boundingClientRect(function(rect){
- console.log(rect.top,topHeight)
- if(rect.top<=topHeight){
+ wx.createSelectorQuery().select('#menus').boundingClientRect(function (rect) {
+ console.log(rect.top, topHeight)
+ if (rect.top <= topHeight) {
// 此时应该把menus固定在顶部
that.setData({
- fixed:true
+ fixed: true
})
}
- else{
+ else {
that.setData({
- fixed:false
+ fixed: false
})
}
// 滚动时判断滚动到哪个部分了
- const query=wx.createSelectorQuery(); //创建节点查询器
+ const query = wx.createSelectorQuery(); //创建节点查询器
query.select("#box1").boundingClientRect() //选择toViewid获取位置信息
query.select("#box2").boundingClientRect() //选择toViewid获取位置信息
- let minHeight = that.data.fixed?(110 * ratio + height): topHeight;
- query.exec(function(res) {
- if(res[1].top {
+
+ })
+ return;
+ }
+ if (!this.data.shareImg) {
+ wx.showToast({
+ title: '图片生成中,稍后再试',
+ icon: 'none'
+ })
+ return;
+ }
+ this.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ // 保存
+ save() {
+ let url = this.data.shareImg, that = this;
+ wx.authorize({
+ /* 这个就是保存相册的 */
+ scope: 'scope.writePhotosAlbum',
+ success() {
+ wx.saveImageToPhotosAlbum({
+ filePath: url,
+ success(res) {
+ wx.showToast({
+ title: '保存成功',
+ icon: "success"
+ })
+ that.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ fail(res) {
+ wx.showToast({
+ title: '保存失败',
+ icon: 'none'
+ })
+ }
+ })
+ },
+ complete(res) {
+ console.log(res);
+ /* 这里判断一下如果没有授权重新打开设置选项 */
+ wx.getSetting({
+ success(res) {
+ if (!res.authSetting['scope.writePhotosAlbum']) {
+ /* 打开设置的方法 */
+ // opensit();
+ wx.showToast({
+ title: '请打开权限后再试',
+ icon: 'none'
+ })
+ }
+ }
+ });
+ }
+ });
+
+ },
+ // 绘制海报
+ drawImg: function () {
+ var that = this, userinfo = wx.getStorageSync('jstrip_userInfo');
+ if (!userinfo) {
+ // 去登录
+ return false;
+ }
+ const ctx = wx.createCanvasContext('imageCanvas');
+ // const device = wx.getSystemInfoSync();
+ // const ratio = device.screenWidth / 750;
+ // 先获取到图片信息
+ let promise2 = new Promise(function (resolve, reject) {
+ wx.getImageInfo({
+ src: that.data.info.headimg,
+ success: function (res) {
+ resolve(res);
+ },
+ fail: function (res) {
+ reject(res);
+ }
+ })
+ })
+ let promise3 = new Promise(function (resolve, reject) {
+ let userid = wx.getStorageSync('jstrip_userid')
+ new QRCode('myQrcode', {
+ text: 'https://m.cloud.sz-trip.com/ScenicDetail?id=' + that.data.info.id + '&sharedUserId=' + userid + '&channel=-1',
+ width: 500,
+ height: 500,
+ padding: 12, // 生成二维码四周自动留边宽度,不传入默认为0
+ correctLevel: QRCode.CorrectLevel.H, // 二维码可辨识度
+ callback: (res) => {
+ resolve(res);
+ }
+ })
+ })
+ //成功得到图片信息后,开始绘图
+ Promise.all([promise2, promise3]).then(imgs => {
+ ctx.save();
+ ctx.beginPath(); //开始绘制
+ that.handleBorderRect(ctx, 0, 0, 551 * ratio, 407 * ratio, 25 * ratio, '#ccc')
+ ctx.clip();//画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
+ ctx.drawImage(imgs[0].path, 0, 0, 551 * ratio, 407 * ratio);
+ ctx.restore();
+ ctx.save();
+ that.handleBorderRect2(ctx, 0, 407 * ratio, 551 * ratio, 236 * ratio, 25 * ratio, '#fff')
+ ctx.restore();
+ // 绘制二维码
+ ctx.drawImage(imgs[1].path, 373 * ratio, 495 * ratio, 137 * ratio, 137 * ratio);
+ // 开始文字绘制
+ ctx.setFillStyle("#000");
+ ctx.setFontSize(30 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ that.drawText(ctx, that.data.info.title, 25 * ratio, 450 * ratio, 480 * ratio, ratio);
+ // 售价
+ ctx.setFillStyle("#D62828");
+ ctx.setFontSize(40 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let price = "¥" + (that.data.info.price / 100);
+ let width = ctx.measureText(price).width;
+ ctx.fillText(price, 25 * ratio, 620 * ratio);
+ // 副标题
+ ctx.setFillStyle("#999999");
+ ctx.setFontSize(28 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let subtitle = that.data.info.display_tags[0];
+ if (subtitle.length > 10) {
+ subtitle = subtitle.substr(0, 10) + '...'
+ }
+ ctx.fillText(subtitle, 25 * ratio, 540 * ratio);
+ // ctx.draw();
+ // 划线价
+ ctx.setFillStyle("#999999");
+ ctx.setFontSize(32 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let market_price = "¥" + (Number(that.data.info.market_price) / 100)
+ ctx.fillText(market_price, 40 * ratio + width, 620 * ratio);
+ let market_price_width = ctx.measureText(market_price).width;
+ // 划线
+ ctx.beginPath()
+ ctx.setLineWidth(1)
+ ctx.moveTo(40 * ratio + width, 608 * ratio)
+ ctx.lineTo(45 * ratio + width + market_price_width, 608 * ratio)
+ ctx.stroke();
+ // 长按识别二维码
+ // ctx.setFillStyle("#666");
+ // ctx.setFontSize(22 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按识别二维码", 404*ratio, 710*ratio);
+ // 长按图片转发或保存
+ // ctx.setFillStyle("#000");
+ // ctx.setFontSize(24 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按图片保存到本地",(592*ratio - ctx.measureText("长按图片保存到本地").width)/2, 740*ratio);
+ ctx.draw();
+ // 转为图片
+ setTimeout(() => {
+ wx.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ canvasId: 'imageCanvas',
+ success: function (res) {
+ that.setData({
+ shareImg: res.tempFilePath
+ })
+ },
+ fail(err) {
+ console.log('agdgjgdajhg', err)
+ }
+ })
+ }, 500)
+ return false;
+ }).catch(err => {
+ console.log("this err", err)
+ })
+ },
+ // 圆角矩形
+ handleBorderRect(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x + w, y + h);
+ ctx.lineTo(x, y + h)
+ // 左上角
+ ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
+ ctx.moveTo(x + r, y);
+ ctx.lineTo(x + w - r, y);
+ ctx.lineTo(x + w, y + r);
+ // 右上角
+ ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
+ ctx.lineTo(x + w, y + h);
+ ctx.lineTo(x + w - r, y + h);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ handleBorderRect2(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + w, y)
+ // 右下角
+ ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
+ ctx.lineTo(x + r, y + h);
+ ctx.lineTo(x, y + h - r);
+ // 左下角
+ ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
+ ctx.lineTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ // 绘制两行文字
+ drawText: function (ctx, str, x, y, canvasWidth, ratio) {
+ let row = [], temp = "", chr = str.split("");
+ for (var a = 0; a < chr.length; a++) {
+ if (ctx.measureText(temp).width < canvasWidth) {
+ temp += chr[a];
+ }
+ else {
+ a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
+ row.push(temp);
+ temp = "";
+ }
+ }
+ row.push(temp);
+
+ //如果数组长度大于2 则截取前两个
+ if (row.length > 2) {
+ var rowCut = row.slice(0, 2);
+ var rowPart = rowCut[1];
+ var test = "";
+ var empty = [];
+ for (var a = 0; a < rowPart.length; a++) {
+ if (ctx.measureText(test).width < canvasWidth - 30 * ratio) {
+ test += rowPart[a];
+ }
+ else {
+ break;
+ }
+ }
+ empty.push(test);
+ var group = empty[0] + "..."//这里只显示两行,超出的用...表示
+ rowCut.splice(1, 1, group);
+ row = rowCut;
+ }
+ for (var b = 0; b < row.length; b++) {
+ ctx.fillText(row[b], x, y + b * 40 * ratio, canvasWidth);
+ }
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
-
- },
- BroswerRecord:function(){
- setTimeout(()=>{
- if(app.globalData.uuid){
- commonApi._post('browse/browse_record',{
- type:"goods",
- title:this.data.info.title,
- drive:"mini",
- source_id:this.data.id,
- url:"/pages/info/cardInfo/index?id="+this.data.id,
- uuid:app.globalData.uuid
- }).then(res=>{
+
+ },
+ BroswerRecord: function () {
+ setTimeout(() => {
+ if (app.globalData.uuid) {
+ commonApi._post('browse/browse_record', {
+ type: "goods",
+ title: this.data.info.title,
+ drive: "mini",
+ source_id: this.data.id,
+ url: "/pages/info/cardInfo/index?id=" + this.data.id,
+ uuid: app.globalData.uuid
+ }).then(res => {
console.log(res)
})
}
else {
this.BroswerRecord();
}
- },500)
+ }, 500)
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
-
+ if (!wx.getStorageSync('jstrip_token')) {
+ return;
+ }
+ if (this.data.info && this.data.info.id) {
+ this.drawImg()
+ }
+ else {
+ setTimeout(() => {
+ this.onShow()
+ }, 200)
+ }
},
/**
diff --git a/pages/info/cardInfo/index.wxml b/pages/info/cardInfo/index.wxml
index 5a4ac3b..1e668b1 100644
--- a/pages/info/cardInfo/index.wxml
+++ b/pages/info/cardInfo/index.wxml
@@ -1,6 +1,7 @@
+
@@ -51,4 +52,29 @@
¥{{info.price/100}}
立即预订
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片到相册
+
+
+
+
+
+ 微信识别二维码
+
+
+
+ 保存到相册
+
\ No newline at end of file
diff --git a/pages/info/cardInfo/index.wxss b/pages/info/cardInfo/index.wxss
index 3e58a8b..06f0335 100644
--- a/pages/info/cardInfo/index.wxss
+++ b/pages/info/cardInfo/index.wxss
@@ -365,4 +365,81 @@ page {
background: #D62828;
border-radius: 39rpx;
text-align: center;
+}
+
+.mask-content {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+}
+.mask-content .icon-close {
+ position: absolute;
+ right: 40rpx;
+ top: 40rpx;
+}
+
+.share-img-box {
+ /* width: 551rpx; */
+ position: static;
+ background: none;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+.share-img {
+ display: block;
+ width: 551rpx;
+}
+.share-tips {
+ width: 426rpx;
+ height: 150rpx;
+ background: #FFFFFF;
+ border-radius: 25rpx;
+ margin-top: 25rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 65rpx;
+ color: #999;
+ font-size: 24rpx;
+ text-align: center;
+ line-height: 40rpx;
+}
+.share-tips .img {
+ display: block;
+ width: 55rpx;
+ margin: 0 auto;
+ margin-bottom: 4rpx;
+}
+.tipimg {
+ position: absolute;
+ left: 50%;
+ margin-left: 16rpx;
+ width: 24rpx;
+ height: 24rpx;
+ background: #D62828;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 34rpx;
+}
+.tipimg image {
+ width: 21rpx;
+ display: block;
+
+}
+.save-btn {
+ width: 403rpx;
+ line-height: 77rpx;
+ background: #D62828;
+ border-radius: 39rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 31rpx;
+ font-weight: 500;
+ margin-top: 50rpx;
}
\ No newline at end of file
diff --git a/pages/info/hotelProductInfo/index.js b/pages/info/hotelProductInfo/index.js
index e805448..0ce7f1f 100644
--- a/pages/info/hotelProductInfo/index.js
+++ b/pages/info/hotelProductInfo/index.js
@@ -1,6 +1,9 @@
// pages/info/hotelProductInfo/index.js
import util from "../../../utils/util"
import commonApi from "../../../utils/https/common"
+let device = wx.getSystemInfoSync();
+const ratio = device.windowWidth / 750;
+import QRCode from '../../../utils/weapp-qrcode.js'
let app = getApp()
Page({
@@ -8,31 +11,33 @@ Page({
* 页面的初始数据
*/
data: {
- invoiceModes:{
- 1:"如需发票,请向酒店前台索取",
- 2:"美团开具发票",
- 3:"第三方开具发票"
+ invoiceModes: {
+ 1: "如需发票,请向酒店前台索取",
+ 2: "美团开具发票",
+ 3: "第三方开具发票"
},
- showInfoFlag:false,
- listimgs:[],
- startDate:"",//入住时间
- endDate:"",//离店时间
- startDateText:"",//入住时间转文字
- endDateText:"",//离店时间转文字
- days:1,//住店的日期总数
- today:"",//今天,也就是入住可以选择的日期
- tomorrow:"",//离店最早可以选择的日期
- sceneInfo:null,
- ask:[],
- isLike:0,
- commentTotal:0,
- comment:[],
- products:[],
- isTest:true,
- activeSkuIndex:-1,
- skuList:[],
- roomInfo:null,
- retailId:""
+ showInfoFlag: false,
+ listimgs: [],
+ startDate: "",//入住时间
+ endDate: "",//离店时间
+ startDateText: "",//入住时间转文字
+ endDateText: "",//离店时间转文字
+ days: 1,//住店的日期总数
+ today: "",//今天,也就是入住可以选择的日期
+ tomorrow: "",//离店最早可以选择的日期
+ sceneInfo: null,
+ ask: [],
+ isLike: 0,
+ commentTotal: 0,
+ comment: [],
+ products: [],
+ isTest: true,
+ activeSkuIndex: -1,
+ skuList: [],
+ roomInfo: null,
+ retailId: "",
+ shareImg: null,
+ showShareFlag: false
},
/**
@@ -40,95 +45,95 @@ Page({
*/
onLoad: function (options) {
this.setData({
- id:options.id
+ id: options.id
})
- if(options.retailId){
+ if (options.retailId) {
this.setData({
- retailId:options.retailId
+ retailId: options.retailId
})
}
- commonApi._post("pbservice/Other/getClientConfig",{
- unique_key:"wechatxcx"
- }).then(res=>{
+ commonApi._post("pbservice/Other/getClientConfig", {
+ unique_key: "wechatxcx"
+ }).then(res => {
let data = JSON.parse(res.data);
this.setData({
- isTest:data.isTest
+ isTest: data.isTest
})
})
// 先初始化日期
- let today = new Date(),tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);
+ let today = new Date(), tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);
this.setData({
- today:util.formatDate(today),
- startDate:util.formatDate(today),
- endDate:util.formatDate(tomorrow),
- startDateText:util.dateToText(today),
- endDateText:util.dateToText(tomorrow),
- tomorrow:util.formatDate(tomorrow)
+ today: util.formatDate(today),
+ startDate: util.formatDate(today),
+ endDate: util.formatDate(tomorrow),
+ startDateText: util.dateToText(today),
+ endDateText: util.dateToText(tomorrow),
+ tomorrow: util.formatDate(tomorrow)
})
this.getDetail()
// this.getProduct()
},
- BroswerRecord:function(){
- setTimeout(()=>{
- if(app.globalData.uuid){
- commonApi._post('browse/browse_record',{
- type:"scene",
- title:this.data.sceneInfo.title,
- drive:"mini",
- source_id:this.data.sceneInfo.id,
- url:"/pages/info/hotelProductInfo/index?id="+this.data.sceneInfo.id,
- uuid:app.globalData.uuid
- }).then(res=>{
+ BroswerRecord: function () {
+ setTimeout(() => {
+ if (app.globalData.uuid) {
+ commonApi._post('browse/browse_record', {
+ type: "scene",
+ title: this.data.sceneInfo.title,
+ drive: "mini",
+ source_id: this.data.sceneInfo.id,
+ url: "/pages/info/hotelProductInfo/index?id=" + this.data.sceneInfo.id,
+ uuid: app.globalData.uuid
+ }).then(res => {
})
}
else {
this.BroswerRecord();
}
- },500)
+ }, 500)
},
- getProduct:function(){
- commonApi._post(this.data.sceneInfo.third_supplier_type=='mt'?"scene/get_mt_hotel_real_rooms_list":"scene/get_hotel_sku_list",{
- start_time:this.data.startDate,
- end_time:this.data.endDate,
- scene_id:this.data.id
- }).then(res=>{
- res.data.map(item=>{
- item.display_tags = (item.display_tags?item.display_tags.split(","):[]).splice(0,2)
+ getProduct: function () {
+ commonApi._post(this.data.sceneInfo.third_supplier_type == 'mt' ? "scene/get_mt_hotel_real_rooms_list" : "scene/get_hotel_sku_list", {
+ start_time: this.data.startDate,
+ end_time: this.data.endDate,
+ scene_id: this.data.id
+ }).then(res => {
+ res.data.map(item => {
+ item.display_tags = (item.display_tags ? item.display_tags.split(",") : []).splice(0, 2)
})
this.setData({
- products:res.data
+ products: res.data
})
})
},
// 获取产品下面的规格列表
- getSkuList:function(e){
- if(e.currentTarget.dataset.index==this.data.activeSkuIndex){
+ getSkuList: function (e) {
+ if (e.currentTarget.dataset.index == this.data.activeSkuIndex) {
this.setData({
- activeSkuIndex:-1
+ activeSkuIndex: -1
})
return;
}
this.setData({
- activeSkuIndex:e.currentTarget.dataset.index,
- skuList:[]
+ activeSkuIndex: e.currentTarget.dataset.index,
+ skuList: []
})
- commonApi._post('scene/get_mt_hotel_real_rooms_sku_list',{
- start_date:this.data.startDate,
- end_date:this.data.endDate,
- real_room_id:e.currentTarget.dataset.id
- }).then(res=>{
- if(!res.data || res.data.length==0){
+ commonApi._post('scene/get_mt_hotel_real_rooms_sku_list', {
+ start_date: this.data.startDate,
+ end_date: this.data.endDate,
+ real_room_id: e.currentTarget.dataset.id
+ }).then(res => {
+ if (!res.data || res.data.length == 0) {
wx.showToast({
title: '该房型暂无房间',
- icon:'none'
+ icon: 'none'
})
}
this.setData({
- skuList:res.data
+ skuList: res.data
})
})
},
- order:function(e){
+ order: function (e) {
let item = e.currentTarget.dataset.item;
item.startDate = this.data.startDate;
item.endDate = this.data.endDate;
@@ -143,8 +148,8 @@ Page({
url: '/pages/order/hotel/index',
})
},
- orderMt:function(e){
- let item = e.currentTarget.dataset.item,product = e.currentTarget.dataset.product;
+ orderMt: function (e) {
+ let item = e.currentTarget.dataset.item, product = e.currentTarget.dataset.product;
item.startDate = this.data.startDate;
item.endDate = this.data.endDate;
item.startDateText = this.data.startDateText;
@@ -155,10 +160,10 @@ Page({
item.id = item.sku_id;
// item.product_id = product.real_room_id;
item.sku_name = product.room_name;
- item.sku_model={};
- item.sku_model.area = product.useable_area+"m²";
+ item.sku_model = {};
+ item.sku_model.area = product.useable_area + "m²";
item.sku_model.bed_type = item.bed_type;
- item.sku_model.breakfast=item.breakfast;
+ item.sku_model.breakfast = item.breakfast;
item.sku_model.max_room_num = item.max_room_num;
app.globalData.product = item;
app.globalData.retailId = this.data.retailId;
@@ -168,148 +173,401 @@ Page({
url: '/pages/order/hotel/index',
})
},
- getDay:function(date){
- let d = new Date(date.replace(/-/g,'/')).getDay();
- let days = ["日","一","二","三","四","五","六"];
+ getDay: function (date) {
+ let d = new Date(date.replace(/-/g, '/')).getDay();
+ let days = ["日", "一", "二", "三", "四", "五", "六"];
return days[d];
},
- getDetail:function(){
+ getDetail: function () {
// 获取详情
- commonApi._post("scene/detail",{
- id:this.data.id
- }).then(res=>{
- if(!res.data) {
+ commonApi._post("scene/detail", {
+ id: this.data.id
+ }).then(res => {
+ if (!res.data) {
util.back();
return;
}
// res.data.listimg = res.data.listimg?res.data.listimg.split(","):[];
- res.data.display_tags = (res.data.display_tags?res.data.display_tags.split(","):[]).splice(0,2);
+ res.data.display_tags = (res.data.display_tags ? res.data.display_tags.split(",") : []).splice(0, 2);
this.setData({
- sceneInfo:res.data
+ sceneInfo: res.data
})
this.BroswerRecord();
this.getProduct()
})
// 获取问大家
- commonApi._post("ask/getQuestionList",{
- scene_id:this.data.id,
- page_no:1,
- page_num:3
- }).then(res=>{
+ commonApi._post("ask/getQuestionList", {
+ scene_id: this.data.id,
+ page_no: 1,
+ page_num: 3
+ }).then(res => {
console.log(res)
this.setData({
- ask:res.data.rows
+ ask: res.data.rows
})
})
// 获取是否喜欢
- commonApi.user_post("scene/is_scene_collection",{
- scene_id:this.data.id
- }).then(res=>{
+ commonApi.user_post("scene/is_scene_collection", {
+ scene_id: this.data.id
+ }).then(res => {
this.setData({
- isLike:res.data
+ isLike: res.data
})
})
// 获取评价列表
- commonApi.user_post("scene/get_comment",{
- scene_id:this.data.id
- }).then(res=>{
- res.data.list.map(item=>{
+ commonApi.user_post("scene/get_comment", {
+ scene_id: this.data.id
+ }).then(res => {
+ res.data.list.map(item => {
item.rate = Number(item.rate)
})
this.setData({
- comment:res.data.list,
- commentTotal:res.data.total
+ comment: res.data.list,
+ commentTotal: res.data.total
})
})
},
- like:function(){
- let id = this.data.id,isLike = this.data.isLike;
- commonApi.user_post(isLike!=1?"scene/scene_collection":"scene/scene_cancel_collection",{
- scene_id:id
- }).then(res=>{
- if(res.code==1){
+ like: function () {
+ let id = this.data.id, isLike = this.data.isLike;
+ commonApi.user_post(isLike != 1 ? "scene/scene_collection" : "scene/scene_cancel_collection", {
+ scene_id: id
+ }).then(res => {
+ if (res.code == 1) {
wx.showToast({
title: '操作成功',
})
this.setData({
- isLike:isLike==1?0:1
+ isLike: isLike == 1 ? 0 : 1
})
}
})
},
- gotoLocation:function(){
+ gotoLocation: function () {
let info = this.data.sceneInfo;
wx.openLocation({
latitude: Number(info.lat),
longitude: Number(info.lon),
})
},
- changeInDate:function(e){
+ changeInDate: function (e) {
console.log(e)
- let date = new Date(e.detail.value.replace(/-/g,'/'));
+ let date = new Date(e.detail.value.replace(/-/g, '/'));
let tomorrow = new Date(date.getTime() + 24 * 60 * 60 * 1000);
this.setData({
- startDate:util.formatDate(date),
- startDateText:util.dateToText(date),
- tomorrow:util.formatDate(tomorrow)
+ startDate: util.formatDate(date),
+ startDateText: util.dateToText(date),
+ tomorrow: util.formatDate(tomorrow)
})
// 如果开始日期要比结束日期晚的话 那么结束日期自动变成开始日期的下一天
- let endDate = new Date(this.data.endDate.replace(/-/g,'/'));
- if(endDate.getTime()<=date.getTime()){
+ let endDate = new Date(this.data.endDate.replace(/-/g, '/'));
+ if (endDate.getTime() <= date.getTime()) {
this.setData({
- endDate:util.formatDate(tomorrow),
- endDateText:util.dateToText(tomorrow)
+ endDate: util.formatDate(tomorrow),
+ endDateText: util.dateToText(tomorrow)
})
}
this.calcDays();
},
- changeLeaveDate:function(e){
- let date = new Date(e.detail.value.replace(/-/g,'/'));
+ changeLeaveDate: function (e) {
+ let date = new Date(e.detail.value.replace(/-/g, '/'));
console.log(date)
this.setData({
- endDate:util.formatDate(date),
- endDateText:util.dateToText(date)
+ endDate: util.formatDate(date),
+ endDateText: util.dateToText(date)
})
this.calcDays();
},
- calcDays:function(){
- let endDate = this.data.endDate.replace(/-/g,'/'),startDate = this.data.startDate.replace(/-/g,'/');
+ calcDays: function () {
+ let endDate = this.data.endDate.replace(/-/g, '/'), startDate = this.data.startDate.replace(/-/g, '/');
endDate = new Date(endDate).getTime();
startDate = new Date(startDate).getTime();
let days = Math.round((endDate - startDate) / (1000 * 24 * 60 * 60))
this.setData({
- days:days,
- activeSkuIndex:-1,
- skuList:[]
+ days: days,
+ activeSkuIndex: -1,
+ skuList: []
})
// this.getProduct()
},
- showRoomInfo:function(e){
- let product = e.currentTarget.dataset.info,sku = e.currentTarget.dataset.sku;
+ showRoomInfo: function (e) {
+ let product = e.currentTarget.dataset.info, sku = e.currentTarget.dataset.sku;
this.setData({
- showInfoFlag:true
+ showInfoFlag: true
// roomInfo:
})
- commonApi.user_post("product/getMtRoomSkuInfo",{
- real_room_id:product.real_room_id,
- sku_id:sku.sku_id,
+ commonApi.user_post("product/getMtRoomSkuInfo", {
+ real_room_id: product.real_room_id,
+ sku_id: sku.sku_id,
start_date: this.data.startDate,
end_date: this.data.endDate
- }).then(res=>{
+ }).then(res => {
this.setData({
- roomInfo:{
- sku:sku,
- skuInfo:res.data,
- productInfo:product
+ roomInfo: {
+ sku: sku,
+ skuInfo: res.data,
+ productInfo: product
}
})
})
},
- hideRoomInfo:function(){
+ hideRoomInfo: function () {
this.setData({
- showInfoFlag:false,
- roomInfo:null
+ showInfoFlag: false,
+ roomInfo: null
+ })
+ },
+
+
+ // 分享
+ share: function () {
+ if (!wx.getStorageSync("jstrip_token")) {
+ commonApi.user_post("user/getMyInfo", {}).then(res => {
+
+ })
+ return;
+ }
+ if (!this.data.shareImg) {
+ wx.showToast({
+ title: '图片生成中,稍后再试',
+ icon: 'none'
+ })
+ return;
+ }
+ this.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ // 保存
+ save() {
+ let url = this.data.shareImg, that = this;
+ wx.authorize({
+ /* 这个就是保存相册的 */
+ scope: 'scope.writePhotosAlbum',
+ success() {
+ wx.saveImageToPhotosAlbum({
+ filePath: url,
+ success(res) {
+ wx.showToast({
+ title: '保存成功',
+ icon: "success"
+ })
+ that.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ fail(res) {
+ wx.showToast({
+ title: '保存失败',
+ icon: 'none'
+ })
+ }
+ })
+ },
+ complete(res) {
+ console.log(res);
+ /* 这里判断一下如果没有授权重新打开设置选项 */
+ wx.getSetting({
+ success(res) {
+ if (!res.authSetting['scope.writePhotosAlbum']) {
+ /* 打开设置的方法 */
+ // opensit();
+ wx.showToast({
+ title: '请打开权限后再试',
+ icon: 'none'
+ })
+ }
+ }
+ });
+ }
+ });
+
+ },
+ // 绘制海报
+ drawImg: function () {
+ var that = this, userinfo = wx.getStorageSync('jstrip_userInfo');
+ if (!userinfo) {
+ // 去登录
+ return false;
+ }
+ const ctx = wx.createCanvasContext('imageCanvas');
+ // const device = wx.getSystemInfoSync();
+ // const ratio = device.screenWidth / 750;
+ // 先获取到图片信息
+ let promise2 = new Promise(function (resolve, reject) {
+ wx.getImageInfo({
+ src: that.data.sceneInfo.headimg,
+ success: function (res) {
+ resolve(res);
+ },
+ fail: function (res) {
+ reject(res);
+ }
+ })
+ })
+ let promise3 = new Promise(function (resolve, reject) {
+ let userid = wx.getStorageSync('jstrip_userid')
+ new QRCode('myQrcode', {
+ text: 'https://m.cloud.sz-trip.com/ScenicDetail?id=' + that.data.sceneInfo.id + '&sharedUserId=' + userid + '&channel=-1',
+ width: 500,
+ height: 500,
+ padding: 12, // 生成二维码四周自动留边宽度,不传入默认为0
+ correctLevel: QRCode.CorrectLevel.H, // 二维码可辨识度
+ callback: (res) => {
+ resolve(res);
+ }
+ })
})
+ //成功得到图片信息后,开始绘图
+ Promise.all([promise2, promise3]).then(imgs => {
+ ctx.save();
+ ctx.beginPath(); //开始绘制
+ that.handleBorderRect(ctx, 0, 0, 551 * ratio, 407 * ratio, 25 * ratio, '#ccc')
+ ctx.clip();//画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
+ ctx.drawImage(imgs[0].path, 0, 0, 551 * ratio, 407 * ratio);
+ ctx.restore();
+ ctx.save();
+ that.handleBorderRect2(ctx, 0, 407 * ratio, 551 * ratio, 236 * ratio, 25 * ratio, '#fff')
+ ctx.restore();
+ // 绘制二维码
+ ctx.drawImage(imgs[1].path, 373 * ratio, 495 * ratio, 137 * ratio, 137 * ratio);
+ // 开始文字绘制
+ ctx.setFillStyle("#000");
+ ctx.setFontSize(30 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ that.drawText(ctx, that.data.sceneInfo.title, 25 * ratio, 450 * ratio, 480 * ratio, ratio);
+ // 售价
+ ctx.setFillStyle("#D62828");
+ ctx.setFontSize(40 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let price = "¥" + (that.data.sceneInfo.price / 100);
+ let width = ctx.measureText(price).width;
+ ctx.fillText(price, 25 * ratio, 620 * ratio);
+ // 副标题
+ ctx.setFillStyle("#999999");
+ ctx.setFontSize(28 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let subtitle = that.data.sceneInfo.display_tags[0];
+ if (subtitle.length > 10) {
+ subtitle = subtitle.substr(0, 10) + '...'
+ }
+ ctx.fillText(subtitle, 25 * ratio, 540 * ratio);
+ // ctx.draw();
+ // 划线价
+ // ctx.setFillStyle("#999999");
+ // ctx.setFontSize(32 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // let market_price = "¥"+(Number(that.data.sceneInfo.market_price)/100)
+ // ctx.fillText(market_price, 40*ratio + width, 620*ratio);
+ // let market_price_width = ctx.measureText(market_price).width;
+ // 划线
+ // ctx.beginPath()
+ // ctx.setLineWidth(1)
+ // ctx.moveTo(40*ratio + width, 608*ratio)
+ // ctx.lineTo(45*ratio + width, 608*ratio)
+ // ctx.stroke();
+ // 长按识别二维码
+ // ctx.setFillStyle("#666");
+ // ctx.setFontSize(22 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按识别二维码", 404*ratio, 710*ratio);
+ // 长按图片转发或保存
+ // ctx.setFillStyle("#000");
+ // ctx.setFontSize(24 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按图片保存到本地",(592*ratio - ctx.measureText("长按图片保存到本地").width)/2, 740*ratio);
+ ctx.draw();
+ // 转为图片
+ setTimeout(() => {
+ wx.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ canvasId: 'imageCanvas',
+ success: function (res) {
+ that.setData({
+ shareImg: res.tempFilePath
+ })
+ },
+ fail(err) {
+ console.log('agdgjgdajhg', err)
+ }
+ })
+ }, 500)
+ return false;
+ }).catch(err => {
+ console.log("this err", err)
+ })
+ },
+ // 圆角矩形
+ handleBorderRect(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x + w, y + h);
+ ctx.lineTo(x, y + h)
+ // 左上角
+ ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
+ ctx.moveTo(x + r, y);
+ ctx.lineTo(x + w - r, y);
+ ctx.lineTo(x + w, y + r);
+ // 右上角
+ ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
+ ctx.lineTo(x + w, y + h);
+ ctx.lineTo(x + w - r, y + h);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ handleBorderRect2(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + w, y)
+ // 右下角
+ ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
+ ctx.lineTo(x + r, y + h);
+ ctx.lineTo(x, y + h - r);
+ // 左下角
+ ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
+ ctx.lineTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ // 绘制两行文字
+ drawText: function (ctx, str, x, y, canvasWidth, ratio) {
+ let row = [], temp = "", chr = str.split("");
+ for (var a = 0; a < chr.length; a++) {
+ if (ctx.measureText(temp).width < canvasWidth) {
+ temp += chr[a];
+ }
+ else {
+ a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
+ row.push(temp);
+ temp = "";
+ }
+ }
+ row.push(temp);
+
+ //如果数组长度大于2 则截取前两个
+ if (row.length > 2) {
+ var rowCut = row.slice(0, 2);
+ var rowPart = rowCut[1];
+ var test = "";
+ var empty = [];
+ for (var a = 0; a < rowPart.length; a++) {
+ if (ctx.measureText(test).width < canvasWidth - 30 * ratio) {
+ test += rowPart[a];
+ }
+ else {
+ break;
+ }
+ }
+ empty.push(test);
+ var group = empty[0] + "..."//这里只显示两行,超出的用...表示
+ rowCut.splice(1, 1, group);
+ row = rowCut;
+ }
+ for (var b = 0; b < row.length; b++) {
+ ctx.fillText(row[b], x, y + b * 40 * ratio, canvasWidth);
+ }
},
/**
@@ -323,7 +581,17 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
-
+ // if(!wx.getStorageSync('jstrip_token')){
+ // return;
+ // }
+ // if(this.data.sceneInfo && this.data.sceneInfo.id){
+ // this.drawImg()
+ // }
+ // else {
+ // setTimeout(()=>{
+ // this.onShow()
+ // },200)
+ // }
},
/**
diff --git a/pages/info/hotelProductInfo/index.wxml b/pages/info/hotelProductInfo/index.wxml
index a4ebd72..4776f20 100644
--- a/pages/info/hotelProductInfo/index.wxml
+++ b/pages/info/hotelProductInfo/index.wxml
@@ -1,5 +1,6 @@
+
@@ -178,4 +179,29 @@
立即预订
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片到相册
+
+
+
+
+
+ 微信识别二维码
+
+
+
+ 保存到相册
+
\ No newline at end of file
diff --git a/pages/info/hotelProductInfo/index.wxss b/pages/info/hotelProductInfo/index.wxss
index 85dd114..d1ded8a 100644
--- a/pages/info/hotelProductInfo/index.wxss
+++ b/pages/info/hotelProductInfo/index.wxss
@@ -473,4 +473,81 @@ page {
top: 10rpx;
font-size: 50rpx;
color: #333;
+}
+
+.mask-content {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+}
+.mask-content .icon-close {
+ position: absolute;
+ right: 40rpx;
+ top: 40rpx;
+}
+
+.share-img-box {
+ /* width: 551rpx; */
+ position: static;
+ background: none;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+.share-img {
+ display: block;
+ width: 551rpx;
+}
+.share-tips {
+ width: 426rpx;
+ height: 150rpx;
+ background: #FFFFFF;
+ border-radius: 25rpx;
+ margin-top: 25rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 65rpx;
+ color: #999;
+ font-size: 24rpx;
+ text-align: center;
+ line-height: 40rpx;
+}
+.share-tips .img {
+ display: block;
+ width: 55rpx;
+ margin: 0 auto;
+ margin-bottom: 4rpx;
+}
+.tipimg {
+ position: absolute;
+ left: 50%;
+ margin-left: 16rpx;
+ width: 24rpx;
+ height: 24rpx;
+ background: #D62828;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 34rpx;
+}
+.tipimg image {
+ width: 21rpx;
+ display: block;
+
+}
+.save-btn {
+ width: 403rpx;
+ line-height: 77rpx;
+ background: #D62828;
+ border-radius: 39rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 31rpx;
+ font-weight: 500;
+ margin-top: 50rpx;
}
\ No newline at end of file
diff --git a/pages/info/museumInfo/index.js b/pages/info/museumInfo/index.js
index 3157cca..a5221f6 100644
--- a/pages/info/museumInfo/index.js
+++ b/pages/info/museumInfo/index.js
@@ -11,19 +11,21 @@ Page({
* 页面的初始数据
*/
data: {
- top:height,
- info:null,
- type:1,
- actList:[],
- actTotal:1,
- id:null,
- fixed:false,
- isLogin:false,
- product:null,
- time:null,
- date:null,
- retailId:"",
- isGroup:null
+ top: height,
+ info: null,
+ type: 1,
+ actList: [],
+ actTotal: 1,
+ id: null,
+ fixed: false,
+ isLogin: false,
+ product: null,
+ time: null,
+ date: null,
+ retailId: "",
+ isGroup: null,
+ shareImg: null,
+ showShareFlag: false
},
/**
@@ -31,58 +33,58 @@ Page({
*/
onLoad: function (options) {
this.setData({
- id:options.id
+ id: options.id
})
- if(options.isGroup){
+ if (options.isGroup) {
this.setData({
- isGroup:options.isGroup
+ isGroup: options.isGroup
})
}
- if(options.retailId){
+ if (options.retailId) {
this.setData({
- retailId:options.retailId
+ retailId: options.retailId
})
}
- commonApi._post("scene/detail_for_venue",{
- id:options.id
- }).then(res=>{
+ commonApi._post("scene/detail_for_venue", {
+ id: options.id
+ }).then(res => {
// res.data.listimg = res.data.listimg?res.data.listimg.split(","):[];
- if(res.data.product_venue && res.data.product_venue.sku && res.data.product_venue.sku[0]){
+ if (res.data.product_venue && res.data.product_venue.sku && res.data.product_venue.sku[0]) {
let sku = res.data.product_venue.sku[0];
- if(options.skuid){
- sku = res.data.product_venue.sku.find(item=>item.id==options.skuid);
+ if (options.skuid) {
+ sku = res.data.product_venue.sku.find(item => item.id == options.skuid);
}
let product = {
- product:res.data.product_venue,
- sku:sku
+ product: res.data.product_venue,
+ sku: sku
};
app.globalData.product = product;
this.setData({
- info:res.data,
- product:product
+ info: res.data,
+ product: product
})
}
else {
this.setData({
- info:res.data
+ info: res.data
})
}
-
+
this.BroswerRecord();
})
this.getAct()
},
- getAct:function(){
- if(this.data.actList.length>=this.data.actTotal || this.data.isGroup==1) return;
- commonApi._post('scene/get_scene_act_list',{
- scene_id:this.data.id,
- page_no:1,
- page_num:100
- }).then(res=>{
+ getAct: function () {
+ if (this.data.actList.length >= this.data.actTotal || this.data.isGroup == 1) return;
+ commonApi._post('scene/get_scene_act_list', {
+ scene_id: this.data.id,
+ page_no: 1,
+ page_num: 100
+ }).then(res => {
let now = new Date().getTime();
- res.data.rows.map(item=>{
- let endTime = this.getMyTime(item.end_date+" 23:59:59");
- if(endTime {
+ let endTime = this.getMyTime(item.end_date + " 23:59:59");
+ if (endTime < now) {
item.isEnd = true;
}
else {
@@ -90,38 +92,291 @@ Page({
}
})
this.setData({
- actList:this.data.actList.concat(res.data.rows),
- actTotal:res.data.total
+ actList: this.data.actList.concat(res.data.rows),
+ actTotal: res.data.total
})
console.log(res)
})
},
- getMyTime(t){
- let time = new Date(t.replace(/-/g,'/')).getTime();
+ getMyTime(t) {
+ let time = new Date(t.replace(/-/g, '/')).getTime();
return time;
},
- changeType:function(e){
+ changeType: function (e) {
this.setData({
- type:e.currentTarget.dataset.type
+ type: e.currentTarget.dataset.type
})
},
- BroswerRecord:function(){
- setTimeout(()=>{
- if(app.globalData.uuid){
- commonApi._post('browse/browse_record',{
- type:"scene",
- title:this.data.info.title,
- drive:"mini",
- source_id:this.data.info.id,
- url:"/pages/info/museumInfo/index?id="+this.data.info.id,
- uuid:app.globalData.uuid
- }).then(res=>{
+ BroswerRecord: function () {
+ setTimeout(() => {
+ if (app.globalData.uuid) {
+ commonApi._post('browse/browse_record', {
+ type: "scene",
+ title: this.data.info.title,
+ drive: "mini",
+ source_id: this.data.info.id,
+ url: "/pages/info/museumInfo/index?id=" + this.data.info.id,
+ uuid: app.globalData.uuid
+ }).then(res => {
})
}
else {
this.BroswerRecord();
}
- },500)
+ }, 500)
+ },
+
+
+ // 分享
+ share: function () {
+ if (!wx.getStorageSync("jstrip_token")) {
+ commonApi.user_post("user/getMyInfo", {}).then(res => {
+
+ })
+ return;
+ }
+ if (!this.data.shareImg) {
+ wx.showToast({
+ title: '图片生成中,稍后再试',
+ icon: 'none'
+ })
+ return;
+ }
+ this.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ // 保存
+ save() {
+ let url = this.data.shareImg, that = this;
+ wx.authorize({
+ /* 这个就是保存相册的 */
+ scope: 'scope.writePhotosAlbum',
+ success() {
+ wx.saveImageToPhotosAlbum({
+ filePath: url,
+ success(res) {
+ wx.showToast({
+ title: '保存成功',
+ icon: "success"
+ })
+ that.setData({
+ showShareFlag: !this.data.showShareFlag
+ })
+ },
+ fail(res) {
+ wx.showToast({
+ title: '保存失败',
+ icon: 'none'
+ })
+ }
+ })
+ },
+ complete(res) {
+ console.log(res);
+ /* 这里判断一下如果没有授权重新打开设置选项 */
+ wx.getSetting({
+ success(res) {
+ if (!res.authSetting['scope.writePhotosAlbum']) {
+ /* 打开设置的方法 */
+ // opensit();
+ wx.showToast({
+ title: '请打开权限后再试',
+ icon: 'none'
+ })
+ }
+ }
+ });
+ }
+ });
+
+ },
+ // 绘制海报
+ drawImg: function () {
+ var that = this, userinfo = wx.getStorageSync('jstrip_userInfo');
+ if (!userinfo) {
+ // 去登录
+ return false;
+ }
+ const ctx = wx.createCanvasContext('imageCanvas');
+ // const device = wx.getSystemInfoSync();
+ // const ratio = device.screenWidth / 750;
+ // 先获取到图片信息
+ let promise2 = new Promise(function (resolve, reject) {
+ wx.getImageInfo({
+ src: that.data.info.headimg,
+ success: function (res) {
+ resolve(res);
+ },
+ fail: function (res) {
+ reject(res);
+ }
+ })
+ })
+ let promise3 = new Promise(function (resolve, reject) {
+ let userid = wx.getStorageSync('jstrip_userid')
+ new QRCode('myQrcode', {
+ text: 'https://m.cloud.sz-trip.com/ScenicDetail?id=' + that.data.info.id + '&sharedUserId=' + userid + '&channel=-1',
+ width: 500,
+ height: 500,
+ padding: 12, // 生成二维码四周自动留边宽度,不传入默认为0
+ correctLevel: QRCode.CorrectLevel.H, // 二维码可辨识度
+ callback: (res) => {
+ resolve(res);
+ }
+ })
+ })
+ //成功得到图片信息后,开始绘图
+ Promise.all([promise2, promise3]).then(imgs => {
+ ctx.save();
+ ctx.beginPath(); //开始绘制
+ that.handleBorderRect(ctx, 0, 0, 551 * ratio, 407 * ratio, 25 * ratio, '#ccc')
+ ctx.clip();//画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
+ ctx.drawImage(imgs[0].path, 0, 0, 551 * ratio, 407 * ratio);
+ ctx.restore();
+ ctx.save();
+ that.handleBorderRect2(ctx, 0, 407 * ratio, 551 * ratio, 236 * ratio, 25 * ratio, '#fff')
+ ctx.restore();
+ // 绘制二维码
+ ctx.drawImage(imgs[1].path, 373 * ratio, 495 * ratio, 137 * ratio, 137 * ratio);
+ // 开始文字绘制
+ ctx.setFillStyle("#000");
+ ctx.setFontSize(30 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ that.drawText(ctx, that.data.info.title, 25 * ratio, 450 * ratio, 480 * ratio, ratio);
+ // 售价
+ ctx.setFillStyle("#D62828");
+ ctx.setFontSize(40 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let price = that.data.info.price ? ("¥" + (that.data.info.price / 100)) : '免费';
+ let width = ctx.measureText(price).width;
+ ctx.fillText(price, 25 * ratio, 620 * ratio);
+ // 副标题
+ ctx.setFillStyle("#999999");
+ ctx.setFontSize(28 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let subtitle = that.data.info.display_tags[0];
+ if (subtitle.length > 10) {
+ subtitle = subtitle.substr(0, 10) + '...'
+ }
+ ctx.fillText(subtitle, 25 * ratio, 540 * ratio);
+ // ctx.draw();
+ // 划线价
+ // ctx.setFillStyle("#999999");
+ // ctx.setFontSize(32 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // let market_price = "¥" + (Number(that.data.info.market_price) / 100)
+ // ctx.fillText(market_price, 40 * ratio + width, 620 * ratio);
+ // let market_price_width = ctx.measureText(market_price).width;
+ // 划线
+ // ctx.beginPath()
+ // ctx.setLineWidth(1)
+ // ctx.moveTo(40 * ratio + width, 608 * ratio)
+ // ctx.lineTo(45 * ratio + width + market_price_width, 608 * ratio)
+ // ctx.stroke();
+ // 长按识别二维码
+ // ctx.setFillStyle("#666");
+ // ctx.setFontSize(22 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按识别二维码", 404*ratio, 710*ratio);
+ // 长按图片转发或保存
+ // ctx.setFillStyle("#000");
+ // ctx.setFontSize(24 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按图片保存到本地",(592*ratio - ctx.measureText("长按图片保存到本地").width)/2, 740*ratio);
+ ctx.draw();
+ // 转为图片
+ setTimeout(() => {
+ wx.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ canvasId: 'imageCanvas',
+ success: function (res) {
+ that.setData({
+ shareImg: res.tempFilePath
+ })
+ },
+ fail(err) {
+ console.log('agdgjgdajhg', err)
+ }
+ })
+ }, 500)
+ return false;
+ }).catch(err => {
+ console.log("this err", err)
+ })
+ },
+ // 圆角矩形
+ handleBorderRect(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x + w, y + h);
+ ctx.lineTo(x, y + h)
+ // 左上角
+ ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
+ ctx.moveTo(x + r, y);
+ ctx.lineTo(x + w - r, y);
+ ctx.lineTo(x + w, y + r);
+ // 右上角
+ ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
+ ctx.lineTo(x + w, y + h);
+ ctx.lineTo(x + w - r, y + h);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ handleBorderRect2(ctx, x, y, w, h, r, color) {
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + w, y)
+ // 右下角
+ ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
+ ctx.lineTo(x + r, y + h);
+ ctx.lineTo(x, y + h - r);
+ // 左下角
+ ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
+ ctx.lineTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ // 绘制两行文字
+ drawText: function (ctx, str, x, y, canvasWidth, ratio) {
+ let row = [], temp = "", chr = str.split("");
+ for (var a = 0; a < chr.length; a++) {
+ if (ctx.measureText(temp).width < canvasWidth) {
+ temp += chr[a];
+ }
+ else {
+ a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
+ row.push(temp);
+ temp = "";
+ }
+ }
+ row.push(temp);
+
+ //如果数组长度大于2 则截取前两个
+ if (row.length > 2) {
+ var rowCut = row.slice(0, 2);
+ var rowPart = rowCut[1];
+ var test = "";
+ var empty = [];
+ for (var a = 0; a < rowPart.length; a++) {
+ if (ctx.measureText(test).width < canvasWidth - 30 * ratio) {
+ test += rowPart[a];
+ }
+ else {
+ break;
+ }
+ }
+ empty.push(test);
+ var group = empty[0] + "..."//这里只显示两行,超出的用...表示
+ rowCut.splice(1, 1, group);
+ row = rowCut;
+ }
+ for (var b = 0; b < row.length; b++) {
+ ctx.fillText(row[b], x, y + b * 40 * ratio, canvasWidth);
+ }
},
/**
@@ -131,29 +386,29 @@ Page({
},
// 修改日期
- changeDate:function(e){
+ changeDate: function (e) {
this.setData({
- date:e.detail
+ date: e.detail
})
},
// 修改分时
- changeTime:function(e){
+ changeTime: function (e) {
this.setData({
- time:e.detail
+ time: e.detail
})
},
- order:function(){
- if(!this.data.info.product_venue) return;
- if(!this.data.info.product_venue.sku[0]) return;
+ order: function () {
+ if (!this.data.info.product_venue) return;
+ if (!this.data.info.product_venue.sku[0]) return;
app.globalData.couponInfo = null;
app.globalData.retailId = this.data.retailId;
// 如果在当前的详情页面选择了日期时间的话 那么需要修改日期时间
app.globalData.product = {
- product:this.data.info.product_venue,
- sku:this.data.info.product_venue.sku[0],
- infoDate:this.data.date,
- infoTime:this.data.time,
- isGroup:this.data.isGroup
+ product: this.data.info.product_venue,
+ sku: this.data.info.product_venue.sku[0],
+ infoDate: this.data.date,
+ infoTime: this.data.time,
+ isGroup: this.data.isGroup
}
wx.navigateTo({
url: '/pages/order/scene/index?type=museum'
@@ -164,15 +419,27 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
- if(!this.data.isLogin){
- commonApi.user_post("token/check").then(res=>{
- if(res.code==1){
+ if (!this.data.isLogin) {
+ commonApi.user_post("token/check").then(res => {
+ if (res.code == 1) {
this.setData({
- isLogin:true
+ isLogin: true
})
}
})
}
+
+ // if (!wx.getStorageSync('jstrip_token')) {
+ // return;
+ // }
+ // if (this.data.info && this.data.info.id) {
+ // this.drawImg()
+ // }
+ // else {
+ // setTimeout(() => {
+ // this.onShow()
+ // }, 200)
+ // }
},
/**
@@ -209,19 +476,19 @@ Page({
onShareAppMessage: function () {
},
- onPageScroll:function(e){
- if(this.data.isGroup) return;
- let topHeight = this.data.top + (102 * ratio),that = this;
- wx.createSelectorQuery().select('#content').boundingClientRect(function(rect){
- if(rect.top<=topHeight){
+ onPageScroll: function (e) {
+ if (this.data.isGroup) return;
+ let topHeight = this.data.top + (102 * ratio), that = this;
+ wx.createSelectorQuery().select('#content').boundingClientRect(function (rect) {
+ if (rect.top <= topHeight) {
// 此时应该把menus固定在顶部
that.setData({
- fixed:true
+ fixed: true
})
}
- else{
+ else {
that.setData({
- fixed:false
+ fixed: false
})
}
}).exec()
diff --git a/pages/info/museumInfo/index.wxml b/pages/info/museumInfo/index.wxml
index 5ec5d0d..2eb01f0 100644
--- a/pages/info/museumInfo/index.wxml
+++ b/pages/info/museumInfo/index.wxml
@@ -1,6 +1,7 @@
+
@@ -47,3 +48,29 @@
参观预约
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片到相册
+
+
+
+
+
+ 微信识别二维码
+
+
+
+ 保存到相册
+
+
\ No newline at end of file
diff --git a/pages/info/museumInfo/index.wxss b/pages/info/museumInfo/index.wxss
index 137bcad..f22fea6 100644
--- a/pages/info/museumInfo/index.wxss
+++ b/pages/info/museumInfo/index.wxss
@@ -139,4 +139,81 @@
left: 0;
background:white;
right: 0;
+}
+
+.mask-content {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+}
+.mask-content .icon-close {
+ position: absolute;
+ right: 40rpx;
+ top: 40rpx;
+}
+
+.share-img-box {
+ /* width: 551rpx; */
+ position: static;
+ background: none;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+.share-img {
+ display: block;
+ width: 551rpx;
+}
+.share-tips {
+ width: 426rpx;
+ height: 150rpx;
+ background: #FFFFFF;
+ border-radius: 25rpx;
+ margin-top: 25rpx;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 65rpx;
+ color: #999;
+ font-size: 24rpx;
+ text-align: center;
+ line-height: 40rpx;
+}
+.share-tips .img {
+ display: block;
+ width: 55rpx;
+ margin: 0 auto;
+ margin-bottom: 4rpx;
+}
+.tipimg {
+ position: absolute;
+ left: 50%;
+ margin-left: 16rpx;
+ width: 24rpx;
+ height: 24rpx;
+ background: #D62828;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 34rpx;
+}
+.tipimg image {
+ width: 21rpx;
+ display: block;
+
+}
+.save-btn {
+ width: 403rpx;
+ line-height: 77rpx;
+ background: #D62828;
+ border-radius: 39rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 31rpx;
+ font-weight: 500;
+ margin-top: 50rpx;
}
\ No newline at end of file
diff --git a/pages/info/postProductInfo/index.js b/pages/info/postProductInfo/index.js
index 060cf69..f3394c1 100644
--- a/pages/info/postProductInfo/index.js
+++ b/pages/info/postProductInfo/index.js
@@ -362,7 +362,7 @@ Page({
let promise3 = new Promise(function(resolve,reject){
let userid = wx.getStorageSync('jstrip_userid')
new QRCode('myQrcode',{
- text: 'https://m.cloud.sz-trip.com/MailMerchandiseDetail?id='+that.data.info.id+'&userId='+userid,
+ text: 'https://m.cloud.sz-trip.com/MailMerchandiseDetail?id='+that.data.info.id+'&sharedUserId='+userid+'&channel=-1',
width: 500,
height: 500,
padding: 12, // 生成二维码四周自动留边宽度,不传入默认为0
diff --git a/pages/info/sceneProductInfo/index.js b/pages/info/sceneProductInfo/index.js
index 695620c..d0965ad 100644
--- a/pages/info/sceneProductInfo/index.js
+++ b/pages/info/sceneProductInfo/index.js
@@ -1,6 +1,9 @@
// pages/info/sceneProductInfo/index.js
+let device = wx.getSystemInfoSync();
+const ratio = device.windowWidth / 750;
import commonApi from "../../../utils/https/common"
import util from "../../../utils/util"
+import QRCode from '../../../utils/weapp-qrcode.js'
let app = getApp()
Page({
@@ -16,7 +19,9 @@ Page({
comment:[],
commentTotal:0,
isTest:true,
- retailId:""
+ retailId:"",
+ shareImg:null,
+ showShareFlag:false
},
/**
@@ -194,6 +199,258 @@ Page({
})
},
+ // 分享
+ share:function(){
+ if(!wx.getStorageSync("jstrip_token")){
+ commonApi.user_post("user/getMyInfo",{}).then(res=>{
+
+ })
+ return;
+ }
+ if(!this.data.shareImg){
+ wx.showToast({
+ title: '图片生成中,稍后再试',
+ icon:'none'
+ })
+ return;
+ }
+ this.setData({
+ showShareFlag:!this.data.showShareFlag
+ })
+ },
+ // 保存
+ save(){
+ let url = this.data.shareImg,that = this;
+ wx.authorize({
+ /* 这个就是保存相册的 */
+ scope: 'scope.writePhotosAlbum',
+ success() {
+ wx.saveImageToPhotosAlbum({
+ filePath:url,
+ success(res) {
+ wx.showToast({
+ title: '保存成功',
+ icon:"success"
+ })
+ that.setData({
+ showShareFlag:!this.data.showShareFlag
+ })
+ },
+ fail(res){
+ wx.showToast({
+ title: '保存失败',
+ icon:'none'
+ })
+ }
+ })
+ },
+ complete(res) {
+ console.log(res);
+ /* 这里判断一下如果没有授权重新打开设置选项 */
+ wx.getSetting({
+ success(res) {
+ if (!res.authSetting['scope.writePhotosAlbum']) {
+ /* 打开设置的方法 */
+ // opensit();
+ wx.showToast({
+ title: '请打开权限后再试',
+ icon:'none'
+ })
+ }
+ }
+ });
+ }
+ });
+
+ },
+ // 绘制海报
+ drawImg:function(){
+ var that = this,userinfo = wx.getStorageSync('jstrip_userInfo');
+ if(!userinfo){
+ // 去登录
+ return false;
+ }
+ const ctx = wx.createCanvasContext('imageCanvas');
+ // const device = wx.getSystemInfoSync();
+ // const ratio = device.screenWidth / 750;
+ // 先获取到图片信息
+ let promise2 = new Promise(function(resolve,reject){
+ wx.getImageInfo({
+ src:that.data.info.headimg,
+ success:function(res){
+ resolve(res);
+ },
+ fail:function(res){
+ reject(res);
+ }
+ })
+ })
+ let promise3 = new Promise(function(resolve,reject){
+ let userid = wx.getStorageSync('jstrip_userid')
+ new QRCode('myQrcode',{
+ text: 'https://m.cloud.sz-trip.com/ScenicDetail?id='+that.data.info.id+'&sharedUserId='+userid+'&channel=-1',
+ width: 500,
+ height: 500,
+ padding: 12, // 生成二维码四周自动留边宽度,不传入默认为0
+ correctLevel: QRCode.CorrectLevel.H, // 二维码可辨识度
+ callback: (res) => {
+ resolve(res);
+ }
+ })
+ })
+ //成功得到图片信息后,开始绘图
+ Promise.all([promise2,promise3]).then(imgs=>{
+ ctx.save();
+ ctx.beginPath(); //开始绘制
+ that.handleBorderRect(ctx,0,0,551 * ratio,407 * ratio,25 * ratio,'#ccc')
+ ctx.clip();//画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
+ ctx.drawImage(imgs[0].path, 0, 0,551 * ratio,407 * ratio);
+ ctx.restore();
+ ctx.save();
+ that.handleBorderRect2(ctx,0,407 * ratio,551 * ratio,236*ratio,25 * ratio,'#fff')
+ ctx.restore();
+ // 绘制二维码
+ ctx.drawImage(imgs[1].path, 373 * ratio, 495 * ratio,137 * ratio, 137 * ratio);
+ // 开始文字绘制
+ ctx.setFillStyle("#000");
+ ctx.setFontSize(30 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ that.drawText(ctx,that.data.info.title, 25*ratio, 450*ratio,480 * ratio,ratio);
+ // 售价
+ ctx.setFillStyle("#D62828");
+ ctx.setFontSize(40 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let price = "¥"+(that.data.info.price/100);
+ let width = ctx.measureText(price).width;
+ ctx.fillText(price, 25*ratio, 620*ratio);
+ // 副标题
+ ctx.setFillStyle("#999999");
+ ctx.setFontSize(28 * ratio); //字大小
+ ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ let subtitle = that.data.info.display_tags[0];
+ if(subtitle.length>10){
+ subtitle = subtitle.substr(0,10)+'...'
+ }
+ ctx.fillText(subtitle, 25*ratio, 540*ratio);
+ // ctx.draw();
+ // 划线价
+ // ctx.setFillStyle("#999999");
+ // ctx.setFontSize(32 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // let market_price = "¥"+(Number(that.data.info.market_price)/100)
+ // ctx.fillText(market_price, 40*ratio + width, 620*ratio);
+ // let market_price_width = ctx.measureText(market_price).width;
+ // 划线
+ // ctx.beginPath()
+ // ctx.setLineWidth(1)
+ // ctx.moveTo(40*ratio + width, 608*ratio)
+ // ctx.lineTo(45*ratio + width, 608*ratio)
+ // ctx.stroke();
+ // 长按识别二维码
+ // ctx.setFillStyle("#666");
+ // ctx.setFontSize(22 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按识别二维码", 404*ratio, 710*ratio);
+ // 长按图片转发或保存
+ // ctx.setFillStyle("#000");
+ // ctx.setFontSize(24 * ratio); //字大小
+ // ctx.setTextAlign('left'); //是否居中显示,参考点画布中线
+ // ctx.fillText("长按图片保存到本地",(592*ratio - ctx.measureText("长按图片保存到本地").width)/2, 740*ratio);
+ ctx.draw();
+ // 转为图片
+ setTimeout(()=>{
+ wx.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ canvasId: 'imageCanvas',
+ success: function (res) {
+ that.setData({
+ shareImg:res.tempFilePath
+ })
+ },
+ fail(err){
+ console.log('agdgjgdajhg',err)
+ }
+ })
+ },500)
+ return false;
+ }).catch(err=>{
+ console.log("this err",err)
+ })
+ },
+ // 圆角矩形
+ handleBorderRect(ctx, x, y, w, h, r, color){
+ ctx.beginPath();
+ ctx.moveTo(x+w,y+h);
+ ctx.lineTo(x,y+h)
+ // 左上角
+ ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI);
+ ctx.moveTo(x + r, y);
+ ctx.lineTo(x + w - r, y);
+ ctx.lineTo(x + w, y + r);
+ // 右上角
+ ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 2 * Math.PI);
+ ctx.lineTo(x + w, y + h );
+ ctx.lineTo(x + w - r, y + h);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ handleBorderRect2(ctx, x, y, w, h, r, color){
+ ctx.beginPath();
+ ctx.moveTo(x,y);
+ ctx.lineTo(x+w,y)
+ // 右下角
+ ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI);
+ ctx.lineTo(x + r, y + h);
+ ctx.lineTo(x, y + h - r);
+ // 左下角
+ ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI);
+ ctx.lineTo(x, y);
+ ctx.lineTo(x, y);
+ ctx.fillStyle = color;
+ ctx.fill();
+ ctx.closePath();
+ },
+ // 绘制两行文字
+ drawText: function(ctx, str, x, y, canvasWidth,ratio) {
+ let row = [],temp="",chr=str.split("");
+ for (var a = 0; a < chr.length; a++) {
+ if (ctx.measureText(temp).width < canvasWidth) {
+ temp += chr[a];
+ }
+ else {
+ a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
+ row.push(temp);
+ temp = "";
+ }
+ }
+ row.push(temp);
+
+ //如果数组长度大于2 则截取前两个
+ if (row.length > 2) {
+ var rowCut = row.slice(0, 2);
+ var rowPart = rowCut[1];
+ var test = "";
+ var empty = [];
+ for (var a = 0; a < rowPart.length; a++) {
+ if (ctx.measureText(test).width < canvasWidth - 30 * ratio) {
+ test += rowPart[a];
+ }
+ else {
+ break;
+ }
+ }
+ empty.push(test);
+ var group = empty[0] + "..."//这里只显示两行,超出的用...表示
+ rowCut.splice(1, 1, group);
+ row = rowCut;
+ }
+ for (var b = 0; b < row.length; b++) {
+ ctx.fillText(row[b], x, y + b * 40 * ratio, canvasWidth);
+ }
+ },
+
/**
* 生命周期函数--监听页面初次渲染完成
*/
@@ -205,7 +462,17 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
-
+ // if(!wx.getStorageSync('jstrip_token')){
+ // return;
+ // }
+ // if(this.data.info && this.data.info.id){
+ // this.drawImg()
+ // }
+ // else {
+ // setTimeout(()=>{
+ // this.onShow()
+ // },200)
+ // }
},
/**
diff --git a/pages/info/sceneProductInfo/index.wxml b/pages/info/sceneProductInfo/index.wxml
index ed55744..6e12acb 100644
--- a/pages/info/sceneProductInfo/index.wxml
+++ b/pages/info/sceneProductInfo/index.wxml
@@ -1,5 +1,6 @@
+