book-field.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <view class="book-field">
  3. <z-date-slide :dataList="headerList" @getDateInfo="getDateInfo" @getDateRange="getDateRange"></z-date-slide>
  4. <view style="height: 10rpx;"></view>
  5. <view class="book-field_item mlr-30 mt-25" v-for="(item,index) in dataList" :key="index" v-if="item.list&&item.list.length>0">
  6. <view class="flex-n fac">
  7. <view class="book-field_item_name line-1">{{item.houseName}}</view>
  8. <view class="book-field_item_more" v-if="item.num<item.list.length" @click="lookMore(index)">· 更多</view>
  9. </view>
  10. <view class="book-field_item_card shadow-2 plr-25 ptb-20">
  11. <view class="book-field_item_container">
  12. <view class="plr-20 item_card_content" :class="[{'item_card_order_state_1':itm.orderState=='02'},{'item_card_order_state_2':itm.orderState=='01'},{'item_card_order_state_3':itm.orderState=='03'}]" :style="{'grid-column':'span '+item.width}"
  13. v-for="(itm,idx) in item.list" :key="idx" v-if="idx<item.num" @click="gotoDetail(itm.id)">
  14. <view class="item_card_content_name">{{itm.customName}}</view>
  15. <view class="item_card_content_time nowarp">{{itm.activityBeginTime}}-{{itm.activityEndTime}}</view>
  16. <view class="item_card_content_state line-1" v-if="itm.mainPayType!='03'">{{itm.packageName||'未选套餐'}}{{itm.paycontent?('['+itm.paycontent+']'):''}}</view>
  17. <view class="item_card_content_state line-1" v-else>{{itm.paycontent}}</view>
  18. <!-- &&itm.orderTypeId=='6' -->
  19. <image v-if="itm.isWedding=='1'" class="item_card_content_img" :src="itm.hasWedding=='1'?'../../../static/xi2.png':'../../../static/xi1.png'"></image>
  20. </view>
  21. </view>
  22. </view>
  23. </view>
  24. <z-nodata class="mt-100" v-if="nodata"></z-nodata>
  25. <u-toast ref="uToast"></u-toast>
  26. </view>
  27. </template>
  28. <script>
  29. const app = getApp({
  30. allowDefault: true
  31. });
  32. export default {
  33. name: 'book-list',
  34. props: {
  35. refresh: Boolean
  36. },
  37. data() {
  38. return {
  39. dataList: [],
  40. headerList: [],
  41. daterange: [],
  42. date: '',
  43. nodata:false
  44. }
  45. },
  46. watch: {
  47. refresh(newval, oldval) {
  48. if (newval) {
  49. this.pageNum=1;
  50. this.dataList=[];
  51. this.bookList(this.date);
  52. this.bookHeader(this.daterange[0].date, this.daterange[6].date)
  53. }
  54. }
  55. },
  56. methods: {
  57. //获取预定表头
  58. bookHeader(startTime, endTime) {
  59. var houseTypeIds = uni.getStorageSync('searchField')||[];
  60. this.$axios.post('app/order/orderCalendarHeader', {
  61. "storeId": uni.getStorageSync('storeId'),
  62. "startTime": startTime,
  63. "endTime": endTime,
  64. "houseTypeIds": houseTypeIds,
  65. }).then(res => {
  66. console.log('预定表头', res)
  67. var data = res.data.list;
  68. var headerList = [];
  69. for (var i in data) {
  70. headerList.push({
  71. record: data[i].record,
  72. isImportant: data[i].importantDates.length > 0 ? true : false
  73. });
  74. }
  75. this.headerList = headerList;
  76. }).catch(err => {
  77. this.$refs.uToast.error(err.msg)
  78. })
  79. },
  80. //获取预定列表
  81. bookList(date) {
  82. console.log(date)
  83. var houseTypeIds = uni.getStorageSync('searchField')||[];
  84. this.$axios.post('app/order/orderList', {
  85. "storeId": uni.getStorageSync('storeId'),
  86. "customName": "",
  87. "phone": "",
  88. "startTime": date,
  89. "endTime": date,
  90. "houseId": "",
  91. "houseTypeIds": houseTypeIds,
  92. "confirmState": "-1",
  93. "pageNum": "1",
  94. }).then(res => {
  95. console.log('预定列表',res)
  96. // this.dataList = res.data.list;
  97. var dataList=[];
  98. if(res.data.total==0){
  99. this.nodata=true;
  100. }else{
  101. this.nodata=false;
  102. }
  103. for(var i in res.data.list){
  104. var text=res.data.list[i].activityBeginTime.split(':')
  105. res.data.list[i].beginTimeContent=text[0]+''+text[1];
  106. }
  107. dataList=res.data.list;
  108. dataList.sort(function(a,b){
  109. return Number(a.beginTimeContent) - Number(b.beginTimeContent)
  110. })
  111. console.log('排序后的',dataList)
  112. this.getHouseDataList(dataList);
  113. }).catch(err => {
  114. this.$refs.uToast.error(err.msg);
  115. uni.hideLoading();
  116. })
  117. },
  118. getHouseDataList(dataList){
  119. this.$axios.post('app/house/houseList',{
  120. storeId:uni.getStorageSync('storeId')
  121. }).then(res=>{
  122. console.log('场地列表',res.data)
  123. console.log(dataList)
  124. var houseList=res.data.list;
  125. for(var i in houseList){
  126. this.dataList.push({houseName:houseList[i].houseName});
  127. this.dataList[i].list=[];
  128. for(var j in dataList){
  129. //同厅
  130. if(houseList[i].id==dataList[j].houseId){
  131. this.dataList[i].list.push(dataList[j])
  132. }
  133. }
  134. }
  135. for(var i in this.dataList){
  136. var length=this.dataList[i].list.length,num=12;
  137. if (length == 1) {
  138. num= 12;
  139. }
  140. if (length == 2) {
  141. num= 6;
  142. }
  143. if (length == 3) {
  144. num= 4;
  145. }
  146. if (length > 3) {
  147. num= 3;
  148. }
  149. this.dataList[i].width=num;
  150. this.dataList[i].num=length>3?4:num;
  151. for(var k in this.dataList[i].list){
  152. var paycontent='';
  153. if(this.dataList[i].list[k].mainPayType=='03'){
  154. paycontent +='包场地'
  155. if(this.dataList[i].list[k].payTypes.length>1){
  156. paycontent +='['
  157. }
  158. }
  159. for(var j in this.dataList[i].list[k].payTypes){
  160. if(this.dataList[i].list[k].payTypes[j].payTypeCode=='01'){
  161. paycontent +=(this.dataList[i].list[k].payTypes[j].orderCount||0)+'人、'
  162. }
  163. if(this.dataList[i].list[k].payTypes[j].payTypeCode=='02'){
  164. paycontent +=(this.dataList[i].list[k].payTypes[j].orderCount||0)+'桌、'
  165. }
  166. }
  167. if(paycontent.length>0){
  168. paycontent=paycontent.substring(0,paycontent.length-1);
  169. }
  170. if(this.dataList[i].list[k].mainPayType=='03'&&this.dataList[i].list[k].payTypes.length>1){
  171. paycontent +=']'
  172. }
  173. this.dataList[i].list[k].paycontent=paycontent.length>0?paycontent:''
  174. }
  175. }
  176. console.log(this.dataList)
  177. uni.hideLoading();
  178. }).catch(err=>{
  179. uni.hideLoading();
  180. // this.$refs.uToast.error(err.msg)
  181. })
  182. },
  183. lookMore(index){
  184. var data=this.dataList[index];
  185. data.num +=4;
  186. this.dataList.splice(index,1,data);
  187. // this.$set(this.dataList[index],'num',this.dataList[index].num+4)
  188. console.log('22',this.dataList[index])
  189. // this.dataList[index].num=this.dataList[index].num+4;
  190. },
  191. getDateInfo(date) {
  192. console.log(date)
  193. uni.showLoading({
  194. title:'加载中…',
  195. });
  196. this.$emit('getDateInfo', date);
  197. this.bookList(date.date)
  198. this.date=date.date;
  199. },
  200. getDateRange(daterange) {
  201. this.bookHeader(daterange[0].date, daterange[6].date);
  202. this.daterange = daterange;
  203. },
  204. gotoDetail(id) {
  205. uni.navigateTo({
  206. url: '../detail/index?id='+id
  207. })
  208. }
  209. }
  210. }
  211. </script>
  212. <style lang="scss" scoped>
  213. .book-field {
  214. .book-field_item {
  215. .book-field_item_card {
  216. width: 640rpx;
  217. margin: 0 auto;
  218. margin-top: 25rpx;
  219. }
  220. .book-field_item_name {
  221. color: #888888;
  222. font-size: 24rpx;
  223. }
  224. .book-field_item_more {
  225. color: #2481EE;
  226. font-size: 24rpx;
  227. text-indent: 16rpx;
  228. }
  229. .book-field_item_container {
  230. justify-content: center;
  231. display: grid;
  232. // grid-auto-flow:column;
  233. grid-gap: 10rpx;
  234. grid-template-rows: 120rpx;
  235. grid-template-columns: repeat(12, calc(530rpx / 12));
  236. .item_card_content {
  237. font-size: 25rpx;
  238. line-height: 25rpx;
  239. height: 114rpx;
  240. position: relative;
  241. .item_card_content_name {
  242. color: #333333;
  243. font-size: 24rpx;
  244. margin-top: 14rpx;
  245. font-weight: 500;
  246. }
  247. .item_card_content_time {
  248. color: #666666;
  249. transform: scale(0.72);
  250. transform-origin: left center;
  251. margin-top: 14rpx;
  252. }
  253. .item_card_content_state {
  254. color: #666666;
  255. transform: scale(0.72);
  256. width: calc(100% / 0.72);
  257. transform-origin: left center;
  258. }
  259. .item_card_content_img {
  260. width: 40rpx;
  261. height: 40rpx;
  262. position: absolute;
  263. right: 5rpx;
  264. top: 5rpx;
  265. }
  266. }
  267. .item_card_order_state_1 {
  268. background: #BCDAFF;
  269. border-top: 6rpx solid #2C8BFF;
  270. }
  271. .item_card_order_state_2 {
  272. background: #D8C9FC;
  273. border-top: 6rpx solid #9164F7;
  274. }
  275. .item_card_order_state_3 {
  276. background: #e6e6e6;
  277. border-top: 6rpx solid #c1c1c1;
  278. }
  279. }
  280. }
  281. }
  282. </style>