Commit d3dea2ef3fef2b5f81ab41e5c930d6b77ea5941b

Authored by pengye
1 parent 1c2bbaa1

邀请函商务宴请第一版、婚宴第一版

... ... @@ -741,4 +741,17 @@
background: linear-gradient(104.24deg, #4c8dad -57.47%, #0143a3 55.72%, #42a5ff 148.72%);
bottom: 10%;
color: #fff;
}
.mymodal {
top: 30% !important;
width: 80% !important;
margin: 0 auto !important;
left: 0 !important;
right: 0 !important;
z-index: 250;
}
.mymodal .mymodal-content {
height: auto !important;
}
\ No newline at end of file
... ...
// pack-invitation/pages/detail_owner_invitation11.js
var mta = require('mta-wechat-analysis')
import util from '../../utils/util';
import App from '../../utils/api';
import TP from '../../utils/tpls';
import RS from '../../utils/reserveStatus'
var plugin = requirePlugin("WechatSI");
import canvas from "../../pages/customer/canvas"
Page({
/**
* 页面的初始数据
*/
data: {
show_white: false,
options: {
tplid: ''
},
tableNum: 0,
detail: {},
staffinfo: {},
chef: {},
marketing: {},
home: {},
reserve: {},
signboard: {},
store: {},
recharge_data: {},
coupon_dataList: [],
seller: {},
priceInfo: '',
scoreInfo: '',
certificate: '',
dataStr: Date.now() * 1 / 1000,
swich_phone: '0', //是否显示前台电话
is_comments: '0',
is_user_comments: false, //是否评价过 true有评价 false没评价
tableinfo: [], //桌子列表
StyleType: '', //邀请函模板
showMoreTip: true, //显示滑动查看更多
hasValueOrder: false, //商家是否开通提前点餐功能
hasValueCertificate: false, //商家是否开通优惠券功能
hasValueRecharge: false, //商家是否开通充值功能
hasValueBroadcast: false, //商家是否能播报,只有极速版不能播报
_attentionAnim: {},
isPlay: '1', //语音播报 1运行 2暂停
paymentStatus: '', //定金支付状态 1支付 0未支付
reserveData: {}, //自定义图文数据
toastBool: false, //支付定金提示框
toastText: '', //支付定金提示文字
paymentId: '', //定金id
wxml: null,
imgSrc: '', //canvas图片地址
colors: '', //导航栏颜色
couponData: '', //评价赠送优惠券数据
timeList: [], //餐段时间
temp_ddate: '', //展示的到店时间
lite_style: '', //小程序转发卡片样式
isMoreBtn: '', //再次预订按钮
isPaymenBtn: '', //支付定金按钮
isShareItem: '', //转发客人按钮
isVoice: '', //播报按钮
openOrder: '', //点餐
isComments: '', //券和充值
bookType: '', //用餐类型 1婚宴模板1 2商务宴模板1
urlsArr: [], //包间预览图片、餐厅logo、餐厅首图列表
roomimage: [], //包间信息列表
activeTitle: '1', //选择的标题 1优惠券 2充值 3评价
titleList: [], //优惠券、充值、评价标题数组
},
tablestr: '', //桌位id拼接
screenHeight: '',
attentionAnim: {},
audioCtx: '', //播报
timers: null, // 动画定时器
n: 0,
modal: '',
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.id = options.id
let param = {
options: options,
hasOwner: options.hasSellerShare == 1, //是否为发起人
}
param.tpls = [TP.tpls(options.tplid)]
let bookType = options.bookType;
console.log('param', param);
console.log('options', options);
this.setData({
...param,
bookType
})
mta.Page.init({
"appID": "500667280",
"eventID": "500667287",
"statPullDownFresh": true,
"statShareApp": true,
"statReachBottom": true,
"lauchOpts": options, //渠道分析
});
const systemInfo = wx.getSystemInfoSync();
this.screenHeight = systemInfo.windowHeight; // 获取屏幕高度
this.modal = this.selectComponent("#payModal"); //通过给组件所起的id调用组件
wx.onUserCaptureScreen((res) => {
this.modal.showModal()
})
},
//预览图片
previewImage(e) {
const item = e.target.dataset;
wx.previewImage({
current: item.url,
urls: item.imgs,
})
},
// 锚点定位
gotoModule(e) {
const type = e.currentTarget.dataset['type'];
const query = wx.createSelectorQuery()
query.select('#module' + type).boundingClientRect()
query.selectViewport().scrollOffset()
query.exec(function (res) {
wx.pageScrollTo({
scrollTop: res[0].top - 150
});
});
},
// 打开截屏弹框
showModal() {
this.modal.showModal()
},
// 关闭截屏弹框
closeModal() {
this.modal.closeModal()
},
// 页面滚动事件
onPageScroll: function (event) {
if (event.scrollTop > 150) { //当页面滚动到某个位置时(这里设置为50),将导航栏背景颜色设置为白色
this.setData({
show_white: true
})
} else {
this.setData({
show_white: false
})
}
const scrollTop = event.scrollTop * 1 + this.screenHeight - 80; // 获取滚动的距离
if (scrollTop < this.screenHeight) {
this.setData({
showMoreTip: true
});
} else {
this.setData({
showMoreTip: false
});
}
},
// 点击了解更多会员优惠政策
gotoFavourableList() {
let url = util.http_build_query({
sellerName: this.data.seller.name,
sellerid: this.data.seller.sid,
oid: this.data.detail.id,
types: '1'
}, '/pack-cookbook/pages/favourableList')
wx.navigateTo({
url
})
},
// 去评价
evaluateFun() {
let url = util.http_build_query({
sellerName: this.data.seller.name,
sellerid: this.data.seller.sid,
oid: this.data.detail.id,
types: '1',
previousPage: '1',
}, '/pages/pinglun/createOpinion')
wx.navigateTo({
url
})
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
return this.sharesetting();
},
/**
* 监听用户点击分享到朋友圈按钮的操作
*/
onShareTimeline() {
return this.sharesetting();
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.setData({
titleList: []
})
this.getDetail()
this.getText()
this.getPaymentStatus()
},
// 复制微信号
copyWeChat() {
if (this.data.staffinfo.wechat) {
wx.setClipboardData({
data: this.data.staffinfo.wechat,
success(res) {
wx.getClipboardData({
success(res) {
console.log(res.data)
}
})
}
})
} else {
console.log('无微信号')
}
},
// 拨打电话
call(e) {
const phone = e.currentTarget.dataset['phone'];
wx.reportMonitor('1012', 1)
wx.makePhoneCall({
phoneNumber: phone
})
},
// 跳转到商家入驻页
gotoJoinSeller() {
wx.navigateTo({
url: util.http_build_query({
laiyuan: '邀请函'
}, '/pages/customer/joinSeller')
})
},
// 导航
looklocation: function () {
wx.reportMonitor('1015', 1)
wx.openLocation({
latitude: Number(this.data.seller.lat),
longitude: Number(this.data.seller.long),
scale: 17,
address: this.data.seller.addr,
success: function (res) {
console.log(res)
}
})
},
// 获取包间图片列表
getroomimage(sellerid, uid) {
App.Tables.GetTablesPhoto({
sellerid,
tableids: this.tablestr
}).then((json) => {
if (json.ret == 200) {
this.setData({
roomimage: json.data
})
var urlsArr = [];
json.data.forEach((v, i) => {
urlsArr.push(v.url);
})
this.setData({
urlsArr
})
this.getstaffinfo(uid, sellerid);
console.log('包间图片地址urlsArr', urlsArr)
console.log('包间信息roomimage', json.data)
}
})
},
// 预览图片
lookImgs(e) {
const url = e.currentTarget.dataset['url'];
const imgs = e.currentTarget.dataset['imgs'];
let urls = imgs ? imgs : [url]
wx.previewImage({
current: url,
urls,
})
},
// 获取店铺详情
getDetail() {
App.Reserve.Detail({
openid: getApp().openid,
rid: this.data.options.id
}).then(res => {
let tablesText = '', //桌子信息
deskStr = '',
tableNum = 0;
let tableinfo = util.determine(res.data.tableinfo);
console.log('tableinfo', tableinfo);
res.data.tables.forEach((t, i) => {
tableNum += t.table_pnum * 1
tablesText += t.rname + t.name + (i == (res.data.tables.length - 1) ? '' : '、');
deskStr += t.name + (i == (res.data.tables.length - 1) ? '' : '、');
})
let tabaleids = [];
res.data.tables.forEach(t => {
tabaleids.push(t.id);
})
this.tablestr = tabaleids.toString();
let reserev = RS.reserve(res.data)
let dateSmart = util.unixtoTime(reserev.ddate, 'YYYY-MM-DD 星期WW');
let yearMonthDay = util.unixtoTime(reserev.ddate, 'YYYY年MM月DD日')
let yearMonth = util.unixtoTime(reserev.ddate, 'MM月DD日')
let dateStr = util.unixtoTime(reserev.ddate, 'HH点')
let dateStrDivide = util.unixtoTime(reserev.ddate, 'II分')
console.log('dateSmart', dateSmart);
let detail = this.formatDatail(reserev, dateSmart)
this.setData({
detail,
tableNum,
tableinfo,
is_user_comments: res.data.is_user_comments,
temp_ddate: this.data.temp_ddate ? this.data.temp_ddate : reserev.temp_ddate ? util.unixtoTime(reserev.temp_ddate, 'HH:II') : util.unixtoTime(reserev.ddate, 'HH:II'),
openOrder: (detail && detail.status != '4' && this.data.options.isOrder != '1' && detail.seller && detail.seller.is_open_order == 1) ? '1' : '0',
seller: {
daily: reserev.seller.daily,
name: reserev.seller.sellername,
sid: reserev.sid,
date: dateSmart,
tablesText,
addr: reserev.seller.real_address || reserev.seller.map_address,
image: reserev.image_url,
hasOwner: true,
type: reserev.type,
is_set_ddate: reserev.is_set_ddate,
hasUpTime: reserev.type == 1 && reserev.hasRunning && reserev.status != 2,
tel: reserev.seller.seller_tel.split(','),
soltName: reserev.soltName,
dateTime: util.unixtoTime(reserev.ddate, 'HH:II'),
time: util.unixtoTime(reserev.ddate, '星期WW HH:II'),
lat: reserev.seller.lat,
long: reserev.seller.long,
yearMonthDay,
yearMonth,
dateStr,
deskStr,
dateStrDivide: dateStrDivide == '00分' ? '' : dateStrDivide,
seller_tel: reserev.seller.seller_tel,
phone: reserev.phone,
}
})
console.log('reserev信息', reserev);
console.log('seller信息', this.data.seller);
console.log('detail信息', this.data.detail);
setTimeout(() => {
this.getroomimage(reserev.sid, res.data.uid)
this.getSellerVersionFun(reserev.sid);
}, 0);
}).catch(res => {
console.log(res, '详情请求失败');
})
},
// 获取商家版本,不是超能版或者没有开通对应模块,不显示
getSellerVersionFun(sellerid) {
App.SellerVersion.GetSellerVersion({
sellerid
}).then((res) => {
let data = res.data;
console.log('版本列表', data);
if (data && data.length > 0) {
data.sort((a, b) => b.cdate * 1 - a.cdate * 1);
// 获取店铺当前版本 (cdate最大最后一个充入的 && 当前时间有效 && 当前版本)
let obj = data.find(item => item.vtype == 1 || item.vtype == 2 || item.vtype == 4);
console.log('当前版本', {
...obj
});
// 提前点餐功能:超能版 || 有提前点餐模块
const hasValueOrder = obj.vtype == '1' || data.some(item => item.vid == '6');
// 优惠券功能:超能版 || 高级版 || 有优惠券模块
const hasValueCertificate = obj.vtype == '1' || obj.vtype == '4' || data.some(item => item.vid == '8');
// 充值功能:超能版 || 有充值模块
const hasValueRecharge = obj.vtype == '1' || data.some(item => item.vid == '9');
// 播报功能:超能版 || 标准版 || 标准版首年 || 高级版
const hasValueBroadcast = obj.vtype == '1' || obj.vid == '4' || obj.vid == '13' || obj.vtype == '4';
this.setData({
hasValueOrder,
hasValueCertificate,
hasValueRecharge,
hasValueBroadcast,
})
}
})
},
// 通过预订ID查收定金详情
getPaymentStatus() {
App.Reserve.GetReserveDepositByRid({
rid: this.data.options.id
}).then(res => {
if (res.ret == 200 && res.data && res.data.length > 0) {
let data = res.data[0];
let paymentStatus = data.trade_state == 'SUCCESS' ? '1' : '0';
let options = this.data.options
this.setData({
paymentId: data.id,
paymentStatus,
isPaymenBtn: options.isOrder != '1' && data.id && paymentStatus == '0' && options.hasSellerShare == '1' && options.isDeposit == '1',
})
}
})
},
// 获取自定义图文内容
getText() {
App.Reserve.GetReserveImgText({
rid: this.data.options.id
}).then(res => {
if (res.ret == 200 && res.data) {
let data = res.data;
let content = util.determine(data.content)
console.log('自定义图文内容content', content);
this.setData({
reserveData: {
title: data.title || '',
content,
}
})
}
})
},
// 点击支付定金
paymentFun() {
let that = this;
App.PayOnline.CombineTransactionsByDeposit({
id: this.data.paymentId,
openid: getApp().openid,
}).then(res => {
if (res.ret == 200) {
wx.requestPayment({
timeStamp: res.data.timeStamp + '',
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
success(ress) {
console.log('微信支付结果', ress);
if (ress.errMsg == 'requestPayment:ok') {
console.log('支付成功', ress);
that.setData({
paymentStatus: '1',
toastBool: true,
toastText: '支付成功'
})
that.hideToast();
return
}
console.log('支付失败1', ress);
that.setData({
toastBool: true,
toastText: '支付失败,请重新支付'
})
that.hideToast();
},
fail(ress) {
console.log('支付失败2', ress);
that.setData({
toastBool: true,
toastText: '支付失败,请重新支付'
})
that.hideToast();
},
})
} else {
wx.showToast({
title: res.msg,
icon: 'none',
})
}
})
},
// 关闭支付失败或者成功弹框
hideToast() {
setTimeout(() => {
this.setData({
toastBool: false
})
}, 1500)
},
// 客户经理获取基本信息
getstaffinfo(uid, sid) {
App.Activity.GetCustomerActivityBaseinfo({
sellerid: this.data.detail.seller.id,
uid
}).then((json) => {
if (json.ret == 200) {
console.log('经理信息staffinfo', json.data)
this.setData({
staffinfo: json.data
})
this.getSellerTemplateConfFun(sid);
}
})
},
// 提前点餐
cookbook() {
if (this.data.detail.order && this.data.detail.order.cookbooklist.length > 0) {
let data = {
rid: this.id,
oid: this.data.detail.order.id,
sellerName: this.data.seller.name,
sid: this.data.seller.sid,
identity: '1',
hasSuccess: '1',
}
wx.navigateTo({
url: `/pack-cookbook/pages/success_new?hasSuccess=${data.hasSuccess}&identity=${data.identity}&oid=${data.oid}&rid=${data.rid}&sellerName=${data.sellerName}&sid=${data.sid}`,
})
} else {
App.Advance.CreateOrder({
rid: this.id,
openid: getApp().openid,
}).then(res => {
if (res.ret != 200) {
return util.toast(res.msg, 'none')
}
wx.navigateTo({
url: util.http_build_query({
rid: this.id,
oid: res.data.id,
sid: res.data.sellerid,
sellerName: this.data.seller.name,
identity: '1',
}, '/pack-cookbook/pages/index_new')
});
})
}
},
// 生成海报
painterBtn(img, sellerName, date, time) {
img = img.replace(/^http:/, "https:");
this.setData({
wxml: canvas({
imgUrl: img || 'https://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png',
sellerName,
date,
time,
})
})
},
onImgOK(e) {
this.setData({
imgSrc: e.detail.path
})
console.log('海报生成成功', this.data.imgSrc);
},
// 分享
sharesetting() {
wx.reportMonitor('1017', 1)
this.closeModal()
if (this.data.options.isOrder == '1' && this.data.detail.status != '4') {
return {
title: '推荐' + this.data.seller.name + ',点击可查看详情并导航到店',
path: util.http_build_query({
id: this.data.detail.seller.id
}, '/pages/reserve/shopHome'),
imageUrl: this.data.detail.seller.seller_image || 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png',
}
} else {
let parmdata = {
id: this.id,
fromid: getApp().openid,
hasInvitation: 1,
tplid: this.data.options.tplid
}
if (this.data.options.uid) {
parmdata.uid = this.data.options.uid;
}
return {
title: '我已订好' + this.data.seller.name + ',点击可查看详情并导航到店',
path: util.http_build_query(parmdata, '/pages/customer/detail_owner_invitation_new'),
imageUrl: this.data.imgSrc || 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png',
}
}
},
// 修改detail数据
formatDatail(details, dateSmart) {
details.rdateStr = dateSmart;
details.tableFirst = details.tables[0].name;
if (details.tables.length > 1) {
details.tableSubInfo = '等' + (details.tables.length) + '个' +
(details.tables[0].tid == 2 ? '包间' : '');
}
details.rname = details.rname.trim()
if (details.rname && details.sex != 3) {
details.rnameStr = details.rname + (details.sex == 1 ? '先生' : details.sex == 2 ? '女士' : details.sex == 4 ? '贵宾' : '')
} else if (!details.rname && details.sex == 4) {
details.rnameStr = '贵宾'
} else {
details.rnameStr = details.rname
}
details.eatStr = '邀请您共进晚餐';
let hi = util.unixtoTime(details.ddate, 'HHII');
if (hi < '10:00') {
details.eatStr = '邀请您共进早餐';
} else if (hi < '15:00') {
details.eatStr = '邀请您共进午餐';
}
return details;
},
// 获取商家设置营销信息
getSellerTemplateConfFun(sid) {
App.Seller.GetSellerTemplateConf({
sid
}).then(res => {
let data = res.data
let couponList = []
let StyleType, home, chef, marketing, coupon, reserve, swich_phone, is_comments, signboard, store;
chef = util.determine(data.chef);
reserve = util.determine(data.reserve);
marketing = util.determine(data.marketing);
signboard = util.determine(data.signboard);
store = util.determine(data.store);
home = util.determine(data.home);
StyleType = data.type;
swich_phone = reserve && reserve.swich_phone ? reserve.swich_phone : '';
if (store) store.content = (store.is_introduce_all == '1' && store.content) ? util.determine(store.content) : '';
if (chef) chef.content = (chef.is_introduce_all == '1' && chef.content) ? util.determine(chef.content) : '';
if (signboard) signboard.content = (signboard.is_introduce_all == '1' && signboard.content) ? util.determine(signboard.content) : '';
if (reserve) reserve.content = (reserve.is_introduce_all == '1' && reserve.content) ? util.determine(reserve.content) : '';
if (home) home.image = (home && home.image && (!home.id_first_image || home.id_first_image != '0')) ? home.image : '';
if (marketing) {
marketing.logo = (marketing.logo && (!marketing.is_logo || marketing.is_logo != '0')) ? marketing.logo : '';
is_comments = marketing.is_comments ? marketing.is_comments : '';
coupon = marketing.coupon_data ? util.determine(marketing.coupon_data) : '';
let info = marketing.coupon_data_comments ? util.determine(marketing.coupon_data_comments) : '';
let couponDataId = info && info.length > 0 ? info[0].id : {}
// 根据券ID获取评价赠送的券详情
if (couponDataId) this.getEvaluateFun(couponDataId)
}
// is_cash 代金券 is_discount折扣券 is_dish菜品券 只有代金券有几折显示
if (coupon && util.getType(coupon) == 'object') {
couponList.push({
id: coupon.id
});
}
if (coupon && util.getType(coupon) == 'array') {
if (coupon.length > 0) {
coupon.forEach(item => {
couponList.push({
id: item.id
})
})
}
}
// 根据券ID获取券详情
this.getActivityByIdFun(couponList, couponList.length)
// 根据充值ID获取充值详情
if (marketing && marketing.is_recharge && marketing.is_recharge == '1' && marketing.recharge_data) {
this.getRechargeDetail(marketing.recharge_data.id)
}
if (store && store.images && store.images.length > 0) store.images = util.determine(store.images);
if (reserve && reserve.park_info_images && reserve.park_info_images.length > 0) reserve.park_info_images = util.determine(reserve.park_info_images);
if (signboard && signboard.images && signboard.images.length > 0) signboard.images = util.determine(signboard.images);
if (reserve) reserve = this.processInfo(reserve, '1')
if (store) store = this.processInfo(store, '2')
if (signboard) signboard = this.processInfo(signboard, '3')
if (chef) chef = this.processInfo(chef, '4')
let solt = this.data.detail.ddate_solt;
let lunchDis = this.data.seller.daily;
let timeList = []
var morningStr = lunchDis.morning.split("-");
var morningArr = lunchDis.morning ? this.computeHour(morningStr[0], morningStr[1], 30) : [];
var noonStr = lunchDis.noon.split("-");
var noonArr = lunchDis.noon ? this.computeHour(noonStr[0], noonStr[1], 30) : [];
var nightStr = lunchDis.night.split("-");
var nightArr = lunchDis.night ? this.computeHour(nightStr[0], nightStr[1], 30) : [];
timeList = solt == '1' ? morningArr : solt == '2' ? noonArr : solt == '3' ? nightArr : []
let bookType = this.data.bookType;
let urlsArr = this.data.urlsArr
marketing.wecomle = (reserve && reserve.swich_welcome == '1' && marketing && marketing.wecomle) ? marketing.wecomle : ''
if (bookType == '1' && home && home.image) urlsArr.push(home.image)
if (bookType == '1' && marketing && marketing.logo) urlsArr.push(marketing.logo)
let obj = {
chef,
marketing,
home,
reserve,
signboard,
store,
swich_phone,
StyleType,
lite_style: data.lite_style,
timeList,
is_comments,
isMoreBtn: marketing && marketing.is_online_book == '1' && this.data.options.onlineReserve == '1',
isShareItem: this.data.options.isOrder != '1' && marketing && marketing.is_transpond == '1',
isComments: is_comments == '1' && marketing && marketing.is_comments_coupon == '1',
colors: bookType == '1' ? '#7c191e' : bookType == '2' ? '#000' : '',
urlsArr
}
console.log('获取数据GetSellerTemplateConf--------------------', {
...obj
});
this.setData({
...obj
})
// 开启语音播报
if (reserve && reserve.swich_voice == '1') {
this.setData({
isPlay: '1',
isVoice: '1',
})
this.textToSpeechFun(reserve.voice_info)
}
// 获取转发客人卡片设置
let detailInfo = this.data.detail;
if (data.lite_style == '0') {
this.setData({
imgSrc: detailInfo.seller.seller_image
})
} else {
let d = detailInfo.ddate_solt;
let time1 = util.unixtoTime(detailInfo.ddate, '周WW') + ' ' + (d == '1' ? '早上' : d == '2' ? '中午' : d == '3' ? '晚上' : '');
let time2;
if (this.data.temp_ddate) {
time2 = util.unixtoTime(detailInfo.ddate, '周WW') + this.data.temp_ddate
} else {
time2 = util.unixtoTime(detailInfo.ddate, '周WW HH:II')
}
let time3 = util.unixtoTime(detailInfo.ddate, '周WW') + ' ' + (d == '1' ? '早餐' : d == '2' ? '午餐' : d == '3' ? '晚餐' : '');
let time = data.lite_style == '1' ? time1 : data.lite_style == '2' ? time2 : data.lite_style == '3' ? time3 : '';
this.painterBtn(
detailInfo.seller.seller_image,
detailInfo.seller.sellername,
util.unixtoTime(detailInfo.ddate, 'MM月DD日'),
time
);
}
}).catch(res => {
console.log('GetSellerTemplateConf请求失败');
})
},
// 点击商家有礼
gotoSellerGift() {
let url = util.http_build_query({
id: this.data.detail.id,
}, '/pages/reserve/sellerGift')
wx.navigateTo({
url
})
},
// 再次预订
secondbook() {
wx.reportMonitor('1013', 1)
wx.redirectTo({
url: '/pages/reserve/shopHome?id=' + this.data.detail.seller.id
})
},
// 文字转语音的方法
textToSpeechFun(voice_info) {
console.log('voice_info', voice_info);
let that = this;
let data = this.data;
data.detail.rname = data.detail.rname.trim()
let str = data.detail.sex == 1 ? '先生' : data.detail.sex == 2 ? '女士' : data.detail.sex == 4 ? '贵宾' : '';
let charArray = data.seller.deskStr.split('');
let modifiedArray = charArray.map(char => char + ' ');
let resultString = modifiedArray.join('').slice(0, -1);
const replacements = {
"{年月日}": data.seller.yearMonthDay,
"{月日}": data.seller.yearMonth,
"{餐段}": data.seller.soltName,
"{就餐时间}": data.seller.dateStr + data.seller.dateStrDivide,
"{包间名}": resultString,
"{区域名+包间名}": data.seller.tablesText,
"{经理名字}": data.staffinfo.name,
"{客人姓名}": data.detail.rname ? (data.detail.rname + str) : str == '贵宾' ? '贵宾' : '',
"{预订日期}": data.seller.yearMonthDay,
"{桌位}": resultString,
};
let newStr = voice_info.replace(/{预订日期}|{桌位}|{年月日}|{月日}|{餐段}|{就餐时间}|{包间名}|{区域名\+包间名}|{经理名字}|{客人姓名}/g, function (matched) {
return replacements[matched];
});
console.log('文字转语音newStr', newStr);
plugin.textToSpeech({
lang: "zh_CN",
tts: true,
content: newStr,
success: function (res) {
that.filename = res.filename
that.speech()
},
fail: function (res) {
console.log("fail tts", res)
}
})
},
// 开启语音播报
speech() {
var attentionAnim = wx.createAnimation({
duration: 1000,
timingFunction: 'linear',
})
this.attentionAnim = attentionAnim
this.setData({
_attentionAnim: attentionAnim,
attentionAnim: attentionAnim.export()
})
this.audioCtx = wx.createInnerAudioContext()
this.audioCtx.src = this.filename
this.audioCtx.loop = true
this.audioCtx.play()
this.audioCtx.onPlay((e) => {
this.setData({
isPlay: this.audioCtx.paused ? '2' : '1'
})
})
this.audioCtx.onPause((e) => {
this.setData({
isPlay: this.audioCtx.paused ? '2' : '1'
})
})
clearInterval(this.timers)
this.animation()
},
// 持续旋转动画
animation() {
let that = this;
var time = setInterval(function () {
this.n = this.n + 1;
let attentionAnim = that.data._attentionAnim
attentionAnim.rotate(180 * (this.n)).step()
that.setData({
attentionAnim: attentionAnim.export(),
})
}.bind(this), 1000)
this.timers = time;
},
// 暂停/继续播放
stopMusic() {
if (this.data.isPlay == '2') { // 2 暂停状态
console.log("开始");
clearInterval(this.timers)
this.animation()
this.audioCtx.play() //开始
return;
}
if (this.data.isPlay == '1') { // 1 运行状态
console.log('暂停');
if (this.n % 2 != 0) {
this.n = this.n + 1;
let attentionAnim = this.data._attentionAnim;
attentionAnim.rotate(180 * this.n).step();
this.setData({
attentionAnim: attentionAnim.export(),
})
}
clearInterval(this.timers)
this.audioCtx.pause() //暂停
return;
}
},
// 根据充值ID获取充值详情
getRechargeDetail(id) {
App.Activity.GetNewRecharge({
id
}).then(res => {
let detail = res.data
let exp_date = res.data.exp_date ? JSON.parse(res.data.exp_date) : ''
let recharge_list = res.data.recharge_list ? JSON.parse(res.data.recharge_list) : ''
let priceInfo, scoreInfo, certificate;
detail.recharge_list = recharge_list;
detail.exp_date = exp_date;
if (recharge_list.is_price == '1') priceInfo = '赠送' + recharge_list.price + '元余额';
if (recharge_list.is_score == '1') scoreInfo = '赠送' + recharge_list.score + '积分';
if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) certificate = recharge_list.coupons_names.join('、');
let recharge_data = (this.data.dataStr < detail.etime * 1 && detail.is_open == '1') ? detail : ''
console.log('邀请函--------------充值', recharge_data);
let entry = this.data.titleList
if (this.data.hasValueRecharge && this.data.marketing.is_recharge == '1' && recharge_data) {
entry.push({
id: 2,
title: '会员充值优惠'
})
if (entry.length > 0) {
entry.sort((a, b) => a.id - b.id);
}
recharge_data.timeStr = util.unixtoTime(recharge_data.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(recharge_data.etime, 'YYYY-MM-DD')
}
this.setData({
titleList: entry,
activeTitle: entry.length > 0 ? entry[0].id : '',
recharge_data,
scoreInfo,
priceInfo,
certificate
})
})
},
// 选择标题
checkTitleFun(e) {
console.log('e.currentTargete.currentTarget', e.currentTarget);
let activeTitle = e.currentTarget.dataset['type'];
this.setData({
activeTitle
})
},
// 获取评价赠送的券最新详情
getEvaluateFun(id) {
App.Activity.GetActivityById({
id
}).then(res => {
if (res.data.length > 0) {
let couponData = res.data[0]
couponData.use = couponData.use ? util.determine(couponData.use) : '';
couponData.exp_date = couponData.exp_date ? util.determine(couponData.exp_date) : '';
// showCoupon 代表赠送的券没过有效期 && 是开启状态
couponData.showCoupon = (this.data.dataStr < (couponData.etime * 1) && couponData.is_open == '1') ? '1' : '0';
console.log('邀请函--------------------评价赠送的优惠券', couponData);
let entry = this.data.titleList
if (!this.data.is_user_comments && this.data.isComments == '1' && couponData.showCoupon == '1') {
entry.push({
id: 3,
title: '意见反馈有礼'
})
if (entry.length > 0) {
entry.sort((a, b) => a.id - b.id);
}
}
this.setData({
couponData: res.data[0],
titleList: entry,
activeTitle: entry.length > 0 ? entry[0].id : '',
})
}
})
},
// 根据券ID获取券详情
getActivityByIdFun(ids, length) {
let coupon_dataList = [];
ids.forEach(i => {
App.Activity.GetActivityById({
id: i.id
}).then(res => {
if (res.data.length > 0) {
let detail = res.data[0];
detail.stringifyUse = detail.use ? JSON.stringify(detail.use) : '';
detail.exp_date = detail.exp_date ? util.determine(detail.exp_date) : '';
detail.use = detail.use ? util.determine(detail.use) : '';
detail.stimeStr = util.unixtoTime(detail.stime, 'YYYY-MM-DD HH:II')
detail.etimeStr = util.unixtoTime(detail.etime, 'YYYY-MM-DD HH:II')
coupon_dataList.push(detail);
if (length === coupon_dataList.length) {
coupon_dataList = coupon_dataList.filter(item => {
return this.data.dataStr < (item.etime * 1) && item.is_open == '1'
})
let entry = this.data.titleList
if (this.data.hasValueCertificate && this.data.marketing.is_coupon == '1' && coupon_dataList.length > 0) {
entry.push({
id: 1,
title: '专属优惠券'
})
if (entry.length > 0) {
entry.sort((a, b) => a.id - b.id);
}
}
console.log('邀请函--------------------优惠券', coupon_dataList);
this.setData({
coupon_dataList,
titleList: entry,
activeTitle: entry.length > 0 ? entry[0].id : '',
})
}
}
})
})
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
clearInterval(this.timers)
if (this.audioCtx) {
this.audioCtx.destroy(); // 释放音频资源
}
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
clearInterval(this.timers)
if (this.audioCtx) {
this.audioCtx.destroy(); // 释放音频资源
}
},
// 设置虚拟到店时间
bindPickerChange: function (e) {
let index = e.detail.value
let temp_ddate = this.data.timeList[index]
this.setData({
temp_ddate
})
let detailInfo = this.data.detail;
const reserveDate = new Date(detailInfo.ddate * 1000);
let reserveTime =
reserveDate.getFullYear() +
"-" +
(reserveDate.getMonth() + 1) +
"-" +
reserveDate.getDate();
let times = this.getNewDate(reserveTime + " " + temp_ddate).getTime() / 1000
App.Reserve.SetReserveTempDdate({
rid: this.id,
temp_ddate: times,
}).then(res => {
if (res.ret == 200) {
if (this.data.lite_style == '2') {
let time = (util.unixtoTime(detailInfo.ddate, '周WW') + temp_ddate) || (util.unixtoTime(detailInfo.ddate, '周WW') + this.data.timeList[index])
this.painterBtn(
detailInfo.seller.seller_image,
detailInfo.seller.sellername,
util.unixtoTime(detailInfo.ddate, 'MM月DD日'),
time
);
}
}
})
},
// ios 部分机型不兼容new Date() 转换字符串
getNewDate(data) {
if (typeof data === 'string') {
let arr = data.split(/[- : \/]/)
if (arr[1] !== undefined || arr[1] !== null) {
arr[1] = arr[1] - 1
}
return new Date(...arr)
}
return new Date(data || new Date())
},
//根据起始时间(获取时间时间段)
computeHour(time1, time2, interval) {
//time1 开始时间 time2结束时间 interval间隔时长
function getTimeList(time1, time2, interval) {
var timeList = [];
time1 = time1.split(":");
time2 = time2.split(":");
time1 = new Date(0, 0, 0, time1[0], time1[1], 0);
time2 = new Date(0, 0, 0, time2[0], time2[1], 0);
interval = interval * 60 * 1000;
while (time1 <= time2) {
timeList.push(time1.format("hh:mm"));
time1 = new Date(time1.getTime() + interval);
}
return timeList;
}
Date.prototype.format = function (format) {
var date = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
S: this.getMilliseconds(),
};
if (/(y+)/.test(format))
format = format.replace(
RegExp.$1,
(this.getFullYear() + "").substr(4 - RegExp.$1.length)
);
for (var k in date)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(
RegExp.$1,
RegExp.$1.length == 1 ?
date[k] :
("00" + date[k]).substr(("" + date[k]).length)
);
return format;
};
return getTimeList(time1, time2, interval);
},
// 模块文字、轮播图数据重组(停车、餐厅介绍、菜品、主厨)
processInfo(intel, type) {
let imgs = [];
intel.textInfo = '';
intel.imgsInfo = [];
intel.videoImgsInfo = [];
if (type == '1') {
if (intel.swich_park == '1' && (intel.park_info || intel.park_info_images)) {
intel.textInfo = intel.park_info;
imgs = intel.park_info_images
}
}
if (type == '2') {
imgs = intel.images && intel.images.length > 0 && (!intel.is_images || intel.is_images !== '0') ? intel.images : [];
intel.textInfo = (intel.introduce && (!intel.is_introduce || intel.is_introduce !== '0')) ? intel.introduce : '';
}
if (type == '3') {
imgs = intel.images || []
intel.textInfo = '';
}
if (type == '4') {
imgs = ((!intel.is_images || intel.is_images != '0') && intel.image) ? intel.image : []
intel.textInfo = (intel.introduce && (!intel.is_introduce || intel.is_introduce != '0')) ? intel.introduce : '';
}
intel.imgsInfo = imgs;
intel.videoImgsInfo = imgs.map(url => ({
type: "1",
content: url,
}));
if (intel.content && intel.content.length > 0 && intel.is_introduce_all == '1') {
intel.textInfo = intel.content.filter(item => item.type === "2").map(item => item.content).join('\n');
intel.imgsInfo = intel.content.filter(item => item.type === "1" && item.content).map(item => item.content);
intel.videoImgsInfo = intel.content.filter(item => ((item.type === "1" || item.type === "3") && item.content));
}
return intel
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
})
\ No newline at end of file
... ...
{
"navigationStyle": "custom",
"navigationBarTextStyle": "white",
"usingComponents": {
"nav": "/components/nav/nav",
"painter":"/components/painter/painter",
"my-modal": "/components/modal/modal"
}
}
\ No newline at end of file
... ...
<!--pack-invitation/pages/detail_owner_invitation11.wxml-->
<import src="../../pages/tpl/invitation"></import>
<nav hasHome class="navhome" backgroundColor="{{show_white ? colors : 'transparent'}}" place="{{false}}"></nav>
<scroll-view scroll-y class="viewBox viewBox{{bookType}}">
<image wx:if="{{hasValueBroadcast && isVoice=='1'}}" class="musicImg" src="{{isPlay=='1'?'https://qn.colorcun.com/open.svg':'https://qn.colorcun.com/close.svg'}}" bindtap="stopMusic" animation="{{attentionAnim}}" />
<image class="giftImg" bindtap="gotoSellerGift" wx:if="{{(hasValueCertificate && marketing.is_coupon=='1' && coupon_dataList.length>0) || (!is_user_comments && isComments =='1' && couponData.showCoupon =='1') || (hasValueRecharge && marketing.is_recharge=='1' && recharge_data)}}" src="https://nosqn.colorcun.com/sellerGift.png" mode="" />
<image wx:if="{{detail.status =='4'}}" class="cannotImg" src="https://qn.colorcun.com/cancelImg.png" />
<image wx:if="{{options.isOrder == '1' && detail.status !='4'}}" class="cannotImg" src="https://qn.colorcun.com/overImg.png" />
<view class="reservationInfoBox">
<view class="reservationInfo">
<view class="infoTop">
<text wx:if="{{bookType == '2'}}" class="infoTopText1" space="nbsp">INVITATION</text>
<text class="infoTopText2 font44r" space="nbsp">{{seller.name||reserve.seller_name}}</text>
<text class="infoTopText3 font28r" space="nbsp" wx:if="{{reserve.swich_slogan == '1' && home.slogan}}">{{home.slogan}}</text>
<text wx:if="{{bookType == '2'}}" class="infoTopText4 font44r" space="nbsp">邀请函</text>
<image wx:if="{{bookType == '1'}}" class="infoTopBj2" src="https://qn.colorcun.com/invitation11Bg2.png" mode="" />
</view>
<view class="informationBox">
<view class="infoItem">
<text space="nbsp" wx:if="{{reserve.swich_booking=='1' && reserve.book_info}}" class="contentData font28r bookData">{{reserve.book_info}}</text>
</view>
<view class="infoItem" wx:if="{{detail.rnameStr && reserve.swich_customer == '1'}}">
<view class="record font28r">预订贵宾:</view>
<view class="contentData font28r">{{detail.rnameStr}}</view>
</view>
<view class="infoItem" wx:if="{{seller.date}}">
<view class="record font28r">用餐日期:</view>
<view class="contentData font28r">{{seller.date}}</view>
</view>
<view class="infoItem" wx:if="{{seller.tablesText}}">
<view class="record font28r">用餐位置:</view>
<view class="contentData font28r">{{seller.tablesText}}</view>
</view>
<view class="infoItem" wx:if="{{seller.soltName}}">
<view class="record font28r">用餐时间:</view>
<view class="arrivalBox">
<view class="contentData font28r">{{seller.soltName}}<text class="marLeft font28r">{{temp_ddate}}</text></view>
<picker wx:if="{{options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1'}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
<view class="picker">
<button>修改到店时间</button>
</view>
</picker>
</view>
</view>
<view wx:if="{{bookType == '2'}}" class="entrance {{((reserve.swich_booking!='1' || !reserve.book_info) && (!reserve.swich_phone=='0' || !seller.tel || seller.tel.length==0))?'entrance1':''}}">
<view bindtap="gotoModule" data-type="1" wx:if="{{marketing.logo || home.image || (store.textInfo || store.videoImgsInfo.length>0)}}" class="entranceItem">
<image src="https://qn.colorcun.com/invitation12Icon1.png" mode="" />
<view class="font24r">餐厅介绍</view>
</view>
<view bindtap="gotoModule" data-type="2" wx:if="{{signboard && (signboard.textInfo || signboard.videoImgsInfo.length>0)}}" class="entranceItem">
<image src="https://qn.colorcun.com/invitation12Icon2.png" mode="" />
<view class="font24r">招牌菜品</view>
</view>
<view bindtap="gotoModule" data-type="3" wx:if="{{reserve && (reserve.textInfo || reserve.videoImgsInfo.length>0)}}" class="entranceItem">
<image src="https://qn.colorcun.com/invitation12Icon3.png" mode="" />
<view class="font24r">停车指引</view>
</view>
<view bindtap="cookbook" wx:if="{{hasValueOrder && openOrder == '1' && marketing.is_order=='1'}}" class="entranceItem">
<image src="https://qn.colorcun.com/invitation12Icon4.png" mode="" />
<view class="font24r">提前点餐</view>
</view>
</view>
<view class="infoItem infoRight" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
<view class="record font28r">前台电话:</view>
<view class="contentData font28r">
<block wx:for="{{seller.tel}}" wx:key="index"><text data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{item}}</text><text class="divider">{{index==(seller.tel.length-1)?'':','}}</text></block>
</view>
</view>
<view class="infoItem addressInfo">
<view class="record font28r">餐厅地址:</view>
<view class="arrivalBox">
<view class="contentData font28r">{{seller.addr || reserve.seller.map_address}}</view>
<view class="positioning" bindtap="looklocation">
<image class="addressImg" src="{{bookType == '1'?'https://qn.colorcun.com/invitation11Dw.png':'https://qn.colorcun.com/invitation12Dw.png'}}" mode="aspectFill" />
导航
</view>
</view>
</view>
<swiper wx:if="{{bookType == '1' && urlsArr.length>0}}" class="detailBanner" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{2000}}" circular="{{true}}" indicator-color="lightgray" indicator-active-color="#fff">
<swiper-item wx:for="{{urlsArr}}" wx:key="index">
<image mode="scaleToFill" class="detailBannerImg" src="{{item}}" bindtap="previewImage" data-url="{{item}}" data-imgs="{{urlsArr}}"></image>
</swiper-item>
</swiper>
<text space="nbsp" wx:if="{{bookType == '1' && marketing.wecomle}}" class="welcomeInfo font32r">{{marketing.wecomle}}</text>
</view>
</view>
<view class="receptionBox" wx:if="{{staffinfo && reserve.swich_manager=='1'}}">
<view class="peopleInfo">
<image bindtap="lookImgs" data-url="{{staffinfo.photo}}" src="{{staffinfo.photo}}" class="headerimg" mode="aspectFill"></image>
<view class="font26r">{{staffinfo.name}}</view>
<view class="font26r">{{staffinfo.position}}</view>
</view>
<view class="handleInfo">
<view class="font40r">尊敬的贵宾您好!</view>
<view class="font26r texts">很荣幸能为您提供专属接待和服务</view>
<view class="contactBtns">
<view wx:if="{{staffinfo.phone}}" class="font22r brownFont" data-phone="{{staffinfo.phone}}" bindtap="call">
<image src="{{bookType == '1'?'https://qn.colorcun.com/invitation11Phone.png':'https://qn.colorcun.com/invitation10Phone.png'}}" mode="" /><text>联系我</text>
</view>
<view wx:if="{{staffinfo.wechat}}" class="font22r brownFont" bindtap="copyWeChat">
<image src="{{bookType == '1'?'https://qn.colorcun.com/invitation11Wx.png':'https://qn.colorcun.com/invitation10Wx.png'}}" mode="" /><text>加微信</text>
</view>
</view>
</view>
</view>
</view>
<view class="publicModule preferentialCoupon" wx:if="{{titleList.length>0}}">
<view class="tileBox">
<view wx:for="{{titleList}}" wx:key="index" wx:for-index="index" bindtap="checkTitleFun" data-type="{{item.id}}" class="titleItem {{activeTitle==item.id?'activeTitleItem':''}}">{{item.title}}</view>
</view>
<!-- 优惠券 -->
<view class="regionItem" wx:if="{{activeTitle == '1'}}">
<block wx:for="{{coupon_dataList}}" wx:key="index" wx:for-index="index">
<navigator url="/pack-activity/pack/buyCoupon?id={{item.id}}&name={{seller.name}}&use={{item.stringifyUse}}&sid={{seller.sid}}&oid={{detail.id}}&types=1&StyleType={{StyleType}}" hover-class="navigator-hover">
<view class="preferentialItems">
<view class="certificateInfo">
<text class="discountText font20r">{{item.use.is_cash=='1'?'代金券':item.use.is_discount=='1'?'超值折扣':item.use.is_dish=='1'?'特惠菜品':''}}</text>
<view class="ticketName font36r">{{item.aname}}</view>
<text wx:if="{{item.exp_date.is_week=='1' || item.exp_date.is_week===true}}" class="limitation font24r">{{item.exp_date.week_show?item.exp_date.week_show+'可用':''}}{{item.desc?','+item.desc+'。':'。'}}</text>
<view wx:if="{{item.exp_date.is_none=='1' || item.exp_date.is_none===true}}" class="limitation font24r">
无限制{{item.desc?','+item.desc+'。':'。'}}
</view>
<view wx:if="{{item.exp_date.is_birthday=='1' || item.exp_date.is_birthday===true}}" class="limitation font24r">
会员生日当天可用{{item.desc?','+item.desc+'。':'。'}}
</view>
</view>
<view class="purchase font40r">
<view class="priceText" wx:if="{{item.price}}">
<view class="icons font24r">¥</view>{{item.price}}
</view>
<view class="font24r couponBtn">立即购买</view>
</view>
</view>
</navigator>
</block>
</view>
<!-- 充值 -->
<view class="regionItem" wx:if="{{activeTitle == '2'}}">
<navigator url="/pack-activity/pack/vipRecharge?id={{recharge_data.id}}&name={{seller.name}}&sid={{seller.sid}}&oid={{detail.id}}&types=1&StyleType={{StyleType}}" hover-class="navigator-hover">
<view class="rechargeItems">
<image class="checkImg" src="https://qn.colorcun.com/invitation10vector.png" mode="" />
<view class="rechargeTitle">{{recharge_data.recharge_money}}<text class="font24r">元</text></view>
</view>
</navigator>
<view class="limitation" wx:if="{{priceInfo || scoreInfo || recharge_data.recharge_list.is_coupons=='1'}}">
<view class="limitationTitle font28r">充值优惠详情</view>
<view class="font24r">
<text>会员充值满{{recharge_data.recharge_money}}元,</text>
<text wx:if="{{priceInfo}}">{{priceInfo}}{{(recharge_data.recharge_list.is_coupons=='0' && recharge_data.recharge_list.is_score=='0')?'。':','}}</text>
<text wx:if="{{scoreInfo}}">{{scoreInfo}}{{recharge_data.recharge_list.is_coupons=='0'?'。':','}}</text>
<text wx:if="{{recharge_data.recharge_list.is_coupons=='1'}}">{{recharge_data.recharge_list.is_coupons=='1'?'赠送'+certificate:''}}。</text>
</view>
</view>
<view class="limitation">
<view class="limitationTitle font28r">有效期</view>
<view class="font24r">{{recharge_data.timeStr}}</view>
</view>
<view class="limitation">
<view class="limitationTitle font28r">备注</view>
<view class="font24r">{{recharge_data.explain}}</view>
</view>
<view class="rechargeBtn">
<view wx:if="{{hasValueRecharge && marketing.is_link=='1'}}" class="favouredPolicy">更多优惠</view>
<navigator url="/pack-activity/pack/vipRecharge?id={{recharge_data.id}}&name={{seller.name}}&sid={{seller.sid}}&oid={{detail.id}}&types=1&StyleType={{StyleType}}" hover-class="navigator-hover">
立即充值
</navigator>
</view>
</view>
<!-- 评价券 -->
<view class="regionItem certificateBox" wx:if="{{activeTitle == '3'}}">
<view class="limitationTitle font28r">期待您的声音,帮助我们持续改进</view>
<view class="preferentialItems" bindtap="evaluateFun">
<view class="certificateInfo">
<text class="discountText font20r">反馈有礼</text>
<view class="ticketName font36r">{{couponData.aname}}</view>
<text wx:if="{{couponData.exp_date.is_week=='1' || couponData.exp_date.is_week===true}}" class="limitation font24r">{{couponData.exp_date.week_show?couponData.exp_date.week_show+'可用':''}}{{couponData.desc?','+couponData.desc+'。':'。'}}</text>
<view wx:if="{{couponData.exp_date.is_none=='1' || couponData.exp_date.is_none===true}}" class="limitation font24r">
无限制{{couponData.desc?','+couponData.desc+'。':'。'}}
</view>
<view wx:if="{{couponData.exp_date.is_birthday=='1' || couponData.exp_date.is_birthday===true}}" class="limitation font24r">
会员生日当天可用{{couponData.desc?','+couponData.desc+'。':'。'}}
</view>
</view>
<view class="purchase font40r">
<view class="priceText" wx:if="{{couponData.price}}">
<view class="icons font40r">¥</view>{{couponData.price}}
</view>
<view class="font24r couponBtn">{{couponData.price=='0'?'免费领取':'立即领取'}}</view>
</view>
</view>
</view>
</view>
<view wx:if="{{bookType == '2' && roomimage && roomimage.length>0}}" class="{{roomimage.length=='1'?'pageSpacing':'pageSpacing1'}}">
<view wx:for="{{roomimage}}" class="imgs" wx:key="index" bindtap="previewImage" data-url="{{item.url}}">
<image class="imageStyle" mode="aspectFill" src="{{item.url}}"></image>
<text>{{item.name}}</text>
</view>
</view>
<block wx:if="{{bookType == '1'}}">
<!-- 停车指引 -->
<view class="publicModule" wx:if="{{reserve && (reserve.textInfo || reserve.videoImgsInfo.length>0)}}">
<view class="chefText font36r">
<view class="line"></view>
<view class="font36r chefTextInfo">停车指引</view>
<view class="line"></view>
</view>
<view class="labelBox" wx:if="{{reserve.textInfo}}">
<text class="texts font28r" space="nbsp">{{reserve.textInfo}}</text>
</view>
<swiper wx:if="{{reserve.videoImgsInfo.length>0}}" class="detailBanner" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{2000}}" circular="{{true}}" indicator-color="lightgray" indicator-active-color="#fff">
<swiper-item wx:for="{{reserve.videoImgsInfo}}" wx:key="index">
<video wx:if="{{item.type=='3'}}" class='boxBlock' id="video" src="{{item.content}}" show-center-play-btn="{{true}}" autoplay='{{false}}' object-fit="cover" controls="{{true}}"></video>
<image wx:if="{{item.type=='1'}}" mode="scaleToFill" class="detailBannerImg" src="{{item.content}}" bindtap="previewImage" data-url="{{item.content}}" data-imgs="{{reserve.imgsInfo}}"></image>
</swiper-item>
</swiper>
</view>
<!-- 招牌菜品 -->
<view class="publicModule" wx:if="{{signboard && (signboard.textInfo || signboard.videoImgsInfo.length>0 || (hasValueOrder && openOrder == '1' && marketing.is_order=='1'))}}">
<view class="chefText font36r">
<view class="line"></view>
<view class="font36r chefTextInfo">招牌菜品</view>
<view class="line"></view>
</view>
<view class="labelBox" wx:if="{{signboard.textInfo}}">
<text class="texts font28r" space="nbsp">{{signboard.textInfo}}</text>
</view>
<swiper wx:if="{{signboard.videoImgsInfo.length>0}}" class="detailBanner" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{2000}}" circular="{{true}}" indicator-color="lightgray" indicator-active-color="#fff">
<swiper-item wx:for="{{signboard.videoImgsInfo}}" wx:key="index">
<video wx:if="{{item.type=='3'}}" class='boxBlock' id="video" src="{{item.content}}" show-center-play-btn="{{true}}" autoplay='{{false}}' object-fit="cover" controls="{{true}}"></video>
<image wx:if="{{item.type=='1'}}" mode="aspectFit" class="detailBannerImg" src="{{item.content}}" bindtap="previewImage" data-url="{{item.content}}" data-imgs="{{signboard.imgsInfo}}"></image>
</swiper-item>
</swiper>
<view class="orderBox" wx:if="{{hasValueOrder && openOrder == '1' && marketing.is_order=='1'}}">
<view class="font32r">提前点餐 到店不用等</view>
<view wx:if="{{openOrder == '1' && marketing.is_order == '1'}}" bindtap="cookbook" class="font28r cook" style="position: relative;">
去点餐
</view>
</view>
</view>
<!-- 餐厅介绍 -->
<view class="publicModule" wx:if="{{store && (store.textInfo || store.videoImgsInfo.length>0)}}">
<view class="chefText font36r">
<view class="line"></view>
<view class="font36r chefTextInfo">餐厅介绍</view>
<view class="line"></view>
</view>
<view class="labelBox" wx:if="{{store.textInfo}}">
<text class="texts font28r" space="nbsp">{{store.textInfo}}</text>
</view>
<swiper wx:if="{{store.videoImgsInfo.length>0}}" class="detailBanner" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{2000}}" circular="{{true}}" indicator-color="lightgray" indicator-active-color="#fff">
<swiper-item wx:for="{{store.videoImgsInfo}}" wx:key="index">
<video wx:if="{{item.type=='3'}}" class='boxBlock' id="video" src="{{item.content}}" show-center-play-btn="{{true}}" autoplay='{{false}}' object-fit="cover" controls="{{true}}"></video>
<image wx:if="{{item.type=='1'}}" mode="aspectFit" class="detailBannerImg" src="{{item.content}}" bindtap="previewImage" data-url="{{item.content}}" data-imgs="{{store.imgsInfo}}"></image>
</swiper-item>
</swiper>
</view>
<!-- 主厨介绍 -->
<view class="publicModule" wx:if="{{chef && (chef.textInfo || chef.videoImgsInfo.length>0)}}">
<view class="chefText font36r">
<view class="line"></view>
<view class="font36r chefTextInfo">主厨介绍</view>
<view class="line"></view>
</view>
<view class="labelBox" wx:if="{{chef.textInfo}}">
<text class="texts font28r" space="nbsp">{{chef.textInfo}}</text>
</view>
<swiper wx:if="{{chef.videoImgsInfo.length>0}}" class="detailBanner" indicator-dots="{{true}}" autoplay="{{true}}" interval="{{2000}}" circular="{{true}}" indicator-color="lightgray" indicator-active-color="#fff">
<swiper-item wx:for="{{chef.videoImgsInfo}}" wx:key="index">
<video wx:if="{{item.type=='3'}}" class='boxBlock' id="video" src="{{item.content}}" show-center-play-btn="{{true}}" autoplay='{{false}}' object-fit="cover" controls="{{true}}"></video>
<image wx:if="{{item.type=='1'}}" mode="aspectFit" class="detailBannerImg" src="{{item.content}}" bindtap="previewImage" data-url="{{item.content}}" data-imgs="{{chef.imgsInfo}}"></image>
</swiper-item>
</swiper>
</view>
</block>
<block wx:if="{{bookType == '2'}}">
<!-- 餐厅介绍 -->
<view class="publicModule" id="module1" wx:if="{{marketing.logo || home.image || (store.textInfo || store.videoImgsInfo.length>0)}}">
<view class="titleBox">
<view class="titleLine"></view>
<view class="font32">餐厅介绍</view>
</view>
<image wx:if="{{marketing.logo}}" src="{{marketing.logo}}" bindtap="lookImgs" data-url="{{marketing.logo}}" mode="widthFix" />
<image wx:if="{{home.image}}" src="{{home.image}}" bindtap="lookImgs" data-url="{{home.image}}" class="homeImage" mode="widthFix"></image>
<view class="labelBox" wx:if="{{store.introduce && store.is_introduce == '1'}}">
<text space="nbsp" class="texts font28r">{{store.introduce}}</text>
</view>
<block wx:if="{{store.images.length>0 && (!store.is_images || store.is_images!='0')}}">
<block wx:for="{{store.images}}" wx:key="arryIndex" wx:for-index="arryIndex">
<image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{store.images}}" mode="widthFix" />
</block>
</block>
<view class="labelBox" wx:if="{{store.content && store.content.length>0}}">
<block wx:for="{{store.content}}">
<image wx:if="{{item.type == '1'}}" bindtap="lookImgs" src="{{item.content}}" data-url="{{item.content}}" mode="widthFix" />
<text wx:if="{{item.type == '2'}}" space="nbsp" class="texts font28r">{{item.content}}</text>
<view wx:if="{{item.type == '3'}}" class="videoBox">
<video object-fit="contain" autoplay="{{true}}" loop="{{true}}" muted="{{true}}" show-mute-btn="{{true}}" vslide-gesture-in-fullscreen="{{true}}" src="{{item.content}}"></video>
</view>
</block>
</view>
</view>
<!-- 招牌菜品 -->
<view class="publicModule" id="module2" wx:if="{{signboard && (signboard.textInfo || signboard.videoImgsInfo.length>0)}}">
<view class="titleBox">
<view class="titleLine"></view>
<view class="font32">招牌菜品</view>
</view>
<block wx:for="{{signboard.images}}" wx:key="arryIndex" wx:for-index="arryIndex">
<image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{signboard.images}}" mode="widthFix" />
</block>
<view class="labelBox" wx:if="{{signboard.content && signboard.content.length>0}}">
<block wx:for="{{signboard.content}}">
<image wx:if="{{item.type == '1'}}" bindtap="lookImgs" src="{{item.content}}" data-url="{{item.content}}" mode="widthFix" />
<text wx:if="{{item.type == '2'}}" space="nbsp" class="texts font28r">{{item.content}}</text>
<view wx:if="{{item.type == '3'}}" class="videoBox">
<video object-fit="contain" autoplay="{{true}}" loop="{{true}}" muted="{{true}}" show-mute-btn="{{true}}" vslide-gesture-in-fullscreen="{{true}}" src="{{item.content}}"></video>
</view>
</block>
</view>
</view>
<!-- 停车指引 -->
<view class="publicModule" id="module3" wx:if="{{reserve && (reserve.textInfo || reserve.videoImgsInfo.length>0)}}">
<view class="titleBox">
<view class="titleLine"></view>
<view class="font32">停车指引</view>
</view>
<view class="labelBox" wx:if="{{reserve.park_info}}">
<text class="texts" space="nbsp">{{reserve.park_info}}</text>
</view>
<block wx:for="{{reserve.park_info_images}}" wx:key="arryIndex" wx:for-index="arryIndex">
<image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{reserve.park_info_images}}" mode="widthFix" />
</block>
<view class="labelBox" wx:if="{{reserve.content && reserve.content.length>0}}">
<block wx:for="{{reserve.content}}">
<image wx:if="{{item.type == '1'}}" bindtap="lookImgs" src="{{item.content}}" data-url="{{item.content}}" mode="widthFix" />
<text wx:if="{{item.type == '2'}}" space="nbsp" class="texts font28r">{{item.content}}</text>
<view wx:if="{{item.type == '3'}}" class="videoBox">
<video object-fit="contain" autoplay="{{true}}" loop="{{true}}" muted="{{true}}" show-mute-btn="{{true}}" vslide-gesture-in-fullscreen="{{true}}" src="{{item.content}}"></video>
</view>
</block>
</view>
</view>
<!-- 主厨介绍 -->
<view class="publicModule" wx:if="{{chef && (chef.textInfo || chef.videoImgsInfo.length>0)}}">
<view class="titleBox">
<view class="titleLine"></view>
<view class="font32">主厨介绍</view>
</view>
<view class="labelBox" wx:if="{{(chef.introduce && (!chef.is_introduce || chef.is_introduce!='0'))}}">
<text class="texts" space="nbsp">{{chef.introduce}}</text>
</view>
<image wx:if="{{(!chef.is_images || chef.is_images!='0') && chef.image}}" src="{{chef.image}}" bindtap="lookImgs" data-url="{{chef.image}}" mode="widthFix" />
<view class="labelBox" wx:if="{{chef.content && chef.content.length>0}}">
<block wx:for="{{chef.content}}">
<image wx:if="{{item.type == '1'}}" bindtap="lookImgs" src="{{item.content}}" data-url="{{item.content}}" mode="widthFix" />
<text wx:if="{{item.type == '2'}}" space="nbsp" class="texts font28r">{{item.content}}</text>
<view wx:if="{{item.type == '3'}}" class="videoBox">
<video object-fit="contain" autoplay="{{true}}" loop="{{true}}" muted="{{true}}" show-mute-btn="{{true}}" vslide-gesture-in-fullscreen="{{true}}" src="{{item.content}}"></video>
</view>
</block>
</view>
</view>
</block>
<view class="businessBox font24r">
周到安排提供技术支持<text bindtap="call" data-phone="4000009690">4000009690</text>,餐厅入驻请点击
<view bindtap="gotoJoinSeller" style="text-decoration: underline;">这里</view>
</view>
<view class="{{(!marketing || (marketing.is_transpond!='1' && marketing.is_online_book!='1'))?'more more1':'more'}}" wx:if="{{showMoreTip}}">
<view class="moreText">滑动查看更多</view>
<image src="https://qn.colorcun.com/jt1.png" mode="" />
</view>
<view class="toastBox" wx:if="{{toastBool}}">
{{toastText}}
</view>
<!-- (开启在线预订 显示在线预订) || (未开启在线预订 显示再次预订(打商家电话)) -->
<!-- (未结束&&未取消 && 开启转发开关 显示 转发邀请函给客人) || (过了当前餐段结束时间||用餐完成||已取消 显示 转发店铺给好友) -->
<view wx:if="{{isMoreBtn || options.isOrder == '1' || (!isMoreBtn && seller.phone) || (detail.status !='4' && isPaymenBtn) || (detail.status !='4' && isShareItem)}}" class="flex-lr sharewidth">
<view wx:if="{{isMoreBtn}}" class="flex-cc font30r moreBtn {{((detail.status !='4' && isPaymenBtn) && ((detail.status !='4' && isShareItem) || options.isOrder == '1')) ? 'threeBtn' : ''}}" bindtap="secondbook">再次预订</view>
<view wx:if="{{!isMoreBtn && seller.phone}}" class="flex-cc font30r moreBtn {{((detail.status !='4' && isPaymenBtn) && ((detail.status !='4' && isShareItem) || options.isOrder == '1')) ? 'threeBtn' : ''}}" bindtap="call" data-phone="{{seller.phone}}">再次预订</view>
<view wx:if="{{detail.status !='4' && isPaymenBtn}}" class="flex-cc font30r paymenBtn {{((isMoreBtn || (!isMoreBtn && seller.phone)) && ((detail.status !='4' && isShareItem) || options.isOrder == '1')) ? 'threeBtn' : ''}}" bindtap="paymentFun">支付定金</view>
<button wx:if="{{detail.status !='4' && isShareItem}}" class="flex-cc font30r shareItem" open-type="share">转发邀请函给客人</button>
<button wx:if="{{options.isOrder == '1'}}" class="flex-cc font30r shareItem" data-type="2" open-type="share">转发店铺给好友</button>
</view>
</scroll-view>
<painter palette="{{wxml}}" style="position: absolute; top: -9999rpx;" bind:imgOK="onImgOK" />
<my-modal id="payModal" fadeStyle="slideUp" height="240px">
<view slot="modalName" class="titleModal">提示</view>
<view slot="modalContent">
<view class="explain">
检测到您正在截屏,建议直接把邀请函转发给朋友更有仪式感哦!
</view>
<view class="screenshotBtns">
<button class="font32r btnsLeft" bindtap="closeModal">关闭弹窗</button>
<button wx:if="{{detail.status !='4' && options.isOrder != '1' && marketing.is_transpond=='1' && imgSrc}}" class="flex-cc font30r btnsRight" open-type="share">立即转发</button>
</view>
</view>
</my-modal>
\ No newline at end of file
... ...
/* pack-invitation/pages/detail_owner_invitation11.wxss */
@import "../../pages/tpl/tpls.wxss";
@font-face {
font-family: 'Abel';
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE2V9BPQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
.viewBox1 .reservationInfo {
background: url('https://qn.colorcun.com/invitation11Bg1.png') no-repeat;
padding: 220rpx 20rpx 24rpx;
box-sizing: border-box;
position: relative;
color: #000;
background-size: cover;
}
.infoTop {
color: #FFEFC5;
font-weight: 600;
font-family: PingFang SC;
margin-bottom: 32rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.infoTop .infoTopText3 {
margin-top: 14rpx;
margin: 16rpx 0 32rpx 0;
}
.infoTopBj2 {
width: 560rpx;
height: 188rpx;
}
.informationBox {
border-radius: 10rpx;
background: #FFEFD6;
padding: 40rpx 32rpx;
}
.infoItem {
display: flex;
display: flex;
line-height: 70rpx;
font-family: PingFang SC;
align-items: baseline;
}
.addressInfo,
.addressInfo .arrivalBox {
align-items: baseline;
}
.infoItem .record {
font-weight: 400;
flex-shrink: 0;
font-family: PingFang SC;
color: #AE2D2D;
}
.positioning {
display: block;
font-size: 24rpx;
height: 50rpx;
padding: 0 34rpx;
line-height: 48rpx;
font-family: PingFang SC;
border-radius: 40rpx;
background: transparent;
color: #fff;
background: #AE2D2D;
}
.addressImg {
width: 16rpx;
height: 16rpx;
}
.welcomeInfo {
text-align: center;
color: #AE2D2D;
margin-top: 24rpx;
display: block;
}
.contentData {
flex: 1;
line-height: 60rpx;
font-family: PingFang SC;
margin-left: 24rpx;
font-weight: 600;
color: #AE2D2D;
}
.contentDataPhone {
color: #637FE3;
text-decoration-line: underline;
}
.divider {
color: #637FE3;
margin: 0 10rpx;
}
.bookData {
margin-left: 0;
font-weight: 400;
}
.marLeft {
margin-left: 10rpx;
}
.receptionBox {
margin: 0 20rpx;
display: flex;
align-items: center;
border-radius: 10rpx;
background: #FFEFD6;
box-shadow: 0rpx 4rpx 8rpx #00000040;
color: #AE2D2D;
padding: 56rpx 58rpx 60rpx 72rpx;
}
.headerimg {
width: 108rpx;
height: 108rpx;
border-radius: 50%;
}
.peopleInfo {
display: flex;
flex-direction: column;
align-items: center;
}
.peopleInfo view:nth-of-type(1) {
margin-top: 10rpx;
}
.peopleInfo view {
font-family: "PingFang SC";
font-weight: 400;
}
.handleInfo {
margin-left: 42rpx;
font-family: "PingFang SC";
font-weight: 400;
}
.handleInfo view {
font-weight: 400;
letter-spacing: 10rpx;
}
.handleInfo view:nth-of-type(1) {
font-weight: 600;
}
.handleInfo .texts {
margin: 22rpx 0;
letter-spacing: 3rpx;
line-height: 36rpx
}
.contactBtns {
display: flex;
justify-content: space-between;
}
.brownFont {
width: 46%;
background: #AE2D2D;
color: #fff;
padding: 10rpx 0;
border-radius: 22rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0rpx 4rpx 8rpx #00000040;
}
.brownFont image {
width: 24rpx;
height: 24rpx;
margin-right: 10rpx;
}
.tileBox {
display: flex;
align-items: center;
justify-content: space-evenly;
width: 100%;
padding: 40rpx 0 32rpx 0;
}
.titleItem {
font-weight: 400;
background: #FFEFD6;
color: #000;
padding: 10rpx 16rpx;
}
.activeTitleItem::after {
content: "";
position: absolute;
bottom: -30%;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 20rpx solid transparent;
border-right: 20rpx solid transparent;
border-top: 20rpx solid #ae2d2d;
}
.activeTitleItem {
position: relative;
background: #ae2d2d;
color: #fff;
}
.publicModule {
margin: 20rpx;
padding: 40rpx 20rpx;
background: #fff;
border-radius: 20rpx 20rpx 0rpx 0rpx;
display: flex;
align-items: center;
flex-direction: column;
}
.chefText {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.chefText .line {
min-width: 35%;
height: 2rpx;
background: #AE2D2D;
}
.chefTextInfo {
font-family: PingFang SC;
font-weight: 400;
letter-spacing: 8rpx;
color: #AE2D2D;
}
.preferentialCoupon {
padding: 0;
}
.regionItem {
width: 100%;
padding: 40rpx 40rpx 0 40rpx;
box-sizing: border-box;
background: #EFEFEF;
}
.preferentialCoupon navigator {
width: 100%;
}
.preferentialItems {
width: 100%;
display: flex;
margin-bottom: 20rpx;
min-height: 160rpx;
padding-bottom: 10rpx;
}
.purchase {
width: 30%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #FFEFD6;
border-radius: 10rpx;
}
.discountText {
text-align: center;
color: #FFEFC5;
border-radius: 6rpx;
font-family: PingFang SC;
background: #FD4D59;
width: max-content;
padding: 6rpx;
position: absolute;
left: 16rpx;
top: 12rpx;
}
.priceText {
font-family: PingFang SC;
color: #FD4D59;
font-weight: 500;
margin-top: 6rpx;
display: flex;
align-items: center;
justify-content: center;
}
.priceText .icons {
font-family: PingFang SC;
color: #FD4D59;
}
.certificateInfo {
width: 70%;
padding: 40rpx 10rpx 20rpx 28rpx;
position: relative;
background: #fff;
border-radius: 10rpx;
display: flex;
flex-direction: column;
justify-content: center;
}
.certificateInfo .limitation {
line-height: 38rpx;
}
.ticketName {
margin: 20rpx 20rpx 0 0;
display: flex;
justify-content: space-between;
align-items: baseline;
font-weight: 700;
}
.orderingFood {
padding: 0 20rpx;
border-radius: 22rpx;
text-align: center;
color: #000;
border-radius: 20rpx;
line-height: 44rpx;
height: 44rpx;
background: #fff;
border: 2rpx solid #fff;
width: max-content;
margin-top: 24rpx;
flex-shrink: 0;
}
.limitation {
margin-top: 10rpx;
width: 100%;
color: #666;
font-family: PingFang SC;
font-weight: 500;
display: -webkit-box;
word-break: break-all;
word-wrap: break-word;
overflow: hidden;
text-align: left;
line-height: 30rpx;
}
.regionItem .limitation {
display: flex;
flex-direction: column;
}
.limitationTitle {
font-weight: 400;
line-height: 28rpx;
color: #000;
line-height: 40rpx;
margin: 40rpx 0 20rpx 0;
}
.certificateBox .limitationTitle {
text-align: center;
margin-top: 0;
}
.rechargeItems {
display: flex;
min-height: 160rpx;
border-radius: 20rpx;
border: 2rpx solid #000000;
position: relative;
padding: 20rpx 40rpx;
flex-direction: column;
justify-content: center;
background: #fff;
width: 35%;
}
.checkImg {
position: absolute;
bottom: 0;
right: 20rpx;
width: 32rpx !important;
height: 32rpx;
}
.rechargeTitle {
font-family: PingFang SC;
font-weight: 700;
letter-spacing: 4rpx;
font-size: 68rpx;
text-align: center;
}
.couponBtn {
width: 70%;
padding: 6rpx 0;
background: #AE2D2D;
color: #fff;
border-radius: 42rpx;
text-align: center;
margin-top: 24rpx;
}
.rechargeBtn {
display: flex;
align-items: center;
justify-content: space-between;
margin: 24rpx 0;
}
.rechargeBtn .favouredPolicy {
width: 30%;
padding: 12rpx 0;
border: 2rpx solid #AE2D2D;
border-radius: 42rpx;
color: #AE2D2D;
text-align: center;
}
.rechargeBtn navigator {
width: 63%;
padding: 12rpx 0;
background: #AE2D2D;
border-radius: 42rpx;
color: #fff;
text-align: center;
}
.labelBox {
width: 100%;
margin-top: 20rpx;
}
.labelBox .texts {
line-height: 40rpx;
color: #222;
font-family: PingFang SC;
font-weight: 500;
display: block;
margin-bottom: 20rpx;
}
.orderBox {
background: url('https://qn.colorcun.com/invitation11Dc1.png') no-repeat;
background-size: cover;
border-radius: 10rpx;
color: #fff;
padding: 26rpx 40rpx;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
width: 100%;
margin-top: 20rpx;
}
.cook {
border-radius: 24rpx;
background: #fff;
color: #AE2D2D;
padding: 4rpx 36rpx;
}
.detailBanner {
width: 100%;
height: 500rpx;
background: transparent;
}
.detailBannerImg {
width: 100%;
height: 100%;
border-radius: 10rpx;
}
.boxBlock {
width: 100%;
height: 500rpx;
}
.businessBox {
color: #fff;
font-family: PingFang SC;
display: flex;
justify-content: center;
align-items: center;
margin-top: 50rpx;
margin-bottom: 220rpx;
}
.businessBox text {
text-decoration: underline;
}
.sharewidth {
position: fixed;
left: 0;
bottom: 0;
height: 160rpx;
padding: 0 40rpx;
box-sizing: border-box;
z-index: 100;
justify-content: space-between;
width: 100%;
background: #fff;
}
.arrivalBox {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
}
.arrivalBox button {
display: flex;
font-size: 24rpx;
flex-direction: column;
height: 50rpx;
padding: 0 18rpx;
line-height: 48rpx;
font-family: PingFang SC;
border-radius: 40rpx;
background: transparent;
color: #AE2D2D;
border: 2rpx solid #AE2D2D;
}
.shareItem,
.moreBtn,
.paymenBtn {
width: inherit;
background: transparent;
color: #ae2d2d;
border: 2rpx solid #ae2d2d;
height: 80rpx;
border-radius: 42rpx;
font-weight: 600;
margin-right: 20rpx;
}
.threeBtn {
width: auto;
padding: 0 24rpx;
flex-shrink: 0;
}
.shareItem {
margin-right: 0;
background: #ae2d2d;
color: #fff;
animation-name: scaleDraw;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 2s;
}
@keyframes scaleDraw {
0% {
transform: scale(1);
}
25% {
transform: scale(1.1);
}
50% {
transform: scale(1);
}
75% {
transform: scale(1.1);
}
}
.more {
height: 80rpx;
width: 100%;
position: fixed;
bottom: 160rpx;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background: rgba(0, 0, 0, .4);
}
.more1 {
bottom: 40rpx;
}
.moreText {
color: #fff;
}
.more image {
width: 30rpx;
height: 30rpx;
}
.musicImg {
width: 62rpx;
height: 62rpx;
position: fixed !important;
right: 8%;
top: 22%;
z-index: 200;
}
.giftImg {
width: 108rpx;
height: 108rpx;
position: fixed !important;
right: 5%;
top: 33%;
z-index: 200;
}
.cannotImg {
width: 200rpx;
height: 66rpx;
transform: rotate(-45deg);
position: fixed;
left: 38%;
z-index: 999;
top: 50%;
}
#payModal {
display: flex;
align-items: center;
}
.titleModal {
width: 100%;
margin-top: 48rpx;
color: #000;
font-family: PingFang SC;
font-weight: 500;
font-size: 44rpx;
text-align: center;
}
.explain {
padding: 0 40rpx;
font-size: 30rpx;
color: #000;
line-height: 40rpx;
text-align: center;
}
.screenshotBtns {
width: 100%;
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding: 52rpx 22rpx 0 22rpx;
}
.btnsLeft {
width: 43%;
border-radius: 42rpx;
background: #fff;
border: 2rpx solid #0346A5;
bottom: 10%;
color: #0346A5;
}
.btnsRight {
width: 43%;
border-radius: 42rpx;
background: linear-gradient(104.24deg, #4c8dad -57.47%, #0143a3 55.72%, #42a5ff 148.72%);
bottom: 10%;
color: #fff;
}
.mymodal {
top: 30% !important;
width: 80% !important;
margin: 0 auto !important;
left: 0 !important;
right: 0 !important;
z-index: 250;
}
.mymodal .mymodal-content {
height: auto !important;
}
.viewBox1 {
background: #811a1f;
}
/* 商务宴会 */
.viewBox2 {
background: #fff;
}
.viewBox2 .reservationInfo {
background: url('https://qn.colorcun.com/invitation12Bj.png') no-repeat;
padding: 220rpx 20rpx 120rpx;
box-sizing: border-box;
position: relative;
color: #000;
background-size: cover;
}
.viewBox2 .infoTopText1 {
font-size: 60rpx;
font-family: Sinter;
line-height: 60rpx;
letter-spacing: 14rpx;
font-weight: 500;
margin-bottom: 40rpx;
}
.viewBox2 .infoTopText4 {
font-size: 100rpx;
line-height: 100rpx;
letter-spacing: 20rpx;
}
.viewBox2 .informationBox {
background: transparent;
padding: 40rpx 0;
position: relative;
}
.viewBox2 .contentData,
.viewBox2 .infoItem .record {
color: #fff;
}
.viewBox2 .contentDataPhone {
color: #35E084;
}
.viewBox2 .arrivalBox button {
color: #fff;
border: 2rpx solid #fff;
}
.viewBox2 .positioning {
background: #E8CEA8;
color: #000;
}
.viewBox2 .receptionBox {
position: absolute;
bottom: -160rpx;
background: #fff;
color: #000;
width: -webkit-fill-available;
}
.viewBox2 .brownFont {
background: #E8CEA8;
color: #000;
}
.viewBox2 .reservationInfoBox {
position: relative;
}
.viewBox2 .preferentialCoupon {
margin: 140rpx 0 0 0;
padding-top: 40rpx;
}
.viewBox2 .tileBox {
background: #F0F0F0;
}
.viewBox2 .regionItem {
background: #fff;
}
.viewBox2 .activeTitleItem {
background: #242424;
}
.viewBox2 .activeTitleItem::after {
border-top: 20rpx solid #242424;
}
.viewBox2 .favouredPolicy {
border: 2rpx solid #000000;
color: #000;
}
.viewBox2 .rechargeBtn navigator {
background: #E8CEA8;
color: #000;
}
.viewBox2 .couponBtn {
background: #000;
color: #FFEFD6;
}
.viewBox2 .shareItem,
.viewBox2 .moreBtn,
.viewBox2 .paymenBtn {
color: #000;
border: 2rpx solid #000;
}
.viewBox2 .shareItem {
background: #E8CEA8;
border: none;
}
.viewBox2 .pageSpacing {
position: relative;
display: flex;
justify-content: center;
align-items: center;
white-space: nowrap;
width: auto;
overflow-x: scroll;
border-bottom-left-radius: 10rpx;
border-bottom-right-radius: 10rpx;
}
.viewBox2 .pageSpacing1 {
position: relative;
display: flex;
white-space: nowrap;
width: auto;
overflow-x: scroll;
border-bottom-left-radius: 10rpx;
border-bottom-right-radius: 10rpx;
padding-left: 20rpx;
}
.viewBox2 .imgs {
position: relative;
display: flex;
white-space: nowrap;
width: 640rpx;
height: 480rpx;
margin-right: 30rpx;
}
.viewBox2 .imgs text {
background: #515151;
color: #fff;
position: absolute;
left: 0;
bottom: 0;
height: 64rpx;
line-height: 64rpx;
width: 640rpx;
text-align: center;
border-bottom-left-radius: 16rpx;
border-bottom-right-radius: 16rpx;
}
.viewBox2 .imageStyle {
display: inline-block;
width: 640rpx;
height: 480rpx;
border-radius: 16rpx;
}
.viewBox2 .titleLine {
width: 8rpx;
height: 36rpx;
background: #000;
margin-right: 24rpx;
}
.viewBox2 .titleBox {
display: flex;
align-items: center;
margin: 0 24rpx 40rpx 0;
}
.viewBox2 .publicModule {
align-items: flex-start;
padding-bottom: 0;
}
.viewBox2 .publicModule image,
.viewBox2 .labelBox .texts {
margin-bottom: 40rpx;
width: 100%;
}
.viewBox2 .businessBox {
margin-top: 30rpx;
}
.viewBox2 .videoBox {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.viewBox2 .videoBox video {
width: 100%;
box-sizing: border-box;
}
.viewBox2 .businessBox {
color: #000;
}
.viewBox2 .entrance {
display: flex;
flex-direction: column;
position: absolute;
right: 3%;
top: -17%;
z-index: 200;
}
.viewBox2 .entrance1 {
top: -35%;
}
.viewBox2 .entrance image {
width: 52rpx;
height: 52rpx;
}
.viewBox2 .entranceItem {
display: flex;
flex-direction: column;
align-items: center;
color: #FFF7DA;
margin-bottom: 32rpx;
}
.viewBox2 .entranceItem:nth-last-of-type(1) {
margin-bottom: 0;
}
.viewBox2 .musicImg {
top: 14%;
}
.viewBox2 .infoItem {
margin-right: 160rpx;
}
.viewBox2 .addressInfo,
.viewBox2 .infoRight {
margin-right: 0;
}
.viewBox2 .giftImg {
left: 2%;
top: 27%;
}
\ No newline at end of file
... ...