Commit 47afa499af21bf37582a248d9b2de3c9f9ee0f70

Authored by pengye
1 parent 56f5feef

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

@@ -68,7 +68,8 @@ @@ -68,7 +68,8 @@
68 "pages/customer/login", 68 "pages/customer/login",
69 "pages/me/consumeAmount", 69 "pages/me/consumeAmount",
70 "pages/me/consumeDetails", 70 "pages/me/consumeDetails",
71 - "pages/me/myBalance" 71 + "pages/me/myBalance",
  72 + "pages/customer/aiBook"
72 ], 73 ],
73 "requiredPrivateInfos": [ 74 "requiredPrivateInfos": [
74 "getLocation", 75 "getLocation",
@@ -175,7 +176,8 @@ @@ -175,7 +176,8 @@
175 "pages/detail_owner_invitation10", 176 "pages/detail_owner_invitation10",
176 "pages/detail_owner_invitation11", 177 "pages/detail_owner_invitation11",
177 "pages/detail_owner_invitation12", 178 "pages/detail_owner_invitation12",
178 - "pages/detail_owner_invitation13" 179 + "pages/detail_owner_invitation13",
  180 + "pages/detail_owner_invitation14"
179 ] 181 ]
180 } 182 }
181 ], 183 ],
@@ -227,6 +229,9 @@ @@ -227,6 +229,9 @@
227 "scope.userLocation": { 229 "scope.userLocation": {
228 "desc": "你的位置信息用于获得离你最近的餐厅" 230 "desc": "你的位置信息用于获得离你最近的餐厅"
229 }, 231 },
  232 + "scope.record": {
  233 + "desc": "用于按住说话,把语音转成文字"
  234 + },
230 "scope.https://tts.baidu.com/*": { 235 "scope.https://tts.baidu.com/*": {
231 "desc": "你的应用需要获取语音合成的权限" 236 "desc": "你的应用需要获取语音合成的权限"
232 } 237 }
@@ -129,7 +129,7 @@ Page({ @@ -129,7 +129,7 @@ Page({
129 recharge_data.forEach(item => { 129 recharge_data.forEach(item => {
130 item.recharge_list = item.recharge_list ? JSON.parse(item.recharge_list) : ''; 130 item.recharge_list = item.recharge_list ? JSON.parse(item.recharge_list) : '';
131 let recharge_list = item.recharge_list; 131 let recharge_list = item.recharge_list;
132 - item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') 132 + item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
133 }) 133 })
134 // 筛选出 未过期的 && 开启状态的充值活动 134 // 筛选出 未过期的 && 开启状态的充值活动
135 recharge_data = recharge_data.filter(item => { 135 recharge_data = recharge_data.filter(item => {
@@ -505,7 +505,7 @@ Page({ @@ -505,7 +505,7 @@ Page({
505 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额'; 505 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
506 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分'; 506 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
507 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、'); 507 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
508 - item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') 508 + item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
509 }) 509 })
510 // 筛选出 未过期的 && 开启状态的充值活动 510 // 筛选出 未过期的 && 开启状态的充值活动
511 recharge_data = recharge_data.filter(item => { 511 recharge_data = recharge_data.filter(item => {
@@ -294,7 +294,7 @@ @@ -294,7 +294,7 @@
294 <text wx:if="{{activeData.recharge_list.is_coupons=='1'}}">{{activeData.recharge_list.is_coupons=='1'?'赠送'+activeData.certificate:''}}。</text> 294 <text wx:if="{{activeData.recharge_list.is_coupons=='1'}}">{{activeData.recharge_list.is_coupons=='1'?'赠送'+activeData.certificate:''}}。</text>
295 </view> 295 </view>
296 </view> 296 </view>
297 - <view class="limitation"> 297 + <view class="limitation" wx:if="{{activeData.timeStr}}">
298 <view class="limitationTitle font32r">有效期</view> 298 <view class="limitationTitle font32r">有效期</view>
299 <view class="font28r">{{activeData.timeStr}}</view> 299 <view class="font28r">{{activeData.timeStr}}</view>
300 </view> 300 </view>
@@ -505,7 +505,7 @@ Page({ @@ -505,7 +505,7 @@ Page({
505 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额'; 505 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
506 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分'; 506 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
507 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、'); 507 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
508 - item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') 508 + item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
509 }) 509 })
510 // 筛选出 未过期的 && 开启状态的充值活动 510 // 筛选出 未过期的 && 开启状态的充值活动
511 recharge_data = recharge_data.filter(item => { 511 recharge_data = recharge_data.filter(item => {
  1 +// pack-invitation/pages/detail_owner_invitation14.js
  2 +var mta = require('mta-wechat-analysis')
  3 +import util from '../../utils/util';
  4 +import App from '../../utils/api';
  5 +import TP from '../../utils/tpls';
  6 +import RS from '../../utils/reserveStatus'
  7 +import inviteBase from '../common/inviteBase';
  8 +import convertSolarLunar from '../../components/calendar/func/convertSolarLunar';
  9 +
  10 +/** 用餐日期:2027-02-14 星期六 正月初七 */
  11 +function formatInviteDate(ddate) {
  12 + if (!ddate) return '';
  13 + const datePart = util.unixtoTime(ddate, 'YYYY-MM-DD');
  14 + const weekPart = util.unixtoTime(ddate, '星期WW');
  15 + const time = new Date(ddate * 1000);
  16 + const lunar = convertSolarLunar.solar2lunar(
  17 + time.getFullYear(),
  18 + time.getMonth() + 1,
  19 + time.getDate()
  20 + );
  21 + if (!lunar || lunar === -1) {
  22 + return `${datePart} ${weekPart}`;
  23 + }
  24 + return `${datePart} ${weekPart} ${lunar.IMonthCn}${lunar.IDayCn}`;
  25 +}
  26 +
  27 +Page({
  28 + ...inviteBase,
  29 + /**
  30 + * 页面的初始数据
  31 + */
  32 + data: {
  33 + barShow: false, //底部操作栏是否显示
  34 + showMoreOnline: false, //再次预订-在线
  35 + showMoreCall: false, //再次预订-电话
  36 + canPay: false, //支付定金
  37 + canShare: false, //转发邀请函
  38 + isOver: false, //已结束/完成
  39 + isOwner: false, //商家(发起人)视角
  40 + canMeet: false, //客人可确认赴约
  41 + needLogin: true, //确认赴约需先登录/授权
  42 + guestShareCls: 'shareItem shareItem1', //客人转发按钮样式
  43 + threeBtnMore: '', //3按钮布局(在线再次预订)
  44 + threeBtnCall: '', //3按钮布局(电话再次预订)
  45 + threeBtnPay: '', //3按钮布局(支付定金)
  46 + themeImg: '',
  47 + heroBottomStripImage: '',
  48 + heroHeightPx: 410,
  49 + contentStartPx: 350,
  50 + windowHeight: 667,
  51 + canChangeBg: '0', // 模拟:1可换/存背景图,0不可
  52 + customThemeImg: '', // 用户本地更换的背景图
  53 + savedBgImageUrl: '', // 已保存到七牛的地址
  54 + bgSaved: false, // 当前预订是否已保存过背景图
  55 + themeColor: 'pearlWhite',
  56 + pageThemeClass: 'pagewhite',
  57 + entranceIcon: 1,
  58 + actionIcon: 1,
  59 + titleObj: {}, //大标题:色/号可配;书法仅固定文案「预订安排|邀请函」
  60 + shopObj: {}, //店名:色/号可配;字体由样式固定(不可换字体)
  61 + titleCls: '', //大标题字体/字号 class
  62 + shopCls: '', //店名字体/字号/换行 class
  63 + titleStyle: '', //大标题内联色
  64 + shopStyle: '', //店名内联色
  65 + StyleTypeNum: 1, //样式1234
  66 + isCustom: '0', // 1自定义白字,0主题色
  67 + options: {
  68 + tplid: ''
  69 + },
  70 + detail: {},
  71 + staffinfo: {},
  72 + chef: {},
  73 + marketing: {},
  74 + home: {},
  75 + reserve: {},
  76 + signboard: {},
  77 + store: {},
  78 + recharge_data: [],
  79 + coupon_dataList: [],
  80 + seller: {
  81 + name: '',
  82 + tablesText: '',
  83 + date: '',
  84 + addr: ''
  85 + },
  86 + contactPhone: '',
  87 + dataStr: Date.now() * 1 / 1000,
  88 + swich_phone: '0',
  89 + is_comments: '0',
  90 + is_user_comments: false,
  91 + roomimage: [],
  92 + StyleType: '',
  93 + showMoreTip: true,
  94 + hasValueOrder: false, //商家是否开通提前点餐功能
  95 + hasValueCertificate: false, //商家是否开通优惠券功能
  96 + hasValueRecharge: false, //商家是否开通充值功能
  97 + _attentionAnim: {},
  98 + isPlay: '1',
  99 + paymentStatus: '', //定金支付状态 1支付 0未支付
  100 + reserveData: {}, //自定义图文数据
  101 + showMerchantSpeak: false, // 商家有话说(自定义图文/餐厅/菜品/主厨任一有内容)
  102 + toastBool: false, //支付定金提示框
  103 + toastText: '', //支付定金提示文字
  104 + paymentId: '', //定金id
  105 + wxml: null,
  106 + imgSrc: '', //canvas图片地址
  107 + couponData: '', //评价赠送优惠券数据
  108 + timeList: [],
  109 + index: 0,
  110 + isMany: '0', //0默认餐段 1多时段
  111 + temp_ddate: '', //展示的到店时间
  112 + lite_style: '', //小程序转发卡片样式
  113 + isMoreBtn: '', //再次预订按钮
  114 + isPaymenBtn: '', //支付定金按钮
  115 + isShareItem: '', //转发客人按钮
  116 + couponArr: [], //待领取的优惠券列表
  117 + couponList: [], //优惠券列表
  118 + urlsArr: [], //包间预览图片
  119 + animationData: {},
  120 + animationData2: {},
  121 + isShow: '0',
  122 + isFrame: '0',
  123 + isShowBtn: true, //是否展示赴约按钮
  124 + purePhoneNumber: '', //当前人手机号
  125 + wxNickname: '', //微信昵称
  126 + wxAvatar: '', //微信头像
  127 + reserveOpenid: '', //预订人的openid
  128 + openid: getApp().openid,
  129 + customersList: [], //预订人
  130 + countDown: 5, //5秒后自动关闭弹框
  131 + timer: null,
  132 + },
  133 + tablestr: '',
  134 + screenHeight: '',
  135 + attentionAnim: {},
  136 + audioCtx: '', //播报
  137 + timers: null, // 动画定时器
  138 + n: 0,
  139 + modal: '',
  140 + couponModal: '',
  141 + give_user: '',
  142 + one: '0', //在邀请函页面,只弹领券框一次
  143 + /**
  144 + * 生命周期函数--监听页面加载
  145 + */
  146 + onLoad(options) {
  147 + this.id = options.id
  148 + let param = {
  149 + options: options,
  150 + hasOwner: options.hasSellerShare == 1, //是否为发起人
  151 + }
  152 + param.tpls = [TP.tpls(options.tplid)]
  153 + console.log(param);
  154 + console.log(options);
  155 + this.setData(param)
  156 + mta.Page.init({
  157 + "appID": "500667280",
  158 + "eventID": "500667287",
  159 + "statPullDownFresh": true,
  160 + "statShareApp": true,
  161 + "statReachBottom": true,
  162 + "lauchOpts": options, //渠道分析
  163 + });
  164 + this.calculateLayout();
  165 + const systemInfo = wx.getSystemInfoSync();
  166 + this.screenHeight = systemInfo.windowHeight; // 获取屏幕高度
  167 + this.setData({
  168 + windowHeight: systemInfo.windowHeight || 667,
  169 + });
  170 + this.modal = this.selectComponent("#payModal"); //通过给组件所起的id调用组件
  171 + this._onUserCaptureScreen = () => {
  172 + this.modal && this.modal.showModal();
  173 + };
  174 + wx.onUserCaptureScreen(this._onUserCaptureScreen);
  175 + this.couponModal = this.selectComponent("#couponModal");
  176 + this.loadLocalFonts();
  177 + },
  178 + /**
  179 + * 外部字体:https ttf(downloadFile 合法域名需含 nosqn.colorcun.com)
  180 + */
  181 + loadLocalFonts() {
  182 + // 标题用三套 7 字极小包;店名走系统字体,不加载大字库
  183 + const fonts = [{
  184 + family: 'Noto Serif SC',
  185 + url: 'https://nosqn.colorcun.com/NotoSerif_title.ttf',
  186 + weight: 700,
  187 + },
  188 + {
  189 + family: 'Noto Sans SC',
  190 + url: 'https://nosqn.colorcun.com/NotoSans_title.ttf',
  191 + weight: 700,
  192 + },
  193 + {
  194 + family: 'XuanZongTi',
  195 + url: 'https://nosqn.colorcun.com/xinkaiti_title.ttf',
  196 + weight: 400,
  197 + },
  198 + ];
  199 + fonts.forEach((item) => {
  200 + wx.loadFontFace({
  201 + family: item.family,
  202 + global: true,
  203 + source: `url("${item.url}")`,
  204 + scopes: ['webview', 'native'],
  205 + desc: {
  206 + style: 'normal',
  207 + weight: String(item.weight),
  208 + },
  209 + success: () => console.log('font ok', item.family),
  210 + fail: (err) => console.warn('font skip', item.family, err && err.errMsg),
  211 + });
  212 + });
  213 + },
  214 + /** 大标题是否为固定文案(预订安排 / 邀请函);空则按兜底算固定 */
  215 + isFixedTitleText(text) {
  216 + const t = (text == null ? '' : String(text)).trim();
  217 + return !t || t === '预订安排' || t === '邀请函';
  218 + },
  219 + /** 按样式解析标题/店名 class 与内联色 */
  220 + buildTitleShopStyle(StyleTypeNum, titleObj, shopObj) {
  221 + titleObj = titleObj || {};
  222 + shopObj = shopObj || {};
  223 + const styleNum = String(StyleTypeNum || '1');
  224 + const shopText = shopObj.textInfo || this.data.seller.name || (this.data.reserve && this.data.reserve.seller_name) || '';
  225 + let titleCls = '';
  226 + let shopCls = '';
  227 + let titleStyle = '';
  228 + let shopStyle = '';
  229 +
  230 + // 店名:各样式固定字体族,可换字号/颜色;忽略 shopObj.textFont
  231 + if (styleNum === '4') {
  232 + shopCls = 'shopFontPing';
  233 + } else {
  234 + shopCls = 'shopFont1'; // 样式1/2/3 黑体
  235 + }
  236 + if (shopObj.textFontSize) shopCls = (shopCls + ' shopSize' + shopObj.textFontSize).trim();
  237 + if (shopObj.textFontSize == '1' && shopText.length > 11) shopCls = (shopCls + ' shopWrap').trim();
  238 + if (shopObj.textColor) shopStyle = 'color:' + shopObj.textColor;
  239 +
  240 + // 标题:样式2无标题;样式3/4 固定宋体;样式1 可配字体(自定义文案禁用书法)
  241 + if (styleNum === '2') {
  242 + return {
  243 + titleCls: '',
  244 + shopCls,
  245 + titleStyle: '',
  246 + shopStyle
  247 + };
  248 + }
  249 + if (styleNum === '3' || styleNum === '4') {
  250 + titleCls = 'titleFont2';
  251 + if (titleObj.textFontSize) titleCls = (titleCls + ' titleSize' + titleObj.textFontSize).trim();
  252 + if (titleObj.textColor) titleStyle = 'color:' + titleObj.textColor + ';-webkit-text-fill-color:' + titleObj.textColor + ';background-image:none;';
  253 + return {
  254 + titleCls,
  255 + shopCls,
  256 + titleStyle,
  257 + shopStyle
  258 + };
  259 + }
  260 +
  261 + // 样式1
  262 + const fixedTitle = this.isFixedTitleText(titleObj.textInfo);
  263 + let fontKey = titleObj.textFont ? String(titleObj.textFont) : '';
  264 + if (fontKey === '3' && !fixedTitle) fontKey = '2'; // 自定义文案 → 默认宋体
  265 + if (fontKey === '1' || fontKey === '2' || fontKey === '3') titleCls = 'titleFont' + fontKey;
  266 + if (titleObj.textFontSize) titleCls = (titleCls + ' titleSize' + titleObj.textFontSize).trim();
  267 + if (titleObj.textColor) titleStyle = 'color:' + titleObj.textColor + ';-webkit-text-fill-color:' + titleObj.textColor + ';background-image:none;';
  268 + return {
  269 + titleCls,
  270 + shopCls,
  271 + titleStyle,
  272 + shopStyle
  273 + };
  274 + },
  275 + calculateLayout() {
  276 + const info = wx.getWindowInfo ? wx.getWindowInfo() : wx.getSystemInfoSync();
  277 + const width = info.windowWidth || 375;
  278 + const heroHeightPx = Math.round(width * 1.08);
  279 + this.setData({
  280 + heroHeightPx,
  281 + contentStartPx: Math.round(width * 0.92),
  282 + windowHeight: info.windowHeight || 667,
  283 + });
  284 + },
  285 + // 主题图候选:自定义图 → 包间首图 → 餐厅首图 → 门头照
  286 + getThemeImgCandidates() {
  287 + const roomimage = this.data.roomimage;
  288 + const home = this.data.home;
  289 + const marketing = this.data.marketing;
  290 + const list = [];
  291 + if (this.data.customThemeImg) list.push(this.data.customThemeImg);
  292 + const roomFirst = roomimage && roomimage.length > 0 && roomimage[0] && roomimage[0].url;
  293 + if (roomFirst) list.push(roomFirst);
  294 + if (home && home.image) list.push(home.image);
  295 + if (marketing && marketing.logo) list.push(marketing.logo);
  296 + return list.filter((url, i) => url && list.indexOf(url) === i);
  297 + },
  298 + resolveThemeImg() {
  299 + const failed = this._failedThemeImgs || {};
  300 + let themeImg = this.getThemeImgCandidates().find(url => !failed[url]) || '';
  301 + if (!themeImg) {
  302 + themeImg = 'https://qn.colorcun.com/testImg/img4.png';
  303 + }
  304 + if (themeImg !== this.data.themeImg) {
  305 + this.setData({
  306 + themeImg
  307 + });
  308 + }
  309 + return themeImg;
  310 + },
  311 + // 换照片:选本地图直接设为背景(与现有主题图/模糊底逻辑一致)
  312 + onChangeBgPhoto() {
  313 + if (this.data.bgSaved) {
  314 + wx.showToast({
  315 + title: '已保存,不可再更换',
  316 + icon: 'none'
  317 + });
  318 + return;
  319 + }
  320 + // 选图前若正在播报则先暂停;选完/取消后再恢复
  321 + this._skipOnShowRefresh = true;
  322 + this.pauseAudioBeforeMediaPick();
  323 + wx.chooseMedia({
  324 + count: 1,
  325 + mediaType: ['image'],
  326 + sourceType: ['album', 'camera'],
  327 + success: (res) => {
  328 + const file = res.tempFiles && res.tempFiles[0];
  329 + const path = file && (file.tempFilePath || file.path);
  330 + if (!path) return;
  331 + if (this._failedThemeImgs) {
  332 + delete this._failedThemeImgs[path];
  333 + }
  334 + // 换照片后按自定义:白色主题
  335 + this.setData({
  336 + customThemeImg: path,
  337 + themeImg: path,
  338 + heroBottomStripImage: '',
  339 + isCustom: '1',
  340 + themeColor: 'pearlWhite',
  341 + pageThemeClass: 'pagewhite',
  342 + entranceIcon: 1,
  343 + actionIcon: 1,
  344 + });
  345 + },
  346 + complete: () => {
  347 + setTimeout(() => {
  348 + this.resumeAudioAfterMediaPick();
  349 + this._skipOnShowRefresh = false;
  350 + }, 300);
  351 + },
  352 + });
  353 + },
  354 + // 进相册前:正在播则暂停播报并停图标旋转
  355 + pauseAudioBeforeMediaPick() {
  356 + const playing = this.data.isPlay == '1' || (this.audioCtx && !this.audioCtx.paused);
  357 + this._needResumeAudio = playing ? true : false;
  358 + if (!playing) return;
  359 + clearInterval(this.timers);
  360 + if (this.audioCtx && typeof this.audioCtx.pause === 'function') {
  361 + try {
  362 + this.audioCtx.pause();
  363 + } catch (e) {
  364 + console.log('pauseAudioBeforeMediaPick', e);
  365 + }
  366 + }
  367 + this.setData({
  368 + isPlay: '2'
  369 + });
  370 + },
  371 + // 选图结束(成功或取消):若进相册前在播,则继续播放
  372 + resumeAudioAfterMediaPick() {
  373 + if (!this._needResumeAudio) return;
  374 + this._needResumeAudio = false;
  375 + if (!this.audioCtx || typeof this.audioCtx.play !== 'function') return;
  376 + try {
  377 + this.audioCtx.play();
  378 + this.setData({
  379 + isPlay: '1'
  380 + });
  381 + if (typeof this.animation === 'function') {
  382 + clearInterval(this.timers);
  383 + this.animation();
  384 + }
  385 + } catch (e) {
  386 + console.log('resumeAudioAfterMediaPick', e);
  387 + }
  388 + },
  389 + // 保存图片:上传七牛 → 提交后端(后端接口先占位)
  390 + onSaveBgPhoto() {
  391 + if (this.data.bgSaved) {
  392 + wx.showToast({
  393 + title: '只能保存一次',
  394 + icon: 'none'
  395 + });
  396 + return;
  397 + }
  398 + if (!this.data.customThemeImg) {
  399 + wx.showToast({
  400 + title: '请先更换照片',
  401 + icon: 'none'
  402 + });
  403 + return;
  404 + }
  405 + if (this._savingBg) return;
  406 + this._savingBg = true;
  407 + wx.showLoading({
  408 + title: '保存中',
  409 + mask: true
  410 + });
  411 + App.Qiniu.GetUploadToken().then(res => {
  412 + const token = res.data && res.data.token;
  413 + if (!token) {
  414 + return Promise.reject('token empty');
  415 + }
  416 + return util.uploadFile(this.data.customThemeImg, token, 'invitationNew');
  417 + }).then(imageUrl => {
  418 + console.log('七牛背景图地址', imageUrl);
  419 + return this.saveInviteBgImage(imageUrl).then(() => imageUrl);
  420 + }).then(imageUrl => {
  421 + // 展示仍用本地图,避免切换七牛地址时重新加载黑一下
  422 + this.setData({
  423 + bgSaved: true,
  424 + savedBgImageUrl: imageUrl,
  425 + });
  426 + wx.hideLoading();
  427 + this._savingBg = false;
  428 + wx.showToast({
  429 + title: '保存成功',
  430 + icon: 'success'
  431 + });
  432 + }).catch(err => {
  433 + console.log('保存背景图失败', err);
  434 + wx.hideLoading();
  435 + this._savingBg = false;
  436 + wx.showToast({
  437 + title: '保存失败',
  438 + icon: 'none'
  439 + });
  440 + });
  441 + },
  442 + // 上传背景图到后端(接口未就绪,先占位)
  443 + saveInviteBgImage(imageUrl) {
  444 + console.log('saveInviteBgImage 待接后端', {
  445 + rid: this.id || (this.data.options && this.data.options.id),
  446 + imageUrl,
  447 + });
  448 + // TODO: 后端接口就绪后改为真实请求,例如:
  449 + // return App.Reserve.SaveInviteBgImage({
  450 + // rid: this.id || this.data.options.id,
  451 + // image: imageUrl,
  452 + // });
  453 + return Promise.resolve({
  454 + ret: 200,
  455 + data: {
  456 + imageUrl
  457 + }
  458 + });
  459 + },
  460 + // scroll-view 滚动:控制「滑动查看更多」提示
  461 + onScrollViewScroll(event) {
  462 + const scrollTop = (event.detail && event.detail.scrollTop) || 0;
  463 + const tipTop = scrollTop * 1 + this.screenHeight - 80;
  464 + if (tipTop < this.screenHeight) {
  465 + this.setData({
  466 + showMoreTip: true
  467 + });
  468 + } else {
  469 + this.setData({
  470 + showMoreTip: false
  471 + });
  472 + }
  473 + },
  474 + // 去评价
  475 + evaluateFun() {
  476 + let url = util.http_build_query({
  477 + sellerName: this.data.seller.name,
  478 + sellerid: this.data.seller.sid,
  479 + oid: this.data.detail.id,
  480 + types: '1',
  481 + previousPage: '1',
  482 + }, '/pages/pinglun/createOpinion')
  483 + wx.navigateTo({
  484 + url
  485 + })
  486 + },
  487 + /**
  488 + * 生命周期函数--监听页面显示
  489 + */
  490 + onShow: function () {
  491 + if (this._skipOnShowRefresh) {
  492 + // 部分机型 onShow 早于 complete,这里再补一次恢复
  493 + setTimeout(() => {
  494 + this.resumeAudioAfterMediaPick();
  495 + }, 300);
  496 + return;
  497 + }
  498 + this.getDetail()
  499 + this.getText()
  500 + this.getPaymentStatus()
  501 + this.getCheckUserHavePhone()
  502 + this.getreal()
  503 + },
  504 + // 获取包间图片列表
  505 + getroomimage(sellerid) {
  506 + App.Tables.GetTablesPhoto({
  507 + sellerid,
  508 + tableids: this.tablestr
  509 + }).then((json) => {
  510 + console.log('客户经理获取基本信息------', json.data)
  511 + if (json.ret == 200) {
  512 + var urlsArr = [];
  513 + (json.data || []).forEach((v) => {
  514 + if (v && v.url) urlsArr.push(v.url);
  515 + })
  516 + this.setData({
  517 + roomimage: json.data || [],
  518 + urlsArr,
  519 + }, () => this.resolveThemeImg())
  520 + console.log('包间图片地址urlsArr', urlsArr)
  521 + console.log('包间信息roomimage', json.data)
  522 + }
  523 + })
  524 + },
  525 + // 获取店铺详情
  526 + getDetail() {
  527 + App.Reserve.Detail({
  528 + rid: this.data.options.id
  529 + }).then(res => {
  530 + let tablesText = '', //桌子信息
  531 + deskStr = '';
  532 + const tables = (res.data.tables && Array.isArray(res.data.tables)) ? res.data.tables : [];
  533 + tables.forEach((t, i) => {
  534 + tablesText += t.rname + t.name + (i == (tables.length - 1) ? '' : '、');
  535 + deskStr += t.name + (i == (tables.length - 1) ? '' : '、');
  536 + })
  537 + let tabaleids = [];
  538 + tables.forEach(t => {
  539 + tabaleids.push(t.id);
  540 + })
  541 + this.tablestr = tabaleids.toString();
  542 + let reserev = RS.reserve(res.data)
  543 + let dateSmart = formatInviteDate(reserev.ddate);
  544 + let yearMonthDay = util.unixtoTime(reserev.ddate, 'YYYY年MM月DD日')
  545 + let yearMonth = util.unixtoTime(reserev.ddate, 'MM月DD日')
  546 + let dateStr = util.unixtoTime(reserev.ddate, 'HH点')
  547 + let dateStrDivide = util.unixtoTime(reserev.ddate, 'II分')
  548 + let detail = this.formatDatail(reserev, dateSmart)
  549 + if (tables.length > 0) {
  550 + detail.oneTableName = tables[0].name;
  551 + }
  552 + reserev.soltName = '';
  553 + const sellerTel = (reserev.seller && reserev.seller.seller_tel) ? reserev.seller.seller_tel : '';
  554 + this.setData({
  555 + customersList: res.data.openid == getApp().openid ? reserev.customers.slice(1) : [], //预订人返回,邀请人为空
  556 + reserveOpenid: res.data.openid,
  557 + detail,
  558 + is_user_comments: res.data.is_user_comments,
  559 + 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'),
  560 + seller: {
  561 + daily: reserev.seller.daily,
  562 + name: reserev.seller.sellername,
  563 + sid: reserev.sid,
  564 + date: dateSmart,
  565 + tablesText,
  566 + addr: reserev.seller.real_address || reserev.seller.map_address,
  567 + image: reserev.image_url,
  568 + hasOwner: true,
  569 + type: reserev.type,
  570 + is_set_ddate: reserev.is_set_ddate,
  571 + hasUpTime: reserev.type == 1 && reserev.hasRunning && reserev.status != 2,
  572 + tel: sellerTel ? sellerTel.split(',').filter(Boolean) : [],
  573 + soltName: reserev.soltName || detail.mname,
  574 + dateTime: util.unixtoTime(reserev.ddate, 'HH:II'),
  575 + time: util.unixtoTime(reserev.ddate, '星期WW HH:II'),
  576 + lat: reserev.seller.lat,
  577 + long: reserev.seller.long,
  578 + yearMonthDay,
  579 + yearMonth,
  580 + dateStr,
  581 + deskStr,
  582 + dateStrDivide: dateStrDivide == '00分' ? '' : dateStrDivide,
  583 + seller_tel: sellerTel,
  584 + phone: reserev.seller.phone,
  585 + }
  586 + })
  587 + this.updateContactPhone();
  588 + this.give_user = reserev.give_user ? reserev.give_user : '2';
  589 + console.log('reserev信息', reserev);
  590 + console.log('seller信息', this.data.seller);
  591 + console.log('detail信息', this.data.detail);
  592 + setTimeout(() => {
  593 + this.getstaffinfo(res.data.uid, reserev.sid);
  594 + this.getroomimage(reserev.sid)
  595 + this.getSellerVersionFun(reserev.sid);
  596 + }, 0);
  597 + }).catch(res => {
  598 + console.log(res, '详情请求失败');
  599 + })
  600 + },
  601 + // 客户经理获取基本信息
  602 + getstaffinfo(uid, sid) {
  603 + console.log('sellerid', this.data.detail.seller.id);
  604 + App.Activity.GetCustomerActivityBaseinfo({
  605 + sellerid: this.data.detail.seller.id,
  606 + uid
  607 + }).then((json) => {
  608 + if (json.ret == 200) {
  609 + console.log('客户经理获取基本信息------', json.data)
  610 + this.setData({
  611 + staffinfo: json.data,
  612 + couponArr: [],
  613 + })
  614 + this.updateContactPhone();
  615 + this.getSellerTemplateConfFun(sid);
  616 + }
  617 + })
  618 + },
  619 + // 提前点餐
  620 + cookbook() {
  621 + const cookbooklist = this.data.detail.order && this.data.detail.order.cookbooklist;
  622 + if (cookbooklist && cookbooklist.length > 0) {
  623 + let data = {
  624 + rid: this.id,
  625 + oid: this.data.detail.order.id,
  626 + sellerName: this.data.seller.name,
  627 + sid: this.data.seller.sid,
  628 + identity: '1',
  629 + hasSuccess: '1',
  630 + }
  631 + wx.navigateTo({
  632 + url: `/pack-cookbook/pages/success_new?hasSuccess=${data.hasSuccess}&identity=${data.identity}&oid=${data.oid}&rid=${data.rid}&sellerName=${data.sellerName}&sid=${data.sid}`,
  633 + })
  634 + } else {
  635 + App.Advance.CreateOrder({
  636 + rid: this.id,
  637 + }).then(res => {
  638 + if (res.ret != 200) {
  639 + return util.toast(res.msg, 'none')
  640 + }
  641 + wx.navigateTo({
  642 + url: util.http_build_query({
  643 + rid: this.id,
  644 + oid: res.data.id,
  645 + sid: res.data.sellerid,
  646 + sellerName: this.data.seller.name,
  647 + identity: '1',
  648 + }, '/pack-cookbook/pages/index_new')
  649 + });
  650 + })
  651 + }
  652 + },
  653 + // 改到店时间(同步 picker index)
  654 + bindPickerChange(e) {
  655 + this.setData({
  656 + index: e.detail.value * 1
  657 + });
  658 + inviteBase.bindPickerChange.call(this, e);
  659 + },
  660 + // 去商家主页
  661 + sharesettingShop() {
  662 + wx.navigateTo({
  663 + url: util.http_build_query({
  664 + id: this.data.detail.seller.id
  665 + }, '/pages/reserve/shopHome')
  666 + });
  667 + },
  668 + // 分享
  669 + sharesetting() {
  670 + wx.reportMonitor('1017', 1)
  671 + this.closeModal()
  672 + if (this.data.options.isOrder == '1' && this.data.detail.status != '4') {
  673 + let img = this.data.detail.seller.seller_image.replace(/^http:/, "https:");
  674 + return {
  675 + title: '推荐' + this.data.seller.name + ',点击可查看详情并导航到店',
  676 + path: util.http_build_query({
  677 + id: this.data.detail.seller.id
  678 + }, '/pages/reserve/shopHome'),
  679 + imageUrl: img || 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png',
  680 + }
  681 + } else {
  682 + let parmdata = {
  683 + id: this.id,
  684 + fromid: getApp().openid,
  685 + hasInvitation: 1,
  686 + tplid: this.data.options.tplid
  687 + }
  688 + if (this.data.options.uid) {
  689 + parmdata.uid = this.data.options.uid;
  690 + }
  691 + return {
  692 + title: '我已订好' + this.data.seller.name + ',点击可查看详情并导航到店',
  693 + path: util.http_build_query(parmdata, '/pages/customer/detail_owner_invitation_new'),
  694 + imageUrl: this.data.imgSrc || 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png',
  695 + }
  696 + }
  697 + },
  698 + // 获取商家设置营销信息
  699 + getSellerTemplateConfFun(sid) {
  700 + console.log(sid, 'sidsidsidsid');
  701 + App.Seller.GetSellerTemplateConf({
  702 + sid
  703 + }).then(res => {
  704 + let data = res.data
  705 + console.log('data', data);
  706 + let couponList = []
  707 + let StyleType, home, chef, marketing, coupon, coupon_data_pay, coupon_data_free, reserve, swich_phone, is_comments, signboard, store;
  708 + chef = util.determine(data.chef);
  709 + reserve = util.determine(data.reserve);
  710 + marketing = util.determine(data.marketing);
  711 + signboard = util.determine(data.signboard);
  712 + store = util.determine(data.store);
  713 + home = util.determine(data.home);
  714 + StyleType = data.type;
  715 + swich_phone = reserve && reserve.swich_phone ? reserve.swich_phone : '0';
  716 + if (store) store.content = (store.is_introduce_all == '1' && store.content) ? util.determine(store.content) : '';
  717 + if (chef) chef.content = (chef.is_introduce_all == '1' && chef.content) ? util.determine(chef.content) : '';
  718 + if (signboard) signboard.content = (signboard.is_introduce_all == '1' && signboard.content) ? util.determine(signboard.content) : '';
  719 + if (reserve) reserve.content = (reserve.is_introduce_all == '1' && reserve.content) ? util.determine(reserve.content) : '';
  720 + if (home) home.image = (home && home.image && (!home.id_first_image || home.id_first_image != '0')) ? home.image : '';
  721 + if (marketing) {
  722 + marketing.logo = (marketing.logo && (!marketing.is_logo || marketing.is_logo != '0')) ? marketing.logo : '';
  723 + is_comments = marketing.is_comments ? marketing.is_comments : '';
  724 + coupon = (marketing.coupon_data && marketing.is_coupon == '1') ? util.determine(marketing.coupon_data) : '';
  725 + coupon_data_pay = (marketing.coupon_data_pay && marketing.is_coupon_pay == '1') ? util.determine(marketing.coupon_data_pay) : '';
  726 + marketing.coupon_data_payList = coupon_data_pay
  727 + coupon_data_free = (marketing.coupon_data_free && marketing.is_coupon_free == '1') ? util.determine(marketing.coupon_data_free) : '';
  728 + marketing.coupon_data_freeList = coupon_data_free
  729 + let info = marketing.coupon_data_comments ? util.determine(marketing.coupon_data_comments) : '';
  730 + let couponDataId = info && info.length > 0 ? info[0].id : ''
  731 + // 根据券ID获取评价赠送的券详情
  732 + if (couponDataId) this.getEvaluateFun(couponDataId)
  733 + }
  734 + // is_cash 代金券 is_discount折扣券 is_dish菜品券 只有代金券有几折显示
  735 + // 获取全部的优惠券(商家券、个人券、免费券、付费券)
  736 + couponList = this.addCoupons(coupon, couponList);
  737 + couponList = this.addCoupons(coupon_data_pay, couponList);
  738 + couponList = this.addCoupons(coupon_data_free, couponList);
  739 + // 根据券ID获取券详情(空列表不请求)
  740 + if (couponList && couponList.length > 0) {
  741 + this.getActivityByIdFun(couponList)
  742 + }
  743 + // 获取所有充值活动
  744 + this.getRechargeDetail()
  745 + if (store && store.images && store.images.length > 0) store.images = util.determine(store.images);
  746 + if (reserve && reserve.park_info_images && reserve.park_info_images.length > 0) reserve.park_info_images = util.determine(reserve.park_info_images);
  747 + if (signboard && signboard.images && signboard.images.length > 0) signboard.images = util.determine(signboard.images);
  748 + this.getLocalLunchTime(data.lite_style);
  749 + data.is_custom = '0';
  750 + // canChangeBg为1可更换背景图,0不可
  751 + let isCustom = data.is_custom == '1' ? '1' : '0'; // 是否自定义:1 是,主题色:0
  752 + let themeColor = isCustom == '1' ? 'pearlWhite' : data.lite_class;
  753 + let entranceIcon = 1;
  754 + let actionIcon = 1;
  755 + let StyleTypeNum = '1'; //样式类型1234
  756 + //大标题(预订安排/邀请函字样) — 内容应固定;自定义文案时书法失效改默认宋体
  757 + let titleObj = {
  758 + textColor: '#fff', //文字颜色
  759 + textFont: '3', //文字字体1黑体 2宋体 3书法体(仅固定文案可用)
  760 + textFontSize: '1', //文字大小 1大号 2中号 3小号
  761 + textInfo: '邀请函11', //固定:预订安排 / 邀请函
  762 + }
  763 + //店铺名称 — 不可换字体,可换字号/颜色
  764 + let shopObj = {
  765 + textColor: '#fff',
  766 + textFontSize: '2',
  767 + textInfo: '长安大排档总店标题', //大号且>11字自动换行
  768 + }
  769 + const titleShop = this.buildTitleShopStyle(StyleTypeNum, titleObj, shopObj);
  770 + const titleCls = titleShop.titleCls;
  771 + const shopCls = titleShop.shopCls;
  772 + const titleStyle = titleShop.titleStyle;
  773 + const shopStyle = titleShop.shopStyle;
  774 + if (themeColor == 'pearlWhite') {
  775 + entranceIcon = 1;
  776 + actionIcon = 1;
  777 + } else if (themeColor == 'turmeric') {
  778 + entranceIcon = 4;
  779 + actionIcon = 4;
  780 + } else {
  781 + entranceIcon = 3;
  782 + actionIcon = 2;
  783 + }
  784 + let pageThemeClass = 'page' + themeColor;
  785 + if (themeColor != 'pearlWhite' && themeColor != 'turmeric') {
  786 + pageThemeClass = pageThemeClass + ' pagecolor';
  787 + }
  788 + let obj = {
  789 + chef: chef || {},
  790 + marketing: marketing || {},
  791 + home: home || {},
  792 + reserve: reserve || {},
  793 + signboard: signboard || {},
  794 + store: store || {},
  795 + swich_phone: swich_phone || '0',
  796 + is_comments: is_comments || '0',
  797 + StyleType: StyleType || '',
  798 + lite_style: data.lite_style || '',
  799 + couponList: couponList || [],
  800 + canChangeBg: isCustom,
  801 + isCustom,
  802 + themeColor,
  803 + pageThemeClass,
  804 + entranceIcon,
  805 + actionIcon,
  806 + StyleTypeNum,
  807 + titleObj,
  808 + shopObj,
  809 + titleCls,
  810 + shopCls,
  811 + titleStyle,
  812 + shopStyle,
  813 + isMoreBtn: marketing && marketing.is_online_book == '1' && this.data.options.onlineReserve == '1',
  814 + isShareItem: this.data.options.isOrder != '1' && marketing && marketing.is_transpond == '1',
  815 + }
  816 + console.log('获取数据GetSellerTemplateConf--------------------', obj);
  817 + this.setData(obj)
  818 + this.refreshActionBtn(obj)
  819 + this.updateShowMerchantSpeak()
  820 + this.resolveThemeImg();
  821 + this.setData({
  822 + heroBottomStripImage: (home && home.heroBottomStripImage) || (home && home.bottom_strip) || '',
  823 + });
  824 + // reserve为空 或 reserve里没有voice_info/swich_voice字段时,不开启商家自定义语音,走默认语音配置
  825 + let i = (reserve == null || !reserve.voice_info || !reserve.swich_voice) ? '0' : reserve;
  826 + this.textToSpeechFun(sid, i)
  827 + })
  828 + },
  829 + // 根据充值ID获取充值详情
  830 + getRechargeDetail() {
  831 + App.Activity.GetNewRechargeList({
  832 + sellerid: this.data.detail.seller.id,
  833 + }).then(res => {
  834 + if (res.data) {
  835 + let arr = []
  836 + res.data.forEach(i => {
  837 + if (i.status != '1') {
  838 + arr.push(i)
  839 + }
  840 + })
  841 + let recharge_data = arr;
  842 + recharge_data.forEach(item => {
  843 + let recharge_list = {};
  844 + try {
  845 + if (typeof item.recharge_list === 'string' && item.recharge_list) {
  846 + recharge_list = JSON.parse(item.recharge_list);
  847 + } else if (item.recharge_list && typeof item.recharge_list === 'object') {
  848 + recharge_list = item.recharge_list;
  849 + }
  850 + } catch (e) {
  851 + recharge_list = {};
  852 + }
  853 + if (!recharge_list || typeof recharge_list !== 'object' || Array.isArray(recharge_list)) {
  854 + recharge_list = {};
  855 + }
  856 + // 统一成字符串,兼容接口返回数字 0/1,保证 wxml 里 =='1' / =='0' 判断生效
  857 + ['is_price', 'is_score', 'is_coupons'].forEach(key => {
  858 + if (recharge_list[key] == 1 || recharge_list[key] === '1') {
  859 + recharge_list[key] = '1';
  860 + } else if (recharge_list[key] == 0 || recharge_list[key] === '0') {
  861 + recharge_list[key] = '0';
  862 + }
  863 + });
  864 + item.recharge_list = recharge_list;
  865 + item.priceInfo = '';
  866 + item.scoreInfo = '';
  867 + item.certificate = '';
  868 + if (recharge_list.is_price == '1') {
  869 + item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + recharge_list.price + '元余额';
  870 + }
  871 + if (recharge_list.is_score == '1') {
  872 + item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + recharge_list.score + '积分';
  873 + }
  874 + if (recharge_list.is_coupons == '1' && recharge_list.coupons_names && recharge_list.coupons_names.length > 0) {
  875 + item.certificate = recharge_list.coupons_names.join('、');
  876 + }
  877 + item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
  878 + })
  879 + // 筛选出 未过期的 && 开启状态的充值活动
  880 + recharge_data = recharge_data.filter(item => {
  881 + return (this.data.dataStr < (item.etime * 1) || !item.etime) && item.is_open == '1'
  882 + })
  883 + console.log('邀请函--------------充值', recharge_data);
  884 + this.setData({
  885 + recharge_data,
  886 + })
  887 + } else {
  888 + this.setData({
  889 + recharge_data: [],
  890 + })
  891 + }
  892 + })
  893 + },
  894 + // 点击充值活动:有手机号进充值页,无手机号进登录页
  895 + gotoVipRecharge(e) {
  896 + const id = e.currentTarget.dataset.id;
  897 + if (!id) return;
  898 + if (!this.data.purePhoneNumber) {
  899 + this.gotoLogin('', '2');
  900 + return;
  901 + }
  902 + const {
  903 + seller,
  904 + detail,
  905 + StyleType
  906 + } = this.data;
  907 + const url = util.http_build_query({
  908 + id,
  909 + name: seller.name || '',
  910 + sid: seller.sid || '',
  911 + oid: detail.id || '',
  912 + types: 1,
  913 + StyleType: StyleType || '',
  914 + }, '/pack-activity/pack/vipRecharge');
  915 + wx.navigateTo({
  916 + url
  917 + });
  918 + },
  919 + // 获取评价赠送的券最新详情
  920 + getEvaluateFun(id) {
  921 + App.Activity.GetActivityById({
  922 + id
  923 + }).then(res => {
  924 + if (res.data.length > 0) {
  925 + let couponData = res.data[0]
  926 + let data = couponData.expiration_date ? util.determine(couponData.expiration_date) : '';
  927 + // showCoupon 代表赠送的券没过有效期 && 是开启状态
  928 + couponData.showCoupon = (((data.valid_forever == '0' && this.data.dataStr < (data.etime * 1)) || data.valid_forever == '1') && couponData.is_open == '1') ? '1' : '0';
  929 + console.log('邀请函--------------------评价赠送的优惠券', couponData);
  930 + this.setData({
  931 + couponData: res.data[0]
  932 + })
  933 + }
  934 + })
  935 + },
  936 + // 根据券ID获取券详情
  937 + getActivityByIdFun(obj, setcoupon) {
  938 + App.Activity.GetActivityById({
  939 + id: obj.map(item => item.id).join(','),
  940 + }).then(res => {
  941 + if (res.data.length > 0) {
  942 + // valid_forever 1永久 0非永久
  943 + let list = res.data.filter(item => {
  944 + let data = item.expiration_date ? util.determine(item.expiration_date) : {};
  945 + let validForever = data.valid_forever === '1';
  946 + let isValid = item.is_type === '3' ?
  947 + (validForever || (data.valid_forever === '0' && this.data.dataStr < (data.etime * 1))) :
  948 + (this.data.dataStr < (item.etime * 1));
  949 +
  950 + return isValid && item.is_open === '1';
  951 + });
  952 + list.forEach(detail => {
  953 + detail.stringifyUse = detail.use ? JSON.stringify(detail.use) : '';
  954 + detail.exp_date = detail.exp_date ? util.determine(detail.exp_date) : '';
  955 + detail.arule = detail.arule ? util.determine(detail.arule) : '';
  956 + detail.use = detail.use ? util.determine(detail.use) : '';
  957 + detail.expiration_date = detail.expiration_date ? util.determine(detail.expiration_date) : '';
  958 + detail.aexpiration = detail.aexpiration ? util.determine(detail.aexpiration) : '';
  959 + if ((detail.use && (!detail.use.is_cash || detail.use.is_cash == '1'))) {
  960 + let cash = detail.use.cash * 1;
  961 + let price = detail.price * 1;
  962 + detail.discount = cash != 0 ? ((price / cash) * 10).toFixed(1) : '';
  963 + }
  964 + let num = detail.grant_num * 1 - detail.grant_last * 1;
  965 + if (num > 0) {
  966 + detail.receiveNumText = ''
  967 + if (num >= 0 && num <= 100) {
  968 + detail.receiveNumText = num.toString();
  969 + } else if (num >= 101 && num <= 199) {
  970 + detail.receiveNumText = '100+';
  971 + } else if (num >= 200 && num <= 299) {
  972 + detail.receiveNumText = '200+';
  973 + } else {
  974 + detail.receiveNumText = Math.floor(num / 100) * 100 + '+';
  975 + }
  976 + }
  977 + if (num == 0) {
  978 + let str = detail.grant_num * 1
  979 + detail.receiveNumText = ''
  980 + if (str >= 0 && str <= 100) {
  981 + detail.receiveNumText = str.toString();
  982 + } else if (str >= 101 && str <= 199) {
  983 + detail.receiveNumText = '100+';
  984 + } else if (str >= 200 && str <= 299) {
  985 + detail.receiveNumText = '200+';
  986 + } else {
  987 + detail.receiveNumText = Math.floor(str / 100) * 100 + '+';
  988 + }
  989 + }
  990 + if (detail.exp_date && detail.exp_date.week_data) {
  991 + let mor = this.hasConsecutiveSelect(detail.exp_date.week_data, '1').rArr.join('、')
  992 + let noon = this.hasConsecutiveSelect(detail.exp_date.week_data, '2').rArr.join('、')
  993 + let nig = this.hasConsecutiveSelect(detail.exp_date.week_data, '3').rArr.join('、')
  994 + if (mor) mor = '早餐:' + mor
  995 + if (noon) noon = '午餐:' + noon
  996 + if (nig) nig = '晚餐:' + nig
  997 + detail.morText = mor;
  998 + detail.noonText = noon;
  999 + detail.nigText = nig;
  1000 + }
  1001 + })
  1002 + let freeCoupons = list.filter(item => {
  1003 + return item.is_type == '3'
  1004 + })
  1005 + let give = this.give_user;
  1006 + let couponShow = false;
  1007 + switch (give) {
  1008 + case '1':
  1009 + couponShow = this.data.options.hasSellerShare == '1' ? true : false;
  1010 + break;
  1011 + case '2':
  1012 + couponShow = true;
  1013 + break;
  1014 + case '3':
  1015 + couponShow = this.data.options.hasSellerShare != '1' ? true : false;
  1016 + break;
  1017 + }
  1018 + // 免费券判断是否领取,弹框领取
  1019 + if (freeCoupons.length > 0 && couponShow) {
  1020 + this.getCoupon(freeCoupons, obj, setcoupon)
  1021 + } else {
  1022 + if (setcoupon != '1') {
  1023 + this.setData({
  1024 + isFrame: '1',
  1025 + })
  1026 + }
  1027 + }
  1028 + console.log('邀请函--------------------优惠券', list);
  1029 + this.setData({
  1030 + coupon_dataList: list,
  1031 + })
  1032 + }
  1033 + })
  1034 + },
  1035 + // 弹框领取免费券
  1036 + setcouponFun() {
  1037 + let arr = this.data.couponArr;
  1038 + console.log('弹框领取免费券数组-----', arr);
  1039 + let str = arr.flatMap(item => Array(item.number).fill(item.id)).join(',');
  1040 + console.log('弹框领取免费券id', str);
  1041 + App.Activity.SetActivityAsReserve({
  1042 + aid: str,
  1043 + rid: this.id,
  1044 + phone: this.data.purePhoneNumber,
  1045 + }).then((json) => {
  1046 + if (json.ret != 200) {
  1047 + wx.showToast({
  1048 + title: json.msg,
  1049 + duration: 2000,
  1050 + mask: true
  1051 + })
  1052 + } else {
  1053 + wx.showToast({
  1054 + title: '领取成功!',
  1055 + duration: 2000,
  1056 + mask: true
  1057 + })
  1058 + this.closeCouponModal()
  1059 + }
  1060 + })
  1061 + },
  1062 + // 免费券 0未领取 1已领取 获取未领取的组成数组couponArr
  1063 + getCoupon(arr, info, setcoupon) {
  1064 + let str = arr.flatMap(item => Array(item.number).fill(item.id)).join(',');
  1065 + App.Activity.ActivityListByOpenid({
  1066 + aid: str,
  1067 + sellerid: this.data.seller.sid,
  1068 + }).then(res => {
  1069 + if (res.ret == 200) {
  1070 + let couponArr = [];
  1071 + let totalPrice = 0;
  1072 + let coupon_dataList = this.data.coupon_dataList;
  1073 + let list = res.data;
  1074 + if (setcoupon != '1') {
  1075 + list.forEach(item => {
  1076 + item.cdate = item.cdate * 1;
  1077 + item.useStime = '';
  1078 + item.useEtime = '';
  1079 + let condition = item.aexpiration ? util.determine(item.aexpiration) : '';
  1080 + if (condition.valid_forever === '0' && condition.stime && condition.etime) {
  1081 + item.useStime = util.unixtoTime(condition.stime, 'YYYY-MM-DD');
  1082 + item.useEtime = util.unixtoTime(condition.etime, 'YYYY-MM-DD');
  1083 + }
  1084 + if (condition.valid_forever === '1') {
  1085 + item.foreverText = '永久有效';
  1086 + }
  1087 + if (condition.valid_forever === '0' && condition.today) {
  1088 + let obj = this.setTimeRange(item.cdate, 0, parseInt(condition.today) - 1);
  1089 + item.useStime = obj.useStimeNum;
  1090 + item.useEtime = obj.useEtimeNum;
  1091 + }
  1092 + if (condition.valid_forever === '0' && condition.tomorrow) {
  1093 + let obj = this.setTimeRange(item.cdate, 1, condition.tomorrow * 1);
  1094 + item.useStime = obj.useStimeNum;
  1095 + item.useEtime = obj.useEtimeNum;
  1096 + }
  1097 + if (condition.valid_forever === '0' && condition.sday && condition.eday) {
  1098 + let obj = this.setTimeRange(item.cdate, parseInt(condition.sday) - 1, parseInt(condition.eday) - 1);
  1099 + item.useStime = obj.useStimeNum;
  1100 + item.useEtime = obj.useEtimeNum;
  1101 + }
  1102 + })
  1103 + list = list.filter(item => {
  1104 + let condition = item.aexpiration ? util.determine(item.aexpiration) : '';
  1105 + return (item.useEtime >= this.data.dataStr) || (item.foreverText == '永久有效') || (condition.valid_forever === '0' && condition.stime && condition.etime)
  1106 + });
  1107 + }
  1108 + list.sort((a, b) => b.cdate - a.cdate);
  1109 + list = list.reduce((accumulator, current) => {
  1110 + if (!accumulator.some(item => item.aid === current.aid)) {
  1111 + accumulator.push(current);
  1112 + }
  1113 + return accumulator;
  1114 + }, []);
  1115 + const strArray = str.split(',');
  1116 + const result = strArray.filter(num => {
  1117 + return !list.some(item => item.id === num);
  1118 + });
  1119 + console.log('待领取的券id', result);
  1120 + if (result.length > 0) {
  1121 + result.forEach(item => {
  1122 + let match = arr.find(b => b.id === item);
  1123 + let obj = info.find(b => b.id === item);
  1124 + console.log('待领取的券详情', match);
  1125 + let record = {
  1126 + id: '',
  1127 + number: '',
  1128 + grant_last: '',
  1129 + price: '',
  1130 + desc: '',
  1131 + }
  1132 + if (obj) {
  1133 + record.number = obj.number;
  1134 + }
  1135 + if (match) {
  1136 + record.grant_last = match.grant_last * 1 * 1;
  1137 + record.id = match.id;
  1138 + record.desc = match.desc;
  1139 + record.price = match.price;
  1140 + }
  1141 + if (record.number > record.grant_last && record.grant_last > 0) {
  1142 + record.number = record.grant_last
  1143 + }
  1144 + // 只留下可领取数量大于0的
  1145 + if (record.grant_last > 0 && record.number) {
  1146 + console.log('可领取的券', {
  1147 + ...record
  1148 + });
  1149 + couponArr.push({
  1150 + ...record
  1151 + })
  1152 + }
  1153 + })
  1154 + if (couponArr.length > 0 && setcoupon != '1' && this.one == '0') {
  1155 + totalPrice = couponArr.reduce((sum, item) => sum + item.price * item.number, 0);
  1156 + this.one = '1'
  1157 + setTimeout(() => {
  1158 + this.setData({
  1159 + couponArr,
  1160 + totalPrice: parseFloat(totalPrice.toFixed(2)),
  1161 + })
  1162 + this.showCouponModal()
  1163 + }, 3000);
  1164 + } else {
  1165 + if (setcoupon != '1') {
  1166 + this.setData({
  1167 + isFrame: '1',
  1168 + })
  1169 + }
  1170 + }
  1171 + } else {
  1172 + if (setcoupon != '1') {
  1173 + this.setData({
  1174 + isFrame: '1',
  1175 + })
  1176 + }
  1177 + }
  1178 + list.forEach(item => {
  1179 + let idx = coupon_dataList.findIndex(b => b.id === item.id);
  1180 + if (idx !== null && idx !== undefined && coupon_dataList[idx]) {
  1181 + const detail = coupon_dataList[idx];
  1182 + detail.resultCoupon = '1'; // 显示已领取
  1183 + detail.cdate = item.cdate * 1;
  1184 + detail.useStime = '';
  1185 + detail.useEtime = '';
  1186 + let condition = detail.aexpiration
  1187 + if (condition.valid_forever === '0' && condition.stime && condition.etime) {
  1188 + detail.useStime = util.unixtoTime(condition.stime, 'YYYY-MM-DD');
  1189 + detail.useEtime = util.unixtoTime(condition.etime, 'YYYY-MM-DD');
  1190 + }
  1191 + if (condition.valid_forever === '1') {
  1192 + detail.foreverText = '永久有效';
  1193 + }
  1194 + if (condition.valid_forever === '0' && condition.today) {
  1195 + let obj = this.setTimeRange(detail.cdate, 0, parseInt(condition.today) - 1);
  1196 + detail.useStime = obj.useStime;
  1197 + detail.useEtime = obj.useEtime;
  1198 + }
  1199 + if (condition.valid_forever === '0' && condition.tomorrow) {
  1200 + let obj = this.setTimeRange(detail.cdate, 1, condition.tomorrow * 1);
  1201 + detail.useStime = obj.useStime;
  1202 + detail.useEtime = obj.useEtime;
  1203 + }
  1204 + if (condition.valid_forever === '0' && condition.sday && condition.eday) {
  1205 + let obj = this.setTimeRange(detail.cdate, parseInt(condition.sday) - 1, parseInt(condition.eday) - 1);
  1206 + detail.useStime = obj.useStime;
  1207 + detail.useEtime = obj.useEtime;
  1208 + }
  1209 + }
  1210 + })
  1211 + console.log('未领取的券列表-----------', couponArr);
  1212 + this.setData({
  1213 + coupon_dataList,
  1214 + })
  1215 + }
  1216 + })
  1217 + },
  1218 + /**
  1219 + * 生命周期函数--监听页面隐藏
  1220 + */
  1221 + onHide() {
  1222 + // 选相册时也会 onHide:不清定时器、不销毁音频,回来后继续播
  1223 + if (this._skipOnShowRefresh) return;
  1224 + clearInterval(this.timers)
  1225 + if (this.data.timer) {
  1226 + clearInterval(this.data.timer);
  1227 + }
  1228 + this.destroyAudioCtx();
  1229 + },
  1230 +
  1231 + /**
  1232 + * 生命周期函数--监听页面卸载
  1233 + */
  1234 + onUnload() {
  1235 + clearInterval(this.timers)
  1236 + if (this.data.timer) {
  1237 + clearInterval(this.data.timer);
  1238 + }
  1239 + if (this._onUserCaptureScreen && wx.offUserCaptureScreen) {
  1240 + wx.offUserCaptureScreen(this._onUserCaptureScreen);
  1241 + }
  1242 + this.destroyAudioCtx();
  1243 + },
  1244 + destroyAudioCtx() {
  1245 + const ctx = this.audioCtx;
  1246 + if (!ctx || typeof ctx.destroy !== 'function') {
  1247 + this.audioCtx = null;
  1248 + return;
  1249 + }
  1250 + try {
  1251 + ctx.destroy();
  1252 + } catch (e) {
  1253 + console.log('destroyAudioCtx', e);
  1254 + }
  1255 + this.audioCtx = null;
  1256 + },
  1257 + // 点击关闭领券弹框后,出现图片缩小到商家有礼的位置消失动画
  1258 + startAnimation() {
  1259 + const animation = wx.createAnimation({
  1260 + duration: 800,
  1261 + timingFunction: 'ease',
  1262 + });
  1263 + animation.translateY('-60%')
  1264 + .translateX('34%')
  1265 + .scale(0)
  1266 + .step();
  1267 + this.setData({
  1268 + animationData: animation.export(),
  1269 + });
  1270 + setTimeout(() => {
  1271 + this.startSecondAnimation();
  1272 + }, 800);
  1273 + },
  1274 +
  1275 + // 商家有话说:自定义图文 / 餐厅介绍 / 特色菜品 / 主厨介绍 任一有内容则显示
  1276 + updateShowMerchantSpeak() {
  1277 + const {
  1278 + reserveData,
  1279 + marketing,
  1280 + home,
  1281 + store,
  1282 + signboard,
  1283 + chef
  1284 + } = this.data;
  1285 +
  1286 + let hasReserveText = false;
  1287 + if (reserveData) {
  1288 + if (reserveData.title) {
  1289 + hasReserveText = true;
  1290 + } else if (reserveData.content && reserveData.content.length > 0) {
  1291 + hasReserveText = true;
  1292 + }
  1293 + }
  1294 +
  1295 + let hasStoreContent = false;
  1296 + if (store) {
  1297 + if (store.introduce && (!store.is_introduce || store.is_introduce != '0')) {
  1298 + hasStoreContent = true;
  1299 + } else if (store.images && store.images.length > 0 && (!store.is_images || store.is_images != '0')) {
  1300 + hasStoreContent = true;
  1301 + } else if (store.content && store.content.length > 0) {
  1302 + hasStoreContent = true;
  1303 + }
  1304 + }
  1305 + let hasLogoOrHome = false;
  1306 + if ((marketing && marketing.logo) || (home && home.image)) {
  1307 + hasLogoOrHome = true;
  1308 + }
  1309 + const hasStore = hasLogoOrHome || hasStoreContent;
  1310 +
  1311 + let hasSignboard = false;
  1312 + if (signboard) {
  1313 + if (signboard.swich == '1' && signboard.images && signboard.images.length > 0) {
  1314 + hasSignboard = true;
  1315 + } else if (signboard.content && signboard.content.length > 0) {
  1316 + hasSignboard = true;
  1317 + }
  1318 + }
  1319 +
  1320 + let hasChef = false;
  1321 + if (chef) {
  1322 + if (chef.introduce && (!chef.is_introduce || chef.is_introduce != '0')) {
  1323 + hasChef = true;
  1324 + } else if (chef.image && (!chef.is_images || chef.is_images != '0')) {
  1325 + hasChef = true;
  1326 + } else if (chef.content && chef.content.length > 0) {
  1327 + hasChef = true;
  1328 + }
  1329 + }
  1330 +
  1331 + const showMerchantSpeak = hasReserveText || hasStore || hasSignboard || hasChef;
  1332 + if (showMerchantSpeak !== this.data.showMerchantSpeak) {
  1333 + this.setData({
  1334 + showMerchantSpeak
  1335 + });
  1336 + }
  1337 + },
  1338 + getText() {
  1339 + App.Reserve.GetReserveImgText({
  1340 + rid: this.data.options.id
  1341 + }).then(res => {
  1342 + if (res.ret == 200 && res.data) {
  1343 + let data = res.data;
  1344 + let content = util.determine(data.content)
  1345 + this.setData({
  1346 + reserveData: {
  1347 + title: data.title || '',
  1348 + content,
  1349 + }
  1350 + }, () => this.updateShowMerchantSpeak())
  1351 + }
  1352 + })
  1353 + },
  1354 + updateContactPhone() {
  1355 + const sellerTel = this.data.seller && this.data.seller.tel;
  1356 + const staffPhone = this.data.staffinfo && this.data.staffinfo.phone;
  1357 + const contactPhone = staffPhone || (sellerTel && sellerTel.length && sellerTel[0]) || '';
  1358 + if (contactPhone !== this.data.contactPhone) {
  1359 + this.setData({
  1360 + contactPhone
  1361 + });
  1362 + }
  1363 + },
  1364 + onHeroImageError() {
  1365 + const failed = this.data.themeImg;
  1366 + if (!failed) return;
  1367 + if (!this._failedThemeImgs) this._failedThemeImgs = {};
  1368 + // hero + 模糊底共用 themeImg,失败可能连触发两次,已处理过则跳过
  1369 + if (this._failedThemeImgs[failed]) return;
  1370 + this._failedThemeImgs[failed] = true;
  1371 + const defaultImg = 'https://qn.colorcun.com/testImg/img4.png';
  1372 + if (failed === defaultImg) return;
  1373 + const next = this.getThemeImgCandidates().find(url => !this._failedThemeImgs[url]) || defaultImg;
  1374 + this.setData({
  1375 + themeImg: next,
  1376 + heroBottomStripImage: '',
  1377 + });
  1378 + },
  1379 + onBackdropImageError() {
  1380 + // 后台色带加载失败时,自动切回直接裁切主图底部的方案。
  1381 + if (this.data.heroBottomStripImage) {
  1382 + this.setData({
  1383 + heroBottomStripImage: ''
  1384 + });
  1385 + }
  1386 + },
  1387 +})
  1 +{
  2 + "navigationStyle": "custom",
  3 + "navigationBarTextStyle": "white",
  4 + "usingComponents": {
  5 + "nav": "/components/nav/nav",
  6 + "painter": "/components/painter/painter",
  7 + "my-modal": "/components/modal/modal",
  8 + "scroll-number": "/components/scroll-number/index",
  9 + "subscribe": "/components/userinfo/subscribe"
  10 + }
  11 +}
  1 +<!--pack-invitation/pages/detail_owner_invitation14.wxml-->
  2 +<import src="../common/parts.wxml" />
  3 +<nav hasHome id="nav" backgroundColor="transparent" place="{{false}}"></nav>
  4 +<view class="pageBox {{pageThemeClass}} {{isCustom == '1' ? 'isCustom' : ''}} style{{StyleTypeNum}}">
  5 + <!-- 自定义/白色:模糊底;其它主题色:CSS 固定纯色 + 中间渐变 -->
  6 + <view wx:if="{{themeColor == 'pearlWhite'}}" class="page-background">
  7 + <image wx:if="{{heroBottomStripImage}}" class="page-blur-image prepared-bottom-strip" src="{{heroBottomStripImage}}" mode="scaleToFill" binderror="onBackdropImageError" />
  8 + <image wx:else class="page-blur-image source-bottom-crop" src="{{themeImg}}" mode="scaleToFill" binderror="onHeroImageError" />
  9 + </view>
  10 + <scroll-view class="scroll" scroll-y enhanced show-scrollbar="{{false}}" bindscroll="onScrollViewScroll" style="height: {{windowHeight}}px;">
  11 + <view class="scroll-wrap">
  12 + <image class="hero-image" style="height: {{heroHeightPx}}px;" src="{{themeImg}}" mode="aspectFill" binderror="onHeroImageError" />
  13 + <view wx:if="{{themeColor != 'pearlWhite'}}" class="page-theme-fade" style="height: {{heroHeightPx}}px;"></view>
  14 + <view class="scroll-body" style="padding-top: {{contentStartPx}}px;">
  15 + <!-- 音乐开关 -->
  16 + <template is="musicImg" data="{{newStr: newStr, isPlay: isPlay, attentionAnim: attentionAnim}}" />
  17 + <!-- 商家有礼悬浮入口 -->
  18 + <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}}" />
  19 + <!-- 领券全屏浮层 -->
  20 + <template is="fullscreenMask" data="{{isShow: isShow, animationData: animationData}}" />
  21 + <view class="targetPoint" style="top: 35%; right: 4%;"></view>
  22 + <!-- 已取消/已结束 状态角标 -->
  23 + <template is="statusBadge" data="{{detail: detail, options: options}}" />
  24 + <view class="heroBlock style{{StyleTypeNum}}">
  25 + <view class="bgEditBar" wx:if="{{StyleTypeNum != '4' && canChangeBg=='1' && options.hasSellerShare == '1'}}">
  26 + <view class="bgEditBtn bgEditBtnChange {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onChangeBgPhoto">换照片</view>
  27 + <view class="bgEditSaveWrap">
  28 + <view class="bgEditBtn bgEditBtnSave {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onSaveBgPhoto">保存<view class="bgEditSaveTip" wx:if="{{!bgSaved}}">(仅1次)</view>
  29 + </view>
  30 + </view>
  31 + </view>
  32 + <view class="heroTitle {{titleCls}}" style="{{titleStyle}}" wx:if="{{StyleTypeNum != 2 && StyleTypeNum != '2' && StyleTypeNum != 4 && StyleTypeNum != '4' && options.hasSellerShare == '1'}}">{{titleObj.textInfo || '预订安排'}}</view>
  33 + <view class="heroTitle {{titleCls}}" style="{{titleStyle}}" wx:elif="{{StyleTypeNum != 2 && StyleTypeNum != '2' && StyleTypeNum != 4 && StyleTypeNum != '4'}}">{{titleObj.textInfo || '邀请函'}}</view>
  34 + <view class="heroSeller {{shopCls}}" style="{{shopStyle}}">{{shopObj.textInfo || seller.name || reserve.seller_name}}</view>
  35 + <view class="heroSlogan font24r" wx:if="{{StyleTypeNum != 1 && StyleTypeNum != '1' && reserve.swich_slogan == '1' && home.slogan}}">{{home.slogan}}</view>
  36 + <view class="bookInfo">
  37 + <view class="entrance" wx:if="{{StyleTypeNum == '1'}}">
  38 + <view bindtap="sharesettingShop" class="entranceItem">
  39 + <image src="https://qn.colorcun.com/shopHomeIcon{{entranceIcon}}.png" mode="" />
  40 + <view class="font24r">商家主页</view>
  41 + </view>
  42 + <button wx:if="{{canShare}}" class="entranceItem" open-type="share">
  43 + <image src="https://qn.colorcun.com/forwardIcon{{entranceIcon}}.png" mode="" />
  44 + <view class="font24r">转发好友</view>
  45 + </button>
  46 + <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">
  47 + <image src="https://qn.colorcun.com/advanceOrderIcon{{entranceIcon}}.png" mode="" />
  48 + <view class="font24r">提前点餐</view>
  49 + </view>
  50 + <button wx:if="{{canMeet && needLogin}}" bindtap="gotoLogin" data-types="2" class="entranceItem">
  51 + <image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
  52 + <view class="font24r">确认赴约</view>
  53 + </button>
  54 + <button wx:elif="{{canMeet}}" bindtap="confirmed" class="entranceItem">
  55 + <image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
  56 + <view class="font24r">确认赴约</view>
  57 + </button>
  58 + <view bindtap="evaluateFun" wx:if="{{is_comments=='1' && !is_user_comments}}" class="entranceItem entranceFeedback">
  59 + <image src="https://qn.colorcun.com/feedbackIcon{{entranceIcon}}.png" mode="" />
  60 + <view class="font24r">意见反馈</view>
  61 + </view>
  62 + </view>
  63 + <view class="heroSlogan font24r" wx:if="{{(StyleTypeNum == 1 || StyleTypeNum == '1') && reserve.swich_slogan == '1' && home.slogan}}">{{home.slogan}}</view>
  64 + <block wx:if="{{StyleTypeNum == 2 || StyleTypeNum == '2'}}">
  65 + <view class="bookWave">
  66 + <view class="waveLine"></view>
  67 + <view class="waveBars">
  68 + <view class="waveBar"></view>
  69 + <view class="waveBar"></view>
  70 + <view class="waveBar"></view>
  71 + <view class="waveBar"></view>
  72 + <view class="waveBar"></view>
  73 + <view class="waveBar"></view>
  74 + <view class="waveBar"></view>
  75 + <view class="waveBar"></view>
  76 + <view class="waveBar"></view>
  77 + </view>
  78 + <view class="waveLine"></view>
  79 + </view>
  80 + <view class="infoItem" wx:if="{{reserve.swich_booking=='1' && reserve.book_info}}">
  81 + <text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
  82 + </view>
  83 + <view class="infoItem" wx:if="{{seller.tablesText}}">
  84 + <view class="contentData contentData1">{{seller.tablesText}}</view>
  85 + </view>
  86 + <view class="infoItem" wx:if="{{seller.date}}">
  87 + <view class="contentData contentData2">{{seller.date}}</view>
  88 + </view>
  89 + <view class="infoItem" wx:if="{{(detail.rnameStr && reserve.swich_customer == '1') || seller.soltName}}">
  90 + <view class="contentData contentWithBtn contentData2 contentData3">
  91 + <text wx:if="{{detail.rnameStr && reserve.swich_customer == '1'}}">{{detail.rnameStr}}订</text>
  92 + <text class="texts1" wx:if="{{detail.rnameStr && reserve.swich_customer == '1' && seller.soltName}}"> | </text>
  93 + <text wx:if="{{seller.soltName}}">{{seller.soltName}}<text wx:if="{{temp_ddate}}"> {{temp_ddate}}</text></text>
  94 + <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}}">
  95 + <view class="miniBtn">
  96 + <image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
  97 + </view>
  98 + </picker>
  99 + </view>
  100 + </view>
  101 + <view class="infoItem" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
  102 + <view class="contentData contentWithBtn contentData2">
  103 + <text>前台电话</text>
  104 + <text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call"> {{item}}</text>
  105 + <view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
  106 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  107 + </view>
  108 + </view>
  109 + </view>
  110 + <view class="infoItem" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
  111 + <view class="contentData contentWithBtn contentData2">
  112 + <text>{{seller.addr || reserve.seller.map_address}}</text>
  113 + <view class="miniBtn" bindtap="looklocation">
  114 + <image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
  115 + </view>
  116 + </view>
  117 + </view>
  118 + </block>
  119 + <block wx:elif="{{StyleTypeNum == 4 || StyleTypeNum == '4'}}">
  120 + <view class="bgEditBar" wx:if="{{canChangeBg=='1' && options.hasSellerShare == '1'}}">
  121 + <view class="bgEditBtn bgEditBtnChange {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onChangeBgPhoto">换照片</view>
  122 + <view class="bgEditSaveWrap">
  123 + <view class="bgEditBtn bgEditBtnSave {{bgSaved?'bgEditBtnDisabled':''}}" bindtap="onSaveBgPhoto">保存<view class="bgEditSaveTip" wx:if="{{!bgSaved}}">(仅1次)</view>
  124 + </view>
  125 + </view>
  126 + </view>
  127 + <view class="heroTitle {{titleCls}}" style="{{titleStyle}}">{{options.hasSellerShare == '1' ? (titleObj.textInfo || '预订安排') : (titleObj.textInfo || '邀请函')}}</view>
  128 + <view class="infoItem" wx:if="{{reserve.swich_booking=='1' && reserve.book_info}}">
  129 + <text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
  130 + </view>
  131 + <view class="bookInvite">{{detail.rnameStr ? detail.rnameStr + '邀您赴宴' : '邀您赴宴'}}</view>
  132 + <view class="bookDivider"></view>
  133 + <view class="infoItem style4Item" wx:if="{{seller.date || seller.soltName || temp_ddate}}">
  134 + <view class="label font24r">时间</view>
  135 + <view class="contentData timeBox">
  136 + <view class="timeDate" wx:if="{{seller.date}}">{{seller.date}}</view>
  137 + <view class="contentWithBtn timeSlot" wx:if="{{seller.soltName || temp_ddate}}">
  138 + <text wx:if="{{seller.soltName}}">{{seller.soltName}}</text>
  139 + <text wx:if="{{temp_ddate}}"> {{temp_ddate}}</text>
  140 + <picker wx:if="{{detail && options && options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1'}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
  141 + <view class="miniBtn">
  142 + <image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
  143 + </view>
  144 + </picker>
  145 + </view>
  146 + </view>
  147 + </view>
  148 + <view class="infoItem style4Item" wx:if="{{seller.name || reserve.seller_name || seller.tablesText}}">
  149 + <view class="label font24r">地点及餐位</view>
  150 + <view class="contentData placeBox">
  151 + <view class="placeShop" wx:if="{{seller.name || reserve.seller_name}}">{{seller.name || reserve.seller_name}}</view>
  152 + <view class="placeTable" wx:if="{{seller.tablesText}}">{{seller.tablesText}}</view>
  153 + </view>
  154 + </view>
  155 + <view class="infoItem style4Item" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
  156 + <view class="label font24r">前台电话</view>
  157 + <view class="contentData contentWithBtn">
  158 + <text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{index > 0 ? ' ' : ''}}{{item}}</text>
  159 + <view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
  160 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  161 + </view>
  162 + </view>
  163 + </view>
  164 + <view class="infoItem style4Item" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
  165 + <view class="label font24r">餐厅地址</view>
  166 + <view class="contentData contentWithBtn">
  167 + <text>{{seller.addr || reserve.seller.map_address}}</text>
  168 + <view class="miniBtn" bindtap="looklocation">
  169 + <image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
  170 + </view>
  171 + </view>
  172 + </view>
  173 + </block>
  174 + <block wx:else>
  175 + <view class="bookSideText" wx:if="{{StyleTypeNum == 3 || StyleTypeNum == '3'}}">{{options.hasSellerShare == '1' ? '预订安排' : '邀请函'}}</view>
  176 + <view class="infoItem" wx:if="{{(StyleTypeNum == 3 || StyleTypeNum == '3') && reserve.swich_booking=='1' && reserve.book_info}}">
  177 + <text space="nbsp" class="contentData font28r bookData">{{reserve.book_info}}</text>
  178 + </view>
  179 + <view class="infoItem" wx:if="{{detail.rnameStr && reserve.swich_customer == '1'}}">
  180 + <view class="label font24r">预订贵宾</view>
  181 + <view class="contentData">{{detail.rnameStr}}</view>
  182 + </view>
  183 + <view class="infoItem" wx:if="{{seller.date}}">
  184 + <view class="label font24r">用餐日期</view>
  185 + <view class="contentData">{{seller.date}}</view>
  186 + </view>
  187 + <view class="infoItem" wx:if="{{seller.tablesText}}">
  188 + <view class="label font24r">用餐位置</view>
  189 + <view class="contentData">{{seller.tablesText}}</view>
  190 + </view>
  191 + <view class="infoItem" wx:if="{{seller.soltName}}">
  192 + <view class="label font24r">用餐时间</view>
  193 + <view class="valueRow">
  194 + <view class="contentData">{{seller.soltName}}<text class="marLeft" wx:if="{{temp_ddate}}">{{temp_ddate}}</text></view>
  195 + <picker wx:if="{{detail && options && options.isOrder != '1' && (detail.status =='1' || detail.status =='2') && options.hasSellerShare == '1'}}" bindchange="bindPickerChange" value="{{index}}" range="{{timeList}}">
  196 + <view class="miniBtn">
  197 + <image class="arrivalImg" src="https://qn.colorcun.com/editTimeIcon{{actionIcon}}.png" mode="" /><text>改时间</text>
  198 + </view>
  199 + </picker>
  200 + </view>
  201 + </view>
  202 + <!-- 样式3:标签固定左侧,右侧内容折行 -->
  203 + <block wx:if="{{StyleTypeNum == 3 || StyleTypeNum == '3'}}">
  204 + <view class="infoItem infoLine" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
  205 + <view class="label font24r">前台电话</view>
  206 + <view class="contentData contentWithBtn infoRight">
  207 + <text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{index > 0 ? ' ' : ''}}{{item}}</text>
  208 + <view class="miniBtn" data-phone="{{contactPhone || seller.tel[0]}}" bindtap="call">
  209 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  210 + </view>
  211 + </view>
  212 + </view>
  213 + <view class="infoItem infoLine" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
  214 + <view class="label font24r">餐厅地址</view>
  215 + <view class="contentData contentWithBtn infoRight">
  216 + <text>{{seller.addr || reserve.seller.map_address}}</text>
  217 + <view class="miniBtn" bindtap="looklocation">
  218 + <image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
  219 + </view>
  220 + </view>
  221 + </view>
  222 + </block>
  223 + <block wx:else>
  224 + <view class="infoItem" wx:if="{{swich_phone!='0' && seller.tel && seller.tel.length>0}}">
  225 + <view class="label font24r">前台电话</view>
  226 + <block wx:if="{{seller.tel.length == 1}}">
  227 + <view class="phoneRow contentData" wx:for="{{seller.tel}}" wx:key="index">
  228 + <text data-phone="{{item}}" class="contentDataPhone" bindtap="call">{{item}}</text>
  229 + <view class="miniBtn" data-phone="{{item}}" bindtap="call">
  230 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  231 + </view>
  232 + </view>
  233 + </block>
  234 + <block wx:else>
  235 + <view class="contentData phoneMultiList">
  236 + <text wx:for="{{seller.tel}}" wx:key="index" data-phone="{{item}}" class="contentDataPhone phoneMultiItem" bindtap="call">{{item}}</text>
  237 + </view>
  238 + <view class="miniBtn phoneMultiBtn" wx:if="{{contactPhone}}" data-phone="{{contactPhone}}" bindtap="call">
  239 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  240 + </view>
  241 + </block>
  242 + </view>
  243 + <view class="infoItem" wx:if="{{seller.addr || (reserve.seller && reserve.seller.map_address)}}">
  244 + <view class="label font24r">餐厅地址</view>
  245 + <view class="contentData contentWithBtn">
  246 + <text>{{seller.addr || reserve.seller.map_address}}</text>
  247 + <view class="miniBtn" bindtap="looklocation">
  248 + <image class="addressImg" src="https://qn.colorcun.com/navigationIcon{{actionIcon}}.png" mode="aspectFill" /><text>导航</text>
  249 + </view>
  250 + </view>
  251 + </view>
  252 + </block>
  253 + </block>
  254 + </view>
  255 + </view>
  256 + <view class="entrance" wx:if="{{StyleTypeNum != '1'}}">
  257 + <view bindtap="sharesettingShop" class="entranceItem">
  258 + <image src="https://qn.colorcun.com/shopHomeIcon{{entranceIcon}}.png" mode="" />
  259 + <view class="font24r">商家主页</view>
  260 + </view>
  261 + <button wx:if="{{canShare}}" class="entranceItem" open-type="share">
  262 + <image src="https://qn.colorcun.com/forwardIcon{{entranceIcon}}.png" mode="" />
  263 + <view class="font24r">转发好友</view>
  264 + </button>
  265 + <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">
  266 + <image src="https://qn.colorcun.com/advanceOrderIcon{{entranceIcon}}.png" mode="" />
  267 + <view class="font24r">提前点餐</view>
  268 + </view>
  269 + <button wx:if="{{canMeet && needLogin}}" bindtap="gotoLogin" data-types="2" class="entranceItem">
  270 + <image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
  271 + <view class="font24r">确认赴约</view>
  272 + </button>
  273 + <button wx:elif="{{canMeet}}" bindtap="confirmed" class="entranceItem">
  274 + <image src="https://qn.colorcun.com/appointmentIcon{{entranceIcon}}.png" mode="" />
  275 + <view class="font24r">确认赴约</view>
  276 + </button>
  277 + <view bindtap="evaluateFun" wx:if="{{is_comments=='1' && !is_user_comments}}" class="entranceItem entranceFeedback">
  278 + <image src="https://qn.colorcun.com/feedbackIcon{{entranceIcon}}.png" mode="" />
  279 + <view class="font24r">意见反馈</view>
  280 + </view>
  281 + </view>
  282 + <view class="receptionBox" wx:if="{{reserve.swich_manager=='1' && staffinfo && (staffinfo.name || staffinfo.phone || staffinfo.photo || staffinfo.wechat)}}">
  283 + <view class="peopleInfo">
  284 + <image bindtap="lookImgs" wx:if="{{staffinfo.photo}}" data-url="{{staffinfo.photo}}" src="{{staffinfo.photo}}" class="headerimg" mode="aspectFill"></image>
  285 + <view class="noHeaderimg" wx:else></view>
  286 + <view class="peopleName font28r" wx:if="{{staffinfo.name}}">{{staffinfo.name}}</view>
  287 + <view class="peopleRole font24r">{{staffinfo.position || '店长'}}</view>
  288 + </view>
  289 + <view class="handleInfo">
  290 + <view class="font32r title1">尊敬的贵宾您好!</view>
  291 + <view class="font24r texts">很荣幸能为您提供专属接待和服务</view>
  292 + <view class="contactBtns">
  293 + <view wx:if="{{staffinfo.phone}}" class="font24r brownFont" data-phone="{{staffinfo.phone}}" bindtap="call">
  294 + <image src="https://qn.colorcun.com/contactMeIcon{{actionIcon}}.png" mode="" /><text>联系我</text>
  295 + </view>
  296 + <view wx:if="{{staffinfo.wechat}}" class="font24r brownFont" bindtap="copyWeChat">
  297 + <image src="https://qn.colorcun.com/addWeChatIcon{{actionIcon}}.png" mode="" /><text>加微信</text>
  298 + </view>
  299 + </view>
  300 + </view>
  301 + </view>
  302 + <text space="nbsp" wx:if="{{marketing.wecomle}}" class="style{{StyleTypeNum}} welcomeInfo font32r">{{marketing.wecomle}}</text>
  303 + <view class="appointment" wx:if="{{customersList.length>0}}">
  304 + <view class="notifyTitle">
  305 + <text></text>
  306 + <view class="font36r">已确认赴约</view><text></text>
  307 + </view>
  308 + <view class="notifyContent">
  309 + <view class="notifyItems" wx:for="{{customersList}}" wx:key="index">
  310 + <view class="imageBox">
  311 + <image src="{{item.headimgurl}}" mode="aspectFill" />
  312 + </view>
  313 + <view class="font32r notifyText">{{item.nickname}}</view>
  314 + </view>
  315 + </view>
  316 + </view>
  317 + <view class="borderSty">
  318 + <view wx:if="{{roomimage && roomimage.length>0}}" class="roomSwiperWrap">
  319 + <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">
  320 + <swiper-item wx:for="{{roomimage}}" wx:key="index">
  321 + <view class="roomSlide" bindtap="lookImgs" data-url="{{item.url}}" data-imgs="{{urlsArr}}">
  322 + <image class="roomSlideImg" mode="aspectFill" src="{{item.url}}"></image>
  323 + <view class="roomSlideName" wx:if="{{item.name}}">{{item.name}}</view>
  324 + </view>
  325 + </swiper-item>
  326 + </swiper>
  327 + </view>
  328 + <view class="preferentialCoupon" wx:if="{{hasValueCertificate && marketing && coupon_dataList.length>0}}">
  329 + <view class="sectionTitle">专属优惠券</view>
  330 + <template is="couponCard" data="{{list: coupon_dataList, seller: seller, detail: detail, StyleType: StyleType}}" />
  331 + </view>
  332 + <view class="publicModule" wx:if="{{(hasValueRecharge && marketing.is_recharge=='1' && recharge_data.length>0) || (hasValueRecharge && marketing.is_link=='1')}}">
  333 + <view class="sectionTitle">会员充值优惠</view>
  334 + <block wx:for="{{recharge_data}}" wx:key="id">
  335 + <view class="rechargeItems" bindtap="gotoVipRecharge" data-id="{{item.id}}">
  336 + <view class="rechargeTitle font36r">{{item.rname}}</view>
  337 + <view class="limitation font24r" wx:if="{{item.priceInfo}}">
  338 + {{item.priceInfo}}{{(item.recharge_list.is_coupons=='0' && item.recharge_list.is_score=='0')?'。':';'}}
  339 + </view>
  340 + <view class="limitation font24r" wx:if="{{item.scoreInfo}}">
  341 + {{item.scoreInfo}}{{item.recharge_list.is_coupons=='0'?'。':';'}}
  342 + </view>
  343 + <view class="limitation font24r" wx:if="{{item.recharge_list.is_coupons=='1'}}">
  344 + 会员充值满{{item.recharge_money}}元赠送{{item.certificate}}。
  345 + </view>
  346 + </view>
  347 + </block>
  348 + <view wx:if="{{hasValueRecharge && marketing.is_link=='1'}}" class="font24r favouredPolicy" bindtap="gotoFavourableList">
  349 + 点击了解更多会员优惠政策
  350 + </view>
  351 + </view>
  352 + <view class="sectionTitle" wx:if="{{showMerchantSpeak}}">商家有话说</view>
  353 + <view class="reserveBox" wx:if="{{reserveData && (reserveData.title || reserveData.content)}}">
  354 + <view class="title font28r" wx:if="{{reserveData.title}}">{{reserveData.title}}</view>
  355 + <block wx:for="{{reserveData.content}}" wx:key="index">
  356 + <image class="items" wx:if="{{item.type =='1'}}" src="{{item.content}}" bindtap="lookImgs" data-url="{{item.content}}" mode="widthFix" />
  357 + <text space="nbsp" class="items font28r" wx:if="{{item.type == '2'}}">{{item.content}}</text>
  358 + </block>
  359 + </view>
  360 + <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)))}}">
  361 + <view class="titleInfo">{{store.title ? store.title : '餐厅介绍'}}</view>
  362 + <image wx:if="{{marketing.logo}}" src="{{marketing.logo}}" bindtap="lookImgs" data-url="{{marketing.logo}}" mode="widthFix" />
  363 + <image wx:if="{{home.image}}" src="{{home.image}}" bindtap="lookImgs" data-url="{{home.image}}" class="homeImage" mode="widthFix"></image>
  364 + <view class="labelBox" wx:if="{{store && !store.content && store.introduce && (!store.is_introduce || store.is_introduce!='0')}}">
  365 + <text space="nbsp" class="texts font28r">{{store.introduce}}</text>
  366 + </view>
  367 + <block wx:if="{{store.images && store.images.length>0 && (!store.is_images || store.is_images!='0')}}">
  368 + <block wx:for="{{store.images}}" wx:key="arryIndex" wx:for-index="arryIndex">
  369 + <image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{store.images}}" mode="widthFix" />
  370 + </block>
  371 + </block>
  372 + <view class="labelBox" wx:if="{{store.content && store.content.length>0}}">
  373 + <template is="richText" data="{{content: store.content, imgs: '', textClass: 'font32r'}}" />
  374 + </view>
  375 + </view>
  376 + <view class="introduce" wx:if="{{signboard && ((signboard.swich=='1' && signboard.images && signboard.images.length>0) || (signboard.content && signboard.content.length>0))}}">
  377 + <view class="titleInfo">{{signboard.title ? signboard.title : '特色菜品'}}</view>
  378 + <block wx:if="{{signboard.images && signboard.images.length>0}}">
  379 + <block wx:for="{{signboard.images}}" wx:key="arryIndex" wx:for-index="arryIndex">
  380 + <image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{signboard.images}}" mode="widthFix" />
  381 + </block>
  382 + </block>
  383 + <view class="labelBox" wx:if="{{signboard.content && signboard.content.length>0}}">
  384 + <template is="richText" data="{{content: signboard.content, imgs: '', textClass: 'font32r'}}" />
  385 + </view>
  386 + </view>
  387 + <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))}}">
  388 + <view class="introduce">
  389 + <view class="titleInfo">{{chef.title ? chef.title : '主厨介绍'}}</view>
  390 + <view class="labelBox" wx:if="{{chef.introduce && (!chef.is_introduce || chef.is_introduce!='0')}}">
  391 + <text class="texts" space="nbsp">{{chef.introduce}}</text>
  392 + </view>
  393 + <image wx:if="{{(!chef.is_images || chef.is_images!='0') && chef.image}}" src="{{chef.image}}" bindtap="lookImgs" data-url="{{chef.image}}" mode="widthFix" />
  394 + <view class="labelBox" wx:if="{{chef.content && chef.content.length>0}}">
  395 + <template is="richText" data="{{content: chef.content, imgs: '', textClass: 'font32r'}}" />
  396 + </view>
  397 + </view>
  398 + </block>
  399 + <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))}}">
  400 + <view class="sectionTitle">{{reserve.title ? reserve.title : '停车指引'}}</view>
  401 + <block wx:if="{{!reserve.content || reserve.content.length == '0'}}">
  402 + <view class="labelBox" wx:if="{{reserve.park_info}}">
  403 + <text class="texts" space="nbsp">{{reserve.park_info}}</text>
  404 + </view>
  405 + <block wx:for="{{reserve.park_info_images}}" wx:key="arryIndex" wx:for-index="arryIndex">
  406 + <image src="{{item}}" bindtap="lookImgs" data-url="{{item}}" data-imgs="{{reserve.park_info_images}}" mode="widthFix" />
  407 + </block>
  408 + </block>
  409 + <view class="labelBox" wx:if="{{reserve.content && reserve.content.length>0}}">
  410 + <template is="richText" data="{{content: reserve.content, imgs: '', textClass: 'font32r'}}" />
  411 + </view>
  412 + </view>
  413 + <view class="vips businessBox">
  414 + <view class="businessBox">
  415 + 周到安排提供技术支持<text bindtap="call" data-phone="4000009690">4000009690</text>,
  416 + <view bindtap="gotoJoinSeller" style="text-decoration: underline;">我是商家,我要试用</view>
  417 + </view>
  418 + </view>
  419 + </view>
  420 + <view class="{{(!marketing || (marketing.is_transpond!='1' && marketing.is_online_book!='1'))?'more more1':'more'}}" wx:if="{{showMoreTip}}">
  421 + <view class="moreText">滑动查看更多</view>
  422 + <image src="https://qn.colorcun.com/jt1.png" mode="" />
  423 + </view>
  424 + <view class="toastBox" wx:if="{{toastBool}}">
  425 + {{toastText}}
  426 + </view>
  427 + </view>
  428 + </view>
  429 + </scroll-view>
  430 + <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}}" />
  431 +</view>
  432 +<painter palette="{{wxml}}" style="position: absolute; top: -9999rpx;" bind:imgOK="onImgOK" />
  433 +<!-- 截屏提示弹窗 -->
  434 +<template is="payModal" data="{{detail: detail, options: options, marketing: marketing, imgSrc: imgSrc}}" />
  435 +<!-- 领券弹窗(2~12 通用;13 保持页面内独立) -->
  436 +<template is="couponModal" data="{{seller: seller, reserve: reserve, totalPrice: totalPrice, purePhoneNumber: purePhoneNumber, countDown: countDown}}" />
  1 +.pageBox {
  2 + position: relative;
  3 + width: 100%;
  4 + height: 100vh;
  5 + overflow: hidden;
  6 +}
  7 +
  8 +.page-background {
  9 + position: fixed;
  10 + z-index: 0;
  11 + top: -70rpx;
  12 + right: -70rpx;
  13 + bottom: -70rpx;
  14 + left: -70rpx;
  15 + overflow: hidden;
  16 + pointer-events: none;
  17 +}
  18 +
  19 +.page-blur-image {
  20 + position: absolute;
  21 + z-index: 0;
  22 + left: 0;
  23 + width: 100%;
  24 + opacity: 1;
  25 + filter: blur(72rpx);
  26 + will-change: filter;
  27 +}
  28 +
  29 +.prepared-bottom-strip {
  30 + top: 0;
  31 + height: 100%;
  32 +}
  33 +
  34 +.source-bottom-crop {
  35 + bottom: 0;
  36 + height: 560%;
  37 +}
  38 +
  39 +.scroll {
  40 + position: relative;
  41 + z-index: 1;
  42 + box-sizing: border-box;
  43 +}
  44 +
  45 +.scroll-wrap {
  46 + position: relative;
  47 + width: 100%;
  48 +}
  49 +
  50 +.hero-image {
  51 + position: absolute;
  52 + z-index: 1;
  53 + top: 0;
  54 + left: 0;
  55 + width: 100%;
  56 + pointer-events: none;
  57 +}
  58 +
  59 +.page-theme-fade {
  60 + position: absolute;
  61 + z-index: 1;
  62 + top: 0;
  63 + left: 0;
  64 + width: 100%;
  65 + pointer-events: none;
  66 +}
  67 +
  68 +.scroll-body {
  69 + position: relative;
  70 + z-index: 2;
  71 + box-sizing: border-box;
  72 + padding-bottom: 200rpx;
  73 + color: #fff;
  74 +}
  75 +
  76 +/* ========== 共用 UI ========== */
  77 +
  78 +.appointment {
  79 + padding: 0 40rpx 60rpx;
  80 +}
  81 +
  82 +.notifyTitle {
  83 + display: flex;
  84 + align-items: center;
  85 + justify-content: center;
  86 + margin-bottom: 20rpx;
  87 +}
  88 +
  89 +.notifyTitle text {
  90 + width: 20rpx;
  91 + height: 20rpx;
  92 + background: #fff;
  93 +}
  94 +
  95 +.notifyTitle view {
  96 + font-family: "PingFang SC";
  97 + color: #fff;
  98 + font-weight: 600;
  99 + margin: 0 20rpx;
  100 +}
  101 +
  102 +.notifyContent {
  103 + display: flex;
  104 + flex-wrap: wrap;
  105 + justify-content: space-between;
  106 +}
  107 +
  108 +.notifyItems {
  109 + width: 49%;
  110 + display: flex;
  111 + align-items: center;
  112 + margin-top: 20rpx;
  113 +}
  114 +
  115 +.notifyItems .imageBox {
  116 + width: 90rpx;
  117 + height: 90rpx;
  118 + border: 4rpx solid #cbcbcb;
  119 + box-sizing: border-box;
  120 + border-radius: 50%;
  121 + flex-shrink: 0;
  122 +}
  123 +
  124 +.notifyItems .imageBox image {
  125 + width: 100%;
  126 + height: 100%;
  127 + border-radius: 50%;
  128 + flex-shrink: 0;
  129 +}
  130 +
  131 +.notifyText {
  132 + margin-left: 14rpx;
  133 + overflow: hidden;
  134 + word-break: break-all;
  135 + text-overflow: ellipsis;
  136 + display: -webkit-box;
  137 + -webkit-box-orient: vertical;
  138 + -webkit-line-clamp: 1;
  139 + color: #fff;
  140 +}
  141 +
  142 +.more {
  143 + height: 80rpx;
  144 + width: 100%;
  145 + position: fixed;
  146 + bottom: 160rpx;
  147 + display: flex;
  148 + align-items: center;
  149 + justify-content: center;
  150 + flex-direction: column;
  151 + background: rgba(0, 0, 0, .4);
  152 +}
  153 +
  154 +.more1 {
  155 + bottom: 40rpx;
  156 +}
  157 +
  158 +.moreText {
  159 + color: #fff;
  160 +}
  161 +
  162 +.more image {
  163 + width: 30rpx;
  164 + height: 30rpx;
  165 +}
  166 +
  167 +.marLeft {
  168 + margin-left: 10rpx;
  169 + font-family: "PingFang SC";
  170 + font-weight: 600;
  171 + font-size: 40rpx;
  172 + line-height: 56rpx;
  173 +}
  174 +
  175 +.heroBlock {
  176 + text-align: center;
  177 + margin-bottom: 60rpx;
  178 + padding: 0 40rpx;
  179 +}
  180 +
  181 +.heroBlock.style2 {
  182 + box-sizing: border-box;
  183 + padding: 42rpx 32rpx 10rpx 32rpx;
  184 + margin: 0 40rpx 0;
  185 + border-radius: 20rpx;
  186 + border: none;
  187 + background: transparent;
  188 +}
  189 +
  190 +.heroBlock.style3 {
  191 + box-sizing: border-box;
  192 + padding: 42rpx 0 0;
  193 + margin: 0 40rpx 60rpx;
  194 + border-radius: 20rpx;
  195 + border: none;
  196 + background: transparent;
  197 +}
  198 +
  199 +.bgEditBar {
  200 + display: flex;
  201 + justify-content: center;
  202 + align-items: flex-start;
  203 + margin-bottom: 14rpx;
  204 +}
  205 +
  206 +.bgEditBtn {
  207 + box-sizing: border-box;
  208 + min-width: 130rpx;
  209 + height: 60rpx;
  210 + border-radius: 30rpx;
  211 + font-family: "PingFang SC";
  212 + font-weight: 500;
  213 + font-size: 28rpx;
  214 + line-height: 60rpx;
  215 + text-align: center;
  216 + text-shadow: none;
  217 + border: 2rpx solid;
  218 + background: rgba(0, 0, 0, .2);
  219 + border-color: rgba(255, 255, 255, 0.5);
  220 + padding: 0 20rpx;
  221 +}
  222 +
  223 +.bgEditBtnChange {
  224 + margin-right: 24rpx;
  225 +}
  226 +
  227 +.bgEditSaveWrap {
  228 + display: flex;
  229 + flex-direction: column;
  230 + align-items: center;
  231 +}
  232 +
  233 +.bgEditBtnSave {
  234 + color: #fff;
  235 + line-height: 56rpx;
  236 + display: flex;
  237 + align-items: center;
  238 + justify-content: center;
  239 +}
  240 +
  241 +.bgEditBtnDisabled {
  242 + opacity: 0.5;
  243 +}
  244 +
  245 +.bgEditSaveTip {
  246 + color: #fff;
  247 + font-family: "PingFang SC";
  248 + font-weight: 400;
  249 + font-size: 28rpx;
  250 + line-height: 30rpx;
  251 + text-shadow: none;
  252 +}
  253 +
  254 +.bookInfo {
  255 + text-align: left;
  256 + border-radius: 20rpx;
  257 + position: relative;
  258 +}
  259 +
  260 +.borderSty {
  261 + box-sizing: border-box;
  262 + border-radius: 20rpx;
  263 +}
  264 +
  265 +.infoItem {
  266 + display: flex;
  267 + flex-direction: column;
  268 + align-items: flex-start;
  269 + margin-bottom: 24rpx;
  270 +}
  271 +
  272 +.label {
  273 + flex-shrink: 0;
  274 + margin: 0 0 6rpx;
  275 + color: #ffffff;
  276 + font-family: "PingFang SC";
  277 + font-weight: 400;
  278 + font-size: 24rpx;
  279 + line-height: 34rpx;
  280 +}
  281 +
  282 +.contentData {
  283 + font-family: "PingFang SC";
  284 + font-weight: 600;
  285 + font-size: 40rpx;
  286 + line-height: 56rpx;
  287 + display: flex;
  288 + align-items: center;
  289 +}
  290 +
  291 +.contentData1 {
  292 + font-size: 44rpx;
  293 +}
  294 +
  295 +.texts1 {
  296 + margin: 0 24rpx;
  297 +}
  298 +
  299 +.contentData2 {
  300 + font-size: 32rpx;
  301 +}
  302 +
  303 +.contentData3 {
  304 + margin-bottom: 50rpx;
  305 +}
  306 +
  307 +.contentWithBtn {
  308 + display: block;
  309 + width: 100%;
  310 +}
  311 +
  312 +.contentWithBtn>text,
  313 +.contentDataPhone,
  314 +.divider {
  315 + display: inline;
  316 + vertical-align: middle;
  317 +}
  318 +
  319 +.contentWithBtn .miniBtn {
  320 + display: inline-flex;
  321 + vertical-align: middle;
  322 + margin-left: 12rpx;
  323 +}
  324 +
  325 +.phoneRow {
  326 + display: flex;
  327 + align-items: center;
  328 + width: 100%;
  329 +}
  330 +
  331 +.phoneRow .contentDataPhone {
  332 + flex: 1;
  333 + min-width: 0;
  334 + margin-right: 20rpx;
  335 +}
  336 +
  337 +.phoneRow .miniBtn {
  338 + flex-shrink: 0;
  339 +}
  340 +
  341 +.phoneMultiList {
  342 + display: flex;
  343 + flex-direction: column;
  344 + align-items: flex-start;
  345 + width: 100%;
  346 +}
  347 +
  348 +.phoneMultiItem {
  349 + display: block;
  350 + line-height: 56rpx;
  351 +}
  352 +
  353 +.phoneMultiBtn {
  354 + margin-top: 16rpx;
  355 +}
  356 +
  357 +.bookData {
  358 + color: #ffffff;
  359 + font-family: "PingFang SC";
  360 + font-weight: 500;
  361 + font-size: 28rpx;
  362 + line-height: 40rpx;
  363 +}
  364 +
  365 +.valueRow {
  366 + display: flex;
  367 + align-items: center;
  368 + width: 100%;
  369 +}
  370 +
  371 +.valueRow .contentData {
  372 + margin-right: 20rpx;
  373 +}
  374 +
  375 +.miniBtn {
  376 + flex-shrink: 0;
  377 + display: inline-flex;
  378 + align-items: center;
  379 + justify-content: center;
  380 + height: 48rpx;
  381 + padding: 0 20rpx;
  382 + font-size: 22rpx;
  383 + line-height: 1;
  384 + border-radius: 198rpx;
  385 + background: transparent;
  386 + border: 2rpx solid #ffffff;
  387 + box-sizing: border-box;
  388 + width: max-content;
  389 +}
  390 +
  391 +.miniBtn text {
  392 + font-weight: 600;
  393 +}
  394 +
  395 +.titleInfo {
  396 + color: #ffffff;
  397 + font-family: "PingFang SC";
  398 + font-weight: 600;
  399 + font-size: 32rpx;
  400 + margin: 20rpx 0;
  401 + text-align: center;
  402 +}
  403 +
  404 +.miniBtn image {
  405 + width: 24rpx;
  406 + height: 24rpx;
  407 + margin-right: 4rpx;
  408 +}
  409 +
  410 +.valueRow .arrivalImg {
  411 + width: 24rpx;
  412 + height: 24rpx;
  413 + margin: 0 4rpx 4rpx 0;
  414 +}
  415 +
  416 +/* ========== 字体 ========== */
  417 +
  418 +.heroTitle {
  419 + font-family: "Noto Serif SC", "Songti SC", serif;
  420 + font-weight: 700;
  421 + font-size: 100rpx;
  422 + letter-spacing: 8rpx;
  423 +}
  424 +
  425 +.titleFont1 {
  426 + font-family: "Noto Sans SC", "PingFang SC", sans-serif;
  427 +}
  428 +
  429 +.titleFont2 {
  430 + font-family: "Noto Serif SC", "Songti SC", serif;
  431 +}
  432 +
  433 +.titleFont3 {
  434 + font-family: "XuanZongTi", "SJxingkai-C", "Noto Serif SC", serif;
  435 + font-weight: 400;
  436 +}
  437 +
  438 +.titleSize1 {
  439 + font-size: 100rpx;
  440 +}
  441 +
  442 +.titleSize2 {
  443 + font-size: 80rpx;
  444 +}
  445 +
  446 +.titleSize3 {
  447 + font-size: 60rpx;
  448 +}
  449 +
  450 +.heroSeller {
  451 + color: #fff;
  452 + /* 店名:系统黑体,不依赖网络字库 */
  453 + font-family: "PingFang SC", "Heiti SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif;
  454 + font-weight: 700;
  455 + font-size: 56rpx;
  456 + line-height: 68rpx;
  457 +}
  458 +
  459 +.shopFont1 {
  460 + font-family: "PingFang SC", "Heiti SC", "Source Han Sans SC", "Noto Sans CJK SC", sans-serif;
  461 +}
  462 +
  463 +/* 样式4店名:苹方;安卓无苹方时回退系统默认 */
  464 +.shopFontPing {
  465 + font-family: "PingFang SC", "PingFang", "Heiti SC", sans-serif;
  466 +}
  467 +
  468 +.shopSize1 {
  469 + font-size: 56rpx;
  470 + line-height: 68rpx;
  471 +}
  472 +
  473 +.shopSize2 {
  474 + font-size: 44rpx;
  475 + line-height: 56rpx;
  476 +}
  477 +
  478 +.shopSize3 {
  479 + font-size: 32rpx;
  480 + line-height: 44rpx;
  481 +}
  482 +
  483 +.shopWrap {
  484 + max-width: 90%;
  485 + text-align: center;
  486 + white-space: normal;
  487 + word-break: break-all;
  488 +}
  489 +
  490 +.heroSlogan {
  491 + margin-top: 8rpx;
  492 + color: #fff;
  493 + font-family: "PingFang SC";
  494 + font-weight: 500;
  495 + font-size: 28rpx;
  496 + line-height: 40rpx;
  497 +}
  498 +
  499 +/* ========== 入口 ========== */
  500 +
  501 +.entrance {
  502 + display: flex;
  503 + flex-direction: column;
  504 + position: absolute;
  505 + right: 0;
  506 + top: 16%;
  507 + z-index: 200;
  508 + border-radius: 198rpx;
  509 + padding: 30rpx 8rpx;
  510 +}
  511 +
  512 +.entrance image {
  513 + width: 52rpx;
  514 + height: 52rpx;
  515 +}
  516 +
  517 +.entranceItem {
  518 + display: flex;
  519 + flex-direction: column;
  520 + align-items: center;
  521 + color: #fff;
  522 + margin-bottom: 32rpx;
  523 + padding: 0;
  524 + line-height: 34rpx;
  525 + background: transparent;
  526 + font-family: "PingFang SC";
  527 + font-weight: 500;
  528 + font-size: 24rpx;
  529 + border: none;
  530 +}
  531 +
  532 +.entranceItem::after {
  533 + border: none;
  534 +}
  535 +
  536 +.entranceItem:last-child {
  537 + margin-bottom: 0;
  538 +}
  539 +
  540 +.entranceItem view {
  541 + color: #fff;
  542 + font-family: "PingFang SC";
  543 + font-weight: 500;
  544 + font-size: 24rpx;
  545 + line-height: 34rpx;
  546 + margin-top: 20rpx;
  547 +}
  548 +
  549 +.style1 .heroTitle {
  550 + margin-bottom: 20rpx;
  551 +}
  552 +
  553 +.style2 .entrance,
  554 +.style3 .entrance,
  555 +.style4 .entrance {
  556 + position: relative;
  557 + right: auto;
  558 + top: auto;
  559 + flex-direction: row;
  560 + flex-wrap: wrap;
  561 + justify-content: space-between;
  562 + align-items: center;
  563 + box-sizing: border-box;
  564 + padding: 28rpx 18rpx;
  565 + border-radius: 24rpx;
  566 + margin: 0 40rpx 60rpx;
  567 + border: 2rpx solid transparent;
  568 + background: transparent;
  569 +}
  570 +
  571 +.style2 .entrance .entranceItem,
  572 +.style3 .entrance .entranceItem,
  573 +.style4 .entrance .entranceItem {
  574 + margin: 0 18rpx;
  575 + flex-shrink: 0;
  576 + padding: 0;
  577 +}
  578 +
  579 +/* ========== 样式2 ========== */
  580 +
  581 +.style2 .heroTitle {
  582 + display: none;
  583 +}
  584 +
  585 +.style2 .bookInfo {
  586 + text-align: center;
  587 + margin: 24rpx 0 50rpx;
  588 + background: transparent;
  589 + border: none;
  590 + padding: 0;
  591 +}
  592 +
  593 +.bookWave {
  594 + display: flex;
  595 + align-items: center;
  596 + justify-content: center;
  597 + width: 100%;
  598 + margin: 70rpx 0 70rpx;
  599 +}
  600 +
  601 +.waveLine {
  602 + width: 120rpx;
  603 + height: 4rpx;
  604 + background: #ffe6c5;
  605 + flex-shrink: 0;
  606 +}
  607 +
  608 +.waveBars {
  609 + display: flex;
  610 + align-items: center;
  611 + height: 48rpx;
  612 + margin: 0 16rpx;
  613 +}
  614 +
  615 +.waveBar {
  616 + width: 4rpx;
  617 + margin: 0 6rpx;
  618 + background: #ffe6c5;
  619 + border-radius: 2rpx;
  620 +}
  621 +
  622 +.waveBar:nth-child(1),
  623 +.waveBar:nth-child(9) {
  624 + height: 4rpx;
  625 +}
  626 +
  627 +.waveBar:nth-child(2),
  628 +.waveBar:nth-child(8) {
  629 + height: 12rpx;
  630 +}
  631 +
  632 +.waveBar:nth-child(3),
  633 +.waveBar:nth-child(7) {
  634 + height: 20rpx;
  635 +}
  636 +
  637 +.waveBar:nth-child(4),
  638 +.waveBar:nth-child(6) {
  639 + height: 28rpx;
  640 +}
  641 +
  642 +.waveBar:nth-child(5) {
  643 + height: 36rpx;
  644 +}
  645 +
  646 +.style2 .infoItem {
  647 + align-items: center;
  648 + margin-bottom: 28rpx;
  649 +}
  650 +
  651 +.style2 .contentWithBtn {
  652 + display: flex;
  653 + flex-wrap: wrap;
  654 + justify-content: center;
  655 + align-items: center;
  656 + text-align: center;
  657 +}
  658 +
  659 +.style2 .contentWithBtn .miniBtn {
  660 + margin-left: 12rpx;
  661 + margin-top: 8rpx;
  662 +}
  663 +
  664 +/* ========== 样式3 ========== */
  665 +
  666 +.style3 .heroTitle {
  667 + display: none;
  668 +}
  669 +
  670 +.style3 .heroSeller,
  671 +.style3 .heroSlogan {
  672 + width: 100%;
  673 + text-align: left;
  674 +}
  675 +
  676 +.style3 .bookInfo {
  677 + width: 100%;
  678 + text-align: left;
  679 + position: relative;
  680 + box-sizing: border-box;
  681 + margin: 36rpx 0 40rpx;
  682 + background: transparent;
  683 + border: none;
  684 + padding: 0;
  685 +}
  686 +
  687 +.style3 .infoItem {
  688 + align-items: center;
  689 + flex-direction: row;
  690 + width: 85%;
  691 +}
  692 +
  693 +.style3 .contentData,
  694 +.style3 .marLeft {
  695 + font-size: 32rpx;
  696 +}
  697 +
  698 +.style3 .label {
  699 + margin-right: 20rpx;
  700 + flex-shrink: 0;
  701 +}
  702 +
  703 +.style3 .infoLine {
  704 + align-items: baseline;
  705 +}
  706 +
  707 +.style3 .infoLine .label {
  708 + flex-shrink: 0;
  709 + margin-right: 20rpx;
  710 +}
  711 +
  712 +.style3 .infoLine .infoRight {
  713 + flex: 1;
  714 + min-width: 0;
  715 + width: auto;
  716 + display: block;
  717 + line-height: 48rpx;
  718 + text-align: left;
  719 +}
  720 +
  721 +.style3 .infoLine .infoRight>text,
  722 +.style3 .infoLine .infoRight .contentDataPhone {
  723 + display: inline;
  724 + vertical-align: baseline;
  725 +}
  726 +
  727 +.style3 .infoLine .miniBtn {
  728 + display: inline-flex;
  729 + vertical-align: middle;
  730 + margin-left: 12rpx;
  731 + margin-top: 0;
  732 +}
  733 +
  734 +.bookSideText {
  735 + position: absolute;
  736 + right: 20rpx;
  737 + top: 8%;
  738 + writing-mode: vertical-rl;
  739 + font-family: "Noto Serif SC", "Songti SC", serif;
  740 + font-weight: 700;
  741 + font-size: 72rpx;
  742 + letter-spacing: 12rpx;
  743 + line-height: 1;
  744 + background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  745 + -webkit-background-clip: text;
  746 + background-clip: text;
  747 + color: transparent;
  748 + -webkit-text-fill-color: transparent;
  749 + pointer-events: none;
  750 +}
  751 +
  752 +.style3 .bookSideText {
  753 + font-size: 100rpx;
  754 +}
  755 +
  756 +/* ========== 样式4 ========== */
  757 +
  758 +.style4 {
  759 + text-align: left;
  760 +}
  761 +
  762 +.style4 .heroSeller,
  763 +.style4 .heroSlogan {
  764 + display: none;
  765 +}
  766 +
  767 +.style4 .heroTitle {
  768 + text-align: left;
  769 + margin-bottom: 16rpx;
  770 +}
  771 +
  772 +.style4 .bookInfo {
  773 + text-align: left;
  774 + margin: 0 0 40rpx;
  775 +}
  776 +
  777 +.style4 .bookInvite {
  778 + margin: 12rpx 0 28rpx;
  779 + font-family: "PingFang SC";
  780 + font-weight: 600;
  781 + font-size: 40rpx;
  782 + line-height: 56rpx;
  783 + color: #fff;
  784 +}
  785 +
  786 +.style4 .bookDivider {
  787 + width: 100%;
  788 + height: 2rpx;
  789 + margin: 0 0 32rpx;
  790 +}
  791 +
  792 +.style4 .style4Item {
  793 + flex-direction: column;
  794 + align-items: flex-start;
  795 + margin-bottom: 32rpx;
  796 +}
  797 +
  798 +.style4 .style4Item .label {
  799 + margin: 0 0 8rpx;
  800 + color: #fff;
  801 +}
  802 +
  803 +.style4 .style4Item .contentWithBtn>text,
  804 +.style4 .style4Item .contentWithBtn .contentDataPhone {
  805 + display: inline;
  806 + vertical-align: baseline;
  807 + line-height: 60rpx;
  808 +}
  809 +
  810 +.style4 .style4Item .miniBtn {
  811 + display: inline-flex;
  812 + vertical-align: middle;
  813 + margin-left: 12rpx;
  814 +}
  815 +
  816 +.style4 .placeBox {
  817 + display: block;
  818 + width: 100%;
  819 +}
  820 +
  821 +.style4 .placeShop,
  822 +.style4 .placeTable {
  823 + display: block;
  824 + width: 100%;
  825 +}
  826 +
  827 +.style4 .timeBox {
  828 + display: block;
  829 + width: 100%;
  830 +}
  831 +
  832 +.style4 .timeDate,
  833 +.style4 .timeSlot {
  834 + display: flex;
  835 + width: 100%;
  836 +}
  837 +
  838 +.style4 .timeDate,
  839 +.style4 .placeShop,
  840 +.style4 .placeTable,
  841 +.style4 .timeSlot {
  842 + line-height: 60rpx;
  843 +}
  844 +
  845 +.style4 .heroTitle,
  846 +.style4 .bookData,
  847 +.style4 .bookInvite {
  848 + color: #fff;
  849 + -webkit-text-fill-color: #fff;
  850 + background-image: none;
  851 +}
  852 +
  853 +/* ========== 内容模块 ========== */
  854 +
  855 +.receptionBox {
  856 + display: flex;
  857 + align-items: stretch;
  858 + margin: 0 40rpx 60rpx;
  859 + border-radius: 24rpx;
  860 + padding: 40rpx 20rpx 40rpx 28rpx;
  861 + background: transparent;
  862 + border: none;
  863 + color: #fff;
  864 +}
  865 +
  866 +.peopleInfo {
  867 + width: 160rpx;
  868 + flex-shrink: 0;
  869 + display: flex;
  870 + flex-direction: column;
  871 + align-items: center;
  872 + text-align: center;
  873 +}
  874 +
  875 +.headerimg,
  876 +.noHeaderimg {
  877 + width: 108rpx;
  878 + height: 108rpx;
  879 + border-radius: 50%;
  880 + background: #ddd;
  881 +}
  882 +
  883 +.peopleName {
  884 + margin-top: 12rpx;
  885 + color: #fff;
  886 + font-weight: 600;
  887 + line-height: 1.3;
  888 + word-break: break-all;
  889 +}
  890 +
  891 +.peopleRole {
  892 + margin-top: 4rpx;
  893 + color: #fff;
  894 + line-height: 1.3;
  895 +}
  896 +
  897 +.handleInfo {
  898 + flex: 1;
  899 + margin-left: 20rpx;
  900 + display: flex;
  901 + flex-direction: column;
  902 + min-width: 0;
  903 +}
  904 +
  905 +.title1 {
  906 + font-weight: 600;
  907 + color: #fff;
  908 + line-height: 1.4;
  909 +}
  910 +
  911 +.receptionBox .texts {
  912 + margin-top: 8rpx;
  913 + color: #fff;
  914 + line-height: 1.5;
  915 +}
  916 +
  917 +.contactBtns {
  918 + display: flex;
  919 + margin-top: auto;
  920 + padding-top: 24rpx;
  921 + justify-content: space-between;
  922 +}
  923 +
  924 +.brownFont {
  925 + width: 48%;
  926 + height: 64rpx;
  927 + border-radius: 999rpx;
  928 + border: 2rpx solid #fff;
  929 + color: #fff;
  930 + background: transparent;
  931 + display: flex;
  932 + align-items: center;
  933 + justify-content: center;
  934 + box-sizing: border-box;
  935 +}
  936 +
  937 +.brownFont image {
  938 + width: 28rpx;
  939 + height: 28rpx;
  940 + margin-right: 8rpx;
  941 +}
  942 +
  943 +.welcomeInfo {
  944 + text-align: center;
  945 + color: #fff;
  946 + margin-bottom: 80rpx;
  947 + display: block;
  948 + font-weight: 600;
  949 +}
  950 +
  951 +.roomSwiperWrap {
  952 + width: 100%;
  953 + padding: 0 20rpx;
  954 + box-sizing: border-box;
  955 + margin-bottom: 80rpx;
  956 +}
  957 +
  958 +.roomSwiper {
  959 + width: 100%;
  960 + height: 480rpx;
  961 + border-radius: 16rpx;
  962 + overflow: hidden;
  963 + box-sizing: border-box;
  964 + border: 2rpx solid rgba(255, 255, 255, 0.35);
  965 +}
  966 +
  967 +.roomSlide {
  968 + position: relative;
  969 + width: 100%;
  970 + height: 100%;
  971 +}
  972 +
  973 +.roomSlideImg {
  974 + width: 100%;
  975 + height: 100%;
  976 + display: block;
  977 +}
  978 +
  979 +.roomSlideName {
  980 + position: absolute;
  981 + left: 0;
  982 + right: 0;
  983 + bottom: 0;
  984 + height: 80rpx;
  985 + line-height: 80rpx;
  986 + text-align: center;
  987 + background: rgba(96, 96, 96, 0.92);
  988 + color: #ffffff;
  989 + font-family: "PingFang SC";
  990 + font-weight: 500;
  991 + font-size: 32rpx;
  992 + overflow: hidden;
  993 + text-overflow: ellipsis;
  994 + white-space: nowrap;
  995 + padding: 0 24rpx;
  996 + box-sizing: border-box;
  997 +}
  998 +
  999 +.publicModule {
  1000 + margin: 20rpx 0;
  1001 + padding: 20rpx 0 40rpx;
  1002 + border-radius: 20rpx;
  1003 + display: flex;
  1004 + align-items: center;
  1005 + flex-direction: column;
  1006 + color: #fff;
  1007 +}
  1008 +
  1009 +.rechargeItems {
  1010 + display: flex;
  1011 + min-height: 160rpx;
  1012 + border-radius: 20rpx;
  1013 + border: 2rpx dashed #fff;
  1014 + position: relative;
  1015 + padding: 20rpx 40rpx;
  1016 + flex-direction: column;
  1017 + background: transparent;
  1018 + margin: 0 20rpx 24rpx;
  1019 + align-self: stretch;
  1020 + box-sizing: border-box;
  1021 +}
  1022 +
  1023 +.rechargeTitle {
  1024 + font-weight: 600;
  1025 + letter-spacing: 4rpx;
  1026 + line-height: 50rpx;
  1027 + font-family: "PingFang SC";
  1028 +}
  1029 +
  1030 +.limitation {
  1031 + margin-top: 8rpx;
  1032 + color: #fff;
  1033 + font-family: "PingFang SC";
  1034 + font-weight: 500;
  1035 + font-size: 24rpx;
  1036 + line-height: 34rpx;
  1037 +}
  1038 +
  1039 +.favouredPolicy {
  1040 + margin-top: 16rpx;
  1041 + color: #fff;
  1042 + text-decoration: underline;
  1043 +}
  1044 +
  1045 +.introduce,
  1046 +.preferentialCoupon,
  1047 +.reserveBox {
  1048 + position: relative;
  1049 + z-index: 2;
  1050 +}
  1051 +
  1052 +.introduce {
  1053 + box-sizing: border-box;
  1054 + padding-bottom: 20rpx;
  1055 + margin: 0 20rpx 20rpx;
  1056 +}
  1057 +
  1058 +.introduce image,
  1059 +.homeImage {
  1060 + width: 100%;
  1061 + margin-bottom: 20rpx;
  1062 + display: block !important;
  1063 + vertical-align: top;
  1064 + box-sizing: border-box;
  1065 +}
  1066 +
  1067 +.introduce image:nth-last-of-type(1) {
  1068 + margin-bottom: 0;
  1069 +}
  1070 +
  1071 +.labelBox {
  1072 + width: 100%;
  1073 + margin-top: 20rpx;
  1074 +}
  1075 +
  1076 +.labelBox view,
  1077 +.labelBox text,
  1078 +.labelBox image {
  1079 + margin-bottom: 20rpx !important;
  1080 +}
  1081 +
  1082 +.texts {
  1083 + line-height: 40rpx;
  1084 + color: #fff;
  1085 + font-family: PingFang SC;
  1086 + font-weight: 500;
  1087 + display: block;
  1088 +}
  1089 +
  1090 +.reserveBox {
  1091 + margin: 20rpx;
  1092 +}
  1093 +
  1094 +.reserveBox .title {
  1095 + margin-bottom: 20rpx;
  1096 + color: #fff;
  1097 + font-family: "PingFang SC";
  1098 + font-weight: 600;
  1099 + line-height: 44rpx;
  1100 +}
  1101 +
  1102 +.items {
  1103 + width: 100%;
  1104 + margin-bottom: 20rpx;
  1105 + color: #fff;
  1106 + font-family: PingFang SC;
  1107 + display: block;
  1108 +}
  1109 +
  1110 +.videoBox {
  1111 + display: flex;
  1112 + flex-wrap: wrap;
  1113 + align-items: center;
  1114 + justify-content: center;
  1115 +}
  1116 +
  1117 +.videoBox video {
  1118 + width: 100%;
  1119 + box-sizing: border-box;
  1120 +}
  1121 +
  1122 +.preferentialCoupon navigator {
  1123 + margin: 0 20rpx;
  1124 + box-sizing: border-box;
  1125 +}
  1126 +
  1127 +.publicModule navigator {
  1128 + width: 100%;
  1129 +}
  1130 +
  1131 +.preferentialItems {
  1132 + display: flex;
  1133 + background: linear-gradient(180deg, #ffefd0 0%, #ffdc9b 100%);
  1134 + margin-bottom: 20rpx;
  1135 + min-height: 160rpx;
  1136 + padding-bottom: 10rpx;
  1137 + border-radius: 20rpx;
  1138 +}
  1139 +
  1140 +.sectionTitle {
  1141 + display: flex;
  1142 + align-items: center;
  1143 + justify-content: center;
  1144 + align-self: stretch;
  1145 + width: 100%;
  1146 + box-sizing: border-box;
  1147 + margin-bottom: 20rpx;
  1148 + color: #ffffff;
  1149 + font-family: "PingFang SC";
  1150 + font-weight: 600;
  1151 + font-size: 40rpx;
  1152 + line-height: 56rpx;
  1153 +}
  1154 +
  1155 +.heroBlock .bookSectionTitle {
  1156 + display: none;
  1157 +}
  1158 +
  1159 +.sectionTitle::before {
  1160 + content: '';
  1161 + flex: 1;
  1162 + height: 2rpx;
  1163 + margin-right: 24rpx;
  1164 + background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95));
  1165 +}
  1166 +
  1167 +.sectionTitle::after {
  1168 + content: '';
  1169 + flex: 1;
  1170 + height: 2rpx;
  1171 + margin-left: 24rpx;
  1172 + background: linear-gradient(to left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95));
  1173 +}
  1174 +
  1175 +.itemLeft {
  1176 + width: 26%;
  1177 + display: flex;
  1178 + flex-direction: column;
  1179 + justify-content: center;
  1180 + position: relative;
  1181 +}
  1182 +
  1183 +.itemRight {
  1184 + width: 74%;
  1185 + padding-right: 10rpx;
  1186 + margin-left: 18rpx;
  1187 + display: flex;
  1188 + align-items: center;
  1189 +}
  1190 +
  1191 +.couponLine {
  1192 + margin: 24rpx 0 4rpx;
  1193 + border-right: 2rpx dashed #f6231b;
  1194 +}
  1195 +
  1196 +.discountText {
  1197 + text-align: center;
  1198 + color: #ffefc5;
  1199 + border-radius: 6rpx;
  1200 + font-family: PingFang SC;
  1201 + background: #fd4d59;
  1202 + width: max-content;
  1203 + padding: 6rpx;
  1204 + position: absolute;
  1205 + left: 16rpx;
  1206 + top: 12rpx;
  1207 +}
  1208 +
  1209 +.discountText1 {
  1210 + text-align: center;
  1211 + border-radius: 6rpx;
  1212 + font-family: PingFang SC;
  1213 + background: transparent;
  1214 + width: max-content;
  1215 + padding: 2rpx 8rpx;
  1216 + position: absolute;
  1217 + left: 16rpx;
  1218 + top: 12rpx;
  1219 +}
  1220 +
  1221 +.discountText2 {
  1222 + background: #fd4d59;
  1223 + color: #fff;
  1224 +}
  1225 +
  1226 +.discountText3 {
  1227 + color: #fd4d59;
  1228 + border: 2rpx solid #fd4d59;
  1229 +}
  1230 +
  1231 +.priceText {
  1232 + display: flex;
  1233 + align-items: baseline;
  1234 + justify-content: center;
  1235 + font-family: PingFang SC;
  1236 + color: #f6231b;
  1237 + font-weight: 600;
  1238 + font-size: 48rpx;
  1239 + margin-top: 6rpx;
  1240 +}
  1241 +
  1242 +.priceText text {
  1243 + font-size: 48rpx;
  1244 +}
  1245 +
  1246 +.icons {
  1247 + color: #f6231b;
  1248 + text-align: center;
  1249 +}
  1250 +
  1251 +.btns {
  1252 + margin: 24rpx 20rpx 0 0;
  1253 + display: flex;
  1254 + justify-content: space-evenly;
  1255 + align-items: baseline;
  1256 + flex-direction: column;
  1257 + height: 90%;
  1258 + flex: 1;
  1259 +}
  1260 +
  1261 +.anameText {
  1262 + font-weight: 600;
  1263 + color: #894C16;
  1264 +}
  1265 +
  1266 +.btnBox {
  1267 + display: flex;
  1268 + flex-direction: column;
  1269 +}
  1270 +
  1271 +.orderingFood {
  1272 + padding: 0 20rpx;
  1273 + color: #fff;
  1274 + border: none;
  1275 + text-align: center;
  1276 + border-radius: 20rpx;
  1277 + line-height: 44rpx;
  1278 + height: 44rpx;
  1279 + width: max-content;
  1280 + flex-shrink: 0;
  1281 + background: #894C16;
  1282 +}
  1283 +
  1284 +.orderingFood1 {
  1285 + border: 2rpx solid #894C16 !important;
  1286 + background: transparent !important;
  1287 + color: #894C16 !important;
  1288 + font-weight: 600;
  1289 +}
  1290 +
  1291 +.orderingFood2 {
  1292 + border: none !important;
  1293 + background: #894C16 !important;
  1294 + color: #fff !important;
  1295 + font-weight: 400;
  1296 + padding: 0 34rpx;
  1297 +}
  1298 +
  1299 +.grantNum {
  1300 + display: flex;
  1301 + flex-direction: column;
  1302 + align-items: center;
  1303 + color: #c36607;
  1304 + margin-top: 10rpx;
  1305 +}
  1306 +
  1307 +.grantNum text {
  1308 + color: #f6231b;
  1309 + margin-right: 10rpx;
  1310 +}
  1311 +
  1312 +.bottom {
  1313 + margin-top: 4rpx;
  1314 + width: 100%;
  1315 + color: #c36607;
  1316 + font-family: PingFang SC;
  1317 + font-weight: 500;
  1318 + display: -webkit-box;
  1319 + word-break: break-all;
  1320 + word-wrap: break-word;
  1321 + overflow: hidden;
  1322 + text-align: left;
  1323 +}
  1324 +
  1325 +.nodate {
  1326 + padding-left: 20rpx;
  1327 +}
  1328 +
  1329 +.vips {
  1330 + display: flex;
  1331 + flex-direction: column;
  1332 + justify-content: center;
  1333 + align-items: center;
  1334 + margin-bottom: 20rpx;
  1335 +}
  1336 +
  1337 +.businessBox {
  1338 + color: #fff;
  1339 + font-size: 22rpx;
  1340 + text-align: center;
  1341 + font-family: PingFang SC;
  1342 + display: flex;
  1343 +}
  1344 +
  1345 +.businessBox text {
  1346 + text-decoration: underline;
  1347 +}
  1348 +
  1349 +.sharewidth {
  1350 + position: fixed;
  1351 + left: 0;
  1352 + bottom: 0;
  1353 + height: 160rpx;
  1354 + padding: 0 40rpx;
  1355 + box-sizing: border-box;
  1356 + z-index: 100;
  1357 + justify-content: space-between;
  1358 + width: 100%;
  1359 + background: #fff;
  1360 +}
  1361 +
  1362 +.shareItem,
  1363 +.moreBtn,
  1364 +.paymenBtn {
  1365 + width: inherit;
  1366 + background: transparent;
  1367 + color: #C48138;
  1368 + border: 2rpx solid #C48138;
  1369 + height: 80rpx;
  1370 + border-radius: 42rpx;
  1371 + font-weight: 600;
  1372 + margin-right: 20rpx;
  1373 + padding: 0;
  1374 +}
  1375 +
  1376 +.threeBtn {
  1377 + width: auto;
  1378 + padding: 0 24rpx;
  1379 + flex-shrink: 0;
  1380 +}
  1381 +
  1382 +.shareItem {
  1383 + margin-right: 0;
  1384 + background: #C48138;
  1385 + color: #fff;
  1386 + animation-name: scaleDraw;
  1387 + animation-timing-function: ease-in-out;
  1388 + animation-iteration-count: infinite;
  1389 + animation-duration: 2s;
  1390 +}
  1391 +
  1392 +.shareItem1 {
  1393 + padding: 0;
  1394 + margin-right: 0;
  1395 + background: #C48138;
  1396 + color: #fff;
  1397 + animation: none;
  1398 +}
  1399 +
  1400 +.paymenBtn1 {
  1401 + margin-right: 20rpx;
  1402 +}
  1403 +
  1404 +@keyframes scaleDraw {
  1405 + 0% {
  1406 + transform: scale(1);
  1407 + }
  1408 +
  1409 + 25% {
  1410 + transform: scale(1.1);
  1411 + }
  1412 +
  1413 + 50% {
  1414 + transform: scale(1);
  1415 + }
  1416 +
  1417 + 75% {
  1418 + transform: scale(1.1);
  1419 + }
  1420 +}
  1421 +
  1422 +.musicImg {
  1423 + width: 62rpx;
  1424 + height: 62rpx;
  1425 + position: fixed !important;
  1426 + right: 8%;
  1427 + top: 22%;
  1428 + z-index: 300;
  1429 +}
  1430 +
  1431 +.giftImg {
  1432 + width: 108rpx;
  1433 + height: 116rpx;
  1434 + position: fixed !important;
  1435 + right: 4%;
  1436 + top: 28%;
  1437 + z-index: 300;
  1438 + transform-origin: 50% 100%;
  1439 +}
  1440 +
  1441 +.giftImg1 {
  1442 + transform: scale(0);
  1443 +}
  1444 +
  1445 +.cannotImg {
  1446 + width: 200rpx;
  1447 + height: 66rpx;
  1448 + transform: rotate(-45deg);
  1449 + position: fixed;
  1450 + left: 38%;
  1451 + z-index: 999;
  1452 + top: 50%;
  1453 +}
  1454 +
  1455 +.fullscreenMask {
  1456 + position: fixed;
  1457 + top: 35%;
  1458 + margin: 0 auto;
  1459 + height: 580rpx;
  1460 + z-index: 100;
  1461 + color: #fff;
  1462 + display: flex;
  1463 + align-items: center;
  1464 + justify-content: center;
  1465 + border-radius: 50%;
  1466 + width: 100%;
  1467 +}
  1468 +
  1469 +.fullscreenMask image {
  1470 + width: 544rpx;
  1471 + height: 600rpx;
  1472 +}
  1473 +
  1474 +.targetPoint {
  1475 + position: fixed;
  1476 + width: 108rpx;
  1477 + height: 116rpx;
  1478 + background: transparent;
  1479 + z-index: 100;
  1480 +}
  1481 +
  1482 +.titleModal {
  1483 + width: 100%;
  1484 + color: #000;
  1485 + font-family: PingFang SC;
  1486 + font-weight: 500;
  1487 + font-size: 44rpx;
  1488 + text-align: center;
  1489 + position: relative;
  1490 +}
  1491 +
  1492 +.explain {
  1493 + padding: 0 40rpx;
  1494 + font-size: 30rpx;
  1495 + color: #000;
  1496 + line-height: 40rpx;
  1497 + text-align: center;
  1498 +}
  1499 +
  1500 +.screenshotBtns {
  1501 + width: 100%;
  1502 + display: flex;
  1503 + justify-content: space-between;
  1504 + box-sizing: border-box;
  1505 + padding: 52rpx 22rpx 0;
  1506 +}
  1507 +
  1508 +.btnsLeft,
  1509 +.btnsRight {
  1510 + width: 43%;
  1511 + border-radius: 42rpx;
  1512 + bottom: 10%;
  1513 +}
  1514 +
  1515 +.btnsLeft {
  1516 + background: #fff;
  1517 + border: 2rpx solid #0346a5;
  1518 + color: #0346a5;
  1519 +}
  1520 +
  1521 +.btnsRight {
  1522 + background: linear-gradient(104.24deg, #4c8dad -57.47%, #0143a3 55.72%, #42a5ff 148.72%);
  1523 + color: #fff;
  1524 +}
  1525 +
  1526 +#payModal {
  1527 + display: flex;
  1528 + align-items: center;
  1529 +}
  1530 +
  1531 +.mymodal {
  1532 + top: 30% !important;
  1533 + width: 80% !important;
  1534 + margin: 0 auto !important;
  1535 + left: 0 !important;
  1536 + right: 0 !important;
  1537 +}
  1538 +
  1539 +.mymodal .mymodal-content {
  1540 + height: auto !important;
  1541 +}
  1542 +
  1543 +#couponModal .titleModal {
  1544 + position: relative;
  1545 + width: 544rpx;
  1546 + background: #f14033;
  1547 + border-top-left-radius: 20rpx;
  1548 + border-top-right-radius: 20rpx;
  1549 + margin: 94% auto 0;
  1550 +}
  1551 +
  1552 +#couponModal .couponWrap {
  1553 + position: relative;
  1554 + width: 544rpx;
  1555 + margin: 0 auto;
  1556 + background: #f14033;
  1557 + border-bottom-left-radius: 20rpx;
  1558 + border-bottom-right-radius: 20rpx;
  1559 +}
  1560 +
  1561 +#couponModal .mymodal-title {
  1562 + padding: 0 80rpx;
  1563 +}
  1564 +
  1565 +#couponModal .mymodal-content {
  1566 + padding: 0 80rpx 40rpx;
  1567 +}
  1568 +
  1569 +#couponModal .mymodal {
  1570 + background: rgba(0, 0, 0, 0.8);
  1571 + width: 100% !important;
  1572 + top: 0 !important;
  1573 + height: auto !important;
  1574 + z-index: 300;
  1575 +}
  1576 +
  1577 +.nameInfo {
  1578 + font-family: PingFang SC;
  1579 + font-weight: 500;
  1580 + line-height: 38rpx;
  1581 + color: #fff;
  1582 + margin-bottom: 28rpx;
  1583 + text-align: center;
  1584 + padding: 44rpx 30rpx 0;
  1585 +}
  1586 +
  1587 +.couponTotal {
  1588 + color: #fff;
  1589 + font-family: PingFang SC;
  1590 + font-weight: 500;
  1591 + line-height: 48rpx;
  1592 + padding-bottom: 16rpx;
  1593 +}
  1594 +
  1595 +.counterText {
  1596 + color: #ffc806;
  1597 + font-weight: 600;
  1598 + display: flex;
  1599 + font-size: 100rpx;
  1600 + align-items: flex-end;
  1601 + justify-content: center;
  1602 + margin: 16rpx 0;
  1603 +}
  1604 +
  1605 +.couponInfo {
  1606 + color: #fff;
  1607 + text-align: center;
  1608 + margin-bottom: 20rpx;
  1609 + font-weight: 600;
  1610 + display: flex;
  1611 + flex-direction: column;
  1612 + align-items: center;
  1613 + line-height: 78rpx;
  1614 +}
  1615 +
  1616 +.couponBtn {
  1617 + width: 80%;
  1618 + margin: 16rpx auto 20rpx;
  1619 + background: #fff;
  1620 + font-weight: 600;
  1621 + text-align: center;
  1622 + padding: 12rpx 0;
  1623 + color: #f14033;
  1624 + border-radius: 8rpx;
  1625 + height: 60rpx;
  1626 + line-height: 60rpx;
  1627 + display: flex;
  1628 + align-items: center;
  1629 + justify-content: center;
  1630 +}
  1631 +
  1632 +.couponBtn1 {
  1633 + padding: 18rpx 0;
  1634 + border-radius: 198rpx;
  1635 + font-weight: 600;
  1636 +}
  1637 +
  1638 +.couponText {
  1639 + color: #fff;
  1640 + text-decoration: underline;
  1641 + text-align: center;
  1642 + padding-bottom: 44rpx;
  1643 + font-weight: 600;
  1644 + letter-spacing: 2rpx;
  1645 +}
  1646 +
  1647 +.closeImg {
  1648 + width: 60rpx;
  1649 + height: 60rpx;
  1650 + position: absolute;
  1651 + right: 6%;
  1652 + top: 9%;
  1653 + z-index: 250 !important;
  1654 +}
  1655 +
  1656 +.closeBox {
  1657 + margin-top: 20rpx;
  1658 + color: #fff;
  1659 + font-family: PingFang SC;
  1660 + font-weight: 400;
  1661 + display: flex;
  1662 + align-items: center;
  1663 + justify-content: center;
  1664 +}
  1665 +
  1666 +/* ========== 主题色(置底,便于覆盖) ========== */
  1667 +
  1668 +/* 1. 主题底色 + page-theme-fade */
  1669 +
  1670 +.pagepearlWhite {
  1671 + background-color: rgba(70, 68, 68, 1);
  1672 +}
  1673 +
  1674 +.pagepearlWhite.style4 .bookDivider {
  1675 + background: #fff;
  1676 +}
  1677 +
  1678 +.pageturmeric {
  1679 + background-color: #C4A26F;
  1680 +}
  1681 +
  1682 +.pageturmeric .page-theme-fade {
  1683 + 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%);
  1684 +}
  1685 +
  1686 +.pagestoneGreen {
  1687 + background-color: #45675A;
  1688 +}
  1689 +
  1690 +.pagestoneGreen .page-theme-fade {
  1691 + 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%);
  1692 +}
  1693 +
  1694 +.pagelanCaiHe {
  1695 + background-color: #076CDB;
  1696 +}
  1697 +
  1698 +.pagelanCaiHe .page-theme-fade {
  1699 + 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%);
  1700 +}
  1701 +
  1702 +.pageultramarine {
  1703 + background-color: #335D89;
  1704 +}
  1705 +
  1706 +.pageultramarine .page-theme-fade {
  1707 + 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%);
  1708 +}
  1709 +
  1710 +.pagechinaRed {
  1711 + background-color: #C83F32;
  1712 +}
  1713 +
  1714 +.pagechinaRed .page-theme-fade {
  1715 + 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%);
  1716 +}
  1717 +
  1718 +.pagecrimson {
  1719 + background-color: #791013;
  1720 +}
  1721 +
  1722 +.pagecrimson .page-theme-fade {
  1723 + 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%);
  1724 +}
  1725 +
  1726 +.pageblackBlueGradient {
  1727 + background-color: #181716;
  1728 +}
  1729 +
  1730 +.pageblackBlueGradient .page-theme-fade {
  1731 + 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%);
  1732 +}
  1733 +
  1734 +/* 2. pagepearlWhite 组件覆盖 */
  1735 +
  1736 +.pagepearlWhite .hero-image,
  1737 +.isCustom .hero-image {
  1738 + -webkit-mask-image: linear-gradient(to bottom,
  1739 + #000000 0%,
  1740 + #000000 66%,
  1741 + rgba(0, 0, 0, .90) 74%,
  1742 + rgba(0, 0, 0, .42) 88%,
  1743 + transparent 100%);
  1744 + mask-image: linear-gradient(to bottom,
  1745 + #000000 0%,
  1746 + #000000 66%,
  1747 + rgba(0, 0, 0, .90) 74%,
  1748 + rgba(0, 0, 0, .42) 88%,
  1749 + transparent 100%);
  1750 +}
  1751 +
  1752 +.pagepearlWhite.style1 .bookInfo {
  1753 + box-sizing: border-box;
  1754 + padding: 22rpx;
  1755 + margin: 0 20rpx;
  1756 +}
  1757 +
  1758 +.pagepearlWhite.style2 .bookInfo {
  1759 + margin: 24rpx 0 0;
  1760 +}
  1761 +
  1762 +.pagepearlWhite .entrance {
  1763 + margin: 0 40rpx 24rpx;
  1764 + box-sizing: border-box;
  1765 +}
  1766 +
  1767 +.pagepearlWhite .receptionBox {
  1768 + background: transparent;
  1769 + border: none;
  1770 +}
  1771 +
  1772 +/* 3. pageturmeric 覆盖 */
  1773 +
  1774 +.pageturmeric .waveLine,
  1775 +.pageturmeric .waveBar {
  1776 + background: #815635;
  1777 +}
  1778 +
  1779 +.pageturmeric .style4 .heroTitle,
  1780 +.pageturmeric .style4 .bookData,
  1781 +.pageturmeric .style4 .bookInvite {
  1782 + color: #894C16;
  1783 + -webkit-text-fill-color: #894C16;
  1784 + background-image: none;
  1785 +}
  1786 +
  1787 +.pageturmeric .style4 .style4Item .label {
  1788 + color: #FFEFC5;
  1789 +}
  1790 +
  1791 +.pageturmeric .style4 .style4Item .contentData,
  1792 +.pageturmeric .style4 .style4Item .contentDataPhone {
  1793 + color: #894C16;
  1794 +}
  1795 +
  1796 +.pageturmeric .style4 .bookDivider {
  1797 + background: rgba(137, 76, 22, 0.35);
  1798 +}
  1799 +
  1800 +.pageturmeric .bookSideText {
  1801 + background-image: linear-gradient(180deg, #c37a3a 0%, #894c16 100%);
  1802 +}
  1803 +
  1804 +.pageturmeric .heroTitle {
  1805 + background-image: linear-gradient(180deg, #c37a3a 0%, #894c16 100%);
  1806 + -webkit-background-clip: text;
  1807 + background-clip: text;
  1808 + color: transparent;
  1809 +}
  1810 +
  1811 +.pageturmeric .style2 .heroSeller,
  1812 +.pageturmeric .style2 .heroSlogan,
  1813 +.pageturmeric .style2 .bookData,
  1814 +.pageturmeric .style2.welcomeInfo,
  1815 +.pageturmeric .style3.welcomeInfo {
  1816 + color: #894C16;
  1817 +}
  1818 +
  1819 +.pageturmeric .entranceItem view {
  1820 + color: #FFEFC5;
  1821 +}
  1822 +
  1823 +.pageturmeric .scroll-body,
  1824 +.pageturmeric .infoItem>.contentData:not(.bookData):not(.contentWithBtn),
  1825 +.pageturmeric .valueRow>.contentData,
  1826 +.pageturmeric .contentDataPhone,
  1827 +.pageturmeric .divider,
  1828 +.pageturmeric .contentWithBtn>text,
  1829 +.pageturmeric .sectionTitle,
  1830 +.pageturmeric .peopleName,
  1831 +.pageturmeric .peopleRole,
  1832 +.pageturmeric .title1,
  1833 +.pageturmeric .receptionBox .texts,
  1834 +.pageturmeric .limitation,
  1835 +.pageturmeric .rechargeTitle {
  1836 + color: #894C16;
  1837 +}
  1838 +
  1839 +.pageturmeric .rechargeItems {
  1840 + background: #FFEFC5;
  1841 + border: none;
  1842 +}
  1843 +
  1844 +.pageturmeric .bookData {
  1845 + color: #fff;
  1846 +}
  1847 +
  1848 +.pageturmeric .miniBtn {
  1849 + background: #FFEFC5;
  1850 + color: #894C16;
  1851 + border: none;
  1852 +}
  1853 +
  1854 +.pageturmeric .entranceFeedback {
  1855 + padding: 12rpx 10rpx;
  1856 + border-radius: 24rpx;
  1857 + color: #894C16;
  1858 +}
  1859 +
  1860 +.pageturmeric .receptionBox {
  1861 + background: #FFEFC5;
  1862 + border-color: transparent;
  1863 + color: #894C16;
  1864 + border: none;
  1865 +}
  1866 +
  1867 +.pageturmeric .brownFont {
  1868 + border-color: #894C16;
  1869 + color: #894C16;
  1870 + background: transparent;
  1871 +}
  1872 +
  1873 +.pageturmeric .welcomeInfo {
  1874 + color: #fff;
  1875 + background-image: none;
  1876 + -webkit-background-clip: border-box;
  1877 + background-clip: border-box;
  1878 +}
  1879 +
  1880 +.pageturmeric .sectionTitle::before {
  1881 + background: linear-gradient(to right, rgba(137, 76, 22, 0), rgba(137, 76, 22, 0.95));
  1882 +}
  1883 +
  1884 +.pageturmeric .sectionTitle::after {
  1885 + background: linear-gradient(to left, rgba(137, 76, 22, 0), rgba(137, 76, 22, 0.95));
  1886 +}
  1887 +
  1888 +.pageturmeric .moreBtn,
  1889 +.pageturmeric .paymenBtn {
  1890 + color: #894C16;
  1891 + border-color: #894C16;
  1892 + background: transparent;
  1893 +}
  1894 +
  1895 +.pageturmeric .shareItem,
  1896 +.pageturmeric .shareItem1 {
  1897 + background: #894C16;
  1898 + color: #fff;
  1899 + border-color: transparent;
  1900 +}
  1901 +
  1902 +/* 4. pagecolor 覆盖(非白非金彩系共用) */
  1903 +
  1904 +.pagecolor.style4 .bookDivider {
  1905 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  1906 +}
  1907 +
  1908 +.pagecolor .style4 .heroTitle,
  1909 +.pagecolor .style4 .bookData,
  1910 +.pagecolor .style4 .bookInvite {
  1911 + background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  1912 + -webkit-background-clip: text;
  1913 + background-clip: text;
  1914 + color: transparent;
  1915 + -webkit-text-fill-color: transparent;
  1916 +}
  1917 +
  1918 +.pagecolor .heroTitle,
  1919 +.pagecolor .infoItem>.contentData:not(.bookData):not(.contentWithBtn),
  1920 +.pagecolor .valueRow>.contentData,
  1921 +.pagecolor .contentDataPhone,
  1922 +.pagecolor .divider,
  1923 +.pagecolor .contentWithBtn>text,
  1924 +.pagecolor .welcomeInfo,
  1925 +.pagecolor .sectionTitle,
  1926 +.pagecolor .style2 .heroSeller,
  1927 +.pagecolor .style2 .heroSlogan,
  1928 +.pagecolor .style2 .bookData,
  1929 +.pagecolor .style2.welcomeInf,
  1930 +.pagecolor .style3 .heroSeller,
  1931 +.pagecolor .style3 .heroSlogan {
  1932 + background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  1933 + -webkit-background-clip: text;
  1934 + background-clip: text;
  1935 + color: transparent;
  1936 +}
  1937 +
  1938 +.pagecolor .style4 .style4Item .contentData {
  1939 + width: 100%;
  1940 + font-size: 40rpx;
  1941 + line-height: 48rpx;
  1942 + color: #fff !important;
  1943 +}
  1944 +
  1945 +.pagecolor .rechargeTitle,
  1946 +.pagecolor .limitation {
  1947 + color: #894C16;
  1948 +}
  1949 +
  1950 +.pagecolor .rechargeItems {
  1951 + background: #ffefc5;
  1952 +}
  1953 +
  1954 +.pagecolor .scroll-body {
  1955 + color: #ffe6c5;
  1956 +}
  1957 +
  1958 +.pagecolor .entranceItem view {
  1959 + color: #ffe6c5;
  1960 +}
  1961 +
  1962 +.pagecolor .bookData {
  1963 + color: #fff;
  1964 + background-image: none;
  1965 + -webkit-background-clip: border-box;
  1966 + background-clip: border-box;
  1967 +}
  1968 +
  1969 +.pagecolor .miniBtn {
  1970 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  1971 + border-color: transparent;
  1972 + color: #000;
  1973 + border: none;
  1974 +}
  1975 +
  1976 +.pagecolor .entranceFeedback {
  1977 + padding: 12rpx 10rpx;
  1978 + border-radius: 24rpx;
  1979 + color: #000;
  1980 +}
  1981 +
  1982 +.pagecolor .receptionBox {
  1983 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  1984 + border-color: transparent;
  1985 + color: #000;
  1986 + border: none;
  1987 +}
  1988 +
  1989 +.pagecolor .peopleName,
  1990 +.pagecolor .peopleRole,
  1991 +.pagecolor .title1,
  1992 +.pagecolor .receptionBox .texts {
  1993 + color: #000;
  1994 +}
  1995 +
  1996 +.pagecolor .brownFont {
  1997 + border-color: #000;
  1998 + color: #000;
  1999 + background: transparent;
  2000 +}
  2001 +
  2002 +.pagecolor .sectionTitle::before {
  2003 + background: linear-gradient(to right, rgba(199, 161, 125, 0), rgba(199, 161, 125, 0.95));
  2004 +}
  2005 +
  2006 +.pagecolor .sectionTitle::after {
  2007 + background: linear-gradient(to left, rgba(199, 161, 125, 0), rgba(199, 161, 125, 0.95));
  2008 +}
  2009 +
  2010 +.pagecolor .moreBtn,
  2011 +.pagecolor .paymenBtn {
  2012 + position: relative;
  2013 + border: none;
  2014 + background-image: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  2015 + -webkit-background-clip: text;
  2016 + background-clip: text;
  2017 + color: transparent;
  2018 + -webkit-text-fill-color: transparent;
  2019 +}
  2020 +
  2021 +.pagecolor .moreBtn::after,
  2022 +.pagecolor .paymenBtn::after {
  2023 + content: '';
  2024 + position: absolute;
  2025 + left: 0;
  2026 + top: 0;
  2027 + right: 0;
  2028 + bottom: 0;
  2029 + border-radius: 42rpx;
  2030 + padding: 2rpx;
  2031 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  2032 + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  2033 + -webkit-mask-composite: xor;
  2034 + mask-composite: exclude;
  2035 + pointer-events: none;
  2036 + box-sizing: border-box;
  2037 + border: none;
  2038 + width: auto;
  2039 + height: auto;
  2040 + transform: none;
  2041 +}
  2042 +
  2043 +.pagecolor .shareItem,
  2044 +.pagecolor .shareItem1 {
  2045 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  2046 + color: #000;
  2047 + border-color: transparent;
  2048 + border: none;
  2049 +}
  2050 +
  2051 +.pagecolor .style4 .timeSlot>text,
  2052 +.pagecolor .style4 .style4Item .contentWithBtn>text,
  2053 +.pagecolor .style4 .style4Item .contentDataPhone {
  2054 + background-image: none;
  2055 + -webkit-background-clip: border-box;
  2056 + background-clip: border-box;
  2057 + color: #fff;
  2058 + -webkit-text-fill-color: #fff;
  2059 +}
  2060 +
  2061 +.pagecolor .style4 .miniBtn,
  2062 +.pagecolor .style4 .miniBtn text {
  2063 + color: #000;
  2064 +}
  2065 +
  2066 +/* 5. isCustom 文字色覆盖(边框/背景见下方「版块边框背景」专区) */
  2067 +
  2068 +.isCustom .waveLine,
  2069 +.isCustom .waveBar {
  2070 + background: #fff;
  2071 +}
  2072 +
  2073 +.isCustom .style4 .heroTitle,
  2074 +.isCustom .style4 .bookData,
  2075 +.isCustom .style4 .bookInvite {
  2076 + background-image: none;
  2077 + color: #fff;
  2078 + -webkit-text-fill-color: #fff;
  2079 +}
  2080 +
  2081 +.isCustom .bookSideText {
  2082 + background-image: none;
  2083 + color: #fff;
  2084 + -webkit-text-fill-color: #fff;
  2085 +}
  2086 +
  2087 +/* ============================================================================
  2088 + * 版块边框 / 背景(集中配置,方便改 margin、padding)
  2089 + * ---------------------------------------------------------------------------
  2090 + * 样式1:主题色无边框无底;自定义 → bookInfo、borderSty
  2091 + * 样式2:主题色 → entrance;自定义 → heroBlock.style2、entrance、borderSty
  2092 + * 样式3:主题色 → entrance;自定义 → bookInfo、entrance、borderSty
  2093 + * 样式4:主题色 → entrance;自定义 → heroBlock.style4、entrance、borderSty
  2094 + * 全样式自定义:receptionBox 都要有底+渐变边框
  2095 + * ============================================================================ */
  2096 +
  2097 +/* --- 渐变描边公用(主题色非金 entrance / 自定义版块) --- */
  2098 +.panelGradBorder::before,
  2099 +.pagecolor.style2 .entrance::before,
  2100 +.pagecolor.style3 .entrance::before,
  2101 +.pagecolor.style4 .entrance::before,
  2102 +.isCustom.style1 .bookInfo::before,
  2103 +.isCustom.style1 .borderSty::before,
  2104 +.isCustom.style2 .heroBlock.style2::before,
  2105 +.isCustom.style2 .entrance::before,
  2106 +.isCustom.style2 .borderSty::before,
  2107 +.isCustom.style3 .bookInfo::before,
  2108 +.isCustom.style3 .entrance::before,
  2109 +.isCustom.style3 .borderSty::before,
  2110 +.isCustom.style4 .heroBlock.style4::before,
  2111 +.isCustom.style4 .entrance::before,
  2112 +.isCustom.style4 .borderSty::before,
  2113 +.isCustom .receptionBox::before {
  2114 + content: '';
  2115 + position: absolute;
  2116 + left: 0;
  2117 + top: 0;
  2118 + right: 0;
  2119 + bottom: 0;
  2120 + border-radius: inherit;
  2121 + padding: 2rpx;
  2122 + background: linear-gradient(180deg, #ffe6c5 0%, #c7a17d 100%);
  2123 + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  2124 + -webkit-mask-composite: xor;
  2125 + mask-composite: exclude;
  2126 + pointer-events: none;
  2127 + box-sizing: border-box;
  2128 + z-index: 0;
  2129 +}
  2130 +
  2131 +/* ========== 自定义 · 全样式 receptionBox ========== */
  2132 +.isCustom .receptionBox {
  2133 + position: relative;
  2134 + box-sizing: border-box;
  2135 + background: rgba(0, 0, 0, 0.1);
  2136 + border: none;
  2137 + border-radius: 24rpx;
  2138 + padding: 40rpx 20rpx 40rpx 28rpx;
  2139 + margin: 0 40rpx 60rpx;
  2140 + color: #fff;
  2141 +}
  2142 +
  2143 +.isCustom .receptionBox .peopleName,
  2144 +.isCustom .receptionBox .peopleRole,
  2145 +.isCustom .receptionBox .title1,
  2146 +.isCustom .receptionBox .texts {
  2147 + color: #fff;
  2148 +}
  2149 +
  2150 +/* ========== 样式1 ========== */
  2151 +/* 主题色:不加边框/背景 */
  2152 +
  2153 +/* 自定义:bookInfo、borderSty */
  2154 +.isCustom.style1 .bookInfo,
  2155 +.isCustom.style1 .borderSty {
  2156 + position: relative;
  2157 + box-sizing: border-box;
  2158 + background: rgba(0, 0, 0, 0.1);
  2159 + border: none;
  2160 + border-radius: 20rpx;
  2161 +}
  2162 +
  2163 +.isCustom.style1 .bookInfo {
  2164 + padding: 22rpx;
  2165 + margin: 60rpx 0 0 0;
  2166 +}
  2167 +
  2168 +.style1 .bookInfo>.heroSlogan {
  2169 + margin: 0 0 20rpx;
  2170 + text-align: left;
  2171 +}
  2172 +
  2173 +.isCustom.style1 .borderSty {
  2174 + padding: 24rpx 0;
  2175 + margin: 0 20rpx 0;
  2176 +}
  2177 +
  2178 +/* ========== 样式2 ========== */
  2179 +/* 主题色:仅 entrance */
  2180 +.pageturmeric.style2 .entrance {
  2181 + border: 2rpx solid #FFEFC5;
  2182 + background: transparent;
  2183 +}
  2184 +
  2185 +.pageturmeric.style2 .entrance::before {
  2186 + display: none;
  2187 +}
  2188 +
  2189 +.pagecolor.style2 .entrance {
  2190 + border: none;
  2191 + background: rgba(0, 0, 0, 0.1);
  2192 +}
  2193 +
  2194 +/* 自定义:heroBlock.style2、entrance、borderSty */
  2195 +.isCustom.style2 .heroBlock.style2,
  2196 +.isCustom.style2 .entrance,
  2197 +.isCustom.style2 .borderSty {
  2198 + position: relative;
  2199 + box-sizing: border-box;
  2200 + background: rgba(0, 0, 0, 0.1);
  2201 + border: none;
  2202 + border-radius: 20rpx;
  2203 +}
  2204 +
  2205 +.isCustom.style2 .heroBlock.style2 {
  2206 + padding: 42rpx 32rpx 10rpx 32rpx;
  2207 + margin: 0 40rpx 80rpx;
  2208 +}
  2209 +
  2210 +.isCustom.style2 .entrance {
  2211 + border-radius: 24rpx;
  2212 + padding: 28rpx 18rpx;
  2213 + margin: 0 40rpx 60rpx;
  2214 +}
  2215 +
  2216 +.isCustom.style2 .borderSty {
  2217 + padding: 24rpx 0;
  2218 + margin: 0 20rpx 60rpx;
  2219 +}
  2220 +
  2221 +/* ========== 样式3 ========== */
  2222 +/* 主题色:仅 entrance */
  2223 +.pageturmeric.style3 .entrance {
  2224 + border: 2rpx solid #FFEFC5;
  2225 + background: transparent;
  2226 +}
  2227 +
  2228 +.pageturmeric.style3 .entrance::before {
  2229 + display: none;
  2230 +}
  2231 +
  2232 +.pagecolor.style3 .entrance {
  2233 + border: none;
  2234 + background: rgba(0, 0, 0, 0.1);
  2235 +}
  2236 +
  2237 +/* 自定义:bookInfo、entrance、borderSty */
  2238 +.isCustom.style3 .bookInfo,
  2239 +.isCustom.style3 .entrance,
  2240 +.isCustom.style3 .borderSty {
  2241 + position: relative;
  2242 + box-sizing: border-box;
  2243 + background: rgba(0, 0, 0, 0.1);
  2244 + border: none;
  2245 + border-radius: 20rpx;
  2246 +}
  2247 +
  2248 +.isCustom.style3 .bookInfo {
  2249 + padding: 42rpx 22rpx 18rpx 22rpx;
  2250 + margin-top: 60rpx;
  2251 +}
  2252 +
  2253 +.isCustom.style3 .entrance {
  2254 + border-radius: 24rpx;
  2255 + padding: 28rpx 18rpx;
  2256 + margin: 0 40rpx 60rpx;
  2257 +}
  2258 +
  2259 +.isCustom.style3 .borderSty {
  2260 + padding: 24rpx 0;
  2261 + margin: 0 40rpx 60rpx;
  2262 +}
  2263 +
  2264 +/* ========== 样式4 ========== */
  2265 +/* 主题色:仅 entrance */
  2266 +.pageturmeric.style4 .entrance {
  2267 + border: 2rpx solid #FFEFC5;
  2268 + background: transparent;
  2269 +}
  2270 +
  2271 +.pageturmeric.style4 .entrance::before {
  2272 + display: none;
  2273 +}
  2274 +
  2275 +.pagecolor.style4 .entrance {
  2276 + border: none;
  2277 + background: rgba(0, 0, 0, 0.1);
  2278 +}
  2279 +
  2280 +/* 自定义:heroBlock.style4、entrance、borderSty */
  2281 +.heroBlock.style1 .entrance {
  2282 + margin: 0 12rpx 24rpx;
  2283 +}
  2284 +
  2285 +.isCustom.style4 .heroBlock.style4,
  2286 +.isCustom.style4 .entrance,
  2287 +.isCustom.style4 .borderSty {
  2288 + position: relative;
  2289 + box-sizing: border-box;
  2290 + background: rgba(0, 0, 0, 0.1);
  2291 + border: none;
  2292 + border-radius: 20rpx;
  2293 +}
  2294 +
  2295 +.isCustom.style4 .heroBlock.style4 {
  2296 + padding: 32rpx 22rpx 10rpx;
  2297 + margin: 0 40rpx 60rpx;
  2298 +}
  2299 +
  2300 +.isCustom.style4 .entrance {
  2301 + border-radius: 24rpx;
  2302 + padding: 28rpx 18rpx;
  2303 + margin: 0 40rpx 60rpx;
  2304 +}
  2305 +
  2306 +.isCustom.style4 .borderSty {
  2307 + padding: 24rpx 0;
  2308 + margin: 0 20rpx 60rpx;
  2309 +}
@@ -49,6 +49,7 @@ @@ -49,6 +49,7 @@
49 flex-direction: column; 49 flex-direction: column;
50 align-items: flex-end; 50 align-items: flex-end;
51 padding: 16rpx 0 16rpx 20rpx; 51 padding: 16rpx 0 16rpx 20rpx;
  52 + flex: 1;
52 } 53 }
53 54
54 .leftLine { 55 .leftLine {
@@ -59,7 +59,7 @@ Page({ @@ -59,7 +59,7 @@ Page({
59 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额'; 59 if (recharge_list.is_price == '1') item.priceInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.price + '元余额';
60 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分'; 60 if (recharge_list.is_score == '1') item.scoreInfo = '会员充值满' + item.recharge_money + '元赠送' + item.recharge_list.score + '积分';
61 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、'); 61 if (recharge_list.is_coupons == '1' && recharge_list.coupons_names.length > 0) item.certificate = recharge_list.coupons_names.join('、');
62 - item.timeStr = util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') 62 + item.timeStr = (item.timeStr && item.timeStr) ? util.unixtoTime(item.stime, 'YYYY-MM-DD') + ' - ' + util.unixtoTime(item.etime, 'YYYY-MM-DD') : '';
63 }) 63 })
64 // 筛选出 未过期的 && 开启状态的充值活动 64 // 筛选出 未过期的 && 开启状态的充值活动
65 recharge_data = recharge_data.filter(item => { 65 recharge_data = recharge_data.filter(item => {
@@ -6,23 +6,58 @@ @@ -6,23 +6,58 @@
6 "miniprogram": { 6 "miniprogram": {
7 "list": [ 7 "list": [
8 { 8 {
9 - "name": "免费券付费券付款页",  
10 - "pathName": "pack-activity/pack/buyFreeCoupon",  
11 - "query": "sid=4352", 9 + "name": "测试-----新邀请函入口页",
  10 + "pathName": "pages/customer/detail_owner_invitation_new",
  11 + "query": "id=3359188&hasInvitation=1&hasSellerShare=1&uid=",
  12 + "launchMode": "default",
  13 + "scene": null
  14 + },
  15 + {
  16 + "name": "新版邀请函背景色背景图",
  17 + "pathName": "pack-invitation/pages/detail_owner_invitation14",
  18 + "query": "id=3203230&tplid=undefined&onlineReserve=1&hasInvitation=1&hasSellerShare=1&isDeposit=1&isMeeting=1&paymentId=&showSex=2",
  19 + "launchMode": "default",
  20 + "scene": null
  21 + },
  22 + {
  23 + "name": "aibook",
  24 + "pathName": "pages/customer/aiBook",
  25 + "query": "",
12 "launchMode": "default", 26 "launchMode": "default",
13 "scene": null 27 "scene": null
14 }, 28 },
15 { 29 {
16 "name": "4352-----新邀请函入口页", 30 "name": "4352-----新邀请函入口页",
17 "pathName": "pages/customer/detail_owner_invitation_new", 31 "pathName": "pages/customer/detail_owner_invitation_new",
18 - "query": "id=3206045&hasInvitation=1&hasSellerShare=&uid=7035&fromid=oB-xJ5NGdgXHM0Pdsq2kAf7z-n9k", 32 + "query": "id=3206045&hasInvitation=1&hasSellerShare=1&uid=7035",
19 "launchMode": "default", 33 "launchMode": "default",
20 "scene": null 34 "scene": null
21 }, 35 },
22 { 36 {
23 - "name": "测试-----新邀请函入口页",  
24 - "pathName": "pages/customer/detail_owner_invitation_new",  
25 - "query": "id=3163225&hasInvitation=1&hasSellerShare=1&uid=", 37 + "name": "订个包间效果",
  38 + "pathName": "pack-invitation/pages/detail_owner_invitation16",
  39 + "query": "id=3206045&hasInvitation=1&hasSellerShare=1&uid=7035",
  40 + "launchMode": "default",
  41 + "scene": null
  42 + },
  43 + {
  44 + "name": "登陆",
  45 + "pathName": "pages/customer/login",
  46 + "query": "types=1",
  47 + "launchMode": "default",
  48 + "scene": null
  49 + },
  50 + {
  51 + "name": "效果图2",
  52 + "pathName": "pack-invitation/pages/detail_owner_invitation15",
  53 + "query": "",
  54 + "launchMode": "default",
  55 + "scene": null
  56 + },
  57 + {
  58 + "name": "免费券付费券付款页",
  59 + "pathName": "pack-activity/pack/buyFreeCoupon",
  60 + "query": "sid=8",
26 "launchMode": "default", 61 "launchMode": "default",
27 "scene": null 62 "scene": null
28 }, 63 },
@@ -111,13 +146,6 @@ @@ -111,13 +146,6 @@
111 "scene": null 146 "scene": null
112 }, 147 },
113 { 148 {
114 - "name": "登陆",  
115 - "pathName": "pages/customer/login",  
116 - "query": "",  
117 - "launchMode": "default",  
118 - "scene": null  
119 - },  
120 - {  
121 "name": "意见反馈", 149 "name": "意见反馈",
122 "pathName": "pages/pinglun/createOpinion", 150 "pathName": "pages/pinglun/createOpinion",
123 "query": "oid=392094&sellid=4352&sellName=14&types=1", 151 "query": "oid=392094&sellid=4352&sellName=14&types=1",