【Vue3.0移动端项目--旅游网】-- 房东评价、热门评论、预定须知模块

简介: 【Vue3.0移动端项目--旅游网】-- 房东评价、热门评论、预定须知模块

新建 detail 分支


通过 Git 管理项目,养成良好的开发习惯,可以创建分支。最后开发完可以合并分支。

1.创建新分支并且跳转到改分支上

git checkout -b detail02

2.查看分支

git branch

image.png

房东介绍模块


完整代码:

<template>
  <div class="landlord">
    <DetailSection
      title="房东介绍"
      more-text="查看房东主页"
    >
      <div class="header">
        <div class="left">
          <div class="avatar">
            <img :src="landlord.hotelLogo">
          </div>
          <div class="info">
            <div class="name">{{landlord.hotelName}}</div>
            <div class="tags">
              <template
                v-for="(item,index) in landlord.hotelTags"
                :key="index"
              >
                <div class="item">
                  <span>{{item.tagText.text}}</span>
                  <span
                    class="diliver"
                    v-if="index !==landlord.hotelTags.length -1"
                  >|</span>
                </div>
              </template>
            </div>
          </div>
        </div>
        <div class="right">
          <div class="contact">
            联系房东
          </div>
        </div>
      </div>
      <div class="bootom">
        <template
          v-for="(item,index) in landlord.hotelSummary"
          :key="index"
        >
          <div class="item">
            <div class="title">{{item.title}}</div>
            <div class="score">{{ item.introduction }}</div>
            <div class="desc">{{ item.tip }}</div>
          </div>
        </template>
      </div>
    </DetailSection>
  </div>
</template>
<script setup>
import DetailSection from "@/components/detail-section/detail-section.vue";
const props = defineProps({
  landlord: {
    type: Object,
    default: () => ({})
  }
})
</script>
<style lang="less" scoped>
.landlord {
  .header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 6px 0;
    .left {
      display: flex;
      .avatar {
        img {
          width: 54px;
          height: 54px;
        }
      }
      .info {
        margin: 0px 6px;
        .name {
          font-size: 16px;
          font-weight: 800;
        }
        .tags {
          display: flex;
          margin: 6px 0px;
          color: #9d9d9d;
          .item {
            .diliver {
              margin: 5px;
            }
          }
        }
      }
    }
    .right {
      height: 24px;
      line-height: 24px;
      border-radius: 5px;
      padding: 0 12px;
      font-size: 12px;
      color: #fff;
      background-image: linear-gradient(90deg, #38b0de, #97cbff);
    }
  }
  .bootom {
    display: flex;
    justify-content: space-between;
    margin: 20px 4px;
    .item {
      font-size: 14px;
      .title {
        color: #999;
      }
      .score {
        margin: 5px 0;
        font-size: 18px;
        font-weight: 700;
        color: #333;
      }
      .desc {
        color: #666;
      }
    }
  }
}
</style>

效果:

微信图片_20221012145857.png

热门评论模块


完整代码:

<template>
  <div class="comment">
    <DetailSection
      title="热门评论"
      :more-text="`查看全部${comment.totalCount}条评论`"
    >
      <div class="comment-inner">
        <div class="header">
          <div class="left">
            <div class="score">
              <span class="text">{{comment.overall}}</span>
              <div class="line"></div>
            </div>
          </div>
          <div class="info">
            <div class="title">{{comment.scoreTitle}}</div>
            <div class="count">{{comment.totalCount}}条评论</div>
            <div class="star">
              <van-rate
                v-model="comment.overall"
                color="#38B0DE"
                size="14"
                readonly
                allow-half
              />
            </div>
          </div>
          <div class="right">
            <template
              v-for="(item,index) in comment.subScores"
              :key="index"
            >
              <span class="item">{{item}}</span>
            </template>
          </div>
        </div>
        <div class="tags">
          <template
            v-for="(item,index) in comment.commentTagVo"
            :key="index"
          >
            <span
              class="item"
              :style="{ color: item.color, background: item.backgroundColor }"
            >{{item.text}}</span>
          </template>
        </div>
        <div class="content">
          <div class="user">
            <div class="avatar">
              <img :src="comment.comment.userAvatars" />
            </div>
            <div class="profile">
              <div class="name">{{comment.comment.userName}}</div>
              <div class="date">{{comment.comment.checkInDate}}</div>
            </div>
          </div>
          <div class="text">{{comment.comment.commentDetail}}</div>
        </div>
      </div>
    </DetailSection>
  </div>
</template>
<script setup>
import DetailSection from "@/components/detail-section/detail-section.vue";
const props = defineProps({
  comment: {
    type: Object,
    default: () => ({})
  }
})
</script>
<style lang="less" scoped>
.comment-inner {
  padding: 10px 0;
  .header {
    display: flex;
    .left {
      display: flex;
      align-items: center;
      .score {
        width: 65px;
        height: 100%;
        color: #333;
        position: relative;
        .text {
          font-size: 48px;
          font-weight: 600;
          position: relative;
          z-index: 9;
        }
        .line {
          width: 65px;
          height: 6px;
          border-radius: 10px;
          background-color: #38b0de;
          position: absolute;
          z-index: 5;
        }
      }
    }
    .info {
      margin: 5px 20px;
      align-items: center;
      color: #333;
      .count {
        margin: 5px 0;
        color: #999;
      }
    }
    .right {
      display: flex;
      flex-wrap: wrap;
      flex: 1;
      justify-content: flex-end;
      .item {
        margin: 0 5px;
        font-size: 14px;
        color: #666;
      }
    }
  }
  .tags {
    display: flex;
    flex-wrap: wrap;
    margin: 10px 0;
    .item {
      padding: 3px 5px;
      margin-right: 8px;
      margin-top: 5px;
      border-radius: 8px;
      font-size: 14px;
    }
  }
  .content {
    border-radius: 8px;
    background-color: #fcfcfc;
    .user {
      display: flex;
      padding: 5px 0;
      .avatar {
        padding-top: 8px;
        padding-left: 8px;
        img {
          width: 44px;
          height: 44px;
          border-radius: 50%;
        }
      }
      .profile {
        padding-top: 8px;
        margin-left: 12px;
        .date {
          margin-top: 3px;
          color: #999;
        }
      }
    }
    .text {
      font-size: 14px;
      line-height: 18px;
      margin-top: 16px;
    }
  }
}
</style>

效果:

微信图片_20221012150002.png

预定须知


完整代码:

<template>
  <div class="notice">
    <DetailSection title="预定须知">
      <div class="notice-inner">
        <template
          v-for="(item,index) in orderRules"
          :key="index"
        >
          <div class="item">
            <span class="title">{{item.title}}</span>
            <span class="intro">{{ item.introduction }}</span>
            <span
              class="tip"
              v-if="item.tips"
            >查看说明</span>
          </div>
        </template>
      </div>
    </DetailSection>
  </div>
</template>
<script setup>
import DetailSection from "@/components/detail-section/detail-section.vue";
const props = defineProps({
  orderRules: {
    type: Array,
    default: []
  }
})
</script>
<style lang="less" scoped>
.notice-inner {
  .item {
    display: flex;
    margin: 10px 0 20px 2px;
    font-size: 14px;
    .title {
      width: 64px;
      color: #333;
    }
    .intro {
      flex: 1;
      color: #333;
    }
  }
}
</style>

效果:

微信图片_20221012150051.png

Git 管理和代码托管(github)


1.添加到暂存区

git add .

2.添加到仓库

git commit -m "detail03分支"

3.推送代码

git push -u origin detail03

4.将本地的 detail03 分支 合并到主分支上master (注意要先切换在主分支上)

git checkout mater

5.分支合并

git merge detail03

6.更新远程仓库 detail03分支

git push

7.删除 detail03 分支

git branch -d detail03

微信图片_20221012150437.png

相关文章
|
29天前
|
JavaScript 容器
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
149 2
|
20天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
6天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
18天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
23天前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
20 7
|
19天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
23天前
|
JavaScript 前端开发 编译器
在 Vue 项目中使用 ES 模块格式的优点
【10月更文挑战第20天】在 Vue 项目中使用 ES 模块格式具有众多优点,这些优点共同作用,使得项目能够更高效、更可靠地开发和运行。当然,在实际应用中,还需要根据项目的具体情况和需求进行合理的选择和配置。
25 6
|
19天前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
19天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
28天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
65 3