DaMowang 2 anni fa
parent
commit
0123bb13c3

+ 18 - 8
src/pages.json

@@ -18,12 +18,6 @@
 				"navigationBarTitleText": "福利"
 			}
 		},
-		// {
-		// 	"path": "pages/partner/index",
-		// 	"style": {
-		// 		"navigationBarTitleText": "联盟店"
-		// 	}
-		// },
 		{
 			"path": "pages/orderingfood/merchantlist",
 			"style": {
@@ -290,6 +284,24 @@
 						"navigationBarTitleText": "订单详情"
 					}
 				},
+				{
+					"path": "cinema/cinemaList",
+					"style": {
+						"navigationBarTitleText": "影院"
+					}
+				},
+				{
+					"path": "cinema/choiceMovie",
+					"style": {
+						"navigationBarTitleText": "影院"
+					}
+				},
+				{
+					"path": "cinema/selectSeat",
+					"style": {
+						"navigationBarTitleText": "选座"
+					}
+				},
 
 				{
 					"path": "order/verificationCode",
@@ -392,10 +404,8 @@
 	"easycom": {
 		"autoscan": true,
 		"custom": {
-			// uni-ui 规则如下配置
 			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
 		}
-		// "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
 	},
 	"globalStyle": {
 		"navigationBarTextStyle": "black",

+ 4 - 4
src/pages/account/wealth.vue

@@ -4,21 +4,21 @@
     <view class="con flex_r flex_ac flex_jb mar_t16">
       <view class="list flex_c flex_ac" @click="goAccMoney">
         <view class="list_name">余额</view>
-        <view class="list_text f_dinB">{{ userinfo.user_money }}</view>
+        <view class="list_text dinB">{{ userinfo.user_money }}</view>
       </view>
       <view class="list flex_c flex_ac" @click="goIntegral">
         <view class="list_name">批发券</view>
-        <view class="list_text f_dinB">{{ userinfo.integral }}</view>
+        <view class="list_text dinB">{{ userinfo.integral }}</view>
       </view>
     </view>
     <view class="con flex_r flex_ac mar_t16">
       <view class="list flex_c flex_ac" @click="goDetail">
         <view class="list_name">茶宝</view>
-        <view class="list_text f_dinB">{{ userinfo.cha_bao }}</view>
+        <view class="list_text dinB">{{ userinfo.cha_bao }}</view>
       </view>
       <view class="list flex_c flex_ac" @click="goto('/pagesB/accountDetails/TeaC')">
         <view class="list_name">TeaC</view>
-        <view class="list_text f_dinB">{{ userinfo.teac }}</view>
+        <view class="list_text dinB">{{ userinfo.teac }}</view>
       </view>
     </view>
   </view>

+ 7 - 7
src/pages/my-tea-list/index.vue

@@ -11,7 +11,7 @@
                             <view class="level flex_r flex_ac flex_jc">缘起</view>
                         </view>
                         <view class="flex_r flex_ac mar_t10">
-                            <view class="account f_din">{{ higherInfo.mobile || "" }}</view>
+                            <view class="account din">{{ higherInfo.mobile || "" }}</view>
                             <view class="copyBalance" @tap="copyAccount(higherInfo.mobile)">复制</view>
                         </view>
                     </view>
@@ -29,10 +29,10 @@
         <view class="tea_con mar_t30">
             <view class="tea_total flex_r flex_ac flex_jc">
                 <view class="total_con flex_c flex_ac flex_jc">
-                    <view class="total_num f_dinB">{{ myQuanTeaFriendNum || 0 }}<text>人</text></view>
+                    <view class="total_num dinB">{{ myQuanTeaFriendNum || 0 }}<text>人</text></view>
                     <view class="total_text">社区总数</view>
                 </view>
-                <div class="total_info f_dinB">
+                <div class="total_info dinB">
                     本日新增:{{ myChayoyTotal.day }}<br />
                     本周新增:{{ myChayoyTotal.week }}<br />
                     本月新增:{{ myChayoyTotal.month }}<br />
@@ -40,9 +40,9 @@
             </view>
             <view class="tea_info flex_r flex_ac">
                 <view class="info_list flex_c flex_ac flex_jc borRight" @tap="getToTeaList">
-                    <view class="list_num f_dinB">{{ myTeaFriendNum || 0 }}<text>人</text></view>
+                    <view class="list_num dinB">{{ myTeaFriendNum || 0 }}<text>人</text></view>
                     <view class="list_text">推广用户</view>
-                    <div class="untotal_info f_dinB">
+                    <div class="untotal_info dinB">
                         <span class="ti_l">今日新增:</span>
                         <span class="ti_r">{{ myChayoyDirect.day }}</span>
                         <span class="ti_l">本周新增:</span>
@@ -52,9 +52,9 @@
                     </div>
                 </view>
                 <view class="info_list flex_c flex_ac flex_jc">
-                    <view class="list_num f_dinB">{{ myZhuanTeaFriendNum || 0 }}<text>人</text></view>
+                    <view class="list_num dinB">{{ myZhuanTeaFriendNum || 0 }}<text>人</text></view>
                     <view class="list_text">转介绍用户</view>
-                    <div class="untotal_info f_dinB">
+                    <div class="untotal_info dinB">
                         <span class="ti_l">今日新增:</span>
                         <span class="ti_r">{{ myChayoyIndirect.day }}</span>
                         <span class="ti_l">本周新增:</span>

+ 4 - 4
src/pages/my/index.vue

@@ -54,7 +54,7 @@
         <view class="acc_head flex_r flex_jb">
           <view class="acc_price">
             <view class="price_txt">账号余额(元)</view>
-            <view class="price_num f_dinB">{{ userinfo.user_money }}</view>
+            <view class="price_num dinB">{{ userinfo.user_money }}</view>
           </view>
           <view class="C flex_r">
             <navigator class="recharge flex_r flex_ac flex_jc" url="/pages/top-up/index" hover-class="none">充值</navigator>
@@ -65,15 +65,15 @@
         <view class="info_con flex_r flex_jb">
           <view class="info_list flex_c flex_jb">
             <view class="list_name">昨日收益(元)</view>
-            <view class="list_text f_dinB">{{ userinfo.yesterdayProfit || 0 }}</view>
+            <view class="list_text dinB">{{ userinfo.yesterdayProfit || 0 }}</view>
           </view>
           <view class="info_list flex_c flex_jb" @tap="getToAccMoney">
             <view class="list_name">茶宝</view>
-            <view class="list_text f_dinB">{{ userinfo.cha_bao || 0 }}</view>
+            <view class="list_text dinB">{{ userinfo.cha_bao || 0 }}</view>
           </view>
           <view class="info_list flex_c flex_jb" @tap="getToTeaList">
             <view class="list_name">社区(人)</view>
-            <view class="list_text f_dinB">{{ allChaYou || 0 }}</view>
+            <view class="list_text dinB">{{ allChaYou || 0 }}</view>
           </view>
         </view>
         <view class="acc_hint mar_t50" @tap="SetHint">如何快速晋升身份权益?看这里>></view>

+ 18 - 47
src/pages/orderingfood/merchantlist.vue

@@ -3,21 +3,16 @@
     <div class="head">
       <div class="bg"></div>
       <div class="card">
-        <div class="card_tit">消费金账户</div>
-        <div class="msg"><span>支持主流消费场所使用</span><span class="iconfont">&#xe631;</span></div>
+        <div class="live_name">{{ typeto(local_uinfo.level_id) }}</div>
         <div class="mm">
-          <div class="balance f_dinB">{{ local_uinfo.integral || 0 }}</div>
+          <span>账户余额</span>
+          <span class="balance dinB">{{ local_uinfo.integral || 0 }}</span>
         </div>
-        <!-- <div class="m">
-          <div class="tit">账户余额</div>
-          <div class="balance f_dinB">{{ local_uinfo.integral || 0 }}</div>
-        </div> -->
-        <div class="live_name">{{ typeto(local_uinfo.level_id) }}</div>
       </div>
     </div>
     <div class="l_tabBar flex_r flex_jb">
-      <div class="item" v-for="(i,s) in tabs" :key="s">
-        <img :src="i" alt="" class="ico">
+      <div class="item" v-for="(i,s) in tabs" :key="s" @click="goto(i.url)">
+        <img :src="i.ico" alt="" class="ico">
         <!-- <div class="tit">{{ i.tit }}</div> -->
       </div>
     </div>
@@ -98,6 +93,7 @@ export default {
 						},
 						success(result) {
 							const adres = result.result.location;
+              uni.setStorageSync("adres",adres)
               that.Query = { ...that.Query, ...adres };
               that.getlists();
               console.log('逆地址解析:',result);
@@ -193,46 +189,17 @@ export default {
   .card{
     width: calc(100% - 60rpx);
     margin: -110rpx 30rpx 0;
-    background-color: #473D31;
-    // background: url("~@/static/my/myBack.png") no-repeat;
-    // background-size: 100% 100%;
+    // background-color: #473D31;
+    background: url("http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/2e672c48ad6a5293a86a3aa0ac258f47ca5b2931jpg");
+    background-size: 100% 100%;
     border-radius: 16rpx;
     padding: 28rpx 30rpx;
     height: 280rpx;
     position: relative;
-    .card_tit{
-      font-size: 36rpx;
-      color: #C99D60;
-    }
-    .msg{
-      color: #C99D60;
-      font-size: 20rpx;
-      margin-top: 8rpx;
-      .iconfont{
-        color: #C99D60;
-        font-size: 28rpx;
-        margin-left: 6rpx;
-      }
-      span{
-        vertical-align: middle;
-      }
-    }
-    .m{
-      position: absolute;
-      bottom: 25rpx;
-      right: 30rpx;
-    }
-    .mm{
-      text-align: center;
-      margin-top: 20rpx;
-    }
-    .tit,.balance{
-      color: #C99D60;
-      // text-align: right;
-    }
     .balance{
       font-size: 46rpx;
       margin-top: 8rpx;
+      margin-left: 26rpx;
       &:before {
         content: "¥";
         font-size: 24rpx;
@@ -240,13 +207,17 @@ export default {
     }
     .live_name{
       font-size: 36rpx;
-      // font-weight: bold;
-      color: #C99D60;
+      color: #CD7C2B;
       position: absolute;
-      bottom: 25rpx;
-      right: 30rpx;
+      top: 16rpx;
+      left: 90rpx;
 
     }
+    .mm{
+      margin: auto 0;
+      text-align: center;
+      line-height: 210rpx;
+    }
   }
 }
 .list{

+ 61 - 14
src/pages/orderingfood/tabs.js

@@ -1,15 +1,62 @@
 export default [
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/9b77a4e9651ebb272f58972297f15989c8e7dfe2png", //餐厅
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/c49b23e0145a7c4e52183ae0850d0948e2ada385png", //饮品
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/e3d3719e646469f2615abce1ef61753ea7de0b19png", //影院
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/cd4f1a2815a87ed4e118b8fe496468f826eeb594png", //加油
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/06b44cf0c78938c9740a13826cd7b3777c7bb1c6png", //手机充值
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/83906365c174dcc7acf620d7247f80f9f1818d6epng", //酒店
-  // "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/8b0b0de11b1d5b2e3e97cf3b20d489ecdb32f27epng", //景区
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/97d00306c223bd7568335b93189d9b40a386fc12png", //音视频
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/3ef239b805b42b155d05ddeb3e3755c1a6522633png", //出行
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/4089ec6a9c87e91d4ed8207562b87e9bd48b8c9dpng", //休闲娱乐
-  "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/9595dbbd82b99db56de906743b9456962d01857bpng", //丽人医美
-  // "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/67e25d80a52975f21eebe115c782984aa2dfa2d3png", //婚纱摄影
-
-  ]
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/9b77a4e9651ebb272f58972297f15989c8e7dfe2png",
+      url: "",
+      tit: "餐厅"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/c49b23e0145a7c4e52183ae0850d0948e2ada385png",
+      url: "",
+      tit: "饮品"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/e3d3719e646469f2615abce1ef61753ea7de0b19png",
+      url: "/pagesB/cinema/cinemaList",
+      tit: "影院"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/cd4f1a2815a87ed4e118b8fe496468f826eeb594png",
+      url: "",
+      tit: "加油"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/06b44cf0c78938c9740a13826cd7b3777c7bb1c6png",
+      url: "",
+      tit: "手机充值"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/83906365c174dcc7acf620d7247f80f9f1818d6epng",
+      url: "",
+      tit: "酒店"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/97d00306c223bd7568335b93189d9b40a386fc12png",
+      url: "",
+      tit: "音视频"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/3ef239b805b42b155d05ddeb3e3755c1a6522633png",
+      url: "",
+      tit: "出行"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/4089ec6a9c87e91d4ed8207562b87e9bd48b8c9dpng",
+      url: "",
+      tit: "休闲娱乐"
+  },
+  {
+      ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/9595dbbd82b99db56de906743b9456962d01857bpng",
+      url: "",
+      tit: "丽人医美"
+  },
+  // {
+  //     ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/8b0b0de11b1d5b2e3e97cf3b20d489ecdb32f27epng",
+  //     url: "",
+  //     tit: "景区"
+  // },
+  // {
+  //     ico: "http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/67e25d80a52975f21eebe115c782984aa2dfa2d3png",
+  //     url: "",
+  //     tit: "婚纱摄影"
+  // }
+]

+ 0 - 29
src/pages/partner/index.vue

@@ -1,29 +0,0 @@
-<template>
-  <div class='partner'>
-    <img src="@/static/img/upcoming.png" mode="widthFix" class="upcoming" alt="" srcset="">
-  </div>
-</template>
-<script>
-import { post } from '@/request/api.js';
-export default {
-  name: 'partner',
-  data () {
-    return {}
-  },
-  onLoad (option) {},
-  onLaunch () {},
-  onShow () {},
-  onHide () {},
-  methods: {},
-  computed: {},
-  watch: {}
-}
-</script>
-<style scoped lang='scss'>
-.upcoming{
-  width: 330rpx;
-  // height: 190rpx;
-  margin-left: calc(50% - 330rpx / 2);
-  margin-top: 30vh;
-}
-</style>

+ 382 - 0
src/pagesB/cinema/choiceMovie.vue

@@ -0,0 +1,382 @@
+<template>
+	<view>
+		<view class="movie-position">
+			<view class="position-text">{{cinemaInfo.cinemaName}}</view>
+			<view class="position-item">
+				<view class="item-texts">{{cinemaInfo.cinemaAddress}}</view>
+				<view class="item-img-list">
+					<span @click="openm" class="iconfont">&#xe634;</span>
+				</view>
+			</view>
+		</view>
+		<!-- 轮播盒子 start -->
+		<view class="swiper_main">
+			<image class="background-img-vague" :src="chooseMovice.posterUrl" mode=""></image>
+			<view class="wrap">
+				<swipers :list="movieList" height="260" mode="none" name="posterUrl" :autoplay="false" img-mode="scaleToFill" class="swiper_bg"
+				 :effect3d="true" bg-color="none" :circular="false" effect3d-previous-margin="280" @change="setBackground" @click="setBackground" :current="swiperCurrent"></swipers>
+			</view>
+			<div class="box"></div>
+		</view>
+		<!-- 轮播盒子 end -->
+		
+		<view class="moive-name">{{chooseMovice.movieName}}</view>
+		<view class="moive-info">{{chooseMovice.duration}}分钟{{chooseMovice.movieType}}{{chooseMovice.cast}}</view>
+		
+		<view class="moive-tab-list">
+			<view class="tabs-list-item" :class="{'tab-sel':index==tabIndexs}" v-for="(value,index) in tabLists" :key="index" @click="getTimeTab(value,index)">
+				{{value.time}}
+				<view class="bottoms" v-if="index==tabIndexs"></view>
+			</view>
+		</view>
+		
+		<view class="ticket-list" v-for="(value,index) in timeList" :key="index">
+			<view style="width: 79%;">
+				<view class="ticet-left">
+					<view style="display: flex;align-items: center;">
+						<text class="left-time">{{getTime(value.stopSellTime)}}</text>
+						<text class="left-type">{{value.showVersionType}}</text>
+					</view>
+					<view style="display: flex;align-items: center;">
+						<view class="ret-price"><text>¥</text>{{value.userPrice}}</view>
+						<view class="ret-yuans">¥{{value.showPrice}}</view>
+					</view>
+				</view>
+				<view class="ticet-left" style="margin-top: 20rpx;">
+					<view class="ticet-booms">
+						<text>时长:{{value.duration}}分钟</text>
+						<text style="margin-left: 25rpx;">{{value.hallName}}</text>
+					</view>
+					<view class="ticet-boom-ret">
+						<view class="sheng-text">省</view>
+						<view class="sheng-pirce">¥{{province(value.showPrice,value.userPrice)}}</view>
+					</view>
+				</view>
+			</view>
+			<view class="buy-btns" @click="getGou(value)">购票</view>
+		</view>
+		
+		<view v-if="isLoad&&timeList.length==0" style="text-align: center;padding-top: 30rpx;font-size: 28rpx;">暂无排片!</view>
+		
+		
+	</view>
+</template>
+
+<script>
+	import swipers from '@/pagesB/components/u-swiper.vue'
+	// import {filmList,filmScheduling} from "@/api/film.js"
+	// import config from "@/utils/config.js"
+	export default {
+		components:{swipers},
+		data() {
+			return {
+				movieList: [
+					{
+						movieId:12343,
+						duration:149,
+						movieType:'剧情|历史|战争',
+						cast:'吴京 易烊千玺 段奕宏 张涵予 朱亚文',
+						movieName:'长津湖之水门桥',
+						posterUrl: "https://gw.alicdn.com/i1/O1CN01sSmj2b1daSm6IAUcs_!!6000000003752-0-alipicbeacon.jpg_480x480Q30s150.jpg"
+					},
+					{
+						cast: "易烊千玺 田雨 陈哈琳 齐溪 公磊 许君聪 王宁 黄尧 巩金国",
+						duration: 106,
+						movieId: 147885,
+						movieName: "奇迹·笨小孩",
+						movieType: "剧情",
+						posterUrl: "https://gw.alicdn.com/i1/O1CN013Ggc2s1Z8HwrwxAfn_!!6000000003149-0-alipicbeacon.jpg_480x480Q30s150.jpg"
+					}
+					
+				],
+				//选中的电影
+				chooseMovice: {
+					movieId:'',
+					duration:149,
+					movieType:'剧情|历史|战争',
+					cast:'吴京 易烊千玺 段奕宏 张涵予 朱亚文'
+				}, 
+				//swiper默认选中
+				swiperCurrent: 0,
+				
+				tabIndexs:0,
+				cinemaInfo:{},//影院信息
+				tabLists:[
+					{
+						time: "05-14",
+						list:[
+							{
+								duration: 149,
+								hallName: "2号厅-口罩自备",
+								movieId: 146629,
+								showId: "MjUyNDkjQGltYW5tQCMxNDY2MjkjQGltYW5tQCMxNjUyNTI4NDAwI0BpbWFubUAjMTA5I0BpbWFubUAjNDk=",
+								showPrice: 25.9,
+								showTime: "2022-05-14 19:40:00",
+								showVersionType: "国语 2D",
+								stopSellTime: "2022-05-14 18:25:00",
+								userPrice: 22.5,
+							},
+							{
+								duration: 149,
+								hallName: "7号厅-口罩自备",
+								movieId: 146629,
+								showId: "MjUyNDkjQGltYW5tQCMxNDY2MjkjQGltYW5tQCMxNjUyNTIzMDAwI0BpbWFubUAjMTA5I0BpbWFubUAjNDk=",
+								showPrice: 24.9,
+								showTime: "2022-05-14 18:10:00",
+								showVersionType: "国语 2D",
+								stopSellTime: "2022-05-14 16:55:00",
+								userPrice: 21.7,
+							}
+						]
+					}
+				],
+				timeList:[],//排期数据
+				isLoad:false
+			}
+		},
+		onLoad(option) {
+			// this.swiperCurrent = 0
+			// this.chooseMovice.movieId = option.movieId
+			this.chooseMovice = this.movieList[0]
+			this.timeList = this.tabLists[0].list
+			this.cinemaInfo =JSON.parse(decodeURIComponent(option.item));
+			
+			// console.log(this.timeList)
+		},
+		methods: {
+			
+			// 切换轮播改变背景
+			setBackground(index) {
+				console.log(index)
+				this.swiperCurrent = index
+				this.chooseMovice = this.movieList[index]
+				// this.getScheduling()
+			},
+			// getTimeTab(data,index){
+			// 	if(this.tabIndexs!=index){
+			// 		this.tabIndexs=index
+			// 		this.timeList = data.list
+			// 	}
+			// },
+			getTime(time){
+				// return config.turnTime(time,0)
+				return time
+			},
+			getGou(data){
+				// console.log(data)
+				let _this = this
+				uni.navigateTo({
+					url:'/pages/movie/Seat?item='+encodeURIComponent(JSON.stringify(data))+'&cinemaId='+this.cinemaInfo.cinemaId,
+					success(res) {
+						 res.eventChannel.emit('moviceDataFrom', { data: _this.chooseMovice})
+					}
+				})
+			},
+			province(original,price){
+				let val = original-price
+				return Math.floor(val * 100) / 100
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+// 轮播图中间
+		.swiper_main {
+			position: relative;
+			height: 324rpx;
+			overflow: hidden;
+
+			.background-img-vague {
+				position: absolute;
+				left: 0;
+				right: 0;
+				width: 100%;
+				// transform: translateX(-50%);
+				filter: blur(15px);
+				-webkit-filter: blur(15px);
+			}
+
+			::v-deep.u-swiper-item {
+				width: 193rpx !important;
+				height: 260rpx !important;
+			}
+
+			// 影院背景图
+			.moviebg {
+				width: 100%;
+				height: 100%;
+				filter: blur(10rpx);
+			}
+
+			.wrap {
+				position: absolute;
+				left: 0;
+				top: 26rpx;
+				right: 0;
+				margin: 0 auto;
+			}
+
+			.box {
+				width: 0;
+				height: 0;
+				border: 10rpx solid;
+				border-color: transparent transparent #fff #fff;
+				transform: rotate(135deg);
+				position: absolute;
+				bottom: -10rpx;
+				left: 0;
+				right: 0;
+				margin: 0 auto;
+			}
+
+		}
+		.movie-position{
+			padding: 30rpx 32rpx;
+			.position-text{
+				color: #2D3039;
+				font-size: 32rpx;
+				font-weight: 550;
+			}
+			.position-item{
+				display: flex;
+				margin-top: 10rpx;
+			}
+			.item-texts{
+				color: #636775;
+				font-size: 24rpx;
+				width: 72%;
+			}
+			.item-img-list{
+				margin-left: auto;
+				display: flex;
+				// align-items: center;
+				.collion{
+					width: 48rpx;
+					height: 48rpx;
+					margin-right: 50rpx;
+				}
+				.locaion-img{
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+		}
+		.moive-name{
+			text-align: center;
+			margin-top: 30rpx;
+			color: #2D3039;
+			font-size: 36rpx;
+			font-weight: 600;
+		}
+		.moive-info{
+			text-align: center;
+			margin-top: 14rpx;
+			color: #636775;
+			font-size: 24rpx;
+		}
+		
+		.moive-tab-list{
+			margin-top: 40rpx;
+			padding: 24rpx 12rpx;
+			border-bottom: 2rpx solid #DFE0E2;
+			overflow-x: auto;
+			white-space:nowrap;
+			width: auto;
+			overflow-y: hidden;
+			.tabs-list-item{
+				padding: 0rpx 20rpx;
+				display: inline-block;
+				position: relative;
+				color: #636775;
+				font-size: 28rpx;
+			}
+			.tab-sel{
+				color: #FE602B!important;
+				font-size: 28rpx;
+				font-weight: 550;
+			}
+			.bottoms{
+				position: absolute;
+				bottom: -30rpx;
+				right:50%;
+				left:50%;
+				transform: translate(-50%, -50%);
+				width: 52rpx;
+				height: 8rpx;
+				background-color: #FE602B;
+				// border-radius: 5rpx 5rpx 0px 0px;
+			}
+		}
+		
+		.ticket-list{
+			margin: 0rpx 32rpx;
+			padding: 38rpx 0rpx;
+			border-bottom: 2rpx solid #E0E1E3;
+			display: flex;
+			align-items: center;
+			.ticet-left{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.left-time{
+					color: #2D3039;
+					font-size: 42rpx;
+				}
+				.left-type{
+					color: #2D3039;
+					font-size: 28rpx;
+					margin-left: 32rpx;
+				}
+			}
+			.ret-price{
+				color: #FE602B;
+				font-size: 42rpx;
+				font-weight: 550;
+				text{
+					font-size: 28rpx;
+				}
+			}
+			.ret-yuans{
+				color: #A6A8AE;
+				font-size: 28rpx;
+				margin-left: 13rpx;
+				text-decoration: line-through;
+			}
+		}
+		.ticet-booms{
+			color: #A6A8AE;
+			font-size: 24rpx;
+		}
+		.ticet-boom-ret{
+			display: flex;
+			align-items: center;
+			.sheng-text{
+				padding: 0rpx 8rpx;
+				height: 30rpx;
+				line-height: 30rpx;
+				background-color: #3DB97C;
+				border-radius: 4rpx;
+				color: #FFFFFF;
+				font-size: 20rpx;
+				text-align: center;
+				margin-right: 12rpx;
+			}
+			.sheng-pirce{
+				color: #A6A8AE;
+				font-size: 24rpx;
+			}
+		}
+		.buy-btns{
+			width: 110rpx;
+			height: 58rpx;
+			text-align: center;
+			line-height: 58rpx;
+			background: linear-gradient(207deg, #FF9272 0%, #FC5421 100%);
+			border-radius: 30rpx;
+			color: #FFFFFF;
+			font-size: 24rpx;
+			font-weight: 550;
+			margin-left: auto;
+		}
+</style>

+ 114 - 0
src/pagesB/cinema/cinemaList.vue

@@ -0,0 +1,114 @@
+<template>
+    <div class="CinemaList">
+        <view class="loadingBox" v-if="loading">
+            <img class="loading" src="http://teaclub.oss-cn-chengdu.aliyuncs.com/CloudShop/head_pic/2caa2ae4dc849856f3eca4ff2b3abf7fd19e7632gif" />
+        </view>
+        <div class="list" v-else>
+            <div class="li_item" v-for="(i,s) in cinemaList" :key="s" @click="goCinema(i)">
+                <div class="con_box">
+                    <div class="p1 ellipsis">{{ i.restaurant_name }}</div>
+                    <div class="p2">{{ i.restaurant_address }}</div>
+                    <div class="p3">{{ $h.Div(i.distance, 1000).toFixed(2) }} km</div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import { post } from "@/request/api.js";
+export default {
+    name: "CinemaList",
+    props: {},
+    components: {},
+    data() {
+        return {
+            loading: true,
+            Query: {
+                lat: 22.53332,
+                lng: 113.93041,
+                page: 1,
+                rows: 20
+            },
+            cinema: {},
+            cinemaList: [],
+        };
+    },
+    methods: {
+        // 获取附近影院
+        getlists() {
+            post("local/getCinema", this.Query).then(res => {
+                if (res.code == 0) {
+                    this.loading = false
+                    let cinemaList = res.data.data
+                    delete res.data.data
+                    this.cinema = res.data
+                    this.cinemaList = [...this.cinemaList, ...cinemaList]
+                    this.Query.page++
+                }
+            })
+        },
+        goCinema(da) {
+            uni.setStorageSync("MerchantItem", da)
+            this.goto("/pagesB/cinema/choiceMovie", {
+                brand_id: da.brand_id,
+                restaurant_id: da.restaurant_id
+            })
+        },
+    },
+    onLoad(da) {
+        let adres = uni.getStorageSync("adres")
+        this.Query = { ...this.Query, ...adres }
+        this.getlists();
+    },
+    onShow() {},
+    mounted() {},
+    onReachBottom() {
+        if (this.Query.page < this.cinema.last_page) this.getlists();
+    },
+};
+</script>
+<style scoped lang='scss'>
+.list {
+    padding: 30rpx;
+
+    .li_item {
+        margin-bottom: 20rpx;
+        padding: 28rpx 32rpx;
+        background-color: #fff;
+        border-radius: 10rpx;
+        box-shadow: 4rpx 4rpx 26rpx 2rpx rgba(17, 18, 29, 0.1);
+    }
+
+    .con_box {
+        position: relative;
+
+        .p1 {
+            font-size: 32rpx;
+            font-weight: bold;
+            color: #333;
+            margin-bottom: 6rpx;
+        }
+
+        .p2 {
+            font-size: 24rpx;
+            color: #999;
+        }
+
+        .p3 {
+            font-size: 24rpx;
+            color: #666;
+            text-align: right;
+        }
+    }
+}
+
+.loadingBox {
+    text-align: center;
+    padding: 100rpx 0;
+
+    .loading {
+        width: 280rpx;
+        height: 280rpx;
+    }
+}
+</style>

+ 630 - 0
src/pagesB/cinema/selectSeat.vue

@@ -0,0 +1,630 @@
+<template>
+    <view class="w-100">
+        <view class="bg-f1 h-100vh">
+            <view class="pt-f left-0 w-100 p-0-32 bg-white z1000" :style="'height: 132rpx;top:0'">
+                <view>
+                    <view class="fz-34 fw-b pt-20">
+                        三体2:黑暗森林
+                    </view>
+                    <view class="mt-10 fz-28 color-666">
+                        2021年1月22日 国语3D
+                    </view>
+                </view>
+            </view>
+            <movable-area :style="'height:'+(seatRow*40+350)+'rpx;width: 100vw;top:'+(rpxNum*132)+'px'" class="pt-f left-0">
+                <movable-view :style="'width: 100vw;height:'+(seatRow*40+350)+'rpx;'" :inertia="true" :scale="true" :scale-min="0.95" :scale-max="2" direction="all" @change="onMove" @scale="onScale">
+                    <view class="Stage dp-f jc-c ai-c fz-22 color-333">5号厅</view>
+                    <view style="width: 100rpx;height: 30rpx;" class="m-0-a mt-48 dp-f jc-c ai-c fz-20 color-999 b-1 br-5">银幕中央</view>
+                    <view class="pt-f pa-v-2 b-d-1" :style="'height:'+seatRow*(20+seatSize*pxNum)+'rpx;top:165rpx;width:0'"></view>
+                    <view v-for="(item,index) in seatArray" :key="index" class="dp-f jc-c mt-20" :style="'width:'+boxWidth+'px;height:'+seatSize+'px'">
+                        <view v-for="(seat,col) in item" :key="col" class="dp-ib" :style="'width:'+seatSize+'px;height:'+seatSize+'px'" @click="handleChooseSeat(index,col)">
+                            <image v-if="seat.type===0" class="w-100 h-100" src="https://test-api.haocha13.cn/static/img/optional.png" mode="aspectFit"></image>
+                            <image v-else-if="seat.type===1" class="w-100 h-100" src="https://test-api.haocha13.cn/static/img/set.png" mode="aspectFit"></image>
+                            <image v-else-if="seat.type===2" class="w-100 h-100" src="https://test-api.haocha13.cn/static/img/sold.png" mode="aspectFit"></image>
+                        </view>
+                    </view>
+                    <view class="pt-f bg-line br-15 over-h" :style="'left: '+(10-moveX/scale)+'px;top:109rpx;width:30rpx;'">
+                        <view class="w-100 dp-f ai-c jc-c fz-22 color-fff" :style="'height:'+seatSize+'px;margin-top:20rpx;'" v-for="(m,mindex) in mArr" :key="mindex">{{m}}</view>
+                        <view :style="'height: 20rpx;'"></view>
+                    </view>
+                </movable-view>
+            </movable-area>
+            <view class="pt-f bottom-bar left-0 dp-f fd-cr z1000">
+                <view class="bg-white p-all-32">
+                    <view class="dp-f ai-c jc-c fz-28 color-333 mb-20" v-if="SelectNum===0">
+                        推荐选座
+                        <view style="width: 106rpx;height: 60rpx;" class="b-1 br-5 dp-f ai-c jc-c fz-28 ml-20" v-for="(n,numindex) in 4" :key="n" @click="smartChoose(numindex+1)">
+                            {{numindex+1}}人
+                        </view>
+                    </view>
+                    <view class="dp-f ai-c fw-w fz-28 color-333 mb-20" v-if="SelectNum>0">
+                        <text>已选</text>
+                        <view class="p-all-10 b-1 br-5 dp-f ai-c jc-c fz-28 ml-20" v-for="(optItem,optindex) in optArr" :key="optindex">
+                            {{optItem.RowNum+'排'+optItem.ColumnNum+'座'}}
+                        </view>
+                    </view>
+                    <view style="width: 686rpx;height: 90rpx;" class="dp-f jc-c ai-c br-10 fz-34 color-fff" :class="SelectNum>0?'bg-red-1':'bg-unbtn'" @click="buySeat">
+                        {{SelectNum>0?('¥ '+aPrice+' 确认座位'):'请选座位'}}
+                    </view>
+                </view>
+                <view class="dp-f jc-c ai-c mb-20 fz-28" v-if="showTis">
+                    <view class="dp-f jc-c ai-c m-0-10">
+                        <image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="https://test-api.haocha13.cn/static/img/optional.png" mode="aspectFit"></image><span class="ml-10">可选</span>
+                    </view>
+                    <view class="dp-f jc-c ai-c m-0-10">
+                        <image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="https://test-api.haocha13.cn/static/img/sold.png" mode="aspectFit"></image><span class="ml-10">不可选</span>
+                    </view>
+                    <view class="dp-f jc-c ai-c m-0-10">
+                        <image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="https://test-api.haocha13.cn/static/img/set.png" mode="aspectFit"></image><span class="ml-10">选中</span>
+                    </view>
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+<script>
+import { seatData } from '@/utils/seat-data.js'
+import { post } from "@/request/api.js";
+export default {
+    data() {
+        return {
+            scaleMin: 1, //h5端为解决1无法缩小问题,设为0.95
+            boxWidth: 400, //屏幕宽度px
+            space: ' ', //空格
+            seatArray: [], //影院座位的二维数组,-1为非座位,0为未购座位,1为已选座位(绿色),2为已购座位(红色),一维行,二维列
+            seatRow: 0, //影院座位行数
+            seatCol: 0, //影院座位列数
+            seatSize: 0, //座位尺寸
+            SelectNum: 0, //选择座位数
+            moveX: 0, //水平移动偏移量
+            scale: 1, //放大倍数
+            minRow: 0, //从第几行开始排座位
+            minCol: 0, //从第几列开始排座位
+            showTis: true, //显示选座提示
+            seatList: [], //接口获取的原始位置
+            mArr: [], //排数提示
+            optArr: [], //选中的座位数组。
+            isWXAPP: false,
+        };
+    },
+    computed: {
+        aPrice() {
+            return this.SelectNum * 36
+        },
+        rpxNum() {
+            return this.boxWidth / 750
+        },
+        pxNum() {
+            return 750 / this.boxWidth
+        },
+    },
+    onLoad() {
+        let that = this
+        //获取宽度
+        uni.getSystemInfo({
+            success: function(e) {
+                that.boxWidth = e.screenWidth
+                //#ifdef H5
+                that.scaleMin = 0.95
+                //#endif
+            }
+        })
+        that.initData()
+    },
+    methods: {
+        async initData() {
+            // let arr = seatData
+            let arr = []
+            let res =  await post("local/getSeat",{showId:"bb27ce9b64c86d460007"})
+            if(res.code == 0){
+                let da = res.data.data.seats
+                for (let it of da) {
+                    arr.push({
+                        YCoord: it.rowNo,
+                        XCoord: it.columnNo,
+                        SeatCode: it.seatId,
+                        Status: it.status == "N" ? 0 : it.status == "LK" ? 2 : -1,
+                        RowNum: it.seatNo.slice(0,1),
+                        ColumnNum: it.seatNo.slice(2,3)
+                    })
+                }
+            }
+
+            //假数据说明:SeatCode座位编号,RowNum-行号,ColumnNum-纵号,YCoord-Y坐标,XCoord-X坐标,Status-状态
+            let row = 0
+            let col = 0
+            let minCol = parseInt(arr[0].XCoord)
+            let minRow = parseInt(arr[0].YCoord)
+            for (let i of arr) {
+                minRow = parseInt(i.YCoord) < minRow ? parseInt(i.YCoord) : minRow
+                minCol = parseInt(i.XCoord) < minCol ? parseInt(i.XCoord) : minCol
+                row = parseInt(i.YCoord) > row ? parseInt(i.YCoord) : row
+                col = parseInt(i.XCoord) > col ? parseInt(i.XCoord) : col
+            }
+            this.seatList = arr
+            this.seatRow = row - minRow + 1
+            this.seatCol = col - minCol + 3
+            this.minRow = minRow
+            this.minCol = minCol - 1
+
+            this.initSeatArray()
+        },
+        //初始座位数组
+        initSeatArray: function() {
+            let seatArray = Array(this.seatRow).fill(0).map(() => Array(this.seatCol).fill({
+                type: -1,
+                SeatCode: '',
+                RowNum: '',
+                ColumnNum: ''
+            }));
+            this.seatArray = seatArray
+            this.seatSize = this.boxWidth > 0 ?
+                parseInt(parseInt(this.boxWidth, 10) / (this.seatCol + 1), 10) :
+                parseInt(parseInt(414, 10) / (this.seatCol + 1), 10)
+            this.initNonSeatPlace();
+        },
+        //初始化是座位的地方
+        initNonSeatPlace: function() {
+            let seat = this.seatList.slice()
+            let arr = this.seatArray.slice()
+            for (let num in seat) {
+                let status = 2 //-1为非座位,0为未购座位,1为已选座位(绿色),2为已购座位(红色)
+                if (seat[num].Status === 0) {
+                    status = 0
+                } else if (seat[num].Status === -1) {
+                    status = -1
+                }
+                if (seat[num].YCoord) {
+                    arr[parseInt(seat[num].YCoord) - this.minRow][parseInt(seat[num].XCoord) - this.minCol] = {
+                        type: status,
+                        SeatCode: seat[num].SeatCode,
+                        RowNum: seat[num].RowNum,
+                        ColumnNum: seat[num].ColumnNum
+                    }
+                }
+            }
+            this.seatArray = arr.slice()
+            let mArr = []
+            for (let i in arr) {
+                let m = ''
+                if(arr[i][0]){
+                    for (let n of arr[i]) {
+                        if (n.SeatCode) {
+                            m = n.RowNum
+                        }
+                    }
+                    if (m) {
+                        mArr.push(m)
+                    } else {
+                        mArr.push('')
+                    }
+                }
+            }
+            this.mArr = mArr
+        },
+        //放大缩小事件
+        onScale: function(e) {
+            this.showTis = false
+            // this.moveX=-e.detail.x
+            let w = this.boxWidth * 0.5
+            let s = 1 - e.detail.scale
+            this.moveX = w * s
+            this.scale = e.detail.scale
+            if (s > 0 || s === 0) {
+                this.showTis = true
+            }
+        },
+        //移动事件
+        onMove: function(e) {
+            this.showTis = false
+            this.moveX = e.detail.x
+        },
+        //重置座位
+        resetSeat: function() {
+            this.SelectNum = 0
+            this.optArr = []
+            //将所有已选座位的值变为0
+            let oldArray = this.seatArray.slice();
+            for (let i = 0; i < this.seatRow; i++) {
+                for (let j = 0; j < this.seatCol; j++) {
+                    if (oldArray[i][j].type === 1) {
+                        oldArray[i][j].type = 0
+                    }
+                }
+            }
+            this.seatArray = oldArray;
+        },
+        //选定且购买座位
+        buySeat: function() {
+            if (this.SelectNum === 0) {
+                return
+            }
+            let oldArray = [];
+            for (let i = 0; i < this.seatRow; i++) {
+                for (let j = 0; j < this.seatCol; j++) {
+                    if (this.seatArray[i][j].type === 1) {
+                        oldArray.push(this.seatArray[i][j])
+                    }
+                }
+            }
+            console.log(oldArray);
+        },
+        //处理座位选择逻辑
+        handleChooseSeat: function(row, col) {
+            let seatValue = this.seatArray[row][col].type;
+            let newArray = this.seatArray;
+            //如果是已购座位,直接返回
+            if (seatValue === 2 || seatValue === -1) return
+            //如果是已选座位点击后变未选
+            if (seatValue === 1) {
+                newArray[row][col].type = 0
+                this.SelectNum--
+                this.getOptArr(newArray[row][col], 0)
+            } else if (seatValue === 0) {
+                newArray[row][col].type = 1
+                this.SelectNum++
+                this.getOptArr(newArray[row][col], 1)
+            }
+            //必须整体更新二维数组,Vue无法检测到数组某一项更新,必须slice复制一个数组才行
+            this.seatArray = newArray.slice();
+        },
+        //处理已选座位数组
+        getOptArr: function(item, type) {
+            let optArr = this.optArr
+            if (type === 1) {
+                optArr.push(item)
+            } else if (type === 0) {
+                let arr = []
+                optArr.forEach(v => {
+                    if (v.SeatCode !== item.SeatCode) {
+                        arr.push(v)
+                    }
+                })
+                optArr = arr
+            }
+            this.optArr = optArr.slice()
+        },
+        //推荐选座,参数是推荐座位数目,
+        smartChoose: function(num) {
+            // 先重置
+            this.resetSeat()
+            //找到影院座位水平垂直中间位置的后一排
+            let rowStart = parseInt((this.seatRow - 1) / 2, 10) + 1;
+            //先从中间排往后排搜索
+            let backResult = this.searchSeatByDirection(rowStart, this.seatRow - 1, num);
+            if (backResult.length > 0) {
+                this.chooseSeat(backResult);
+                this.SelectNum += num
+                return
+            }
+            //再从中间排往前排搜索
+            let forwardResult = this.searchSeatByDirection(rowStart - 1, 0, num);
+            if (forwardResult.length > 0) {
+                this.chooseSeat(forwardResult);
+                this.SelectNum += num
+                return
+            }
+            //提示用户无合法位置可选
+            alert('无合法位置可选!')
+
+        },
+
+        //搜索函数,参数:fromRow起始行,toRow终止行,num推荐座位数
+        searchSeatByDirection: function(fromRow, toRow, num) {
+            /*
+             * 推荐座位规则
+             * (1)初始状态从座位行数的一半处的后一排的中间开始向左右分别搜索,取离中间最近的,如果满足条件,
+             *    记录下该结果离座位中轴线的距离,后排搜索完成后取距离最小的那个结果座位最终结果,优先向后排进行搜索,
+             *    后排都没有才往前排搜,前排逻辑同上
+             *
+             * (2)只考虑并排且连续的座位,不能不在一排或者一排中间有分隔
+             *
+             * */
+
+            /*
+             * 保存当前方向搜索结果的数组,元素是对象,result是结果数组,offset代表与中轴线的偏移距离
+             * {
+             *   result:Array([x,y])
+             *   offset:Number
+             * }
+             *
+             */
+            let currentDirectionSearchResult = [];
+
+            let largeRow = fromRow > toRow ? fromRow : toRow,
+                smallRow = fromRow > toRow ? toRow : fromRow;
+
+            for (let i = smallRow; i <= largeRow; i++) {
+                //每一排的搜索,找出该排里中轴线最近的一组座位
+                let tempRowResult = [],
+                    minDistanceToMidLine = Infinity;
+                for (let j = 0; j <= this.seatCol - num; j++) {
+                    //如果有合法位置
+                    if (this.checkRowSeatContinusAndEmpty(i, j, j + num - 1)) {
+                        //计算该组位置距离中轴线的距离:该组位置的中间位置到中轴线的距离
+                        let resultMidPos = parseInt((j + num / 2), 10);
+                        let distance = Math.abs(parseInt(this.seatCol / 2) - resultMidPos);
+                        //如果距离较短则更新
+                        if (distance < minDistanceToMidLine) {
+                            minDistanceToMidLine = distance;
+                            //该行的最终结果
+                            tempRowResult = this.generateRowResult(i, j, j + num - 1)
+                        }
+                    }
+                }
+                //保存该行的最终结果
+                currentDirectionSearchResult.push({
+                    result: tempRowResult,
+                    offset: minDistanceToMidLine
+                })
+            }
+
+            //处理后排的搜索结果:找到距离中轴线最短的一个
+            //注意这里的逻辑需要区分前后排,对于后排是从前往后,前排则是从后往前找
+            let isBackDir = fromRow < toRow;
+            let finalReuslt = [],
+                minDistanceToMid = Infinity;
+            if (isBackDir) {
+                //后排情况,从前往后
+                currentDirectionSearchResult.forEach((item) => {
+                    if (item.offset < minDistanceToMid) {
+                        finalReuslt = item.result;
+                        minDistanceToMid = item.offset;
+                    }
+                });
+            } else {
+                //前排情况,从后往前找
+                currentDirectionSearchResult.reverse().forEach((item) => {
+                    if (item.offset < minDistanceToMid) {
+                        finalReuslt = item.result;
+                        minDistanceToMid = item.offset;
+                    }
+                })
+            }
+
+            //直接返回结果
+            return finalReuslt
+        },
+
+        /*辅助函数,判断每一行座位从i列到j列是否全部空余且连续
+         *
+         */
+        checkRowSeatContinusAndEmpty: function(rowNum, startPos, endPos) {
+            let isValid = true;
+            for (let i = startPos; i <= endPos; i++) {
+                if (this.seatArray[rowNum][i].type !== 0) {
+                    isValid = false;
+                    break;
+                }
+            }
+            return isValid
+        },
+        //辅助函数:返回每一行的某个合理位置的座位数组
+        generateRowResult: function(row, startPos, endPos) {
+            let result = [];
+            for (let i = startPos; i <= endPos; i++) {
+                result.push([row, i])
+            }
+            return result
+        },
+        //辅助函数:智能推荐的选座操作
+        chooseSeat: function(result) {
+            let opt = this.optArr
+            let oldArray = this.seatArray.slice();
+            for (let i = 0; i < result.length; i++) {
+                //选定座位
+                oldArray[result[i][0]][result[i][1]].type = 1
+                this.optArr.push(oldArray[result[i][0]][result[i][1]])
+            }
+            this.seatArray = oldArray;
+        },
+    }
+}
+</script>
+<style lang="scss" scoped>
+.p-all-10 {
+    padding: 10rpx;
+}
+
+.ml-10 {
+    margin-left: 10rpx;
+}
+
+.m-0-10 {
+    margin: 0 10rpx;
+}
+
+.bg-unbtn {
+    background-color: #f9abb3;
+}
+
+.bg-red-1 {
+    background-color: #F45664;
+}
+
+.br-10 {
+    border-radius: 10rpx;
+}
+
+.ml-20 {
+    margin-left: 20rpx;
+}
+
+.mb-20 {
+    margin-bottom: 20rpx;
+}
+
+.p-all-32 {
+    padding: 32rpx;
+}
+
+.fd-cr {
+    flex-direction: column-reverse;
+    /* 主轴方向从下到上,默认从左到右 */
+}
+
+.bottom-bar {
+    bottom: var(--window-bottom);
+}
+
+.color-fff {
+    color: #fff
+}
+
+.br-15 {
+    border-radius: 15rpx;
+}
+
+.over-h {
+    overflow: hidden;
+}
+
+.dp-ib {
+    display: inline-block;
+}
+
+.mt-20 {
+    margin-top: 20rpx;
+}
+
+.pa-v-2 {
+    /* 定位垂直对齐 */
+    left: 50%;
+    transform: translateX(-50%)
+}
+
+.b-d-1 {
+    border: 1px dashed #e5e5e5;
+}
+
+.w-100 {
+    width: 100%;
+}
+
+.h-100 {
+    height: 100%;
+}
+
+.bg-f1 {
+    background-color: #f1f1f1;
+}
+
+.h-100vh {
+    height: 100vh;
+}
+
+.pt-f {
+    position: fixed;
+}
+
+.left-0 {
+    left: 0;
+}
+
+.p-0-32 {
+    padding: 0 32rpx;
+}
+
+.pt-20 {
+    padding-top: 20rpx;
+}
+
+.bg-white {
+    background-color: #fff;
+}
+
+.z1000 {
+    z-index: 1000;
+}
+
+.fz-34 {
+    font-size: 34rpx;
+}
+
+.fw-b {
+    font-weight: bold;
+}
+
+.mt-10 {
+    margin-top: 10rpx;
+}
+
+.fz-28 {
+    font-size: 28rpx;
+}
+
+.color-666 {
+    color: #666666
+}
+
+.dp-f {
+    display: flex;
+}
+
+.jc-c {
+    justify-content: center;
+}
+
+.ai-c {
+    align-items: center;
+}
+
+.fz-22 {
+    font-size: 22rpx;
+}
+
+.color-333 {
+    color: #333333
+}
+
+.m-0-a {
+    margin: 0 auto;
+}
+
+.mt-48 {
+    margin-top: 48rpx;
+}
+
+.fz-20 {
+    font-size: 20rpx;
+}
+
+.color-999 {
+    color: #999999
+}
+
+.b-1 {
+    border: 1px solid #CCCCCC;
+}
+
+.br-5 {
+    border-radius: 5rpx;
+}
+
+.Stage {
+    background-color: #dddddd;
+    width: 380rpx;
+    height: 34rpx;
+    transform: perspective(34rpx) rotateX(-10deg);
+    margin: 0 auto;
+}
+
+.bg-line {
+    background-color: rgba(0, 0, 0, 0.3);
+}
+
+.sel-seat {
+    background: url('https://test-api.haocha13.cn/static/img/set.png') center center no-repeat;
+    background-size: 100% 100%;
+}
+
+.unsel-seat {
+    background: url('https://test-api.haocha13.cn/static/img/optional.png') center center no-repeat;
+    background-size: 100% 100%;
+}
+
+.bought-seat {
+    background: url('https://test-api.haocha13.cn/static/img/sold.png') center center no-repeat;
+    background-size: 100% 100%;
+}
+</style>

+ 348 - 0
src/pagesB/components/u-swiper.vue

@@ -0,0 +1,348 @@
+<template>
+	<view class="u-swiper-wrap" :style="{
+		borderRadius: `${borderRadius}rpx`
+	}">
+		<swiper :current="elCurrent" @change="change" @animationfinish="animationfinish" :interval="interval" :circular="circular" :duration="duration" :autoplay="autoplay"
+		 :previous-margin="effect3d ? effect3dPreviousMargin + 'rpx' : '0'" :next-margin="effect3d ? effect3dPreviousMargin + 'rpx' : '0'"
+		 :style="{
+				height: height + 'rpx',
+				backgroundColor: bgColor
+			}">
+			<swiper-item class="u-swiper-item" v-for="(item, index) in list" :key="index">
+				<view class="u-list-image-wrap" @tap.stop.prevent="listClick(index)" :class="[uCurrent != index ? 'u-list-scale' : '']" :style="{
+						borderRadius: `${borderRadius}rpx`,
+						transform: (effect3d && uCurrent != index ? 'scale(0.75)' : 'scale(1)'),
+						margin: effect3d && uCurrent != index ? '0' : 0,
+					}">
+					<image class="u-swiper-image" :src="item[name] || item" :mode="imgMode"></image>
+					<view v-if="title && item.title" class="u-swiper-title u-line-1" :style="[{
+							'padding-bottom': titlePaddingBottom
+						}, titleStyle]">
+						{{ item.title }}
+					</view>
+				</view>
+			</swiper-item>
+		</swiper>
+		<view class="u-swiper-indicator" :style="{
+				top: indicatorPos == 'topLeft' || indicatorPos == 'topCenter' || indicatorPos == 'topRight' ? '12rpx' : 'auto',
+				bottom: indicatorPos == 'bottomLeft' || indicatorPos == 'bottomCenter' || indicatorPos == 'bottomRight' ? '12rpx' : 'auto',
+				justifyContent: justifyContent,
+				padding: `0 ${effect3d ? '74rpx' : '24rpx'}`
+			}">
+			<block v-if="mode == 'rect'">
+				<view class="u-indicator-item-rect" :class="{ 'u-indicator-item-rect-active': index == uCurrent }" v-for="(item, index) in list"
+				 :key="index"></view>
+			</block>
+			<block v-if="mode == 'dot'">
+				<view class="u-indicator-item-dot" :class="{ 'u-indicator-item-dot-active': index == uCurrent }" v-for="(item, index) in list"
+				 :key="index"></view>
+			</block>
+			<block v-if="mode == 'round'">
+				<view class="u-indicator-item-round" :class="{ 'u-indicator-item-round-active': index == uCurrent }" v-for="(item, index) in list"
+				 :key="index"></view>
+			</block>
+			<block v-if="mode == 'number'">
+				<view class="u-indicator-item-number">{{ uCurrent + 1 }}/{{ list.length }}</view>
+			</block>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * swiper 轮播图
+	 * @description 该组件一般用于导航轮播,广告展示等场景,可开箱即用
+	 * @tutorial https://www.uviewui.com/components/swiper.html
+	 * @property {Array} list 轮播图数据,见官网"基本使用"说明
+	 * @property {Boolean} title 是否显示标题文字,需要配合list参数,见官网说明(默认false)
+	 * @property {String} mode 指示器模式,见官网说明(默认round)
+	 * @property {String Number} height 轮播图组件高度,单位rpx(默认250)
+	 * @property {String} indicator-pos 指示器的位置(默认bottomCenter)
+	 * @property {Boolean} effect3d 是否开启3D效果(默认false)
+	 * @property {Boolean} autoplay 是否自动播放(默认true)
+	 * @property {String Number} interval 自动轮播时间间隔,单位ms(默认2500)
+	 * @property {Boolean} circular 是否衔接播放,见官网说明(默认true)
+	 * @property {String} bg-color 背景颜色(默认#f3f4f6)
+	 * @property {String Number} border-radius 轮播图圆角值,单位rpx(默认8)
+	 * @property {Object} title-style 自定义标题样式
+	 * @property {String Number} effect3d-previous-margin mode = true模式的情况下,激活项与前后项之间的距离,单位rpx(默认50)
+	 * @property {String} img-mode 图片的裁剪模式,详见image组件裁剪模式(默认aspectFill)
+	 * @event {Function} click 点击轮播图时触发
+	 * @example <u-swiper :list="list" mode="dot" indicator-pos="bottomRight"></u-swiper>
+	 */
+	export default {
+		name: "u-swiper",
+		props: {
+			// 轮播图的数据,格式如:[{image: 'xxxx', title: 'xxxx'},{image: 'yyyy', title: 'yyyy'}],其中title字段可选
+			list: {
+				type: Array,
+				default () {
+					return [];
+				}
+			},
+			// 是否显示title标题
+			title: {
+				type: Boolean,
+				default: false
+			},
+			// 用户自定义的指示器的样式
+			indicator: {
+				type: Object,
+				default () {
+					return {};
+				}
+			},
+			// 圆角值
+			borderRadius: {
+				type: [Number, String],
+				default: 8
+			},
+			// 隔多久自动切换
+			interval: {
+				type: [String, Number],
+				default: 3000
+			},
+			// 指示器的模式,rect|dot|number|round
+			mode: {
+				type: String,
+				default: 'round'
+			},
+			// list的高度,单位rpx
+			height: {
+				type: [Number, String],
+				default: 250
+			},
+			// 指示器的位置,topLeft|topCenter|topRight|bottomLeft|bottomCenter|bottomRight
+			indicatorPos: {
+				type: String,
+				default: 'bottomCenter'
+			},
+			// 是否开启缩放效果
+			effect3d: {
+				type: Boolean,
+				default: false
+			},
+			// 3D模式的情况下,激活item与前后item之间的距离,单位rpx
+			effect3dPreviousMargin: {
+				type: [Number, String],
+				default: 50
+			},
+			// 是否自动播放
+			autoplay: {
+				type: Boolean,
+				default: true
+			},
+			// 自动轮播时间间隔,单位ms
+			duration: {
+				type: [Number, String],
+				default: 500
+			},
+			// 是否衔接滑动,即到最后一张时接着滑动,是否自动切换到第一张
+			circular: {
+				type: Boolean,
+				default: true
+			},
+			// 图片的裁剪模式 
+			imgMode: {
+				type: String,
+				default: 'aspectFill'
+			},
+			// 从list数组中读取的图片的属性名
+			name: {
+				type: String,
+				default: 'image'
+			},
+			// 背景颜色
+			bgColor: {
+				type: String,
+				default: '#f3f4f6'
+			},
+			// 初始化时,默认显示第几项
+			current: {
+				type: [Number, String],
+				default: 0
+			},
+			// 标题的样式,对象形式
+			titleStyle: {
+				type: Object,
+				default() {
+					return {}
+				}
+			}
+		},
+		watch: {
+			// 如果外部的list发生变化,判断长度是否被修改,如果前后长度不一致,重置uCurrent值,避免溢出
+			list(nVal, oVal) {
+				if(nVal.length !== oVal.length) this.uCurrent = 0;
+			},
+			// 监听外部current的变化,实时修改内部依赖于此测uCurrent值,如果更新了current,而不是更新uCurrent,
+			// 就会错乱,因为指示器是依赖于uCurrent的
+			current(n) {
+				this.uCurrent = n;
+			}
+		},
+		data() {
+			return {
+				uCurrent: this.current // 当前活跃的swiper-item的index
+			};
+		},
+		computed: {
+			justifyContent() {
+				if (this.indicatorPos == 'topLeft' || this.indicatorPos == 'bottomLeft') return 'flex-start';
+				if (this.indicatorPos == 'topCenter' || this.indicatorPos == 'bottomCenter') return 'center';
+				if (this.indicatorPos == 'topRight' || this.indicatorPos == 'bottomRight') return 'flex-end';
+			},
+			titlePaddingBottom() {
+				let tmp = 0;
+				if (this.mode == 'none') return '12rpx';
+				if (['bottomLeft', 'bottomCenter', 'bottomRight'].indexOf(this.indicatorPos) >= 0 && this.mode == 'number') {
+					tmp = '60rpx';
+				} else if (['bottomLeft', 'bottomCenter', 'bottomRight'].indexOf(this.indicatorPos) >= 0 && this.mode != 'number') {
+					tmp = '40rpx';
+				} else {
+					tmp = '12rpx';
+				}
+				return tmp;
+			},
+			// 因为uni的swiper组件的current参数只接受Number类型,这里做一个转换
+			elCurrent() {
+				return Number(this.current);
+			}
+		},
+		methods: {
+			listClick(index) {
+				this.$emit('click', index);
+			},
+			change(e) {
+				let current = e.detail.current;
+				this.uCurrent = current;
+				// 发出change事件,表示当前自动切换的index,从0开始
+				this.$emit('change', current);
+			},
+			// 头条小程序不支持animationfinish事件,改由change事件
+			// 暂不监听此事件,因为不再给swiper绑定uCurrent属性
+			animationfinish(e) {
+				// #ifndef MP-TOUTIAO
+				// this.uCurrent = e.detail.current;
+				// #endif
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	// @import "@/node_modules/uview-ui/libs/css/style.components.scss";
+	// 定义混入指令,用于在非nvue环境下的flex定义,因为nvue没有display属性,会报错
+	@mixin vue-flex($direction: row) {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex-direction: $direction;
+		/* #endif */
+	}
+	
+	.u-swiper-wrap {
+		position: relative;
+		overflow: hidden;
+		transform: translateY(0);
+	}
+
+	.u-swiper-image {
+		width: 100%;
+		will-change: transform;
+		height: 100%;
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		/* #ifdef H5 */
+		pointer-events: none;
+		/* #endif */
+		border-radius: 10rpx;
+	}
+
+	.u-swiper-indicator {
+		padding: 0 24rpx;
+		position: absolute;
+		@include vue-flex;
+		width: 100%;
+		z-index: 1;
+	}
+
+	.u-indicator-item-rect {
+		width: 26rpx;
+		height: 8rpx;
+		margin: 0 6rpx;
+		transition: all 0.5s;
+		background-color: rgba(0, 0, 0, 0.3);
+	}
+
+	.u-indicator-item-rect-active {
+		background-color: rgba(255, 255, 255, 0.8);
+	}
+
+	.u-indicator-item-dot {
+		width: 14rpx;
+		height: 14rpx;
+		margin: 0 6rpx;
+		border-radius: 20rpx;
+		transition: all 0.5s;
+		background-color: rgba(0, 0, 0, 0.3);
+	}
+
+	.u-indicator-item-dot-active {
+		background-color: rgba(255, 255, 255, 0.8);
+	}
+
+	.u-indicator-item-round {
+		width: 14rpx;
+		height: 14rpx;
+		margin: 0 6rpx;
+		border-radius: 20rpx;
+		transition: all 0.5s;
+		background-color: rgba(0, 0, 0, 0.3);
+	}
+
+	.u-indicator-item-round-active {
+		width: 34rpx;
+		background-color: rgba(255, 255, 255, 0.8);
+	}
+
+	.u-indicator-item-number {
+		padding: 6rpx 16rpx;
+		line-height: 1;
+		background-color: rgba(0, 0, 0, 0.3);
+		border-radius: 100rpx;
+		font-size: 26rpx;
+		color: rgba(255, 255, 255, 0.8);
+	}
+
+	.u-list-scale {
+		transform-origin: center center;
+	}
+
+	.u-list-image-wrap {
+		width: 100%;
+		height: 100%;
+		flex: 1;
+		transition: all 0.2s;
+		overflow: hidden;
+		box-sizing: content-box;
+		position: relative;
+	}
+
+	.u-swiper-title {
+		position: absolute;
+		background-color: rgba(0, 0, 0, 0.3);
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		font-size: 28rpx;
+		padding: 12rpx 24rpx;
+		color: rgba(255, 255, 255, 0.9);
+	}
+
+	.u-swiper-item {
+		@include vue-flex;
+		overflow: hidden;
+		align-items: center;
+	}
+</style>

+ 1 - 1
src/pagesB/orderingfood/activation.vue

@@ -2,7 +2,7 @@
   <div class="activation">
     <div class="con">
         <div class="con_txt">请输入激活码</div>
-        <input class="activation_code f_dinB" :focus="true" v-model="code">
+        <input class="activation_code dinB" :focus="true" v-model="code">
     </div>
     <div class="btnbar">
         <div class="btn" @click="jihuo">立即激活</div>

+ 1 - 1
src/pagesB/orderingfood/group.vue

@@ -5,7 +5,7 @@
                 <div class="btn" @click="goto('/pagesB/orderingfood/activationcode')">生成激活码</div>
             </div>
             <div class="tit">团队人数</div>
-            <div class="usernum f_dinB">{{ num.team }}</div>
+            <div class="usernum dinB">{{ num.team }}</div>
             <div class="tabs flex_r flex_jse">
                 <div class="tab" @click="getTeamList(s)" :class="{active:type==s}" v-for="(i,s) in num.tab" :key="s">{{ i }}</div>
             </div>

+ 25 - 55
src/pagesB/orderingfood/orderingfood.vue

@@ -9,7 +9,7 @@
             <view class="header flex_r flex_jb">
                 <view class="left flex_c flex_jc">
                     <view class="title ellipsis">{{MerchantInfo.restaurant_name}}</view>
-                    <view v-if="distance" class="address">距离您 {{(distance/1000)>1?distance/1000+'千米':distance+'米'}}</view>
+                    <view v-if="distance" class="address">距离您 {{$h.Div(distance, 1000).toFixed(2)}}km</view>
                     <view v-else class="address">{{MerchantInfo.restaurant_address}}</view>
                 </view>
                 <view class="right flex_c flex_jc">
@@ -181,8 +181,7 @@
 <script>
 import Icon from "@/pagesB/components/icon/icon.vue";
 import { post } from "@/request/api.js";
-const app = getApp();
-console.log('app', app);
+// import { deepEqual,CompareJsonObj } from "@/utils/myfun.js";
 export default {
     components: { Icon },
     props: {
@@ -203,7 +202,6 @@ export default {
                     color5: "#d3aa79"
                 }
             },
-            userData: uni.getStorageSync('__yipinUserInfo'),
             goodsHeight: 812,
             menuCurrent: 0,
             menuList: [],
@@ -242,7 +240,7 @@ export default {
         }
     },
     onReady() {
-		this.distance = this.MerchantInfo.distance.toFixed(2);
+		this.distance = this.MerchantInfo.distance;
         uni.setNavigationBarTitle({ title: this.MerchantInfo.restaurant_name });
         this.getCartList();
 
@@ -268,6 +266,7 @@ export default {
                         let da = res.data.data.products;
                         let arr = [], obj = [];
                         for (const it of da) {
+                            if([2,13,19].includes(res.data.data.brand_id)) it.product_choose = false
                             if (!arr.includes(it.category_name)) arr.push(it.category_name)
                         }
                         for (const i of arr) {
@@ -289,7 +288,7 @@ export default {
             let data = this.goodsAllList[index].goods[idx];
             this.childProductData = {};
             let info = this.MerchantInfo;
-            if (data.product_choose) {
+            if (![2,13,19].includes(data.brand_id) && data.product_choose) {
                 post("local/getProduct", {
                     brand_id: info.brand_id,
                     restaurant_id: info.restaurant_id,
@@ -297,36 +296,6 @@ export default {
                 }).then(res => {
                     if (res.code === 0) {
                         let da = res.data.data
-                        if(da.brand_id == 13){
-                            let arr = []
-                            for (let it of da.details.specifications) {
-                                arr.push({
-                                    name: it.name,
-                                    sku_infos: it.ingredients
-                                })
-                            }
-                            da.details.optional = arr
-                        }
-                        if(da.brand_id == 19){
-                            let arr = []
-                            for (let it of da.details.specifications) {
-                                arr.push({
-                                    name: it.name,
-                                    sku_infos: it.values
-                                })
-                            }
-                            da.details.optional = arr
-                        }
-                        if(da.brand_id == 2){
-                            let arr = []
-                            for (let it of da.details.spu_specs) {
-                                arr.push({
-                                    name: it.name,
-                                    sku_infos: it.values
-                                })
-                            }
-                            da.details.optional = arr
-                        }
                         this.goodsOneData = da;
                         this.buyNumber = 1;
                         this.goodShow = true;
@@ -367,21 +336,18 @@ export default {
                     curSelectNum++
                     for (let s = 0; s < specification[i].sku_infos.length; s++) {
                         if (specification[i].sku_infos[s].active) {
+                            selectSpecification[specification[i].name] = specification[i].sku_infos[s].name;
                             let pid = specification[i].id;
                             let { id, name, price, amount } = specification[i].sku_infos[s];
-							spec_price += price;
                             selectSpecArr.push({ id, name, price, amount, pid });
-                            selectSpecification[specification[i].name] = specification[i].sku_infos[s].name;
+                            spec_price += price;
                         }
                     }
                 }
             }
-            if (curSelectNum == specification.length) {
-                this.canSubmit = true;
-            } else {
-                this.canSubmit = false;
-            }
-            this.childProductData = { selectSpecArr, selectSpecification, spec_price };
+            if (curSelectNum == specification.length) this.canSubmit = true
+            else this.canSubmit = false;
+            this.childProductData = { selectSpecArr, selectSpecification, spec_price, sku_code };
         },
 		// 添加购物袋前  修改购买数量
         editGoodsOne(type) {
@@ -398,18 +364,22 @@ export default {
         addShopCar() {
             let data = this.goodsOneData;
 
-            this.addCartGoods(data, this.buyNumber, this.childProductData);
+            if(![2,13,19].includes(data.brand_id)){
+                if (data.product_choose) {
+                    if (this.canSubmit) {
+                        this.addCartGoods(data, this.buyNumber, this.childProductData);
+                    } else {
+                        uni.showToast({ title: '请选择规格', icon: 'none' });
+                        return
+                    }
+                } else {
+                    this.addCartGoods(data, this.buyNumber);
+                }
+            }
+            else{
+                this.addCartGoods(data, this.buyNumber, this.childProductData);
+            }
             
-            // if (data.product_choose) {
-            //     if (this.canSubmit) {
-            //         this.addCartGoods(data, this.buyNumber, this.childProductData);
-            //     } else {
-            //         uni.showToast({ title: '请选择规格', icon: 'none' });
-            //         return
-            //     }
-            // } else {
-            //     this.addCartGoods(data, this.buyNumber);
-            // }
         },
 		// 添加购物袋
         addCartGoods(da, num, spec = []) {

+ 1 - 1
src/pagesB/orderingfood/orderlist.vue

@@ -12,7 +12,7 @@
                     <div class="na ellipsis">{{ a.product_name }}</div>
                 </div>
             </div>
-            <div class="g_amount"><span class="amount f_dinB">{{ i.order_amount }}</span></div>
+            <div class="g_amount"><span class="amount dinB">{{ i.order_amount }}</span></div>
         </div>
         <div class="p3">下单时间:{{ i.create_time }}</div>
     </div>

+ 0 - 21
src/pagesB/test/index.vue

@@ -1,21 +0,0 @@
-<template>
-  <div class='test'>test</div>
-</template>
-<script>
-import { post } from '@/request/api.js';
-export default {
-  name: 'test',
-  data () {
-    return {}
-  },
-  onLoad (option) {},
-  onLaunch () {},
-  onShow () {},
-  onHide () {},
-  methods: {},
-  computed: {},
-  watch: {}
-}
-</script>
-<style scoped lang='scss'>
-</style>

+ 2 - 2
src/static/font/DIN/din.css

@@ -7,7 +7,7 @@
   src: local('dinB'), url(./DIN-Bold.otf) format('opentype');
 }
 
-.f_din {
+.din {
   font-family: "dinM" !important;
   /* font-size: 12px; */
   font-style: normal;
@@ -15,7 +15,7 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
-.f_dinB {
+.dinB {
   font-family: "dinB" !important;
   /* font-size: 12px; */
   font-style: normal;

+ 55 - 55
src/utils/myfun.js

@@ -1,79 +1,79 @@
 // 返回两个日期之间的月份
 export function getDiffDate(minDate, maxDate) {
-  let startDate = new Date(minDate.replace(/-/g, '/'));
-  let endDate = new Date(maxDate.replace(/-/g, '/'));
-  let months = [];
-  //把时间的天数都设置成当前月第一天
-  startDate.setDate(1)
-  endDate.setDate(1)
-  // new Date(yyyy-MM-dd) 不知为何有时候小时是 08 有时候是00 
-  endDate.setHours(0)
-  startDate.setHours(0)
-  while (endDate.getTime() >= startDate.getTime()) {
-    let year = startDate.getFullYear();
-    let month = startDate.getMonth() + 1;
-    //加一个月
-    startDate.setMonth(month)
-    if (month.toString().length == 1) {
-      month = "0" + month;
+    let startDate = new Date(minDate.replace(/-/g, '/'));
+    let endDate = new Date(maxDate.replace(/-/g, '/'));
+    let months = [];
+    //把时间的天数都设置成当前月第一天
+    startDate.setDate(1)
+    endDate.setDate(1)
+    // new Date(yyyy-MM-dd) 不知为何有时候小时是 08 有时候是00 
+    endDate.setHours(0)
+    startDate.setHours(0)
+    while (endDate.getTime() >= startDate.getTime()) {
+        let year = startDate.getFullYear();
+        let month = startDate.getMonth() + 1;
+        //加一个月
+        startDate.setMonth(month)
+        if (month.toString().length == 1) {
+            month = "0" + month;
+        }
+        months.push(year + "-" + month)
     }
-    months.push(year + "-" + month)
-  }
-  return months;
+    return months;
 }
 
 // 将rgb颜色转成hex
 export function RtoH(color) {
-  var rgb = color.split(',');
-  var r = parseInt(rgb[0].split('(')[1]);
-  var g = parseInt(rgb[1]);
-  var b = parseInt(rgb[2].split(')')[0]);
+    var rgb = color.split(',');
+    var r = parseInt(rgb[0].split('(')[1]);
+    var g = parseInt(rgb[1]);
+    var b = parseInt(rgb[2].split(')')[0]);
 
-  var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
-  return hex;
+    var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
+    return hex;
 }
 // 将hex颜色转成rgb
 export function HtoR(hex, opacity) {
-  var RGBA = "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," + parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";
-  // return { red: parseInt("0x" + hex.slice(1, 3)), green: parseInt("0x" + hex.slice(3, 5)), blue: parseInt("0x" + hex.slice(5, 7)), rgba: RGBA }
-  return RGBA;
+    var RGBA = "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," + parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";
+    // return { red: parseInt("0x" + hex.slice(1, 3)), green: parseInt("0x" + hex.slice(3, 5)), blue: parseInt("0x" + hex.slice(5, 7)), rgba: RGBA }
+    return RGBA;
 }
 
 // 189 **** 0222
 export function phoneNumA(value) {
-  if (value && value.length > 8) {
-    return `${value.substring(0, 3)} ${"*".repeat(value.length - 7).replace(/(.{4})/g, "$1 ")}${value.length % 4 ? " " : ""}${value.slice(-4)}`;
-  }
-  return value;
+    if (value && value.length > 8) {
+        return `${value.substring(0, 3)} ${"*".repeat(value.length - 7).replace(/(.{4})/g, "$1 ")}${value.length % 4 ? " " : ""}${value.slice(-4)}`;
+    }
+    return value;
 }
 
 // goto
 export function goto(url, json) {
-  let params = "";
-  if (json) {
-    params = [];
-    let da = Object.keys(json).map(function (key) {
-      if (json[key]) return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
-    });
-    da.forEach(e => {
-      if (e) params.push(e)
+    let params = "";
+    if (json) {
+        params = [];
+        let da = Object.keys(json).map(function (key) {
+            if (json[key]) return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
+        });
+        da.forEach(e => {
+            if (e) params.push(e)
+        });
+        params = params.join("&")
+    }
+    uni.navigateTo({
+        url: url + '?' + params
     });
-    params = params.join("&")
-  }
-  uni.navigateTo({
-    url: url + '?' + params
-  });
 }
 
 // tidyTpye
 export function tidyTpye(va) {
-  switch (va) {
-    case '1': return "零售专区";
-    case '2': return "批发专区";
-    case '3': return "精品优选";
-    case '4': return "甄选好物";
-    case '5': return "茶宝兑换";
-    case '6': return "天天捡漏";
-    default: return ""
-  }
-}
+    switch (va) {
+        case '1': return "零售专区";
+        case '2': return "批发专区";
+        case '3': return "精品优选";
+        case '4': return "甄选好物";
+        case '5': return "茶宝兑换";
+        case '6': return "天天捡漏";
+        default: return ""
+    }
+}

+ 939 - 0
src/utils/seat-data.js

@@ -0,0 +1,939 @@
+export const seatData = [{
+	"YCoord": "3",
+	"XCoord": "11",
+	"SeatCode": "4413141101#01#14",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "3",
+	"XCoord": "12",
+	"SeatCode": "4413141101#01#13",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "3",
+	"XCoord": "13",
+	"SeatCode": "4413141101#01#12",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "3",
+	"XCoord": "14",
+	"SeatCode": "4413141101#01#11",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "3",
+	"XCoord": "15",
+	"SeatCode": "4413141101#01#10",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "3",
+	"XCoord": "16",
+	"SeatCode": "4413141101#01#09",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "3",
+	"XCoord": "17",
+	"SeatCode": "4413141101#01#08",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "3",
+	"XCoord": "18",
+	"SeatCode": "4413141101#01#07",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "3",
+	"XCoord": "19",
+	"SeatCode": "4413141101#01#06",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "3",
+	"XCoord": "20",
+	"SeatCode": "4413141101#01#05",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "3",
+	"XCoord": "21",
+	"SeatCode": "4413141101#01#04",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "3",
+	"XCoord": "22",
+	"SeatCode": "4413141101#01#03",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "3",
+	"XCoord": "23",
+	"SeatCode": "4413141101#01#02",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "3",
+	"XCoord": "24",
+	"SeatCode": "4413141101#01#01",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "3",
+	"XCoord": "10",
+	"SeatCode": "4413141101#01#15",
+	"Status": 0,
+	"RowNum": "1",
+	"ColumnNum": "15"
+}, {
+	"YCoord": "4",
+	"XCoord": "10",
+	"SeatCode": "4413141101#02#15",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "15"
+}, {
+	"YCoord": "4",
+	"XCoord": "11",
+	"SeatCode": "4413141101#02#14",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "4",
+	"XCoord": "12",
+	"SeatCode": "4413141101#02#13",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "4",
+	"XCoord": "13",
+	"SeatCode": "4413141101#02#12",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "4",
+	"XCoord": "14",
+	"SeatCode": "4413141101#02#11",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "4",
+	"XCoord": "15",
+	"SeatCode": "4413141101#02#10",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "4",
+	"XCoord": "16",
+	"SeatCode": "4413141101#02#09",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "4",
+	"XCoord": "17",
+	"SeatCode": "4413141101#02#08",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "4",
+	"XCoord": "18",
+	"SeatCode": "4413141101#02#07",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "4",
+	"XCoord": "19",
+	"SeatCode": "4413141101#02#06",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "4",
+	"XCoord": "20",
+	"SeatCode": "4413141101#02#05",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "4",
+	"XCoord": "21",
+	"SeatCode": "4413141101#02#04",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "4",
+	"XCoord": "22",
+	"SeatCode": "4413141101#02#03",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "4",
+	"XCoord": "23",
+	"SeatCode": "4413141101#02#02",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "4",
+	"XCoord": "24",
+	"SeatCode": "4413141101#02#01",
+	"Status": 0,
+	"RowNum": "2",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "5",
+	"XCoord": "10",
+	"SeatCode": "4413141101#03#15",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "15"
+}, {
+	"YCoord": "5",
+	"XCoord": "11",
+	"SeatCode": "4413141101#03#14",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "5",
+	"XCoord": "12",
+	"SeatCode": "4413141101#03#13",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "5",
+	"XCoord": "13",
+	"SeatCode": "4413141101#03#12",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "5",
+	"XCoord": "14",
+	"SeatCode": "4413141101#03#11",
+	"Status": 2,
+	"RowNum": "3",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "5",
+	"XCoord": "15",
+	"SeatCode": "4413141101#03#10",
+	"Status": 2,
+	"RowNum": "3",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "5",
+	"XCoord": "16",
+	"SeatCode": "4413141101#03#09",
+	"Status": 2,
+	"RowNum": "3",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "5",
+	"XCoord": "17",
+	"SeatCode": "4413141101#03#08",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "5",
+	"XCoord": "18",
+	"SeatCode": "4413141101#03#07",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "5",
+	"XCoord": "19",
+	"SeatCode": "4413141101#03#06",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "5",
+	"XCoord": "20",
+	"SeatCode": "4413141101#03#05",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "5",
+	"XCoord": "21",
+	"SeatCode": "4413141101#03#04",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "5",
+	"XCoord": "22",
+	"SeatCode": "4413141101#03#03",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "5",
+	"XCoord": "23",
+	"SeatCode": "4413141101#03#02",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "5",
+	"XCoord": "24",
+	"SeatCode": "4413141101#03#01",
+	"Status": 0,
+	"RowNum": "3",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "6",
+	"XCoord": "10",
+	"SeatCode": "4413141101#04#15",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "15"
+}, {
+	"YCoord": "6",
+	"XCoord": "11",
+	"SeatCode": "4413141101#04#14",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "6",
+	"XCoord": "12",
+	"SeatCode": "4413141101#04#13",
+	"Status": 2,
+	"RowNum": "4",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "6",
+	"XCoord": "13",
+	"SeatCode": "4413141101#04#12",
+	"Status": 2,
+	"RowNum": "4",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "6",
+	"XCoord": "14",
+	"SeatCode": "4413141101#04#11",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "6",
+	"XCoord": "15",
+	"SeatCode": "4413141101#04#10",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "6",
+	"XCoord": "16",
+	"SeatCode": "4413141101#04#09",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "6",
+	"XCoord": "17",
+	"SeatCode": "4413141101#04#08",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "6",
+	"XCoord": "18",
+	"SeatCode": "4413141101#04#07",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "6",
+	"XCoord": "19",
+	"SeatCode": "4413141101#04#06",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "6",
+	"XCoord": "20",
+	"SeatCode": "4413141101#04#05",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "6",
+	"XCoord": "21",
+	"SeatCode": "4413141101#04#04",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "6",
+	"XCoord": "22",
+	"SeatCode": "4413141101#04#03",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "6",
+	"XCoord": "23",
+	"SeatCode": "4413141101#04#02",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "6",
+	"XCoord": "24",
+	"SeatCode": "4413141101#04#01",
+	"Status": 0,
+	"RowNum": "4",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "9",
+	"XCoord": "10",
+	"SeatCode": "4413141101#05#14",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "9",
+	"XCoord": "11",
+	"SeatCode": "4413141101#05#13",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "9",
+	"XCoord": "12",
+	"SeatCode": "4413141101#05#12",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "9",
+	"XCoord": "13",
+	"SeatCode": "4413141101#05#11",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "9",
+	"XCoord": "14",
+	"SeatCode": "4413141101#05#10",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "9",
+	"XCoord": "15",
+	"SeatCode": "4413141101#05#09",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "9",
+	"XCoord": "16",
+	"SeatCode": "4413141101#05#08",
+	"Status": 2,
+	"RowNum": "5",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "9",
+	"XCoord": "17",
+	"SeatCode": "4413141101#05#07",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "9",
+	"XCoord": "18",
+	"SeatCode": "4413141101#05#06",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "9",
+	"XCoord": "19",
+	"SeatCode": "4413141101#05#05",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "9",
+	"XCoord": "20",
+	"SeatCode": "4413141101#05#04",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "9",
+	"XCoord": "21",
+	"SeatCode": "4413141101#05#03",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "9",
+	"XCoord": "22",
+	"SeatCode": "4413141101#05#02",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "9",
+	"XCoord": "23",
+	"SeatCode": "4413141101#05#01",
+	"Status": 0,
+	"RowNum": "5",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "10",
+	"XCoord": "10",
+	"SeatCode": "4413141101#06#14",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "10",
+	"XCoord": "11",
+	"SeatCode": "4413141101#06#13",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "10",
+	"XCoord": "12",
+	"SeatCode": "4413141101#06#12",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "10",
+	"XCoord": "13",
+	"SeatCode": "4413141101#06#11",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "10",
+	"XCoord": "14",
+	"SeatCode": "4413141101#06#10",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "10",
+	"XCoord": "15",
+	"SeatCode": "4413141101#06#09",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "10",
+	"XCoord": "16",
+	"SeatCode": "4413141101#06#08",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "10",
+	"XCoord": "17",
+	"SeatCode": "4413141101#06#07",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "10",
+	"XCoord": "18",
+	"SeatCode": "4413141101#06#06",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "10",
+	"XCoord": "19",
+	"SeatCode": "4413141101#06#05",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "10",
+	"XCoord": "20",
+	"SeatCode": "4413141101#06#04",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "10",
+	"XCoord": "21",
+	"SeatCode": "4413141101#06#03",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "10",
+	"XCoord": "22",
+	"SeatCode": "4413141101#06#02",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "10",
+	"XCoord": "23",
+	"SeatCode": "4413141101#06#01",
+	"Status": 0,
+	"RowNum": "6",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "11",
+	"XCoord": "10",
+	"SeatCode": "4413141101#07#14",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "11",
+	"XCoord": "11",
+	"SeatCode": "4413141101#07#13",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "11",
+	"XCoord": "12",
+	"SeatCode": "4413141101#07#12",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "11",
+	"XCoord": "13",
+	"SeatCode": "4413141101#07#11",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "11",
+	"XCoord": "14",
+	"SeatCode": "4413141101#07#10",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "11",
+	"XCoord": "15",
+	"SeatCode": "4413141101#07#09",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "11",
+	"XCoord": "16",
+	"SeatCode": "4413141101#07#08",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "11",
+	"XCoord": "17",
+	"SeatCode": "4413141101#07#07",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "11",
+	"XCoord": "18",
+	"SeatCode": "4413141101#07#06",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "11",
+	"XCoord": "19",
+	"SeatCode": "4413141101#07#05",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "11",
+	"XCoord": "20",
+	"SeatCode": "4413141101#07#04",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "11",
+	"XCoord": "21",
+	"SeatCode": "4413141101#07#03",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "11",
+	"XCoord": "22",
+	"SeatCode": "4413141101#07#02",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "11",
+	"XCoord": "23",
+	"SeatCode": "4413141101#07#01",
+	"Status": 0,
+	"RowNum": "7",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "12",
+	"XCoord": "10",
+	"SeatCode": "4413141101#08#14",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "12",
+	"XCoord": "11",
+	"SeatCode": "4413141101#08#13",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "12",
+	"XCoord": "12",
+	"SeatCode": "4413141101#08#12",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "12",
+	"XCoord": "13",
+	"SeatCode": "4413141101#08#11",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "12",
+	"XCoord": "14",
+	"SeatCode": "4413141101#08#10",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "12",
+	"XCoord": "15",
+	"SeatCode": "4413141101#08#09",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "12",
+	"XCoord": "16",
+	"SeatCode": "4413141101#08#08",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "12",
+	"XCoord": "17",
+	"SeatCode": "4413141101#08#07",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "12",
+	"XCoord": "18",
+	"SeatCode": "4413141101#08#06",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "12",
+	"XCoord": "19",
+	"SeatCode": "4413141101#08#05",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "12",
+	"XCoord": "20",
+	"SeatCode": "4413141101#08#04",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "12",
+	"XCoord": "21",
+	"SeatCode": "4413141101#08#03",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "12",
+	"XCoord": "22",
+	"SeatCode": "4413141101#08#02",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "12",
+	"XCoord": "23",
+	"SeatCode": "4413141101#08#01",
+	"Status": 0,
+	"RowNum": "8",
+	"ColumnNum": "1"
+}, {
+	"YCoord": "13",
+	"XCoord": "8",
+	"SeatCode": "4413141101#09#18",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "18"
+}, {
+	"YCoord": "13",
+	"XCoord": "9",
+	"SeatCode": "4413141101#09#17",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "17"
+}, {
+	"YCoord": "13",
+	"XCoord": "10",
+	"SeatCode": "4413141101#09#16",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "16"
+}, {
+	"YCoord": "13",
+	"XCoord": "11",
+	"SeatCode": "4413141101#09#15",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "15"
+}, {
+	"YCoord": "13",
+	"XCoord": "12",
+	"SeatCode": "4413141101#09#14",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "14"
+}, {
+	"YCoord": "13",
+	"XCoord": "13",
+	"SeatCode": "4413141101#09#13",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "13"
+}, {
+	"YCoord": "13",
+	"XCoord": "14",
+	"SeatCode": "4413141101#09#12",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "12"
+}, {
+	"YCoord": "13",
+	"XCoord": "15",
+	"SeatCode": "4413141101#09#11",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "11"
+}, {
+	"YCoord": "13",
+	"XCoord": "16",
+	"SeatCode": "4413141101#09#10",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "10"
+}, {
+	"YCoord": "13",
+	"XCoord": "17",
+	"SeatCode": "4413141101#09#09",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "9"
+}, {
+	"YCoord": "13",
+	"XCoord": "18",
+	"SeatCode": "4413141101#09#08",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "8"
+}, {
+	"YCoord": "13",
+	"XCoord": "19",
+	"SeatCode": "4413141101#09#07",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "7"
+}, {
+	"YCoord": "13",
+	"XCoord": "20",
+	"SeatCode": "4413141101#09#06",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "6"
+}, {
+	"YCoord": "13",
+	"XCoord": "21",
+	"SeatCode": "4413141101#09#05",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "5"
+}, {
+	"YCoord": "13",
+	"XCoord": "22",
+	"SeatCode": "4413141101#09#04",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "4"
+}, {
+	"YCoord": "13",
+	"XCoord": "23",
+	"SeatCode": "4413141101#09#03",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "3"
+}, {
+	"YCoord": "13",
+	"XCoord": "24",
+	"SeatCode": "4413141101#09#02",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "2"
+}, {
+	"YCoord": "13",
+	"XCoord": "25",
+	"SeatCode": "4413141101#09#01",
+	"Status": 0,
+	"RowNum": "9",
+	"ColumnNum": "1"
+}]