Bläddra i källkod

Merge branch 'master' of http://face3d.4dage.com:7005/shaogen1995/YFYC-H5 into master

shaogen1995 2 år sedan
förälder
incheckning
0cc50efc7d

BIN
src/assets/img/my/banner-bg.png


BIN
src/assets/img/my/camera.png


BIN
src/assets/img/my/food-detail-banner-bg.png


BIN
src/assets/img/my/submit.png


BIN
src/assets/img/service/avatar-default.png


BIN
src/assets/img/service/booking-check.png


BIN
src/assets/img/service/booking-result-bg.png


BIN
src/assets/img/service/date.png


BIN
src/assets/img/service/favorites.png


BIN
src/assets/img/service/food-detail-banner.png


BIN
src/assets/img/service/like.png


BIN
src/assets/img/service/mail.png


BIN
src/assets/img/service/navigation-gray.png


BIN
src/assets/img/service/people.png


BIN
src/assets/img/service/phone-gray-2.png


BIN
src/assets/img/service/share.png


BIN
src/assets/img/service/time.png


+ 106 - 0
src/components/BookingSuccess.vue

@@ -0,0 +1,106 @@
+<template>
+  <div class="booking-success">
+    <article>
+      <h1>芜湖方特</h1>
+      <div class="tip-1">预约成功</div>
+      <div class="time-summary">
+        <span class="key">预约时间:</span>
+        <span class="value">2022-05-04 17:22:35</span>
+      </div>
+      <div class="line">
+        <img class="icon" src="@/assets/img/service/date.png" alt="" draggable="false">
+        <div class="text">
+          <span class="key">预约日期:</span>
+          <span class="value">2022-05-04 周六</span>
+          </div>
+      </div>
+      <div class="line">
+        <img class="icon" src="@/assets/img/service/time.png" alt="" draggable="false">
+        <div class="text">
+          <span class="key">预约时段:</span>
+          <span class="value">10:00-11:00</span>
+        </div>
+      </div>
+      <div class="line">
+        <img class="icon" src="@/assets/img/service/people.png" alt="" draggable="false">
+        <div class="text">
+          <span class="key">参观人数:</span>
+          <span class="value">1人</span>
+        </div>
+      </div>
+      <div class="tip-2">
+        请您在规定日期时间段内进行参观
+      </div>
+    </article>
+  </div>
+</template>
+
+<style lang="less" scoped>
+.booking-success {
+  position: fixed;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.8);
+  .line {
+    display: flex;
+    align-items: flex-end;
+    margin-bottom: 6vw;
+    .icon {
+      width: 4.3vw;
+      height: 4.3vw;
+      margin-right: 2.4vw;
+    }
+    .key {
+      font-size: 3.2vw;
+      font-weight: bold;
+      color: #222222;
+    }
+    .value {
+      font-size: 3.2vw;
+      color: #222222;
+    }
+  }
+  > article {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    width: 81.9vw;
+    height: 125.4vw;
+    background-image: url(~@/assets/img/service/booking-result-bg.png);
+    background-size: cover;
+    background-repeat: no-repeat;
+    background-position: center center;
+    padding-left: 5vw;
+    padding-right: 5vw;
+    > h1 {
+      font-size: 8vw;
+      font-weight: bold;
+      color: #FFFFFF;
+      margin-top: 15vw;
+      text-align: center;
+    }
+    > .tip-1 {
+      margin-top: 20vw;
+      font-size: 6.4vw;
+      font-weight: bold;
+      color: #733634;
+    }
+    > .time-summary {
+      margin-top: 3.3vw;
+      margin-bottom: 9vw;
+    }
+    > .tip-2 {
+      position: absolute;
+      bottom: 12vw;
+      left: 50%;
+      transform: translateX(-50%);
+      white-space: pre;
+      font-size: 3.2vw;
+      color: #222222;
+    }
+  }
+}
+</style>

+ 4 - 1
src/components/TabbarSmall.vue

@@ -52,8 +52,11 @@ export default {
       font-size: 3.2vw;
       font-weight: 600;
       color: #333333;
+      &:last-of-type {
+        margin-right: initial;
+      }
       &.active {
-        font-weight: bold;
+        color: #FE6E69;
         &::after {
           content: '';
           display: absolute;

+ 33 - 3
src/router/index.js

@@ -189,6 +189,15 @@ const routes = [{
         },
         component: () => import('../views/Serve/FoodList.vue')
       },
+      {
+        path: '/layout/serve/food-detail',
+        name: 'FoodDetail',
+        meta: {
+          myInd: 2,
+          myTitle: '美食',
+        },
+        component: () => import('../views/Serve/FoodDetail.vue')
+      },
       /**
        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        */
@@ -201,15 +210,36 @@ const routes = [{
         },
         component: () => import('../views/Interact/index.vue')
       },
-
+      /**
+       * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+       */
       {
         path: '/layout/my',
         name: 'my',
         meta: {
-          myInd: 4
+          myInd: 4,
+          myTitle: '',
         },
         component: () => import('../views/My/index.vue')
-      }
+      },
+      {
+        path: '/layout/my/feedback',
+        name: 'Feedback',
+        meta: {
+          myInd: 4,
+          myTitle: '投诉建议',
+        },
+        component: () => import('../views/My/Feedback.vue')
+      },
+      {
+        path: '/layout/my/my-bookings',
+        name: 'MyBookings',
+        meta: {
+          myInd: 4,
+          myTitle: '我的预约',
+        },
+        component: () => import('../views/My/MyBookings.vue')
+      },
     ]
   },
 ]

+ 130 - 0
src/views/My/Feedback.vue

@@ -0,0 +1,130 @@
+<template>
+  <div class="feedback">
+    <div class="text-card card">
+      <div class="title-bar bar">
+        <div class="key">主题:</div>
+        <input type="text">
+      </div>
+      <textarea name="" id="" rows="8" minlength="10" maxlength="150"
+        placeholder="请填写10个字以上的描述,以便我们提供更好的帮助。"
+      ></textarea>
+    </div>
+
+    <div class="photo-card card">
+      <div class="key">
+        截图 0 / 4
+      </div>
+      <button class="input-photo">
+        <img class="" src="@/assets/img/my/camera.png" alt="" draggable="false">
+      </button>
+      <div class="phone-bar bar">
+        <div class="key">联系方式</div>
+        <input type="text" placeholder="手机号 / 邮箱">
+      </div>
+    </div>
+
+    <button class="submit">
+      <img class="" src="@/assets/img/my/submit.png" alt="" draggable="false">
+    </button>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      
+    }
+  },
+}
+</script>
+
+<style lang="less" scoped>
+.feedback {
+  background: #F5F5F5;
+  height: calc(100% - 80px);
+  overflow: auto;
+  position: relative;
+  > .card {
+    background-color: #fff;
+    margin-top: 3.2vw;
+    padding: 5vw 4.5vw 5.5vw 4.5vw;
+  }
+  .key {
+    font-size: 3.5vw;
+    font-weight: bold;
+    color: #000000;
+    line-height: 4vw;
+    margin-right: 5.3vw;
+  }
+  .bar {
+    display: flex;
+    align-items: center;
+    padding-bottom: 2.5vw;
+    border-bottom: 0.3vw solid #DCDCDC;
+  }
+  input {
+    font-size: 3.2vw;
+    color: #000000;
+    line-height: 4vw;
+  }
+
+  .text-card {
+    .title-bar {
+      .key {
+        flex: 0 0 auto;
+      }
+      input.text {
+        flex: 1 0 1px;
+      }
+    }
+    > textarea {
+      margin-top: 2.8vw;
+      width: 100%;
+      border: none;
+      resize: none;
+    }
+  }
+
+  .photo-card {
+    .key {
+    }
+    > button.input-photo {
+      margin-top: 2.8vw;
+      width: 15.5vw;
+      height: 15.5vw;
+      background: #f0f2f5;
+      border-radius: 1.3vw;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      > img {
+        width: 6.0vw;
+        height: 4.7vw;
+      }
+    }
+    .phone-bar {
+      margin-top: 13.6vw;
+      .key {
+        flex: 0 0 auto;
+      }
+      > input.text {
+        flex: 1 0 1px;
+      }
+    }
+  }
+
+  > button.submit {
+    position: absolute;
+    left: 50%;
+    bottom: 9.5vw;
+    transform: translateX(-50%);
+    width: 42.7vw;
+    height: 8vw;
+    > img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+</style>

+ 208 - 0
src/views/My/MyBookings.vue

@@ -0,0 +1,208 @@
+<template>
+  <div class="my-bookings">
+    <TabbarSmall :tabList="['全部', '活动中', '未开始', '已结束']" @change="onTabbarChange"></TabbarSmall>
+    <div class="booking-list">
+      <article
+        v-for="(item, index) in bookingList"
+        :key="index"
+        :class="{
+          disabled: !item.isActive,
+        }"
+      >
+        <div class="top-bar">
+          <div class="first-line">
+            <h2>{{item.name}}</h2>
+            <button><span>查看</span><span>→</span></button>
+          </div>
+          <div class="time-line">
+            申请时间:{{item.date}} {{item.time}}
+          </div>
+        </div>
+        <div class="rest">
+          <div class="line">
+            <img class="icon" src="@/assets/img/service/date.png" alt="" draggable="false">
+            <div class="text">
+              <span class="key">参观日期:</span>
+              <span class="value">{{item.date}}</span>
+            </div>
+          </div>
+          <div class="line">
+            <img class="icon" src="@/assets/img/service/time.png" alt="" draggable="false">
+            <div class="text">
+              <span class="key">参观时段:</span>
+              <span class="value">{{item.time}}</span>
+            </div>
+          </div>
+          <div class="line">
+            <img class="icon" src="@/assets/img/service/people.png" alt="" draggable="false">
+            <div class="text">
+              <span class="key">参观人数:</span>
+              <span class="value">{{item.peopleNum}}人</span>
+            </div>
+          </div>
+          <button class="submit">
+            {{item.isActive ? '取消预约' : '已结束'}}
+          </button>
+        </div>
+      </article>
+    </div>
+  </div>
+</template>
+
+<script>
+import TabbarSmall from "@/components/TabbarSmall.vue";
+
+export default {
+  components: {
+    TabbarSmall,
+  },
+  data() {
+    return {
+      activeTabbarIdx: 0,
+      bookingList: [
+        {
+          name: '赭山风景区',
+          date: '2022-05-04 周六',
+          time: '10:00-11:00',
+          peopleNum: 1,
+          isActive: true,
+        },
+        {
+          name: '赭山风景区',
+          date: '2022-05-04 周六',
+          time: '10:00-11:00',
+          peopleNum: 1,
+          isActive: false,
+        },
+        {
+          name: '赭山风景区',
+          date: '2022-05-04 周六',
+          time: '10:00-11:00',
+          peopleNum: 1,
+          isActive: true,
+        },
+      ],
+    }
+  },
+  methods: {
+    onTabbarChange(idx) {
+      this.activeTabbarIdx = idx
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.my-bookings {
+  background: #F5F5F5;
+  height: calc(100% - 80px);
+  overflow: auto;
+  position: relative;
+  padding: 0 4.5vw;
+  /deep/.tabbar-small {
+    > ul {
+      justify-content: space-between;
+    }
+  }
+
+  .booking-list {
+    > article.disabled {
+      > .top-bar {
+        background: #8E8E8E;
+      }
+      > .rest {
+        > button.submit {
+          background: #8E8E8E;
+        }
+      }
+    }
+    > article {
+      margin-top: 5vw;
+      margin-bottom: 5vw;
+      height: 56.8vw;
+      background: #FFFFFF;
+      box-shadow: 0px 16px 36px 0px rgba(0,0,0,0.1);
+      border-radius: 1.3vw;
+      overflow: hidden;
+      position: relative;
+      .line {
+        display: flex;
+        align-items: flex-end;
+        margin-top: 4.5vw;
+        .icon {
+          width: 4.3vw;
+          height: 4.3vw;
+          margin-right: 2.4vw;
+        }
+        .key {
+          font-size: 3.2vw;
+          font-weight: bold;
+          color: #222222;
+        }
+        .value {
+          font-size: 3.2vw;
+          color: #222222;
+        }
+      }
+
+      > .top-bar {
+        background: linear-gradient(130deg, #FF615C 0%, #FF9877 100%);
+        padding: 5.1vw 3.7vw 5.1vw;
+        > .first-line {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          > h2 {
+            font-size: 4.8vw;
+            font-weight: 600;
+            color: #FFFFFF;
+          }
+          > button {
+            padding-top: 1vw;
+            padding-bottom: 1vw;
+            font-size: 4vw;
+            color: #FFFFFF;
+            > span:nth-of-type(2) {
+              vertical-align: 0.2vw;
+            }
+          }
+        }
+        > .time-line {
+          margin-top: 2.7vw;
+          font-size: 3.2vw;
+          font-weight: 400;
+          color: #FFFFFF;
+        }
+      }
+      > .rest {
+        padding-left: 3.7vw;
+        padding-right: 3.7vw;
+        display: flex;
+        flex-direction: column;
+        justify-content: space-evenly;
+        > .line {
+          > img.icon {
+          }
+          > .text {
+            > .key {
+            }
+            > .value {
+            }
+          }
+        }
+        > button.submit {
+          position: absolute;
+          width: 21.6vw;
+          height: 6.4vw;
+          background: linear-gradient(130deg, #FF615C 0%, #FF9877 100%);
+          border-radius: 0.5vw;
+          bottom: 5.6vw;
+          right: 4vw;
+          font-size: 3.2vw;
+          color: #FFFFFF;
+        }
+      }
+    }
+  }
+}
+</style>

+ 162 - 6
src/views/My/index.vue

@@ -1,5 +1,33 @@
 <template>
-<div class='tab1'>我的</div>
+<div class="mine">
+  <img src="@/assets/img/my/banner-bg.png" alt="" class="bg">
+  <div class="top">
+    <img src="@/assets/img/service/avatar-default.png" alt="" class="avatar">
+    <div class="name">芜湖印象</div>
+  </div>
+  <div class="statistics"
+  >
+    <div
+      v-for="(item, index) in statisticsList"
+      :key="index"
+    >
+      <div class="key">{{item.key}}</div>
+      <div class="value">{{item.value || '-'}}</div>
+    </div>
+  </div>
+  <ul class="entry-list">
+    <li
+      class="entry"
+      v-for="(item, index) in entryList"
+      :key="index"
+      @click="item.fn"
+    >
+      <img class="icon" :src="item.icon" alt="" draggable="false">
+      <div class="name">{{item.name}}</div>
+      <img src="@/assets/img/service/arrow-gray-blunt.png" alt="" class="arrow">
+    </li>
+  </ul>
+</div>
 </template>
 
 <script>
@@ -7,14 +35,60 @@
 export default {
 components: {},
 data() {
-return {
-
-};
+  return {
+    statisticsList: [
+      {
+        key: '点赞数',
+        value: '',
+      },
+      {
+        key: '分享数',
+        value: '',
+      },
+      {
+        key: '收藏数',
+        value: '',
+      },
+      {
+        key: '积分数',
+        value: '',
+      },
+    ],
+    entryList: [
+      {
+        icon: require('@/assets/img/service/like.png'),
+        name: '我的点赞',
+      },
+      {
+        icon: require('@/assets/img/service/share.png'),
+        name: '我的分享',
+      },
+      {
+        icon: require('@/assets/img/service/favorites.png'),
+        name: '我的收藏',
+      },
+      {
+        icon: require('@/assets/img/service/mail.png'),
+        name: '投诉建议',
+        fn: this.onClickFeedback,
+      },
+      {
+        icon: require('@/assets/img/service/booking-check.png'),
+        name: '我的预约',
+        fn: this.onClickMyBookings,
+      },
+    ]
+  }
 },
 computed: {},
 watch: {},
 methods: {
-
+  onClickFeedback() {
+    this.$router.push({name: 'Feedback'})
+  },
+  onClickMyBookings() {
+    this.$router.push({name: 'MyBookings'})
+  }
 },
 created() {
 
@@ -31,6 +105,88 @@ destroyed() {}, //生命周期 - 销毁完成
 activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
 }
 </script>
-<style lang='less' scoped>
 
+<style lang='less' scoped>
+.mine {
+  padding-left: 4.7vw;
+  padding-right: 4.7vw;
+  position: relative;
+  height: calc(100% - 80px);
+  overflow: auto;
+  > img.bg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    z-index: -1;
+  }
+  > .top {
+    margin-top: 17vw;
+    display: flex;
+    align-items: center;
+    > img.avatar {
+      margin-left: 5.2vw;
+      margin-right: 4vw;
+      width: 16vw;
+      height: 16vw;
+      border-radius: 8vw;
+    }
+    > .name {
+      font-size: 4.8vw;
+      font-weight: bold;
+      color: #FFFFFF;
+    }
+  }
+  > .statistics {
+    margin: 3.7vw 4.7vw 0 4.7vw;
+    height: 20vw;
+    background: #FCFCFC;
+    box-shadow: 0vw 0.5vw 1.1vw 0vw rgba(255,198,190,0.4);
+    border-radius: 1.6vw;
+    display: flex;
+    justify-content: space-evenly;
+    align-items: center;
+    > div {
+      text-align: center;
+      > .key {
+        font-size: 3.5vw;
+        font-weight: bold;
+        color: #787777;
+        margin-bottom: 4vw;
+      }
+      > .value {
+        font-size: 3.5vw;
+        font-weight: bold;
+        color: #959595;
+      }
+    }
+  }
+  > ul.entry-list {
+    margin-top: 9vw;
+    > li {
+      display: flex;
+      align-items: center;
+      height: 13.5vw;
+      border-bottom: 1px solid #E5E5E5;
+      &:last-of-type {
+        border-bottom: initial;
+      }
+      > img.icon {
+        width: 5.3vw;
+        height: 5.3vw;
+        margin-right: 2.7vw;
+      }
+      > .name {
+        font-size: 3.2vw;
+        font-weight: bold;
+        color: #545454;
+      }
+      > img.arrow {
+        margin-left: auto;
+        width: 2.3vw;
+        height: 4vw;
+      }
+    }
+  }
+}
 </style>

+ 311 - 0
src/views/Serve/FoodDetail.vue

@@ -0,0 +1,311 @@
+<template>
+  <div class="food-detail">
+    <img src="@/assets/img/my/food-detail-banner-bg.png" alt="" class="banner-bg">
+    <div class="banner-card">
+      <h2>美食店铺名称(仁和新街点)</h2>
+      <div class="star">
+        <img
+          v-for="n in 5"
+          :key="n"
+          src="@/assets/img/service/star.png" alt="" class="star"
+        >
+        5
+      </div>
+      <div class="tag-list">
+        <div class="tag">
+          菜系标签
+        </div>
+        <div class="tag">
+          评价标签
+        </div>
+        <div class="tag">
+          其他标签
+        </div>
+      </div>
+      <img src="@/assets/img/service/food-detail-banner.png" alt="" class="shop-banner">
+      <div class="bottom-bar">
+        <div class="left">
+          <img src="@/assets/img/service/address-gray.png" alt="" class="icon">
+          <div class="address">鸠江区仁和路和兴街S12栋S110号</div>
+        </div>
+        <div class="right">
+          <button class="nav">
+            <img class="" src="@/assets/img/service/navigation-gray.png" alt="" draggable="false">
+            导航
+          </button>
+          <button class="phone">
+            <img class="" src="@/assets/img/service/phone-gray-2.png" alt="" draggable="false">
+            电话
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <div class="content-card">
+      <div class="top-line">
+        <div class="title">推荐菜</div>
+        <button>
+          更多  》
+        </button>
+      </div>
+      <div class="swiper-container-food">
+        <div class="swiper-wrapper">
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【古建筑】.png" alt="">
+            <div class="title-wrap">
+              <h4>美食名称</h4>
+            </div>
+          </div>
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【快速浏览】.png" alt="">
+            <div class="title-wrap">
+              <h4>美食名称</h4>
+            </div>
+          </div>
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【西洋建筑】.png" alt="">
+            <div class="title-wrap">
+              <h4>美食名称</h4>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <div class="content-card">
+      <div class="top-line">
+        <div class="title">周边景点</div>
+        <button>
+          更多  》
+        </button>
+      </div>
+      <div class="swiper-container-attractions">
+        <div class="swiper-wrapper">
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【古建筑】.png" alt="">
+            <div class="title-wrap">
+              <h4>景点名称</h4>
+            </div>
+          </div>
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【快速浏览】.png" alt="">
+            <div class="title-wrap">
+              <h4>景点名称</h4>
+            </div>
+          </div>
+          <div class="swiper-slide">
+            <img src="@/assets/img/service/【西洋建筑】.png" alt="">
+            <div class="title-wrap">
+              <h4>景点名称</h4>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import Swiper from "../../assets/libs/swiper.js";
+
+export default {
+  mounted() {
+    this.$nextTick(() => {
+      new Swiper(".swiper-container-food", {
+        slidesPerView: 1.4,
+        spaceBetween: 15,
+        centeredSlides: true,
+      })
+    })
+
+    this.$nextTick(() => {
+      new Swiper(".swiper-container-attractions", {
+        slidesPerView: 2.3,
+        spaceBetween: 15,
+        centeredSlides: true,
+      })
+    })
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.food-detail {
+  position: relative;
+  height: calc(100% - 80px);
+  overflow: auto;
+  background: #F0F0F0;
+  z-index: 0;
+  
+  > img.banner-bg {
+    position: absolute;
+    top: 0;
+    width: 100%;
+    z-index: -1;
+  }
+  
+  > .banner-card {
+    background: #FFFFFF;
+    box-shadow: 0vw 0vw 0.9vw 0vw rgba(192,192,192,0.51);
+    border-radius: 1.3vw;
+    margin-top: 13.3vw;
+    margin-left: 2.8vw;
+    margin-right: 2.8vw;
+    padding: 3.5vw 3.2vw 3vw 3.2vw;
+    > h2 {
+      font-size: 4.8vw;
+      font-weight: bold;
+      color: #000000;
+      margin-bottom: 2.3vw;
+    }
+    > .star {
+      display: flex;
+      font-size: 3.2vw;
+      font-weight: bold;
+      color: #e6271d;
+      margin-bottom: 3vw;
+      > img.star {
+        width: 3vw;
+        height: 3vw;
+        margin-right: 1vw;
+      }
+    }
+    > .tag-list {
+      margin-bottom: 2.1vw;
+      > .tag {
+        padding-left: 2.3vw;
+        padding-right: 2.3vw;
+        padding-top: 1vw;
+        padding-bottom: 1vw;
+        display: inline-block;
+        background: #DDC49C;
+        border-radius: 0.5vw;
+        margin-right: 2.1vw;
+        font-size: 3.2vw;
+        font-weight: bold;
+        color: #483515;
+      }
+    }
+    > img.shop-banner {
+      width: 100%;
+      border-radius: 2.1vw;
+    }
+    > .bottom-bar {
+      margin-top: 3.3vw;
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-end;
+      > .left {
+        > img.icon {
+          width: 3.1vw;
+          height: 3.9vw;
+          margin-right: 0.8vw;
+          vertical-align: middle;
+        }
+        > .address {
+          display: inline-block;
+          vertical-align: middle;
+          font-size: 3.5vw;
+          font-weight: bold;
+          color: #787878;
+        }
+      }
+      > .right {
+        > button {
+          font-size: 2.9vw;
+          font-weight: bold;
+          color: #787878;
+          display: inline-flex;
+          flex-direction: column;
+          align-items: center;
+          &:nth-of-type(1) {
+            margin-right: 5.5vw;
+          }
+          > img {
+            display: block;
+            width: 5.3vw;
+            height: 5.3vw;
+            margin-bottom: 0.8vw;
+          }
+        }
+      }
+    }
+  }
+
+  > .content-card {
+    background-color: #fff;
+    margin-top: 5vw;
+    padding-top: 6vw;
+    padding-bottom: 7.5vw;
+    > .top-line {
+      padding-left: 4.7vw;
+      padding-right: 4.7vw;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      > .title {
+        font-size: 3.5vw;
+        font-weight: bold;
+        color: #000000;
+      }
+      > button {
+        font-size: 2.7vw;
+        font-weight: 600;
+        color: #333333;
+        padding-top: 1vw;
+        padding-bottom: 1vw;
+      }
+    }
+    > .swiper-container-food {
+      margin-top: 5vw;
+      overflow: hidden;
+      > .swiper-wrapper {
+        > .swiper-slide {
+          width: 82.8vw;
+          height: 53.2vw;
+          background: #F7F8FA;
+          > img {
+            width: 100%;
+            height: 40.7vw;
+            object-fit: cover;
+          }
+          > .title-wrap {
+            > h4 {
+              text-align: center;
+              margin-top: 4vw;
+              font-size: 3.2vw;
+              font-weight: bold;
+              color: #333333;
+            }
+          }
+        }
+      }
+    }
+    > .swiper-container-attractions {
+      margin-top: 5vw;
+      overflow: hidden;
+      > .swiper-wrapper {
+        > .swiper-slide {
+          width: 43.6vw;
+          height: 55vw;
+          background: #F7F8FA;
+          > img {
+            width: 100%;
+            height: 44.5vw;
+            object-fit: cover;
+          }
+          > .title-wrap {
+            > h4 {
+              text-align: center;
+              margin-top: 3vw;
+              font-size: 3.2vw;
+              font-weight: bold;
+              color: #333333;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 1 - 1
src/views/Serve/FoodList.vue

@@ -174,7 +174,7 @@ export default {
     margin-left: 4vw;
     overflow: auto;
     > article {
-      width: 44vw;
+      width: 43vw;
       padding-bottom: 2.7vw;
       margin-bottom: 4vw;
       margin-right: 4vw;;