返回

圈子详情页 | 掘金圈子 - 基于Vue3+Vant3的网页版掘金圈子App实战项目

前端

圈子详情页:深入探索圈子

在【项目实战】基于Vue3+Vant3造一个网页版的类掘金app项目 - 圈子列表一文中,我们已经完成了圈子列表的一些基本功能。那么无论是在我加入的圈子、圈子广场还是搜索的圈子中,当点击具体某个圈子时,会进入到一个新的页面 - 圈子详情页。

如下图所示,进入到圈子详情页后首先页面顶部会展示圈子的基本信息,包括圈子头像、圈子名称、圈子简介、圈子成员数量以及圈子话题数量等。

[图片]

在圈子基本信息下方,是圈子成员列表。圈子成员列表会展示所有加入该圈子的用户,用户可以点击成员头像或名称来访问该用户的个人主页。

[图片]

在圈子成员列表下方,是圈子话题列表。圈子话题列表会展示该圈子中所有的话题,用户可以点击话题标题来查看该话题的详情。

[图片]

在圈子话题列表下方,是圈子动态列表。圈子动态列表会展示该圈子中所有成员的动态,包括发布的话题、回复的话题以及点赞的话题等。用户可以点击动态标题来查看该动态的详情。

[图片]

功能实现

圈子详情页的功能实现相对简单,主要包括以下几个部分:

  1. 圈子基本信息展示

圈子基本信息展示部分主要包括圈子头像、圈子名称、圈子简介、圈子成员数量以及圈子话题数量等。这些信息可以通过调用圈子详情接口获取。

  1. 圈子成员列表展示

圈子成员列表展示部分主要包括所有加入该圈子的用户。这些用户可以通过调用圈子成员列表接口获取。

  1. 圈子话题列表展示

圈子话题列表展示部分主要包括该圈子中所有的话题。这些话题可以通过调用圈子话题列表接口获取。

  1. 圈子动态列表展示

圈子动态列表展示部分主要包括该圈子中所有成员的动态。这些动态可以通过调用圈子动态列表接口获取。

相关代码示例

圈子详情页的相关代码示例如下:

<template>
  <div class="circle-detail">
    <div class="circle-info">
      <img class="circle-avatar" :src="circle.avatar" alt="">
      <div class="circle-name">{{ circle.name }}</div>
      <div class="circle-description">{{ circle.description }}</div>
      <div class="circle-members">{{ circle.members }} members</div>
      <div class="circle-topics">{{ circle.topics }} topics</div>
    </div>
    <div class="circle-members-list">
      <div class="circle-member" v-for="member in circle.members" :key="member.id">
        <a :href="member.url">
          <img class="circle-member-avatar" :src="member.avatar" alt="">
          <div class="circle-member-name">{{ member.name }}</div>
        </a>
      </div>
    </div>
    <div class="circle-topics-list">
      <div class="circle-topic" v-for="topic in circle.topics" :key="topic.id">
        <a :href="topic.url">
          <div class="circle-topic-title">{{ topic.title }}</div>
          <div class="circle-topic-content">{{ topic.content }}</div>
        </a>
      </div>
    </div>
    <div class="circle-activities-list">
      <div class="circle-activity" v-for="activity in circle.activities" :key="activity.id">
        <a :href="activity.url">
          <div class="circle-activity-title">{{ activity.title }}</div>
          <div class="circle-activity-content">{{ activity.content }}</div>
        </a>