跳转至

前端

架构设计

前端架构图

功能设计

导航栏

  • Logo 和主页按钮,可从任意页面跳转至主页。
  • 未登录状态下:登录按钮,可跳转至登录/注册页面。
  • 登录状态下:用户头像按钮,提供多项常用操作的悬浮菜单,并跳转至相应页面,包括【上传图片】、【查看图片任务】、【进入个人主页】、【私信】、【用户登出】等功能。

主页

  • 图片轮播走马灯,可展示精选的优质图片。
  • 搜索框,可针对图片标题、上传者、分类、标签分别搜索。
  • 图片个性推荐列表,可根据登录用户的浏览、搜索等行为个性化推荐图片。
  • 仪表板,包括【创作中心】、【社区】、【关于我们】三个模块,提供作品数、关注数、粉丝数的数据展示,以及【上传图片】、【管理作品】、【私信】、【分享】等功能的跳转按钮。

搜索

  • 搜索对象选择框,可针对图片标题、上传者、分类、标签分别搜索。
  • 搜索框,在空状态下可显示搜索历史和搜索热词,在用户输入后可根据输入的内容给出搜索推荐。
  • 搜索模式选择框,可选择搜索采用的匹配模式,包括精确、部分、模糊、关联、正则。
  • 筛选器,可根据图片的高度、宽度、时长、分类、标签对搜索结果进行筛选。
  • 搜索结果采用瀑布流式加载,图片支持先低分辨率、后高分辨率加载。
  • 搜索结果图片支持批量下载和批量分享。

图片

  • 图片展示卡片,显示图片内容、标题、分类、标签、尺寸、时长等信息,其中标签和分类可点击跳转至相应的图片搜索结果页。
  • 上传者展示卡片,显示上传者用户名和头像,实现了上传者主页的跳转按钮,关注按钮。
  • 图片点赞、下载、分享按钮。
  • 图片管理卡片,用户可对自己的上传图片进行【修改分类和标签】、【添加水印】、【删除】操作。
  • 图片评论区,支持发表评论、删除评论、点赞评论、楼中楼等功能。
  • 上传图片,支持普通上传、压缩上传、上传视频转 GIF。
  • 图片任务处理列表,【添加水印】、【压缩上传】、【视频转码】三种操作采用非阻塞式设计,用户执行操作将会提交任务至后台执行。用户可通过定时更新的任务列表查看任务的处理进度。

用户

  • 友好的注册/登录页面。
  • 用户名、头像、邮箱、个性签名、注册时间的展示,关注按钮和私信按钮。
  • 全部上传图片的展示,支持对上传作品进行批量删除操作。
  • 浏览历史,采用瀑布流式加载。
  • 关注、粉丝列表,采用瀑布流式加载。
  • 友好的个人信息修改页面,支持修改头像、个性签名、密码。

私信和通知

  • 支持创建会话和发送消息,支持历史消息的瀑布流式加载。
  • 新消息支持通过 Web Notifications 进行系统通知。
  • 关注的作者上传新图片后推送通知。

实现

utils/

  • contexts.ts

    提供用户登录信息、用户头像信息的上下文管理。

    使用 creatContext 定义了如下变量:

    变量名 类型 功能
    UserInfoContext UserInfoHandler 用户登录状态的管理
    UserAvatarContext UserAvatarHandler 用户头像信息的管理
  • Network.ts

    网络请求配置和相关的功能函数。

    变量:

    变量名 类型 功能
    service AxiosInstance 全局网络请求配置

    函数:

    函数名 返回 功能
    request Promise<T> 生成通用网络请求
    参数名 类型 意义
    url string 请求 URL
    method HTTP method 请求方法
    handler UserInfoHandler 用户登录信息
    data any 请求体
    options any 请求附加选项
  • request.ts

    前端用到的所有网络请求的进一步封装。

pages/

  • _app.tsx`

    Next.js 的 App 组件,用于跨页面的用户登录状态管理以及页面切换时保持布局的持久化。

    Context.Provider 组件:

    组件名 功能
    UserInfoContext.Provider 提供用户登录状态上下文
    UserAvatarContext.Provider 提供用户头像信息上下文
  • _document.tsx

    自定义的 Next.js Document,定义了网页标题、图标、加载动画等。

  • index.tsx

    主页。

  • login.tsx

    用户登录页面。

  • search.tsx

    搜索结果页面。

  • task.tsx

    图片处理任务管理页面。

  • image/

    • [id].tsx:图片详情页面,动态路由[id]对应图片 ID。
    • upload.tsx:图片上传页面。
  • user/[id]/

    动态路由[id]对应用户 ID。

    • index.tsx:用户主页。

    • [tab].tsx

      tab 页面
      未提供 路由至 user/index.tsx,对应用户主页
      works 用户作品页面
      history 浏览历史页面
      settings 用户信息修改页面
  • signup/

    • index.tsx :用户注册页面。
    • success.tsx:注册成功页面,提示用户检查激活邮件。
    • verify.tsx:邮箱验证成功页面。
  • message/

    • index.tsx:消息中心主页,显示会话列表和空的聊天窗口。
    • [id].tsx:私信页面,动态路由 [id] 对应聊天对象的用户 ID。

components/

  • carousel.tsx

    图片轮播走马灯组件。

  • comlist.tsx

    评论区组件。

  • dyntag.tsx

    支持动态增删的标签组件。

  • footer.tsx

    全局页脚组件。

  • header.tsx

    全局页眉导航栏组件。

  • image.tsx

    • ImageMetadataCard :图片信息展示卡片。
    • ImageContentCard :图片内容卡片,包含分类、标题、标签的展示和点赞、下载、分享的功能按钮。
    • ImagePreviewCard:图片预览卡片。
    • ImagePreviewListInner:图片预览卡片组成的列表,用于主页、用户页、搜索结果页的多图展示。
  • layout.tsx

    全局排版组件。

  • likes.tsx

    点赞功能组件。

  • logo.tsx

    Logo 展示组件。

  • message.tsx

    私信消息组件。

  • notfound.tsx

    not found 页面的显示组件。

  • notification.tsx

    web notification 权限设置和通知组件。

  • search.tsx

    • CategorySelect :图片分类选择组件。
    • SearchBox:通用的搜索框组件。
    • SearchFilter:搜索筛选器组件。
  • sider.tsx

    侧边栏组件。

  • user.tsx

    • UserAvatarUserAvatarCardUserAvatarBanner :用户头像及相关信息的展示组件。
    • UserProfileCard :用户信息展示卡片。
    • UserFollowListUserFollowCard:用户粉丝、关注列表组件。
    • UserWorkdsCarousel:用户作品轮播走马灯组件。
    • UserWorksCard:用户作品展示列表。
    • UserHistoryCard:浏览历史展示列表。
    • UserProfileSettingCard:用户头像、个性签名修改卡片。
    • UserPasswordSettingCard:用户密码修改卡片。