Commit 47afa499af21bf37582a248d9b2de3c9f9ee0f70

Authored by pengye
1 parent 56f5feef

模板18充值有效期显示处理

... ... @@ -68,7 +68,8 @@
"pages/customer/login",
"pages/me/consumeAmount",
"pages/me/consumeDetails",
"pages/me/myBalance"
"pages/me/myBalance",
"pages/customer/aiBook"
],
"requiredPrivateInfos": [
"getLocation",
... ... @@ -175,7 +176,8 @@
"pages/detail_owner_invitation10",
"pages/detail_owner_invitation11",
"pages/detail_owner_invitation12",
"pages/detail_owner_invitation13"
"pages/detail_owner_invitation13",
"pages/detail_owner_invitation14"
]
}
],
... ... @@ -227,6 +229,9 @@
"scope.userLocation": {
"desc": "你的位置信息用于获得离你最近的餐厅"
},
"scope.record": {
"desc": "用于按住说话,把语音转成文字"
},
"scope.https://tts.baidu.com/*": {
"desc": "你的应用需要获取语音合成的权限"
}
... ...
... ... @@ -129,7 +129,7 @@ Page({
recharge_data.forEach(item => {
item.recharge_list = item.recharge_list ? JSON.parse(item.recharge_list) : '';
let recharge_list = item.recharge_list;
item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD')
item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
})
// 筛选出 未过期的 && 开启状态的充值活动
recharge_data = recharge_data.filter(item => {
... ...
... ... @@ -505,7 +505,7 @@ Page({
if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD')
item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
})
// 筛选出 未过期的 && 开启状态的充值活动
recharge_data = recharge_data.filter(item => {
... ...
... ... @@ -294,7 +294,7 @@
<text wx:if="{{activeData.recharge_list.is_coupons=='1'}}">{{activeData.recharge_list.is_coupons=='1'?'赠送'+activeData.certificate:''}}。</text>
</view>
</view>
<view class="limitation">
<view class="limitation" wx:if="{{activeData.timeStr}}">
<view class="limitationTitle font32r">有效期</view>
<view class="font28r">{{activeData.timeStr}}</view>
</view>
... ...
... ... @@ -505,7 +505,7 @@ Page({
if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD')
item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
})
// 筛选出 未过期的 && 开启状态的充值活动
recharge_data = recharge_data.filter(item => {
... ...
// pack-invitation/pages/detail_owner_invitation14.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'
import inviteBase from '../common/inviteBase';
import convertSolarLunar from '../../components/calendar/func/convertSolarLunar';
/** 用餐日期:2027-02-14 星期六 正月初七 */
function formatInviteDate(ddate) {
if (!ddate) return '';
const datePart = util.unixtoTime(ddate, 'YYYY-MM-DD');
const weekPart = util.unixtoTime(ddate, '星期WW');
const time = new Date(ddate * 1000);
const lunar = convertSolarLunar.solar2lunar(
time.getFullYear(),
time.getMonth() + 1,
time.getDate()
);
if (!lunar || lunar === -1) {
return `${datePart} ${weekPart}`;
}
return `${datePart} ${weekPart} ${lunar.IMonthCn}${lunar.IDayCn}`;
}
Page({
...inviteBase,
/**
* 页面的初始数据
*/
data: {
barShow: false, //底部操作栏是否显示
showMoreOnline: false, //再次预订-在线
showMoreCall: false, //再次预订-电话
canPay: false, //支付定金
canShare: false, //转发邀请函
isOver: false, //已结束/完成
isOwner: false, //商家(发起人)视角
canMeet: false, //客人可确认赴约
needLogin: true, //确认赴约需先登录/授权
guestShareCls: 'shareItem shareItem1', //客人转发按钮样式
threeBtnMore: '', //3按钮布局(在线再次预订)
threeBtnCall: '', //3按钮布局(电话再次预订)
threeBtnPay: '', //3按钮布局(支付定金)
themeImg: '',
heroBottomStripImage: '',
heroHeightPx: 410,
contentStartPx: 350,
windowHeight: 667,
canChangeBg: '0', // 模拟:1可换/存背景图,0不可
customThemeImg: '', // 用户本地更换的背景图
savedBgImageUrl: '', // 已保存到七牛的地址
bgSaved: false, // 当前预订是否已保存过背景图
themeColor: 'pearlWhite',
pageThemeClass: 'pagewhite',
entranceIcon: 1,
actionIcon: 1,
titleObj: {}, //大标题:色/号可配;书法仅固定文案「预订安排|邀请函」
shopObj: {}, //店名:色/号可配;字体由样式固定(不可换字体)
titleCls: '', //大标题字体/字号 class
shopCls: '', //店名字体/字号/换行 class
titleStyle: '', //大标题内联色
shopStyle: '', //店名内联色
StyleTypeNum: 1, //样式1234
isCustom: '0', // 1自定义白字,0主题色
options: {
tplid: ''
},
detail: {},
staffinfo: {},
chef: {},
marketing: {},
home: {},
reserve: {},
signboard: {},
store: {},
recharge_data: [],
coupon_dataList: [],
seller: {
name: '',
tablesText: '',
date: '',
addr: ''
},
contactPhone: '',
dataStr: Date.now() * 1 / 1000,
swich_phone: '0',
is_comments: '0',
is_user_comments: false,
roomimage: [],
StyleType: '',
showMoreTip: true,
hasValueOrder: false, //商家是否开通提前点餐功能
hasValueCertificate: false, //商家是否开通优惠券功能
hasValueRecharge: false, //商家是否开通充值功能
_attentionAnim: {},
isPlay: '1',
paymentStatus: '', //定金支付状态 1支付 0未支付
reserveData: {}, //自定义图文数据
showMerchantSpeak: false, // 商家有话说(自定义图文/餐厅/菜品/主厨任一有内容)
toastBool: false, //支付定金提示框
toastText: '', //支付定金提示文字
paymentId: '', //定金id
wxml: null,
imgSrc: '', //canvas图片地址
couponData: '', //评价赠送优惠券数据
timeList: [],
index: 0,
isMany: '0', //0默认餐段 1多时段
temp_ddate: '', //展示的到店时间
lite_style: '', //小程序转发卡片样式
isMoreBtn: '', //再次预订按钮
isPaymenBtn: '', //支付定金按钮
isShareItem: '', //转发客人按钮
couponArr: [], //待领取的优惠券列表
couponList: [], //优惠券列表
urlsArr: [], //包间预览图片
animationData: {},
animationData2: {},
isShow: '0',
isFrame: '0',
isShowBtn: true, //是否展示赴约按钮
purePhoneNumber: '', //当前人手机号
wxNickname: '', //微信昵称
wxAvatar: '', //微信头像
reserveOpenid: '', //预订人的openid
openid: getApp().openid,
customersList: [], //预订人
countDown: 5, //5秒后自动关闭弹框
timer: null,
},
tablestr: '',
screenHeight: '',
attentionAnim: {},
audioCtx: '', //播报
timers: null, // 动画定时器
n: 0,
modal: '',
couponModal: '',
give_user: '',
one: '0', //在邀请函页面,只弹领券框一次
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.id = options.id
let param = {
options: options,
hasOwner: options.hasSellerShare == 1, //是否为发起人
}
param.tpls = [TP.tpls(options.tplid)]
console.log(param);
console.log(options);
this.setData(param)
mta.Page.init({
"appID": "500667280",
"eventID": "500667287",
"statPullDownFresh": true,
"statShareApp": true,
"statReachBottom": true,
"lauchOpts": options, //渠道分析
});
this.calculateLayout();
const systemInfo = wx.getSystemInfoSync();
this.screenHeight = systemInfo.windowHeight; // 获取屏幕高度
this.setData({
windowHeight: systemInfo.windowHeight || 667,
});
this.modal = this.selectComponent("#payModal"); //通过给组件所起的id调用组件
this._onUserCaptureScreen = () => {
this.modal && this.modal.showModal();
};
wx.onUserCaptureScreen(this._onUserCaptureScreen);
this.couponModal = this.selectComponent("#couponModal");
this.loadLocalFonts();
},
/**
* 外部字体:https ttf(downloadFile 合法域名需含 nosqn.colorcun.com)
*/
loadLocalFonts() {
// 标题用三套 7 字极小包;店名走系统字体,不加载大字库
const fonts = [{
family: 'Noto Serif SC',
url: 'https://nosqn.colorcun.com/NotoSerif_title.ttf',
weight: 700,
},
{
family: 'Noto Sans SC',
url: 'https://nosqn.colorcun.com/NotoSans_title.ttf',
weight: 700,
},
{
family: 'XuanZongTi',
url: 'https://nosqn.colorcun.com/xinkaiti_title.ttf',
weight: 400,
},
];
fonts.forEach((item) => {
wx.loadFontFace({
family: item.family,
global: true,
source: `url("${item.url}")`,
scopes: ['webview', 'native'],
desc: {
style: 'normal',
weight: String(item.weight),
},
success: () => console.log('font ok', item.family),
fail: (err) => console.warn('font skip', item.family, err && err.errMsg),
});
});
},
/** 大标题是否为固定文案(预订安排 / 邀请函);空则按兜底算固定 */
isFixedTitleText(text) {
const t = (text == null ? '' : String(text)).trim();
return !t || t === '预订安排' || t === '邀请函';
},
/** 按样式解析标题/店名 class 与内联色 */
buildTitleShopStyle(StyleTypeNum, titleObj, shopObj) {
titleObj = titleObj || {};
shopObj = shopObj || {};
const styleNum = String(StyleTypeNum || '1');
const shopText = shopObj.textInfo || this.data.seller.name || (this.data.reserve && this.data.reserve.seller_name) || '';
let titleCls = '';
let shopCls = '';
let titleStyle = '';
let shopStyle = '';
// 店名:各样式固定字体族,可换字号/颜色;忽略 shopObj.textFont
if (styleNum === '4') {
shopCls = 'shopFontPing';
} else {
shopCls = 'shopFont1'; // 样式1/2/3 黑体
}
if (shopObj.textFontSize) shopCls = (shopCls + ' shopSize' + shopObj.textFontSize).trim();
if (shopObj.textFontSize == '1' && shopText.length > 11) shopCls = (shopCls + ' shopWrap').trim();
if (shopObj.textColor) shopStyle = 'color:' + shopObj.textColor;
// 标题:样式2无标题;样式3/4 固定宋体;样式1 可配字体(自定义文案禁用书法)
if (styleNum === '2') {
return {
titleCls: '',
shopCls,
titleStyle: '',
shopStyle
};
}
if (styleNum === '3' || styleNum === '4') {
titleCls = 'titleFont2';
if (titleObj.textFontSize) titleCls = (titleCls + ' titleSize' + titleObj.textFontSize).trim();
if (titleObj.textColor) titleStyle = 'color:' + titleObj.textColor + ';-webkit-text-fill-color:' + titleObj.textColor + ';background-image:none;';
return {
titleCls,
shopCls,
titleStyle,
shopStyle
};
}
// 样式1
const fixedTitle = this.isFixedTitleText(titleObj.textInfo);
let fontKey = titleObj.textFont ? String(titleObj.textFont) : '';
if (fontKey === '3' && !fixedTitle) fontKey = '2'; // 自定义文案 → 默认宋体
if (fontKey === '1' || fontKey === '2' || fontKey === '3') titleCls = 'titleFont' + fontKey;
if (titleObj.textFontSize) titleCls = (titleCls + ' titleSize' + titleObj.textFontSize).trim();
if (titleObj.textColor) titleStyle = 'color:' + titleObj.textColor + ';-webkit-text-fill-color:' + titleObj.textColor + ';background-image:none;';
return {
titleCls,
shopCls,
titleStyle,
shopStyle
};
},
calculateLayout() {
const info = wx.getWindowInfo ? wx.getWindowInfo() : wx.getSystemInfoSync();
const width = info.windowWidth || 375;
const heroHeightPx = Math.round(width * 1.08);
this.setData({
heroHeightPx,
contentStartPx: Math.round(width * 0.92),
windowHeight: info.windowHeight || 667,
});
},
// 主题图候选:自定义图 → 包间首图 → 餐厅首图 → 门头照
getThemeImgCandidates() {
const roomimage = this.data.roomimage;
const home = this.data.home;
const marketing = this.data.marketing;
const list = [];
if (this.data.customThemeImg) list.push(this.data.customThemeImg);
const roomFirst = roomimage && roomimage.length > 0 && roomimage[0] && roomimage[0].url;
if (roomFirst) list.push(roomFirst);
if (home && home.image) list.push(home.image);
if (marketing && marketing.logo) list.push(marketing.logo);
return list.filter((url, i) => url && list.indexOf(url) === i);
},
resolveThemeImg() {
const failed = this._failedThemeImgs || {};
let themeImg = this.getThemeImgCandidates().find(url => !failed[url]) || '';
if (!themeImg) {
themeImg = 'https://qn.colorcun.com/testImg/img4.png';
}
if (themeImg !== this.data.themeImg) {
this.setData({
themeImg
});
}
return themeImg;
},
// 换照片:选本地图直接设为背景(与现有主题图/模糊底逻辑一致)
onChangeBgPhoto() {
if (this.data.bgSaved) {
wx.showToast({
title: '已保存,不可再更换',
icon: 'none'
});
return;
}
// 选图前若正在播报则先暂停;选完/取消后再恢复
this._skipOnShowRefresh = true;
this.pauseAudioBeforeMediaPick();
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success: (res) => {
const file = res.tempFiles && res.tempFiles[0];
const path = file && (file.tempFilePath || file.path);
if (!path) return;
if (this._failedThemeImgs) {
delete this._failedThemeImgs[path];
}
// 换照片后按自定义:白色主题
this.setData({
customThemeImg: path,
themeImg: path,
heroBottomStripImage: '',
isCustom: '1',
themeColor: 'pearlWhite',
pageThemeClass: 'pagewhite',
entranceIcon: 1,
actionIcon: 1,
});
},
complete: () => {
setTimeout(() => {
this.resumeAudioAfterMediaPick();
this._skipOnShowRefresh = false;
}, 300);
},
});
},
// 进相册前:正在播则暂停播报并停图标旋转
pauseAudioBeforeMediaPick() {
const playing = this.data.isPlay == '1' || (this.audioCtx && !this.audioCtx.paused);
this._needResumeAudio = playing ? true : false;
if (!playing) return;
clearInterval(this.timers);
if (this.audioCtx && typeof this.audioCtx.pause === 'function') {
try {
this.audioCtx.pause();
} catch (e) {
console.log('pauseAudioBeforeMediaPick', e);
}
}
this.setData({
isPlay: '2'
});
},
// 选图结束(成功或取消):若进相册前在播,则继续播放
resumeAudioAfterMediaPick() {
if (!this._needResumeAudio) return;
this._needResumeAudio = false;
if (!this.audioCtx || typeof this.audioCtx.play !== 'function') return;
try {
this.audioCtx.play();
this.setData({
isPlay: '1'
});
if (typeof this.animation === 'function') {
clearInterval(this.timers);
this.animation();
}
} catch (e) {
console.log('resumeAudioAfterMediaPick', e);
}
},
// 保存图片:上传七牛 → 提交后端(后端接口先占位)
onSaveBgPhoto() {
if (this.data.bgSaved) {
wx.showToast({
title: '只能保存一次',
icon: 'none'
});
return;
}
if (!this.data.customThemeImg) {
wx.showToast({
title: '请先更换照片',
icon: 'none'
});
return;
}
if (this._savingBg) return;
this._savingBg = true;
wx.showLoading({
title: '保存中',
mask: true
});
App.Qiniu.GetUploadToken().then(res => {
const token = res.data && res.data.token;
if (!token) {
return Promise.reject('token empty');
}
return util.uploadFile(this.data.customThemeImg, token, 'invitationNew');
}).then(imageUrl => {
console.log('七牛背景图地址', imageUrl);
return this.saveInviteBgImage(imageUrl).then(() => imageUrl);
}).then(imageUrl => {
// 展示仍用本地图,避免切换七牛地址时重新加载黑一下
this.setData({
bgSaved: true,
savedBgImageUrl: imageUrl,
});
wx.hideLoading();
this._savingBg = false;
wx.showToast({
title: '保存成功',
icon: 'success'
});
}).catch(err => {
console.log('保存背景图失败', err);
wx.hideLoading();
this._savingBg = false;
wx.showToast({
title: '保存失败',
icon: 'none'
});
});
},
// 上传背景图到后端(接口未就绪,先占位)
saveInviteBgImage(imageUrl) {
console.log('saveInviteBgImage 待接后端', {
rid: this.id || (this.data.options && this.data.options.id),
imageUrl,
});
// TODO: 后端接口就绪后改为真实请求,例如:
// return App.Reserve.SaveInviteBgImage({
// rid: this.id || this.data.options.id,
// image: imageUrl,
// });
return Promise.resolve({
ret: 200,
data: {
imageUrl
}
});
},
// scroll-view 滚动:控制「滑动查看更多」提示
onScrollViewScroll(event) {
const scrollTop = (event.detail && event.detail.scrollTop) || 0;
const tipTop = scrollTop * 1 + this.screenHeight - 80;
if (tipTop < this.screenHeight) {
this.setData({
showMoreTip: true
});
} else {
this.setData({
showMoreTip: false
});
}
},
// 去评价
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
})
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
if (this._skipOnShowRefresh) {
// 部分机型 onShow 早于 complete,这里再补一次恢复
setTimeout(() => {
this.resumeAudioAfterMediaPick();
}, 300);
return;
}
this.getDetail()
this.getText()
this.getPaymentStatus()
this.getCheckUserHavePhone()
this.getreal()
},
// 获取包间图片列表
getroomimage(sellerid) {
App.Tables.GetTablesPhoto({
sellerid,
tableids: this.tablestr
}).then((json) => {
console.log('客户经理获取基本信息------', json.data)
if (json.ret == 200) {
var urlsArr = [];
(json.data || []).forEach((v) => {
if (v && v.url) urlsArr.push(v.url);
})
this.setData({
roomimage: json.data || [],
urlsArr,
}, () => this.resolveThemeImg())
console.log('包间图片地址urlsArr', urlsArr)
console.log('包间信息roomimage', json.data)
}
})
},
// 获取店铺详情
getDetail() {
App.Reserve.Detail({
rid: this.data.options.id
}).then(res => {
let tablesText = '', //桌子信息
deskStr = '';
const tables = (res.data.tables && Array.isArray(res.data.tables)) ? res.data.tables : [];
tables.forEach((t, i) => {
tablesText += t.rname + t.name + (i == (tables.length - 1) ? '' : '、');
deskStr += t.name + (i == (tables.length - 1) ? '' : '、');
})
let tabaleids = [];
tables.forEach(t => {
tabaleids.push(t.id);
})
this.tablestr = tabaleids.toString();
let reserev = RS.reserve(res.data)
let dateSmart = formatInviteDate(reserev.ddate);
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分')
let detail = this.formatDatail(reserev, dateSmart)
if (tables.length > 0) {
detail.oneTableName = tables[0].name;
}
reserev.soltName = '';
const sellerTel = (reserev.seller && reserev.seller.seller_tel) ? reserev.seller.seller_tel : '';
this.setData({
customersList: res.data.openid == getApp().openid ? reserev.customers.slice(1) : [], //预订人返回,邀请人为空
reserveOpenid: res.data.openid,
detail,
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'),
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: sellerTel ? sellerTel.split(',').filter(Boolean) : [],
soltName: reserev.soltName || detail.mname,
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: sellerTel,
phone: reserev.seller.phone,
}
})
this.updateContactPhone();
this.give_user = reserev.give_user ? reserev.give_user : '2';
console.log('reserev信息', reserev);
console.log('seller信息', this.data.seller);
console.log('detail信息', this.data.detail);
setTimeout(() => {
this.getstaffinfo(res.data.uid, reserev.sid);
this.getroomimage(reserev.sid)
this.getSellerVersionFun(reserev.sid);
}, 0);
}).catch(res => {
console.log(res, '详情请求失败');
})
},
// 客户经理获取基本信息
getstaffinfo(uid, sid) {
console.log('sellerid', this.data.detail.seller.id);
App.Activity.GetCustomerActivityBaseinfo({
sellerid: this.data.detail.seller.id,
uid
}).then((json) => {
if (json.ret == 200) {
console.log('客户经理获取基本信息------', json.data)
this.setData({
staffinfo: json.data,
couponArr: [],
})
this.updateContactPhone();
this.getSellerTemplateConfFun(sid);
}
})
},
// 提前点餐
cookbook() {
const cookbooklist = this.data.detail.order && this.data.detail.order.cookbooklist;
if (cookbooklist && 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,
}).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')
});
})
}
},
// 改到店时间(同步 picker index)
bindPickerChange(e) {
this.setData({
index: e.detail.value * 1
});
inviteBase.bindPickerChange.call(this, e);
},
// 去商家主页
sharesettingShop() {
wx.navigateTo({
url: util.http_build_query({
id: this.data.detail.seller.id
}, '/pages/reserve/shopHome')
});
},
// 分享
sharesetting() {
wx.reportMonitor('1017', 1)
this.closeModal()
if (this.data.options.isOrder == '1' && this.data.detail.status != '4') {
let img = this.data.detail.seller.seller_image.replace(/^http:/, "https:");
return {
title: '推荐' + this.data.seller.name + ',点击可查看详情并导航到店',
path: util.http_build_query({
id: this.data.detail.seller.id
}, '/pages/reserve/shopHome'),
imageUrl: img || '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',
}
}
},
// 获取商家设置营销信息
getSellerTemplateConfFun(sid) {
console.log(sid, 'sidsidsidsid');
App.Seller.GetSellerTemplateConf({
sid
}).then(res => {
let data = res.data
console.log('data', data);
let couponList = []
let StyleType, home, chef, marketing, coupon, coupon_data_pay, coupon_data_free, 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 : '0';
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 && marketing.is_coupon == '1') ? util.determine(marketing.coupon_data) : '';
coupon_data_pay = (marketing.coupon_data_pay && marketing.is_coupon_pay == '1') ? util.determine(marketing.coupon_data_pay) : '';
marketing.coupon_data_payList = coupon_data_pay
coupon_data_free = (marketing.coupon_data_free && marketing.is_coupon_free == '1') ? util.determine(marketing.coupon_data_free) : '';
marketing.coupon_data_freeList = coupon_data_free
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菜品券 只有代金券有几折显示
// 获取全部的优惠券(商家券、个人券、免费券、付费券)
couponList = this.addCoupons(coupon, couponList);
couponList = this.addCoupons(coupon_data_pay, couponList);
couponList = this.addCoupons(coupon_data_free, couponList);
// 根据券ID获取券详情(空列表不请求)
if (couponList && couponList.length > 0) {
this.getActivityByIdFun(couponList)
}
// 获取所有充值活动
this.getRechargeDetail()
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);
this.getLocalLunchTime(data.lite_style);
data.is_custom = '0';
// canChangeBg为1可更换背景图,0不可
let isCustom = data.is_custom == '1' ? '1' : '0'; // 是否自定义:1 是,主题色:0
let themeColor = isCustom == '1' ? 'pearlWhite' : data.lite_class;
let entranceIcon = 1;
let actionIcon = 1;
let StyleTypeNum = '1'; //样式类型1234
//大标题(预订安排/邀请函字样) — 内容应固定;自定义文案时书法失效改默认宋体
let titleObj = {
textColor: '#fff', //文字颜色
textFont: '3', //文字字体1黑体 2宋体 3书法体(仅固定文案可用)
textFontSize: '1', //文字大小 1大号 2中号 3小号
textInfo: '邀请函11', //固定:预订安排 / 邀请函
}
//店铺名称 — 不可换字体,可换字号/颜色
let shopObj = {
textColor: '#fff',
textFontSize: '2',
textInfo: '长安大排档总店标题', //大号且>11字自动换行
}
const titleShop = this.buildTitleShopStyle(StyleTypeNum, titleObj, shopObj);
const titleCls = titleShop.titleCls;
const shopCls = titleShop.shopCls;
const titleStyle = titleShop.titleStyle;
const shopStyle = titleShop.shopStyle;
if (themeColor == 'pearlWhite') {
entranceIcon = 1;
actionIcon = 1;
} else if (themeColor == 'turmeric') {
entranceIcon = 4;
actionIcon = 4;
} else {
entranceIcon = 3;
actionIcon = 2;
}
let pageThemeClass = 'page' + themeColor;
if (themeColor != 'pearlWhite' && themeColor != 'turmeric') {
pageThemeClass = pageThemeClass + ' pagecolor';
}
let obj = {
chef: chef || {},
marketing: marketing || {},
home: home || {},
reserve: reserve || {},
signboard: signboard || {},
store: store || {},
swich_phone: swich_phone || '0',
is_comments: is_comments || '0',
StyleType: StyleType || '',
lite_style: data.lite_style || '',
couponList: couponList || [],
canChangeBg: isCustom,
isCustom,
themeColor,
pageThemeClass,
entranceIcon,
actionIcon,
StyleTypeNum,
titleObj,
shopObj,
titleCls,
shopCls,
titleStyle,
shopStyle,
isMoreBtn: marketing && marketing.is_online_book == '1' && this.data.options.onlineReserve == '1',
isShareItem: this.data.options.isOrder != '1' && marketing && marketing.is_transpond == '1',
}
console.log('获取数据GetSellerTemplateConf--------------------', obj);
this.setData(obj)
this.refreshActionBtn(obj)
this.updateShowMerchantSpeak()
this.resolveThemeImg();
this.setData({
heroBottomStripImage: (home && home.heroBottomStripImage) || (home && home.bottom_strip) || '',
});
// reserve为空 或 reserve里没有voice_info/swich_voice字段时,不开启商家自定义语音,走默认语音配置
let i = (reserve == null || !reserve.voice_info || !reserve.swich_voice) ? '0' : reserve;
this.textToSpeechFun(sid, i)
})
},
// 根据充值ID获取充值详情
getRechargeDetail() {
App.Activity.GetNewRechargeList({
sellerid: this.data.detail.seller.id,
}).then(res => {
if (res.data) {
let arr = []
res.data.forEach(i => {
if (i.status != '1') {
arr.push(i)
}
})
let recharge_data = arr;
recharge_data.forEach(item => {
let recharge_list = {};
try {
if (typeof item.recharge_list === 'string' && item.recharge_list) {
recharge_list = JSON.parse(item.recharge_list);
} else if (item.recharge_list && typeof item.recharge_list === 'object') {
recharge_list = item.recharge_list;
}
} catch (e) {
recharge_list = {};
}
if (!recharge_list || typeof recharge_list !== 'object' || Array.isArray(recharge_list)) {
recharge_list = {};
}
// 统一成字符串,兼容接口返回数字 0/1,保证 wxml 里 =='1' / =='0' 判断生效
['is_price', 'is_score', 'is_coupons'].forEach(key => {
if (recharge_list[key] == 1 || recharge_list[key] === '1') {
recharge_list[key] = '1';
} else if (recharge_list[key] == 0 || recharge_list[key] === '0') {
recharge_list[key] = '0';
}
});
item.recharge_list = recharge_list;
item.priceInfo = '';
item.scoreInfo = '';
item.certificate = '';
if (recharge_list.is_price == '1') {
item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + recharge_list.price + '元余额';
}
if (recharge_list.is_score == '1') {
item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + recharge_list.score + '积分';
}
if (recharge_list.is_coupons == '1' && recharge_list.coupons_names && recharge_list.coupons_names.length > 0) {
item.certificate = recharge_list.coupons_names.join('、');
}
item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
})
// 筛选出 未过期的 && 开启状态的充值活动
recharge_data = recharge_data.filter(item => {
return (this.data.dataStr < (item.etime * 1) || !item.etime) && item.is_open == '1'
})
console.log('邀请函--------------充值', recharge_data);
this.setData({
recharge_data,
})
} else {
this.setData({
recharge_data: [],
})
}
})
},
// 点击充值活动:有手机号进充值页,无手机号进登录页
gotoVipRecharge(e) {
const id = e.currentTarget.dataset.id;
if (!id) return;
if (!this.data.purePhoneNumber) {
this.gotoLogin('', '2');
return;
}
const {
seller,
detail,
StyleType
} = this.data;
const url = util.http_build_query({
id,
name: seller.name || '',
sid: seller.sid || '',
oid: detail.id || '',
types: 1,
StyleType: StyleType || '',
}, '/pack-activity/pack/vipRecharge');
wx.navigateTo({
url
});
},
// 获取评价赠送的券最新详情
getEvaluateFun(id) {
App.Activity.GetActivityById({
id
}).then(res => {
if (res.data.length > 0) {
let couponData = res.data[0]
let data = couponData.expiration_date ? util.determine(couponData.expiration_date) : '';
// showCoupon 代表赠送的券没过有效期 && 是开启状态
couponData.showCoupon = (((data.valid_forever == '0' && this.data.dataStr < (data.etime * 1)) || data.valid_forever == '1') && couponData.is_open == '1') ? '1' : '0';
console.log('邀请函--------------------评价赠送的优惠券', couponData);
this.setData({
couponData: res.data[0]
})
}
})
},
// 根据券ID获取券详情
getActivityByIdFun(obj, setcoupon) {
App.Activity.GetActivityById({
id: obj.map(item => item.id).join(','),
}).then(res => {
if (res.data.length > 0) {
// valid_forever 1永久 0非永久
let list = res.data.filter(item => {
let data = item.expiration_date ? util.determine(item.expiration_date) : {};
let validForever = data.valid_forever === '1';
let isValid = item.is_type === '3' ?
(validForever || (data.valid_forever === '0' && this.data.dataStr < (data.etime * 1))) :
(this.data.dataStr < (item.etime * 1));
return isValid && item.is_open === '1';
});
list.forEach(detail => {
detail.stringifyUse = detail.use ? JSON.stringify(detail.use) : '';
detail.exp_date = detail.exp_date ? util.determine(detail.exp_date) : '';
detail.arule = detail.arule ? util.determine(detail.arule) : '';
detail.use = detail.use ? util.determine(detail.use) : '';
detail.expiration_date = detail.expiration_date ? util.determine(detail.expiration_date) : '';
detail.aexpiration = detail.aexpiration ? util.determine(detail.aexpiration) : '';
if ((detail.use && (!detail.use.is_cash || detail.use.is_cash == '1'))) {
let cash = detail.use.cash * 1;
let price = detail.price * 1;
detail.discount = cash != 0 ? ((price / cash) * 10).toFixed(1) : '';
}
let num = detail.grant_num * 1 - detail.grant_last * 1;
if (num > 0) {
detail.receiveNumText = ''
if (num >= 0 && num <= 100) {
detail.receiveNumText = num.toString();
} else if (num >= 101 && num <= 199) {
detail.receiveNumText = '100+';
} else if (num >= 200 && num <= 299) {
detail.receiveNumText = '200+';
} else {
detail.receiveNumText = Math.floor(num / 100) * 100 + '+';
}
}
if (num == 0) {
let str = detail.grant_num * 1
detail.receiveNumText = ''
if (str >= 0 && str <= 100) {
detail.receiveNumText = str.toString();
} else if (str >= 101 && str <= 199) {
detail.receiveNumText = '100+';
} else if (str >= 200 && str <= 299) {
detail.receiveNumText = '200+';
} else {
detail.receiveNumText = Math.floor(str / 100) * 100 + '+';
}
}
if (detail.exp_date && detail.exp_date.week_data) {
let mor = this.hasConsecutiveSelect(detail.exp_date.week_data, '1').rArr.join('、')
let noon = this.hasConsecutiveSelect(detail.exp_date.week_data, '2').rArr.join('、')
let nig = this.hasConsecutiveSelect(detail.exp_date.week_data, '3').rArr.join('、')
if (mor) mor = '早餐:' + mor
if (noon) noon = '午餐:' + noon
if (nig) nig = '晚餐:' + nig
detail.morText = mor;
detail.noonText = noon;
detail.nigText = nig;
}
})
let freeCoupons = list.filter(item => {
return item.is_type == '3'
})
let give = this.give_user;
let couponShow = false;
switch (give) {
case '1':
couponShow = this.data.options.hasSellerShare == '1' ? true : false;
break;
case '2':
couponShow = true;
break;
case '3':
couponShow = this.data.options.hasSellerShare != '1' ? true : false;
break;
}
// 免费券判断是否领取,弹框领取
if (freeCoupons.length > 0 && couponShow) {
this.getCoupon(freeCoupons, obj, setcoupon)
} else {
if (setcoupon != '1') {
this.setData({
isFrame: '1',
})
}
}
console.log('邀请函--------------------优惠券', list);
this.setData({
coupon_dataList: list,
})
}
})
},
// 弹框领取免费券
setcouponFun() {
let arr = this.data.couponArr;
console.log('弹框领取免费券数组-----', arr);
let str = arr.flatMap(item => Array(item.number).fill(item.id)).join(',');
console.log('弹框领取免费券id', str);
App.Activity.SetActivityAsReserve({
aid: str,
rid: this.id,
phone: this.data.purePhoneNumber,
}).then((json) => {
if (json.ret != 200) {
wx.showToast({
title: json.msg,
duration: 2000,
mask: true
})
} else {
wx.showToast({
title: '领取成功!',
duration: 2000,
mask: true
})
this.closeCouponModal()
}
})
},
// 免费券 0未领取 1已领取 获取未领取的组成数组couponArr
getCoupon(arr, info, setcoupon) {
let str = arr.flatMap(item => Array(item.number).fill(item.id)).join(',');
App.Activity.ActivityListByOpenid({
aid: str,
sellerid: this.data.seller.sid,
}).then(res => {
if (res.ret == 200) {
let couponArr = [];
let totalPrice = 0;
let coupon_dataList = this.data.coupon_dataList;
let list = res.data;
if (setcoupon != '1') {
list.forEach(item => {
item.cdate = item.cdate * 1;
item.useStime = '';
item.useEtime = '';
let condition = item.aexpiration ? util.determine(item.aexpiration) : '';
if (condition.valid_forever === '0' && condition.stime && condition.etime) {
item.useStime = util.unixtoTime(condition.stime, 'YYYY-MM-DD');
item.useEtime = util.unixtoTime(condition.etime, 'YYYY-MM-DD');
}
if (condition.valid_forever === '1') {
item.foreverText = '永久有效';
}
if (condition.valid_forever === '0' && condition.today) {
let obj = this.setTimeRange(item.cdate, 0, parseInt(condition.today) - 1);
item.useStime = obj.useStimeNum;
item.useEtime = obj.useEtimeNum;
}
if (condition.valid_forever === '0' && condition.tomorrow) {
let obj = this.setTimeRange(item.cdate, 1, condition.tomorrow * 1);
item.useStime = obj.useStimeNum;
item.useEtime = obj.useEtimeNum;
}
if (condition.valid_forever === '0' && condition.sday && condition.eday) {
let obj = this.setTimeRange(item.cdate, parseInt(condition.sday) - 1, parseInt(condition.eday) - 1);
item.useStime = obj.useStimeNum;
item.useEtime = obj.useEtimeNum;
}
})
list = list.filter(item => {
let condition = item.aexpiration ? util.determine(item.aexpiration) : '';
return (item.useEtime >= this.data.dataStr) || (item.foreverText == '永久有效') || (condition.valid_forever === '0' && condition.stime && condition.etime)
});
}
list.sort((a, b) => b.cdate - a.cdate);
list = list.reduce((accumulator, current) => {
if (!accumulator.some(item => item.aid === current.aid)) {
accumulator.push(current);
}
return accumulator;
}, []);
const strArray = str.split(',');
const result = strArray.filter(num => {
return !list.some(item => item.id === num);
});
console.log('待领取的券id', result);
if (result.length > 0) {
result.forEach(item => {
let match = arr.find(b => b.id === item);
let obj = info.find(b => b.id === item);
console.log('待领取的券详情', match);
let record = {
id: '',
number: '',
grant_last: '',
price: '',
desc: '',
}
if (obj) {
record.number = obj.number;
}
if (match) {
record.grant_last = match.grant_last * 1 * 1;
record.id = match.id;
record.desc = match.desc;
record.price = match.price;
}
if (record.number > record.grant_last && record.grant_last > 0) {
record.number = record.grant_last
}
// 只留下可领取数量大于0的
if (record.grant_last > 0 && record.number) {
console.log('可领取的券', {
...record
});
couponArr.push({
...record
})
}
})
if (couponArr.length > 0 && setcoupon != '1' && this.one == '0') {
totalPrice = couponArr.reduce((sum, item) => sum + item.price * item.number, 0);
this.one = '1'
setTimeout(() => {
this.setData({
couponArr,
totalPrice: parseFloat(totalPrice.toFixed(2)),
})
this.showCouponModal()
}, 3000);
} else {
if (setcoupon != '1') {
this.setData({
isFrame: '1',
})
}
}
} else {
if (setcoupon != '1') {
this.setData({
isFrame: '1',
})
}
}
list.forEach(item => {
let idx = coupon_dataList.findIndex(b => b.id === item.id);
if (idx !== null && idx !== undefined && coupon_dataList[idx]) {
const detail = coupon_dataList[idx];
detail.resultCoupon = '1'; // 显示已领取
detail.cdate = item.cdate * 1;
detail.useStime = '';
detail.useEtime = '';
let condition = detail.aexpiration
if (condition.valid_forever === '0' && condition.stime && condition.etime) {
detail.useStime = util.unixtoTime(condition.stime, 'YYYY-MM-DD');
detail.useEtime = util.unixtoTime(condition.etime, 'YYYY-MM-DD');
}
if (condition.valid_forever === '1') {
detail.foreverText = '永久有效';
}
if (condition.valid_forever === '0' && condition.today) {
let obj = this.setTimeRange(detail.cdate, 0, parseInt(condition.today) - 1);
detail.useStime = obj.useStime;
detail.useEtime = obj.useEtime;
}
if (condition.valid_forever === '0' && condition.tomorrow) {
let obj = this.setTimeRange(detail.cdate, 1, condition.tomorrow * 1);
detail.useStime = obj.useStime;
detail.useEtime = obj.useEtime;
}
if (condition.valid_forever === '0' && condition.sday && condition.eday) {
let obj = this.setTimeRange(detail.cdate, parseInt(condition.sday) - 1, parseInt(condition.eday) - 1);
detail.useStime = obj.useStime;
detail.useEtime = obj.useEtime;
}
}
})
console.log('未领取的券列表-----------', couponArr);
this.setData({
coupon_dataList,
})
}
})
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
// 选相册时也会 onHide:不清定时器、不销毁音频,回来后继续播
if (this._skipOnShowRefresh) return;
clearInterval(this.timers)
if (this.data.timer) {
clearInterval(this.data.timer);
}
this.destroyAudioCtx();
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
clearInterval(this.timers)
if (this.data.timer) {
clearInterval(this.data.timer);
}
if (this._onUserCaptureScreen && wx.offUserCaptureScreen) {
wx.offUserCaptureScreen(this._onUserCaptureScreen);
}
this.destroyAudioCtx();
},
destroyAudioCtx() {
const ctx = this.audioCtx;
if (!ctx || typeof ctx.destroy !== 'function') {
this.audioCtx = null;
return;
}
try {
ctx.destroy();
} catch (e) {
console.log('destroyAudioCtx', e);
}
this.audioCtx = null;
},
// 点击关闭领券弹框后,出现图片缩小到商家有礼的位置消失动画
startAnimation() {
const animation = wx.createAnimation({
duration: 800,
timingFunction: 'ease',
});
animation.translateY('-60%')
.translateX('34%')
.scale(0)
.step();
this.setData({
animationData: animation.export(),
});
setTimeout(() => {
this.startSecondAnimation();
}, 800);
},
// 商家有话说:自定义图文 / 餐厅介绍 / 特色菜品 / 主厨介绍 任一有内容则显示
updateShowMerchantSpeak() {
const {
reserveData,
marketing,
home,
store,
signboard,
chef
} = this.data;
let hasReserveText = false;
if (reserveData) {
if (reserveData.title) {
hasReserveText = true;
} else if (reserveData.content && reserveData.content.length > 0) {
hasReserveText = true;
}
}
let hasStoreContent = false;
if (store) {
if (store.introduce && (!store.is_introduce || store.is_introduce != '0')) {
hasStoreContent = true;
} else if (store.images && store.images.length > 0 && (!store.is_images || store.is_images != '0')) {
hasStoreContent = true;
} else if (store.content && store.content.length > 0) {
hasStoreContent = true;
}
}
let hasLogoOrHome = false;
if ((marketing && marketing.logo) || (home && home.image)) {
hasLogoOrHome = true;
}
const hasStore = hasLogoOrHome || hasStoreContent;
let hasSignboard = false;
if (signboard) {
if (signboard.swich == '1' && signboard.images && signboard.images.length > 0) {
hasSignboard = true;
} else if (signboard.content && signboard.content.length > 0) {
hasSignboard = true;
}
}
let hasChef = false;
if (chef) {
if (chef.introduce && (!chef.is_introduce || chef.is_introduce != '0')) {
hasChef = true;
} else if (chef.image && (!chef.is_images || chef.is_images != '0')) {
hasChef = true;
} else if (chef.content && chef.content.length > 0) {
hasChef = true;
}
}
const showMerchantSpeak = hasReserveText || hasStore || hasSignboard || hasChef;
if (showMerchantSpeak !== this.data.showMerchantSpeak) {
this.setData({
showMerchantSpeak
});
}
},
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)
this.setData({
reserveData: {
title: data.title || '',
content,
}
}, () => this.updateShowMerchantSpeak())
}
})
},
updateContactPhone() {
const sellerTel = this.data.seller && this.data.seller.tel;
const staffPhone = this.data.staffinfo && this.data.staffinfo.phone;
const contactPhone = staffPhone || (sellerTel && sellerTel.length && sellerTel[0]) || '';
if (contactPhone !== this.data.contactPhone) {
this.setData({
contactPhone
});
}
},
onHeroImageError() {
const failed = this.data.themeImg;
if (!failed) return;
if (!this._failedThemeImgs) this._failedThemeImgs = {};
// hero + 模糊底共用 themeImg,失败可能连触发两次,已处理过则跳过
if (this._failedThemeImgs[failed]) return;
this._failedThemeImgs[failed] = true;
const defaultImg = 'https://qn.colorcun.com/testImg/img4.png';
if (failed === defaultImg) return;
const next = this.getThemeImgCandidates().find(url => !this._failedThemeImgs[url]) || defaultImg;
this.setData({
themeImg: next,
heroBottomStripImage: '',
});
},
onBackdropImageError() {
// 后台色带加载失败时,自动切回直接裁切主图底部的方案。
if (this.data.heroBottomStripImage) {
this.setData({
heroBottomStripImage: ''
});
}
},
})
\ No newline at end of file
... ...
{
"navigationStyle": "custom",
"navigationBarTextStyle": "white",
"usingComponents": {
"nav": "/components/nav/nav",
"painter": "/components/painter/painter",
"my-modal": "/components/modal/modal",
"scroll-number": "/components/scroll-number/index",
"subscribe": "/components/userinfo/subscribe"
}
}
... ...
<!--pack-invitation/pages/detail_owner_invitation14.wxml-->
<import src="../common/parts.wxml" />
<nav hasHome id="nav" backgroundColor="transparent" place="{{false}}"></nav>
<view class="pageBox {{pageThemeClass}} {{isCustom == '1' ? 'isCustom' : ''}} style{{StyleTypeNum}}">
<!-- 自定义/白色:模糊底;其它主题色:CSS 固定纯色 + 中间渐变 -->
<view wx:if="{{themeColor == 'pearlWhite'}}" class="page-background">
<image wx:if="{{heroBottomStripImage}}" class="page-blur-image prepared-bottom-strip" src="{{heroBottomStripImage}}" mode="scaleToFill" binderror="onBackdropImageError" />
<image wx:else class="page-blur-image source-bottom-crop" src="{{themeImg}}" mode="scaleToFill" binderror="onHeroImageError" />
</view>
<scroll-view class="scroll" scroll-y enhanced show-scrollbar="{{false}}" bindscroll="onScrollViewScroll" style="height: {{windowHeight}}px;">
<view class="scroll-wrap">
<image class="hero-image" style="height: {{heroHeightPx}}px;" src="{{themeImg}}" mode="aspectFill" binderror="onHeroImageError" />
<view wx:if="{{themeColor != 'pearlWhite'}}" class="page-theme-fade" style="height: {{heroHeightPx}}px;"></view>
<view class="scroll-body" style="padding-top: {{contentStartPx}}px;">
<!-- 音乐开关 -->
<template is="musicImg" data="{{newStr: newStr, isPlay: isPlay, attentionAnim: attentionAnim}}" />
<!-- 商家有礼悬浮入口 -->
<template is="giftImg" data="{{hasValueCertificate: hasValueCertificate, marketing: marketing, coupon_dataList: coupon_dataList, isFrame: isFrame, is_comments: is_comments, is_user_comments: is_user_comments, couponData: couponData, hasValueRecharge: hasValueRecharge, recharge_data: recharge_data, animationData2: animationData2}}" />
<!-- 领券全屏浮层 -->
<template is="fullscreenMask" data="{{isShow: isShow, animationData: animationData}}" />
<view class="targetPoint" style="top: 35%; right: 4%;"></view>
<!-- 已取消/已结束 状态角标 -->
<template is="statusBadge" data="{{detail: detail, options: options}}" />
<view class="heroBlock style{{StyleTypeNum}}">
<view class="bgEditBar" wx:if="{{StyleTypeNum != '4' && canChangeBg=='1' && options.hasSellerShare == '1'}}">
<view class="bgEditBtn bgEditBtnChange {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onChangeBgPhoto">换照片</view>
<view class="bgEditSaveWrap">
<view class="bgEditBtn bgEditBtnSave {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onSaveBgPhoto">保存<view class="bgEditSaveTip" wx:if="{{!bgSaved}}">(仅1次)</view>
</view>
</view>
</view>
<view class="heroTitle {{titleCls}}" style="{{titleStyle}}" wx:if="{{StyleTypeNum != 2 && StyleTypeNum != '2' && StyleTypeNum != 4 && StyleTypeNum != '4' && options.hasSellerShare == '1'}}">{{titleObj.textInfo || '预订安排'}}</view>
<view class="heroTitle {{titleCls}}" style="{{titleStyle}}" wx:elif="{{StyleTypeNum != 2 && StyleTypeNum != '2' && StyleTypeNum != 4 && StyleTypeNum != '4'}}">{{titleObj.textInfo || '邀请函'}}</view>
<view class="heroSeller {{shopCls}}" style="{{shopStyle}}">{{shopObj.textInfo || seller.name || reserve.seller_name}}</view>
<view class="heroSlogan font24r" wx:if="{{StyleTypeNum != 1 && StyleTypeNum != '1' && reserve.swich_slogan == '1' && home.slogan}}">{{home.slogan}}</view>
<view class="bookInfo">
<view class="entrance" wx:if="{{StyleTypeNum == '1'}}">
<view bindtap="sharesettingShop" class="entranceItem">
<image src="https://qn.colorcun.com/shopHomeIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">商家主页</view>
</view>
<button wx:if="{{canShare}}" class="entranceItem" open-type="share">
<image src="https://qn.colorcun.com/forwardIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">转发好友</view>
</button>
<view bindtap="cookbook" wx:if="{{options.hasSellerShare == '1' && detail.status !='4' && options.isOrder != '1' && hasValueOrder && detail.seller.is_open_order==1 && marketing.is_order=='1'}}" class="entranceItem">
<image src="https://qn.colorcun.com/advanceOrderIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">提前点餐</view>
</view>
<button wx:if="{{canMeet && needLogin}}" bindtap="gotoLogin" data-types="2" class="entranceItem">
<image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">确认赴约</view>
</button>
<button wx:elif="{{canMeet}}" bindtap="confirmed" class="entranceItem">
<image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">确认赴约</view>
</button>
<view bindtap="evaluateFun" wx:if="{{is_comments=='1' && !is_user_comments}}" class="entranceItem entranceFeedback">
<image src="https://qn.colorcun.com/feedbackIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">意见反馈</view>
</view>
</view>
<view class="heroSlogan font24r" wx:if="{{(StyleTypeNum == 1 || StyleTypeNum == '1') && reserve.swich_slogan == '1' && home.slogan}}">{{home.slogan}}</view>
<block wx:if="{{StyleTypeNum == 2 || StyleTypeNum == '2'}}">
<view class="bookWave">
<view class="waveLine"></view>
<view class="waveBars">
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
<view class="waveBar"></view>
</view>
<view class="waveLine"></view>
</view>
<view class="infoItem" wx:if="{{reserve.swich_booking=='1' && reserve.book_info}}">
<text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
</view>
<view class="infoItem" wx:if="{{seller.tablesText}}">
<view class="contentData contentData1">{{seller.tablesText}}</view>
</view>
<view class="infoItem" wx:if="{{seller.date}}">
<view class="contentData contentData2">{{seller.date}}</view>
</view>
<view class="infoItem" wx:if="{{(detail.rnameStr && reserve.swich_customer == '1') || seller.soltName}}">
<view class="contentData contentWithBtn contentData2 contentData3">
<text wx:if="{{detail.rnameStr && reserve.swich_customer == '1'}}">{{detail.rnameStr}}订</text>
<text class="texts1" wx:if="{{detail.rnameStr && reserve.swich_customer == '1' && seller.soltName}}"> | </text>
<text wx:if="{{seller.soltName}}">{{seller.soltName}}<text wx:if="{{temp_ddate}}"> {{temp_ddate}}</text></text>
<picker wx:if="{{detail && options && options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1' && seller.soltName}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
<view class="miniBtn">
<image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
</view>
</picker>
</view>
</view>
<view class="infoItem" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
<view class="contentData contentWithBtn contentData2">
<text>前台电话</text>
<text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call"> {{item}}</text>
<view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
</view>
</view>
<view class="infoItem" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
<view class="contentData contentWithBtn contentData2">
<text>{{seller.addr || reserve.seller.map_address}}</text>
<view class="miniBtn" bindtap="looklocation">
<image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
</view>
</view>
</view>
</block>
<block wx:elif="{{StyleTypeNum == 4 || StyleTypeNum == '4'}}">
<view class="bgEditBar" wx:if="{{canChangeBg=='1' && options.hasSellerShare == '1'}}">
<view class="bgEditBtn bgEditBtnChange {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onChangeBgPhoto">换照片</view>
<view class="bgEditSaveWrap">
<view class="bgEditBtn bgEditBtnSave {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onSaveBgPhoto">保存<view class="bgEditSaveTip" wx:if="{{!bgSaved}}">(仅1次)</view>
</view>
</view>
</view>
<view class="heroTitle {{titleCls}}" style="{{titleStyle}}">{{options.hasSellerShare == '1' ? (titleObj.textInfo || '预订安排') : (titleObj.textInfo || '邀请函')}}</view>
<view class="infoItem" wx:if="{{reserve.swich_booking=='1' && reserve.book_info}}">
<text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
</view>
<view class="bookInvite">{{detail.rnameStr ? detail.rnameStr + '邀您赴宴' : '邀您赴宴'}}</view>
<view class="bookDivider"></view>
<view class="infoItem style4Item" wx:if="{{seller.date || seller.soltName || temp_ddate}}">
<view class="label font24r">时间</view>
<view class="contentData timeBox">
<view class="timeDate" wx:if="{{seller.date}}">{{seller.date}}</view>
<view class="contentWithBtn timeSlot" wx:if="{{seller.soltName || temp_ddate}}">
<text wx:if="{{seller.soltName}}">{{seller.soltName}}</text>
<text wx:if="{{temp_ddate}}"> {{temp_ddate}}</text>
<picker wx:if="{{detail && options && options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1'}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
<view class="miniBtn">
<image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
</view>
</picker>
</view>
</view>
</view>
<view class="infoItem style4Item" wx:if="{{seller.name || reserve.seller_name || seller.tablesText}}">
<view class="label font24r">地点及餐位</view>
<view class="contentData placeBox">
<view class="placeShop" wx:if="{{seller.name || reserve.seller_name}}">{{seller.name || reserve.seller_name}}</view>
<view class="placeTable" wx:if="{{seller.tablesText}}">{{seller.tablesText}}</view>
</view>
</view>
<view class="infoItem style4Item" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
<view class="label font24r">前台电话</view>
<view class="contentData contentWithBtn">
<text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{index > 0 ? ' ' : ''}}{{item}}</text>
<view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
</view>
</view>
<view class="infoItem style4Item" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
<view class="label font24r">餐厅地址</view>
<view class="contentData contentWithBtn">
<text>{{seller.addr || reserve.seller.map_address}}</text>
<view class="miniBtn" bindtap="looklocation">
<image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
</view>
</view>
</view>
</block>
<block wx:else>
<view class="bookSideText" wx:if="{{StyleTypeNum == 3 || StyleTypeNum == '3'}}">{{options.hasSellerShare == '1' ? '预订安排' : '邀请函'}}</view>
<view class="infoItem" wx:if="{{(StyleTypeNum == 3 || StyleTypeNum == '3') && reserve.swich_booking=='1' && reserve.book_info}}">
<text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
</view>
<view class="infoItem" wx:if="{{detail.rnameStr && reserve.swich_customer == '1'}}">
<view class="label font24r">预订贵宾</view>
<view class="contentData">{{detail.rnameStr}}</view>
</view>
<view class="infoItem" wx:if="{{seller.date}}">
<view class="label font24r">用餐日期</view>
<view class="contentData">{{seller.date}}</view>
</view>
<view class="infoItem" wx:if="{{seller.tablesText}}">
<view class="label font24r">用餐位置</view>
<view class="contentData">{{seller.tablesText}}</view>
</view>
<view class="infoItem" wx:if="{{seller.soltName}}">
<view class="label font24r">用餐时间</view>
<view class="valueRow">
<view class="contentData">{{seller.soltName}}<text class="marLeft" wx:if="{{temp_ddate}}">{{temp_ddate}}</text></view>
<picker wx:if="{{detail && options && options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1'}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
<view class="miniBtn">
<image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
</view>
</picker>
</view>
</view>
<!-- 样式3:标签固定左侧,右侧内容折行 -->
<block wx:if="{{StyleTypeNum == 3 || StyleTypeNum == '3'}}">
<view class="infoItem infoLine" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
<view class="label font24r">前台电话</view>
<view class="contentData contentWithBtn infoRight">
<text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{index > 0 ? ' ' : ''}}{{item}}</text>
<view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
</view>
</view>
<view class="infoItem infoLine" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
<view class="label font24r">餐厅地址</view>
<view class="contentData contentWithBtn infoRight">
<text>{{seller.addr || reserve.seller.map_address}}</text>
<view class="miniBtn" bindtap="looklocation">
<image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
</view>
</view>
</view>
</block>
<block wx:else>
<view class="infoItem" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
<view class="label font24r">前台电话</view>
<block wx:if="{{seller.tel.length == 1}}">
<view class="phoneRow contentData" wx:for="{{seller.tel}}" wx:key="index">
<text data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{item}}</text>
<view class="miniBtn" data-phone="{{item}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
</view>
</block>
<block wx:else>
<view class="contentData phoneMultiList">
<text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone phoneMultiItem" bindtap="call">{{item}}</text>
</view>
<view class="miniBtn phoneMultiBtn" wx:if="{{contactPhone}}" data-phone="{{contactPhone}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
</block>
</view>
<view class="infoItem" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
<view class="label font24r">餐厅地址</view>
<view class="contentData contentWithBtn">
<text>{{seller.addr || reserve.seller.map_address}}</text>
<view class="miniBtn" bindtap="looklocation">
<image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
</view>
</view>
</view>
</block>
</block>
</view>
</view>
<view class="entrance" wx:if="{{StyleTypeNum != '1'}}">
<view bindtap="sharesettingShop" class="entranceItem">
<image src="https://qn.colorcun.com/shopHomeIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">商家主页</view>
</view>
<button wx:if="{{canShare}}" class="entranceItem" open-type="share">
<image src="https://qn.colorcun.com/forwardIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">转发好友</view>
</button>
<view bindtap="cookbook" wx:if="{{options.hasSellerShare == '1' && detail.status !='4' && options.isOrder != '1' && hasValueOrder && detail.seller.is_open_order==1 && marketing.is_order=='1'}}" class="entranceItem">
<image src="https://qn.colorcun.com/advanceOrderIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">提前点餐</view>
</view>
<button wx:if="{{canMeet && needLogin}}" bindtap="gotoLogin" data-types="2" class="entranceItem">
<image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">确认赴约</view>
</button>
<button wx:elif="{{canMeet}}" bindtap="confirmed" class="entranceItem">
<image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">确认赴约</view>
</button>
<view bindtap="evaluateFun" wx:if="{{is_comments=='1' && !is_user_comments}}" class="entranceItem entranceFeedback">
<image src="https://qn.colorcun.com/feedbackIcon{{entranceIcon}}.png" mode="" />
<view class="font24r">意见反馈</view>
</view>
</view>
<view class="receptionBox" wx:if="{{reserve.swich_manager=='1' && staffinfo && (staffinfo.name || staffinfo.phone || staffinfo.photo || staffinfo.wechat)}}">
<view class="peopleInfo">
<image bindtap="lookImgs" wx:if="{{staffinfo.photo}}" data-url="{{staffinfo.photo}}" src="{{staffinfo.photo}}" class="headerimg" mode="aspectFill"></image>
<view class="noHeaderimg" wx:else></view>
<view class="peopleName font28r" wx:if="{{staffinfo.name}}">{{staffinfo.name}}</view>
<view class="peopleRole font24r">{{staffinfo.position || '店长'}}</view>
</view>
<view class="handleInfo">
<view class="font32r title1">尊敬的贵宾您好!</view>
<view class="font24r texts">很荣幸能为您提供专属接待和服务</view>
<view class="contactBtns">
<view wx:if="{{staffinfo.phone}}" class="font24r brownFont" data-phone="{{staffinfo.phone}}" bindtap="call">
<image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
</view>
<view wx:if="{{staffinfo.wechat}}" class="font24r brownFont" bindtap="copyWeChat">
<image src="https://qn.colorcun.com/addWeChatIcon{{actionIcon}}.png" mode="" /><text>加微信</text>
</view>
</view>
</view>
</view>
<text space="nbsp" wx:if="{{marketing.wecomle}}" class="style{{StyleTypeNum}} welcomeInfo font32r">{{marketing.wecomle}}</text>
<view class="appointment" wx:if="{{customersList.length>0}}">
<view class="notifyTitle">
<text></text>
<view class="font36r">已确认赴约</view><text></text>
</view>
<view class="notifyContent">
<view class="notifyItems" wx:for="{{customersList}}" wx:key="index">
<view class="imageBox">
<image src="{{item.headimgurl}}" mode="aspectFill" />
</view>
<view class="font32r notifyText">{{item.nickname}}</view>
</view>
</view>
</view>
<view class="borderSty">
<view wx:if="{{roomimage && roomimage.length>0}}" class="roomSwiperWrap">
<swiper class="roomSwiper" indicator-dots="{{roomimage.length > 1}}" autoplay="{{roomimage.length > 1}}" interval="{{3000}}" circular="{{roomimage.length > 1}}" indicator-color="rgba(255,255,255,0.35)" indicator-active-color="#ffffff">
<swiper-item wx:for="{{roomimage}}" wx:key="index">
<view class="roomSlide" bindtap="lookImgs" data-url="{{item.url}}" data-imgs="{{urlsArr}}">
<image class="roomSlideImg" mode="aspectFill" src="{{item.url}}"></image>
<view class="roomSlideName" wx:if="{{item.name}}">{{item.name}}</view>
</view>
</swiper-item>
</swiper>
</view>
<view class="preferentialCoupon" wx:if="{{hasValueCertificate && marketing && coupon_dataList.length>0}}">
<view class="sectionTitle">专属优惠券</view>
<template is="couponCard" data="{{list: coupon_dataList, seller: seller, detail: detail, StyleType: StyleType}}" />
</view>
<view class="publicModule" wx:if="{{(hasValueRecharge && marketing.is_recharge=='1' && recharge_data.length>0) || (hasValueRecharge && marketing.is_link=='1')}}">
<view class="sectionTitle">会员充值优惠</view>
<block wx:for="{{recharge_data}}" wx:key="id">
<view class="rechargeItems" bindtap="gotoVipRecharge" data-id="{{item.id}}">
<view class="rechargeTitle font36r">{{item.rname}}</view>
<view class="limitation font24r" wx:if="{{item.priceInfo}}">
{{item.priceInfo}}{{(item.recharge_list.is_coupons=='0' && item.recharge_list.is_score=='0')?'。':';'}}
</view>
<view class="limitation font24r" wx:if="{{item.scoreInfo}}">
{{item.scoreInfo}}{{item.recharge_list.is_coupons=='0'?'。':';'}}
</view>
<view class="limitation font24r" wx:if="{{item.recharge_list.is_coupons=='1'}}">
会员充值满{{item.recharge_money}}元赠送{{item.certificate}}。
</view>
</view>
</block>
<view wx:if="{{hasValueRecharge && marketing.is_link=='1'}}" class="font24r favouredPolicy" bindtap="gotoFavourableList">
点击了解更多会员优惠政策
</view>
</view>
<view class="sectionTitle" wx:if="{{showMerchantSpeak}}">商家有话说</view>
<view class="reserveBox" wx:if="{{reserveData && (reserveData.title || reserveData.content)}}">
<view class="title font28r" wx:if="{{reserveData.title}}">{{reserveData.title}}</view>
<block wx:for="{{reserveData.content}}" wx:key="index">
<image class="items" wx:if="{{item.type =='1'}}" src="{{item.content}}" bindtap="lookImgs" data-url="{{item.content}}" mode="widthFix" />
<text space="nbsp" class="items font28r" wx:if="{{item.type == '2'}}">{{item.content}}</text>
</block>
</view>
<view class="introduce" wx:if="{{marketing.logo || home.image || (store && ((store.introduce && (!store.is_introduce || store.is_introduce!='0')) || (store.images && store.images.length>0 && (!store.is_images || store.is_images!='0')) || (store.content && store.content.length>0)))}}">
<view class="titleInfo">{{store.title ? store.title : '餐厅介绍'}}</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 && !store.content && store.introduce && (!store.is_introduce || store.is_introduce!='0')}}">
<text space="nbsp" class="texts font28r">{{store.introduce}}</text>
</view>
<block wx:if="{{store.images && 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}}">
<template is="richText" data="{{content: store.content, imgs: '', textClass: 'font32r'}}" />
</view>
</view>
<view class="introduce" wx:if="{{signboard && ((signboard.swich=='1' && signboard.images && signboard.images.length>0) || (signboard.content && signboard.content.length>0))}}">
<view class="titleInfo">{{signboard.title ? signboard.title : '特色菜品'}}</view>
<block wx:if="{{signboard.images && signboard.images.length>0}}">
<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>
</block>
<view class="labelBox" wx:if="{{signboard.content && signboard.content.length>0}}">
<template is="richText" data="{{content: signboard.content, imgs: '', textClass: 'font32r'}}" />
</view>
</view>
<block wx:if="{{chef && ((chef.introduce && (!chef.is_introduce || chef.is_introduce!='0')) || (chef.image && (!chef.is_images || chef.is_images!='0')) || (chef.content && chef.content.length>0))}}">
<view class="introduce">
<view class="titleInfo">{{chef.title ? chef.title : '主厨介绍'}}</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}}">
<template is="richText" data="{{content: chef.content, imgs: '', textClass: 'font32r'}}" />
</view>
</view>
</block>
<view class="introduce" wx:if="{{reserve && ((reserve.is_introduce_all=='1' && (reserve.park_info || (reserve.park_info_images && reserve.park_info_images.length>0))) || (reserve.content && reserve.content.length>0))}}">
<view class="sectionTitle">{{reserve.title ? reserve.title : '停车指引'}}</view>
<block wx:if="{{!reserve.content || reserve.content.length == '0'}}">
<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>
</block>
<view class="labelBox" wx:if="{{reserve.content && reserve.content.length>0}}">
<template is="richText" data="{{content: reserve.content, imgs: '', textClass: 'font32r'}}" />
</view>
</view>
<view class="vips businessBox">
<view class="businessBox">
周到安排提供技术支持<text bindtap="call" data-phone="4000009690">4000009690</text>,
<view bindtap="gotoJoinSeller" style="text-decoration: underline;">我是商家,我要试用</view>
</view>
</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>
</view>
</scroll-view>
<template is="actionBar" data="{{barWrapClass: 'flex-lr sharewidth', barShow: barShow, showMoreOnline: showMoreOnline, threeBtnMore: threeBtnMore, showMoreCall: showMoreCall, threeBtnCall: threeBtnCall, seller: seller, canPay: canPay, threeBtnPay: threeBtnPay, isOwner: isOwner, canShare: canShare, isOver: isOver, guestShareCls: guestShareCls, canMeet: canMeet, needLogin: needLogin}}" />
</view>
<painter palette="{{wxml}}" style="position: absolute; top: -9999rpx;" bind:imgOK="onImgOK" />
<!-- 截屏提示弹窗 -->
<template is="payModal" data="{{detail: detail, options: options, marketing: marketing, imgSrc: imgSrc}}" />
<!-- 领券弹窗(2~12 通用;13 保持页面内独立) -->
<template is="couponModal" data="{{seller: seller, reserve: reserve, totalPrice: totalPrice, purePhoneNumber: purePhoneNumber, countDown: countDown}}" />
\ No newline at end of file
... ...
.pageBox {
position: relative;
width: 100%;
height: 100vh;
overflow: hidden;
}
.page-background {
position: fixed;
z-index: 0;
top: -70rpx;
right: -70rpx;
bottom: -70rpx;
left: -70rpx;
overflow: hidden;
pointer-events: none;
}
.page-blur-image {
position: absolute;
z-index: 0;
left: 0;
width: 100%;
opacity: 1;
filter: blur(72rpx);
will-change: filter;
}
.prepared-bottom-strip {
top: 0;
height: 100%;
}
.source-bottom-crop {
bottom: 0;
height: 560%;
}
.scroll {
position: relative;
z-index: 1;
box-sizing: border-box;
}
.scroll-wrap {
position: relative;
width: 100%;
}
.hero-image {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
pointer-events: none;
}
.page-theme-fade {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
pointer-events: none;
}
.scroll-body {
position: relative;
z-index: 2;
box-sizing: border-box;
padding-bottom: 200rpx;
color: #fff;
}
/* ========== 共用 UI ========== */
.appointment {
padding: 0 40rpx 60rpx;
}
.notifyTitle {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
}
.notifyTitle text {
width: 20rpx;
height: 20rpx;
background: #fff;
}
.notifyTitle view {
font-family: "PingFang SC";
color: #fff;
font-weight: 600;
margin: 0 20rpx;
}
.notifyContent {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.notifyItems {
width: 49%;
display: flex;
align-items: center;
margin-top: 20rpx;
}
.notifyItems .imageBox {
width: 90rpx;
height: 90rpx;
border: 4rpx solid #cbcbcb;
box-sizing: border-box;
border-radius: 50%;
flex-shrink: 0;
}
.notifyItems .imageBox image {
width: 100%;
height: 100%;
border-radius: 50%;
flex-shrink: 0;
}
.notifyText {
margin-left: 14rpx;
overflow: hidden;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
color: #fff;
}
.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;
}
.marLeft {
margin-left: 10rpx;
font-family: "PingFang SC";
font-weight: 600;
font-size: 40rpx;
line-height: 56rpx;
}
.heroBlock {
text-align: center;
margin-bottom: 60rpx;
padding: 0 40rpx;
}
.heroBlock.style2 {
box-sizing: border-box;
padding: 42rpx 32rpx 10rpx 32rpx;
margin: 0 40rpx 0;
border-radius: 20rpx;
border: none;
background: transparent;
}
.heroBlock.style3 {
box-sizing: border-box;
padding: 42rpx 0 0;
margin: 0 40rpx 60rpx;
border-radius: 20rpx;
border: none;
background: transparent;
}
.bgEditBar {
display: flex;
justify-content: center;
align-items: flex-start;
margin-bottom: 14rpx;
}
.bgEditBtn {
box-sizing: border-box;
min-width: 130rpx;
height: 60rpx;
border-radius: 30rpx;
font-family: "PingFang SC";
font-weight: 500;
font-size: 28rpx;
line-height: 60rpx;
text-align: center;
text-shadow: none;
border: 2rpx solid;
background: rgba(0, 0, 0, .2);
border-color: rgba(255, 255, 255, 0.5);
padding: 0 20rpx;
}
.bgEditBtnChange {
margin-right: 24rpx;
}
.bgEditSaveWrap {
display: flex;
flex-direction: column;
align-items: center;
}
.bgEditBtnSave {
color: #fff;
line-height: 56rpx;
display: flex;
align-items: center;
justify-content: center;
}
.bgEditBtnDisabled {
opacity: 0.5;
}
.bgEditSaveTip {
color: #fff;
font-family: "PingFang SC";
font-weight: 400;
font-size: 28rpx;
line-height: 30rpx;
text-shadow: none;
}
.bookInfo {
text-align: left;
border-radius: 20rpx;
position: relative;
}
.borderSty {
box-sizing: border-box;
border-radius: 20rpx;
}
.infoItem {
display: flex;
flex-direction: column;
align-items: flex-start;
margin-bottom: 24rpx;
}
.label {
flex-shrink: 0;
margin: 0 0 6rpx;
color: #ffffff;
font-family: "PingFang SC";
font-weight: 400;
font-size: 24rpx;
line-height: 34rpx;
}
.contentData {
font-family: "PingFang SC";
font-weight: 600;
font-size: 40rpx;
line-height: 56rpx;
display: flex;
align-items: center;
}
.contentData1 {
font-size: 44rpx;
}
.texts1 {
margin: 0 24rpx;
}
.contentData2 {
font-size: 32rpx;
}
.contentData3 {
margin-bottom: 50rpx;
}
.contentWithBtn {
display: block;
width: 100%;
}
.contentWithBtn>text,
.contentDataPhone,
.divider {
display: inline;
vertical-align: middle;
}
.contentWithBtn .miniBtn {
display: inline-flex;
vertical-align: middle;
margin-left: 12rpx;
}
.phoneRow {
display: flex;
align-items: center;
width: 100%;
}
.phoneRow .contentDataPhone {
flex: 1;
min-width: 0;
margin-right: 20rpx;
}
.phoneRow .miniBtn {
flex-shrink: 0;
}
.phoneMultiList {
display: flex;
flex-direction: column;
align-items: flex-start;
width: 100%;
}
.phoneMultiItem {
display: block;
line-height: 56rpx;
}
.phoneMultiBtn {
margin-top: 16rpx;
}
.bookData {
color: #ffffff;
font-family: "PingFang SC";
font-weight: 500;
font-size: 28rpx;
line-height: 40rpx;
}
.valueRow {
display: flex;
align-items: center;
width: 100%;
}
.valueRow .contentData {
margin-right: 20rpx;
}
.miniBtn {
flex-shrink: 0;
display: inline-flex;
align-items: center;
justify-content: center;
height: 48rpx;
padding: 0 20rpx;
font-size: 22rpx;
line-height: 1;
border-radius: 198rpx;
background: transparent;
border: 2rpx solid #ffffff;
box-sizing: border-box;
width: max-content;
}
.miniBtn text {
font-weight: 600;
}
.titleInfo {
color: #ffffff;
font-family: "PingFang SC";
font-weight: 600;
font-size: 32rpx;
margin: 20rpx 0;
text-align: center;
}
.miniBtn image {
width: 24rpx;
height: 24rpx;
margin-right: 4rpx;
}
.valueRow .arrivalImg {
width: 24rpx;
height: 24rpx;
margin: 0 4rpx 4rpx 0;
}
/* ========== 字体 ========== */
.heroTitle {
font-family: "Noto Serif SC", "Songti SC", serif;
font-weight: 700;
font-size: 100rpx;
letter-spacing: 8rpx;
}
.titleFont1 {
font-family: "Noto Sans SC", "PingFang SC", sans-serif;
}
.titleFont2 {
font-family: "Noto Serif SC", "Songti SC", serif;
}
.titleFont3 {
font-family: "XuanZongTi", "SJxingkai-C", "Noto Serif SC", serif;
font-weight: 400;
}
.titleSize1 {
font-size: 100rpx;
}
.titleSize2 {
font-size: 80rpx;
}
.titleSize3 {
font-size: 60rpx;
}
.heroSeller {
color: #fff;
/* 店名:系统黑体,不依赖网络字库 */
font-family: "PingFang SC", "Heiti SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif;
font-weight: 700;
font-size: 56rpx;
line-height: 68rpx;
}
.shopFont1 {
font-family: "PingFang SC", "Heiti SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif;
}
/* 样式4店名:苹方;安卓无苹方时回退系统默认 */
.shopFontPing {
font-family: "PingFang SC", "PingFang", "Heiti SC", sans-serif;
}
.shopSize1 {
font-size: 56rpx;
line-height: 68rpx;
}
.shopSize2 {
font-size: 44rpx;
line-height: 56rpx;
}
.shopSize3 {
font-size: 32rpx;
line-height: 44rpx;
}
.shopWrap {
max-width: 90%;
text-align: center;
white-space: normal;
word-break: break-all;
}
.heroSlogan {
margin-top: 8rpx;
color: #fff;
font-family: "PingFang SC";
font-weight: 500;
font-size: 28rpx;
line-height: 40rpx;
}
/* ========== 入口 ========== */
.entrance {
display: flex;
flex-direction: column;
position: absolute;
right: 0;
top: 16%;
z-index: 200;
border-radius: 198rpx;
padding: 30rpx 8rpx;
}
.entrance image {
width: 52rpx;
height: 52rpx;
}
.entranceItem {
display: flex;
flex-direction: column;
align-items: center;
color: #fff;
margin-bottom: 32rpx;
padding: 0;
line-height: 34rpx;
background: transparent;
font-family: "PingFang SC";
font-weight: 500;
font-size: 24rpx;
border: none;
}
.entranceItem::after {
border: none;
}
.entranceItem:last-child {
margin-bottom: 0;
}
.entranceItem view {
color: #fff;
font-family: "PingFang SC";
font-weight: 500;
font-size: 24rpx;
line-height: 34rpx;
margin-top: 20rpx;
}
.style1 .heroTitle {
margin-bottom: 20rpx;
}
.style2 .entrance,
.style3 .entrance,
.style4 .entrance {
position: relative;
right: auto;
top: auto;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 28rpx 18rpx;
border-radius: 24rpx;
margin: 0 40rpx 60rpx;
border: 2rpx solid transparent;
background: transparent;
}
.style2 .entrance .entranceItem,
.style3 .entrance .entranceItem,
.style4 .entrance .entranceItem {
margin: 0 18rpx;
flex-shrink: 0;
padding: 0;
}
/* ========== 样式2 ========== */
.style2 .heroTitle {
display: none;
}
.style2 .bookInfo {
text-align: center;
margin: 24rpx 0 50rpx;
background: transparent;
border: none;
padding: 0;
}
.bookWave {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
margin: 70rpx 0 70rpx;
}
.waveLine {
width: 120rpx;
height: 4rpx;
background: #ffe6c5;
flex-shrink: 0;
}
.waveBars {
display: flex;
align-items: center;
height: 48rpx;
margin: 0 16rpx;
}
.waveBar {
width: 4rpx;
margin: 0 6rpx;
background: #ffe6c5;
border-radius: 2rpx;
}
.waveBar:nth-child(1),
.waveBar:nth-child(9) {
height: 4rpx;
}
.waveBar:nth-child(2),
.waveBar:nth-child(8) {
height: 12rpx;
}
.waveBar:nth-child(3),
.waveBar:nth-child(7) {
height: 20rpx;
}
.waveBar:nth-child(4),
.waveBar:nth-child(6) {
height: 28rpx;
}
.waveBar:nth-child(5) {
height: 36rpx;
}
.style2 .infoItem {
align-items: center;
margin-bottom: 28rpx;
}
.style2 .contentWithBtn {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
text-align: center;
}
.style2 .contentWithBtn .miniBtn {
margin-left: 12rpx;
margin-top: 8rpx;
}
/* ========== 样式3 ========== */
.style3 .heroTitle {
display: none;
}
.style3 .heroSeller,
.style3 .heroSlogan {
width: 100%;
text-align: left;
}
.style3 .bookInfo {
width: 100%;
text-align: left;
position: relative;
box-sizing: border-box;
margin: 36rpx 0 40rpx;
background: transparent;
border: none;
padding: 0;
}
.style3 .infoItem {
align-items: center;
flex-direction: row;
width: 85%;
}
.style3 .contentData,
.style3 .marLeft {
font-size: 32rpx;
}
.style3 .label {
margin-right: 20rpx;
flex-shrink: 0;
}
.style3 .infoLine {
align-items: baseline;
}
.style3 .infoLine .label {
flex-shrink: 0;
margin-right: 20rpx;
}
.style3 .infoLine .infoRight {
flex: 1;
min-width: 0;
width: auto;
display: block;
line-height: 48rpx;
text-align: left;
}
.style3 .infoLine .infoRight>text,
.style3 .infoLine .infoRight .contentDataPhone {
display: inline;
vertical-align: baseline;
}
.style3 .infoLine .miniBtn {
display: inline-flex;
vertical-align: middle;
margin-left: 12rpx;
margin-top: 0;
}
.bookSideText {
position: absolute;
right: 20rpx;
top: 8%;
writing-mode: vertical-rl;
font-family: "Noto Serif SC", "Songti SC", serif;
font-weight: 700;
font-size: 72rpx;
letter-spacing: 12rpx;
line-height: 1;
background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
pointer-events: none;
}
.style3 .bookSideText {
font-size: 100rpx;
}
/* ========== 样式4 ========== */
.style4 {
text-align: left;
}
.style4 .heroSeller,
.style4 .heroSlogan {
display: none;
}
.style4 .heroTitle {
text-align: left;
margin-bottom: 16rpx;
}
.style4 .bookInfo {
text-align: left;
margin: 0 0 40rpx;
}
.style4 .bookInvite {
margin: 12rpx 0 28rpx;
font-family: "PingFang SC";
font-weight: 600;
font-size: 40rpx;
line-height: 56rpx;
color: #fff;
}
.style4 .bookDivider {
width: 100%;
height: 2rpx;
margin: 0 0 32rpx;
}
.style4 .style4Item {
flex-direction: column;
align-items: flex-start;
margin-bottom: 32rpx;
}
.style4 .style4Item .label {
margin: 0 0 8rpx;
color: #fff;
}
.style4 .style4Item .contentWithBtn>text,
.style4 .style4Item .contentWithBtn .contentDataPhone {
display: inline;
vertical-align: baseline;
line-height: 60rpx;
}
.style4 .style4Item .miniBtn {
display: inline-flex;
vertical-align: middle;
margin-left: 12rpx;
}
.style4 .placeBox {
display: block;
width: 100%;
}
.style4 .placeShop,
.style4 .placeTable {
display: block;
width: 100%;
}
.style4 .timeBox {
display: block;
width: 100%;
}
.style4 .timeDate,
.style4 .timeSlot {
display: flex;
width: 100%;
}
.style4 .timeDate,
.style4 .placeShop,
.style4 .placeTable,
.style4 .timeSlot {
line-height: 60rpx;
}
.style4 .heroTitle,
.style4 .bookData,
.style4 .bookInvite {
color: #fff;
-webkit-text-fill-color: #fff;
background-image: none;
}
/* ========== 内容模块 ========== */
.receptionBox {
display: flex;
align-items: stretch;
margin: 0 40rpx 60rpx;
border-radius: 24rpx;
padding: 40rpx 20rpx 40rpx 28rpx;
background: transparent;
border: none;
color: #fff;
}
.peopleInfo {
width: 160rpx;
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.headerimg,
.noHeaderimg {
width: 108rpx;
height: 108rpx;
border-radius: 50%;
background: #ddd;
}
.peopleName {
margin-top: 12rpx;
color: #fff;
font-weight: 600;
line-height: 1.3;
word-break: break-all;
}
.peopleRole {
margin-top: 4rpx;
color: #fff;
line-height: 1.3;
}
.handleInfo {
flex: 1;
margin-left: 20rpx;
display: flex;
flex-direction: column;
min-width: 0;
}
.title1 {
font-weight: 600;
color: #fff;
line-height: 1.4;
}
.receptionBox .texts {
margin-top: 8rpx;
color: #fff;
line-height: 1.5;
}
.contactBtns {
display: flex;
margin-top: auto;
padding-top: 24rpx;
justify-content: space-between;
}
.brownFont {
width: 48%;
height: 64rpx;
border-radius: 999rpx;
border: 2rpx solid #fff;
color: #fff;
background: transparent;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
.brownFont image {
width: 28rpx;
height: 28rpx;
margin-right: 8rpx;
}
.welcomeInfo {
text-align: center;
color: #fff;
margin-bottom: 80rpx;
display: block;
font-weight: 600;
}
.roomSwiperWrap {
width: 100%;
padding: 0 20rpx;
box-sizing: border-box;
margin-bottom: 80rpx;
}
.roomSwiper {
width: 100%;
height: 480rpx;
border-radius: 16rpx;
overflow: hidden;
box-sizing: border-box;
border: 2rpx solid rgba(255, 255, 255, 0.35);
}
.roomSlide {
position: relative;
width: 100%;
height: 100%;
}
.roomSlideImg {
width: 100%;
height: 100%;
display: block;
}
.roomSlideName {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: rgba(96, 96, 96, 0.92);
color: #ffffff;
font-family: "PingFang SC";
font-weight: 500;
font-size: 32rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding: 0 24rpx;
box-sizing: border-box;
}
.publicModule {
margin: 20rpx 0;
padding: 20rpx 0 40rpx;
border-radius: 20rpx;
display: flex;
align-items: center;
flex-direction: column;
color: #fff;
}
.rechargeItems {
display: flex;
min-height: 160rpx;
border-radius: 20rpx;
border: 2rpx dashed #fff;
position: relative;
padding: 20rpx 40rpx;
flex-direction: column;
background: transparent;
margin: 0 20rpx 24rpx;
align-self: stretch;
box-sizing: border-box;
}
.rechargeTitle {
font-weight: 600;
letter-spacing: 4rpx;
line-height: 50rpx;
font-family: "PingFang SC";
}
.limitation {
margin-top: 8rpx;
color: #fff;
font-family: "PingFang SC";
font-weight: 500;
font-size: 24rpx;
line-height: 34rpx;
}
.favouredPolicy {
margin-top: 16rpx;
color: #fff;
text-decoration: underline;
}
.introduce,
.preferentialCoupon,
.reserveBox {
position: relative;
z-index: 2;
}
.introduce {
box-sizing: border-box;
padding-bottom: 20rpx;
margin: 0 20rpx 20rpx;
}
.introduce image,
.homeImage {
width: 100%;
margin-bottom: 20rpx;
display: block !important;
vertical-align: top;
box-sizing: border-box;
}
.introduce image:nth-last-of-type(1) {
margin-bottom: 0;
}
.labelBox {
width: 100%;
margin-top: 20rpx;
}
.labelBox view,
.labelBox text,
.labelBox image {
margin-bottom: 20rpx !important;
}
.texts {
line-height: 40rpx;
color: #fff;
font-family: PingFang SC;
font-weight: 500;
display: block;
}
.reserveBox {
margin: 20rpx;
}
.reserveBox .title {
margin-bottom: 20rpx;
color: #fff;
font-family: "PingFang SC";
font-weight: 600;
line-height: 44rpx;
}
.items {
width: 100%;
margin-bottom: 20rpx;
color: #fff;
font-family: PingFang SC;
display: block;
}
.videoBox {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.videoBox video {
width: 100%;
box-sizing: border-box;
}
.preferentialCoupon navigator {
margin: 0 20rpx;
box-sizing: border-box;
}
.publicModule navigator {
width: 100%;
}
.preferentialItems {
display: flex;
background: linear-gradient(180deg, #ffefd0 0%, #ffdc9b 100%);
margin-bottom: 20rpx;
min-height: 160rpx;
padding-bottom: 10rpx;
border-radius: 20rpx;
}
.sectionTitle {
display: flex;
align-items: center;
justify-content: center;
align-self: stretch;
width: 100%;
box-sizing: border-box;
margin-bottom: 20rpx;
color: #ffffff;
font-family: "PingFang SC";
font-weight: 600;
font-size: 40rpx;
line-height: 56rpx;
}
.heroBlock .bookSectionTitle {
display: none;
}
.sectionTitle::before {
content: '';
flex: 1;
height: 2rpx;
margin-right: 24rpx;
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95));
}
.sectionTitle::after {
content: '';
flex: 1;
height: 2rpx;
margin-left: 24rpx;
background: linear-gradient(to left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95));
}
.itemLeft {
width: 26%;
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
}
.itemRight {
width: 74%;
padding-right: 10rpx;
margin-left: 18rpx;
display: flex;
align-items: center;
}
.couponLine {
margin: 24rpx 0 4rpx;
border-right: 2rpx dashed #f6231b;
}
.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;
}
.discountText1 {
text-align: center;
border-radius: 6rpx;
font-family: PingFang SC;
background: transparent;
width: max-content;
padding: 2rpx 8rpx;
position: absolute;
left: 16rpx;
top: 12rpx;
}
.discountText2 {
background: #fd4d59;
color: #fff;
}
.discountText3 {
color: #fd4d59;
border: 2rpx solid #fd4d59;
}
.priceText {
display: flex;
align-items: baseline;
justify-content: center;
font-family: PingFang SC;
color: #f6231b;
font-weight: 600;
font-size: 48rpx;
margin-top: 6rpx;
}
.priceText text {
font-size: 48rpx;
}
.icons {
color: #f6231b;
text-align: center;
}
.btns {
margin: 24rpx 20rpx 0 0;
display: flex;
justify-content: space-evenly;
align-items: baseline;
flex-direction: column;
height: 90%;
flex: 1;
}
.anameText {
font-weight: 600;
color: #894C16;
}
.btnBox {
display: flex;
flex-direction: column;
}
.orderingFood {
padding: 0 20rpx;
color: #fff;
border: none;
text-align: center;
border-radius: 20rpx;
line-height: 44rpx;
height: 44rpx;
width: max-content;
flex-shrink: 0;
background: #894C16;
}
.orderingFood1 {
border: 2rpx solid #894C16 !important;
background: transparent !important;
color: #894C16 !important;
font-weight: 600;
}
.orderingFood2 {
border: none !important;
background: #894C16 !important;
color: #fff !important;
font-weight: 400;
padding: 0 34rpx;
}
.grantNum {
display: flex;
flex-direction: column;
align-items: center;
color: #c36607;
margin-top: 10rpx;
}
.grantNum text {
color: #f6231b;
margin-right: 10rpx;
}
.bottom {
margin-top: 4rpx;
width: 100%;
color: #c36607;
font-family: PingFang SC;
font-weight: 500;
display: -webkit-box;
word-break: break-all;
word-wrap: break-word;
overflow: hidden;
text-align: left;
}
.nodate {
padding-left: 20rpx;
}
.vips {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 20rpx;
}
.businessBox {
color: #fff;
font-size: 22rpx;
text-align: center;
font-family: PingFang SC;
display: flex;
}
.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;
}
.shareItem,
.moreBtn,
.paymenBtn {
width: inherit;
background: transparent;
color: #C48138;
border: 2rpx solid #C48138;
height: 80rpx;
border-radius: 42rpx;
font-weight: 600;
margin-right: 20rpx;
padding: 0;
}
.threeBtn {
width: auto;
padding: 0 24rpx;
flex-shrink: 0;
}
.shareItem {
margin-right: 0;
background: #C48138;
color: #fff;
animation-name: scaleDraw;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 2s;
}
.shareItem1 {
padding: 0;
margin-right: 0;
background: #C48138;
color: #fff;
animation: none;
}
.paymenBtn1 {
margin-right: 20rpx;
}
@keyframes scaleDraw {
0% {
transform: scale(1);
}
25% {
transform: scale(1.1);
}
50% {
transform: scale(1);
}
75% {
transform: scale(1.1);
}
}
.musicImg {
width: 62rpx;
height: 62rpx;
position: fixed !important;
right: 8%;
top: 22%;
z-index: 300;
}
.giftImg {
width: 108rpx;
height: 116rpx;
position: fixed !important;
right: 4%;
top: 28%;
z-index: 300;
transform-origin: 50% 100%;
}
.giftImg1 {
transform: scale(0);
}
.cannotImg {
width: 200rpx;
height: 66rpx;
transform: rotate(-45deg);
position: fixed;
left: 38%;
z-index: 999;
top: 50%;
}
.fullscreenMask {
position: fixed;
top: 35%;
margin: 0 auto;
height: 580rpx;
z-index: 100;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
width: 100%;
}
.fullscreenMask image {
width: 544rpx;
height: 600rpx;
}
.targetPoint {
position: fixed;
width: 108rpx;
height: 116rpx;
background: transparent;
z-index: 100;
}
.titleModal {
width: 100%;
color: #000;
font-family: PingFang SC;
font-weight: 500;
font-size: 44rpx;
text-align: center;
position: relative;
}
.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;
}
.btnsLeft,
.btnsRight {
width: 43%;
border-radius: 42rpx;
bottom: 10%;
}
.btnsLeft {
background: #fff;
border: 2rpx solid #0346a5;
color: #0346a5;
}
.btnsRight {
background: linear-gradient(104.24deg, #4c8dad -57.47%, #0143a3 55.72%, #42a5ff 148.72%);
color: #fff;
}
#payModal {
display: flex;
align-items: center;
}
.mymodal {
top: 30% !important;
width: 80% !important;
margin: 0 auto !important;
left: 0 !important;
right: 0 !important;
}
.mymodal .mymodal-content {
height: auto !important;
}
#couponModal .titleModal {
position: relative;
width: 544rpx;
background: #f14033;
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
margin: 94% auto 0;
}
#couponModal .couponWrap {
position: relative;
width: 544rpx;
margin: 0 auto;
background: #f14033;
border-bottom-left-radius: 20rpx;
border-bottom-right-radius: 20rpx;
}
#couponModal .mymodal-title {
padding: 0 80rpx;
}
#couponModal .mymodal-content {
padding: 0 80rpx 40rpx;
}
#couponModal .mymodal {
background: rgba(0, 0, 0, 0.8);
width: 100% !important;
top: 0 !important;
height: auto !important;
z-index: 300;
}
.nameInfo {
font-family: PingFang SC;
font-weight: 500;
line-height: 38rpx;
color: #fff;
margin-bottom: 28rpx;
text-align: center;
padding: 44rpx 30rpx 0;
}
.couponTotal {
color: #fff;
font-family: PingFang SC;
font-weight: 500;
line-height: 48rpx;
padding-bottom: 16rpx;
}
.counterText {
color: #ffc806;
font-weight: 600;
display: flex;
font-size: 100rpx;
align-items: flex-end;
justify-content: center;
margin: 16rpx 0;
}
.couponInfo {
color: #fff;
text-align: center;
margin-bottom: 20rpx;
font-weight: 600;
display: flex;
flex-direction: column;
align-items: center;
line-height: 78rpx;
}
.couponBtn {
width: 80%;
margin: 16rpx auto 20rpx;
background: #fff;
font-weight: 600;
text-align: center;
padding: 12rpx 0;
color: #f14033;
border-radius: 8rpx;
height: 60rpx;
line-height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
}
.couponBtn1 {
padding: 18rpx 0;
border-radius: 198rpx;
font-weight: 600;
}
.couponText {
color: #fff;
text-decoration: underline;
text-align: center;
padding-bottom: 44rpx;
font-weight: 600;
letter-spacing: 2rpx;
}
.closeImg {
width: 60rpx;
height: 60rpx;
position: absolute;
right: 6%;
top: 9%;
z-index: 250 !important;
}
.closeBox {
margin-top: 20rpx;
color: #fff;
font-family: PingFang SC;
font-weight: 400;
display: flex;
align-items: center;
justify-content: center;
}
/* ========== 主题色(置底,便于覆盖) ========== */
/* 1. 主题底色 + page-theme-fade */
.pagepearlWhite {
background-color: rgba(70, 68, 68, 1);
}
.pagepearlWhite.style4 .bookDivider {
background: #fff;
}
.pageturmeric {
background-color: #C4A26F;
}
.pageturmeric .page-theme-fade {
background: linear-gradient(180deg, rgba(196, 162, 111, 0) 0%, rgba(196, 162, 111, 0.12) 70%, rgba(196, 162, 111, 0.55) 80%, #C4A26F 100%);
}
.pagestoneGreen {
background-color: #45675A;
}
.pagestoneGreen .page-theme-fade {
background: linear-gradient(180deg, rgba(69, 103, 90, 0) 0%, rgba(69, 103, 90, 0.12) 70%, rgba(69, 103, 90, 0.55) 80%, #45675a 100%);
}
.pagelanCaiHe {
background-color: #076CDB;
}
.pagelanCaiHe .page-theme-fade {
background: linear-gradient(180deg, rgba(7, 108, 219, 0) 0%, rgba(7, 108, 219, 0.12) 70%, rgba(7, 108, 219, 0.55) 80%, #076cdb 100%);
}
.pageultramarine {
background-color: #335D89;
}
.pageultramarine .page-theme-fade {
background: linear-gradient(180deg, rgba(51, 93, 137, 0) 0%, rgba(51, 93, 137, 0.12) 70%, rgba(51, 93, 137, 0.55) 80%, #335d89 100%);
}
.pagechinaRed {
background-color: #C83F32;
}
.pagechinaRed .page-theme-fade {
background: linear-gradient(180deg, rgba(200, 63, 50, 0) 0%, rgba(200, 63, 50, 0.12) 70%, rgba(200, 63, 50, 0.55) 80%, #c83f32 100%);
}
.pagecrimson {
background-color: #791013;
}
.pagecrimson .page-theme-fade {
background: linear-gradient(180deg, rgba(121, 16, 19, 0) 0%, rgba(121, 16, 19, 0.12) 70%, rgba(121, 16, 19, 0.55) 80%, #791013 100%);
}
.pageblackBlueGradient {
background-color: #181716;
}
.pageblackBlueGradient .page-theme-fade {
background: linear-gradient(180deg, rgba(24, 23, 22, 0) 0%, rgba(24, 23, 22, 0.12) 70%, rgba(24, 23, 22, 0.55) 80%, #181716 100%);
}
/* 2. pagepearlWhite 组件覆盖 */
.pagepearlWhite .hero-image,
.isCustom .hero-image {
-webkit-mask-image: linear-gradient(to bottom,
#000000 0%,
#000000 66%,
rgba(0, 0, 0, .90) 74%,
rgba(0, 0, 0, .42) 88%,
transparent 100%);
mask-image: linear-gradient(to bottom,
#000000 0%,
#000000 66%,
rgba(0, 0, 0, .90) 74%,
rgba(0, 0, 0, .42) 88%,
transparent 100%);
}
.pagepearlWhite.style1 .bookInfo {
box-sizing: border-box;
padding: 22rpx;
margin: 0 20rpx;
}
.pagepearlWhite.style2 .bookInfo {
margin: 24rpx 0 0;
}
.pagepearlWhite .entrance {
margin: 0 40rpx 24rpx;
box-sizing: border-box;
}
.pagepearlWhite .receptionBox {
background: transparent;
border: none;
}
/* 3. pageturmeric 覆盖 */
.pageturmeric .waveLine,
.pageturmeric .waveBar {
background: #815635;
}
.pageturmeric .style4 .heroTitle,
.pageturmeric .style4 .bookData,
.pageturmeric .style4 .bookInvite {
color: #894C16;
-webkit-text-fill-color: #894C16;
background-image: none;
}
.pageturmeric .style4 .style4Item .label {
color: #FFEFC5;
}
.pageturmeric .style4 .style4Item .contentData,
.pageturmeric .style4 .style4Item .contentDataPhone {
color: #894C16;
}
.pageturmeric .style4 .bookDivider {
background: rgba(137, 76, 22, 0.35);
}
.pageturmeric .bookSideText {
background-image: linear-gradient(180deg, #c37a3a 0%, #894c16 100%);
}
.pageturmeric .heroTitle {
background-image: linear-gradient(180deg, #c37a3a 0%, #894c16 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.pageturmeric .style2 .heroSeller,
.pageturmeric .style2 .heroSlogan,
.pageturmeric .style2 .bookData,
.pageturmeric .style2.welcomeInfo,
.pageturmeric .style3.welcomeInfo {
color: #894C16;
}
.pageturmeric .entranceItem view {
color: #FFEFC5;
}
.pageturmeric .scroll-body,
.pageturmeric .infoItem>.contentData:not(.bookData):not(.contentWithBtn),
.pageturmeric .valueRow>.contentData,
.pageturmeric .contentDataPhone,
.pageturmeric .divider,
.pageturmeric .contentWithBtn>text,
.pageturmeric .sectionTitle,
.pageturmeric .peopleName,
.pageturmeric .peopleRole,
.pageturmeric .title1,
.pageturmeric .receptionBox .texts,
.pageturmeric .limitation,
.pageturmeric .rechargeTitle {
color: #894C16;
}
.pageturmeric .rechargeItems {
background: #FFEFC5;
border: none;
}
.pageturmeric .bookData {
color: #fff;
}
.pageturmeric .miniBtn {
background: #FFEFC5;
color: #894C16;
border: none;
}
.pageturmeric .entranceFeedback {
padding: 12rpx 10rpx;
border-radius: 24rpx;
color: #894C16;
}
.pageturmeric .receptionBox {
background: #FFEFC5;
border-color: transparent;
color: #894C16;
border: none;
}
.pageturmeric .brownFont {
border-color: #894C16;
color: #894C16;
background: transparent;
}
.pageturmeric .welcomeInfo {
color: #fff;
background-image: none;
-webkit-background-clip: border-box;
background-clip: border-box;
}
.pageturmeric .sectionTitle::before {
background: linear-gradient(to right, rgba(137, 76, 22, 0), rgba(137, 76, 22, 0.95));
}
.pageturmeric .sectionTitle::after {
background: linear-gradient(to left, rgba(137, 76, 22, 0), rgba(137, 76, 22, 0.95));
}
.pageturmeric .moreBtn,
.pageturmeric .paymenBtn {
color: #894C16;
border-color: #894C16;
background: transparent;
}
.pageturmeric .shareItem,
.pageturmeric .shareItem1 {
background: #894C16;
color: #fff;
border-color: transparent;
}
/* 4. pagecolor 覆盖(非白非金彩系共用) */
.pagecolor.style4 .bookDivider {
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
}
.pagecolor .style4 .heroTitle,
.pagecolor .style4 .bookData,
.pagecolor .style4 .bookInvite {
background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
.pagecolor .heroTitle,
.pagecolor .infoItem>.contentData:not(.bookData):not(.contentWithBtn),
.pagecolor .valueRow>.contentData,
.pagecolor .contentDataPhone,
.pagecolor .divider,
.pagecolor .contentWithBtn>text,
.pagecolor .welcomeInfo,
.pagecolor .sectionTitle,
.pagecolor .style2 .heroSeller,
.pagecolor .style2 .heroSlogan,
.pagecolor .style2 .bookData,
.pagecolor .style2.welcomeInf,
.pagecolor .style3 .heroSeller,
.pagecolor .style3 .heroSlogan {
background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.pagecolor .style4 .style4Item .contentData {
width: 100%;
font-size: 40rpx;
line-height: 48rpx;
color: #fff !important;
}
.pagecolor .rechargeTitle,
.pagecolor .limitation {
color: #894C16;
}
.pagecolor .rechargeItems {
background: #ffefc5;
}
.pagecolor .scroll-body {
color: #ffe6c5;
}
.pagecolor .entranceItem view {
color: #ffe6c5;
}
.pagecolor .bookData {
color: #fff;
background-image: none;
-webkit-background-clip: border-box;
background-clip: border-box;
}
.pagecolor .miniBtn {
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
border-color: transparent;
color: #000;
border: none;
}
.pagecolor .entranceFeedback {
padding: 12rpx 10rpx;
border-radius: 24rpx;
color: #000;
}
.pagecolor .receptionBox {
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
border-color: transparent;
color: #000;
border: none;
}
.pagecolor .peopleName,
.pagecolor .peopleRole,
.pagecolor .title1,
.pagecolor .receptionBox .texts {
color: #000;
}
.pagecolor .brownFont {
border-color: #000;
color: #000;
background: transparent;
}
.pagecolor .sectionTitle::before {
background: linear-gradient(to right, rgba(199, 161, 125, 0), rgba(199, 161, 125, 0.95));
}
.pagecolor .sectionTitle::after {
background: linear-gradient(to left, rgba(199, 161, 125, 0), rgba(199, 161, 125, 0.95));
}
.pagecolor .moreBtn,
.pagecolor .paymenBtn {
position: relative;
border: none;
background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
.pagecolor .moreBtn::after,
.pagecolor .paymenBtn::after {
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
border-radius: 42rpx;
padding: 2rpx;
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
box-sizing: border-box;
border: none;
width: auto;
height: auto;
transform: none;
}
.pagecolor .shareItem,
.pagecolor .shareItem1 {
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
color: #000;
border-color: transparent;
border: none;
}
.pagecolor .style4 .timeSlot>text,
.pagecolor .style4 .style4Item .contentWithBtn>text,
.pagecolor .style4 .style4Item .contentDataPhone {
background-image: none;
-webkit-background-clip: border-box;
background-clip: border-box;
color: #fff;
-webkit-text-fill-color: #fff;
}
.pagecolor .style4 .miniBtn,
.pagecolor .style4 .miniBtn text {
color: #000;
}
/* 5. isCustom 文字色覆盖(边框/背景见下方「版块边框背景」专区) */
.isCustom .waveLine,
.isCustom .waveBar {
background: #fff;
}
.isCustom .style4 .heroTitle,
.isCustom .style4 .bookData,
.isCustom .style4 .bookInvite {
background-image: none;
color: #fff;
-webkit-text-fill-color: #fff;
}
.isCustom .bookSideText {
background-image: none;
color: #fff;
-webkit-text-fill-color: #fff;
}
/* ============================================================================
* 版块边框 / 背景(集中配置,方便改 margin、padding)
* ---------------------------------------------------------------------------
* 样式1:主题色无边框无底;自定义 → bookInfo、borderSty
* 样式2:主题色 → entrance;自定义 → heroBlock.style2、entrance、borderSty
* 样式3:主题色 → entrance;自定义 → bookInfo、entrance、borderSty
* 样式4:主题色 → entrance;自定义 → heroBlock.style4、entrance、borderSty
* 全样式自定义:receptionBox 都要有底+渐变边框
* ============================================================================ */
/* --- 渐变描边公用(主题色非金 entrance / 自定义版块) --- */
.panelGradBorder::before,
.pagecolor.style2 .entrance::before,
.pagecolor.style3 .entrance::before,
.pagecolor.style4 .entrance::before,
.isCustom.style1 .bookInfo::before,
.isCustom.style1 .borderSty::before,
.isCustom.style2 .heroBlock.style2::before,
.isCustom.style2 .entrance::before,
.isCustom.style2 .borderSty::before,
.isCustom.style3 .bookInfo::before,
.isCustom.style3 .entrance::before,
.isCustom.style3 .borderSty::before,
.isCustom.style4 .heroBlock.style4::before,
.isCustom.style4 .entrance::before,
.isCustom.style4 .borderSty::before,
.isCustom .receptionBox::before {
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
border-radius: inherit;
padding: 2rpx;
background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
box-sizing: border-box;
z-index: 0;
}
/* ========== 自定义 · 全样式 receptionBox ========== */
.isCustom .receptionBox {
position: relative;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.1);
border: none;
border-radius: 24rpx;
padding: 40rpx 20rpx 40rpx 28rpx;
margin: 0 40rpx 60rpx;
color: #fff;
}
.isCustom .receptionBox .peopleName,
.isCustom .receptionBox .peopleRole,
.isCustom .receptionBox .title1,
.isCustom .receptionBox .texts {
color: #fff;
}
/* ========== 样式1 ========== */
/* 主题色:不加边框/背景 */
/* 自定义:bookInfo、borderSty */
.isCustom.style1 .bookInfo,
.isCustom.style1 .borderSty {
position: relative;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.1);
border: none;
border-radius: 20rpx;
}
.isCustom.style1 .bookInfo {
padding: 22rpx;
margin: 60rpx 0 0 0;
}
.style1 .bookInfo>.heroSlogan {
margin: 0 0 20rpx;
text-align: left;
}
.isCustom.style1 .borderSty {
padding: 24rpx 0;
margin: 0 20rpx 0;
}
/* ========== 样式2 ========== */
/* 主题色:仅 entrance */
.pageturmeric.style2 .entrance {
border: 2rpx solid #FFEFC5;
background: transparent;
}
.pageturmeric.style2 .entrance::before {
display: none;
}
.pagecolor.style2 .entrance {
border: none;
background: rgba(0, 0, 0, 0.1);
}
/* 自定义:heroBlock.style2、entrance、borderSty */
.isCustom.style2 .heroBlock.style2,
.isCustom.style2 .entrance,
.isCustom.style2 .borderSty {
position: relative;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.1);
border: none;
border-radius: 20rpx;
}
.isCustom.style2 .heroBlock.style2 {
padding: 42rpx 32rpx 10rpx 32rpx;
margin: 0 40rpx 80rpx;
}
.isCustom.style2 .entrance {
border-radius: 24rpx;
padding: 28rpx 18rpx;
margin: 0 40rpx 60rpx;
}
.isCustom.style2 .borderSty {
padding: 24rpx 0;
margin: 0 20rpx 60rpx;
}
/* ========== 样式3 ========== */
/* 主题色:仅 entrance */
.pageturmeric.style3 .entrance {
border: 2rpx solid #FFEFC5;
background: transparent;
}
.pageturmeric.style3 .entrance::before {
display: none;
}
.pagecolor.style3 .entrance {
border: none;
background: rgba(0, 0, 0, 0.1);
}
/* 自定义:bookInfo、entrance、borderSty */
.isCustom.style3 .bookInfo,
.isCustom.style3 .entrance,
.isCustom.style3 .borderSty {
position: relative;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.1);
border: none;
border-radius: 20rpx;
}
.isCustom.style3 .bookInfo {
padding: 42rpx 22rpx 18rpx 22rpx;
margin-top: 60rpx;
}
.isCustom.style3 .entrance {
border-radius: 24rpx;
padding: 28rpx 18rpx;
margin: 0 40rpx 60rpx;
}
.isCustom.style3 .borderSty {
padding: 24rpx 0;
margin: 0 40rpx 60rpx;
}
/* ========== 样式4 ========== */
/* 主题色:仅 entrance */
.pageturmeric.style4 .entrance {
border: 2rpx solid #FFEFC5;
background: transparent;
}
.pageturmeric.style4 .entrance::before {
display: none;
}
.pagecolor.style4 .entrance {
border: none;
background: rgba(0, 0, 0, 0.1);
}
/* 自定义:heroBlock.style4、entrance、borderSty */
.heroBlock.style1 .entrance {
margin: 0 12rpx 24rpx;
}
.isCustom.style4 .heroBlock.style4,
.isCustom.style4 .entrance,
.isCustom.style4 .borderSty {
position: relative;
box-sizing: border-box;
background: rgba(0, 0, 0, 0.1);
border: none;
border-radius: 20rpx;
}
.isCustom.style4 .heroBlock.style4 {
padding: 32rpx 22rpx 10rpx;
margin: 0 40rpx 60rpx;
}
.isCustom.style4 .entrance {
border-radius: 24rpx;
padding: 28rpx 18rpx;
margin: 0 40rpx 60rpx;
}
.isCustom.style4 .borderSty {
padding: 24rpx 0;
margin: 0 20rpx 60rpx;
}
\ No newline at end of file
... ...
... ... @@ -49,6 +49,7 @@
flex-direction: column;
align-items: flex-end;
padding: 16rpx 0 16rpx 20rpx;
flex: 1;
}
.leftLine {
... ...
... ... @@ -59,7 +59,7 @@ Page({
if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD')
item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
})
// 筛选出 未过期的 && 开启状态的充值活动
recharge_data = recharge_data.filter(item => {
... ...
... ... @@ -6,23 +6,58 @@
"miniprogram": {
"list": [
{
"name": "免费券付费券付款页",
"pathName": "pack-activity/pack/buyFreeCoupon",
"query": "sid=4352",
"name": "测试-----新邀请函入口页",
"pathName": "pages/customer/detail_owner_invitation_new",
"query": "id=3359188&hasInvitation=1&hasSellerShare=1&uid=",
"launchMode": "default",
"scene": null
},
{
"name": "新版邀请函背景色背景图",
"pathName": "pack-invitation/pages/detail_owner_invitation14",
"query": "id=3203230&tplid=undefined&onlineReserve=1&hasInvitation=1&hasSellerShare=1&isDeposit=1&isMeeting=1&paymentId=&showSex=2",
"launchMode": "default",
"scene": null
},
{
"name": "aibook",
"pathName": "pages/customer/aiBook",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "4352-----新邀请函入口页",
"pathName": "pages/customer/detail_owner_invitation_new",
"query": "id=3206045&hasInvitation=1&hasSellerShare=&uid=7035&fromid=oB-xJ5NGdgXHM0Pdsq2kAf7z-n9k",
"query": "id=3206045&hasInvitation=1&hasSellerShare=1&uid=7035",
"launchMode": "default",
"scene": null
},
{
"name": "测试-----新邀请函入口页",
"pathName": "pages/customer/detail_owner_invitation_new",
"query": "id=3163225&hasInvitation=1&hasSellerShare=1&uid=",
"name": "订个包间效果",
"pathName": "pack-invitation/pages/detail_owner_invitation16",
"query": "id=3206045&hasInvitation=1&hasSellerShare=1&uid=7035",
"launchMode": "default",
"scene": null
},
{
"name": "登陆",
"pathName": "pages/customer/login",
"query": "types=1",
"launchMode": "default",
"scene": null
},
{
"name": "效果图2",
"pathName": "pack-invitation/pages/detail_owner_invitation15",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "免费券付费券付款页",
"pathName": "pack-activity/pack/buyFreeCoupon",
"query": "sid=8",
"launchMode": "default",
"scene": null
},
... ... @@ -111,13 +146,6 @@
"scene": null
},
{
"name": "登陆",
"pathName": "pages/customer/login",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "意见反馈",
"pathName": "pages/pinglun/createOpinion",
"query": "oid=392094&sellid=4352&sellName=14&types=1",
... ...