#小程序云开发挑战赛#-同学在哪儿-你说的都队
发布于 4 年前 作者 tangyong 2233 次浏览 来自 分享

「同学在哪儿」是一个地图小程序,可以在地图上查看班级同学的毕业去向以及地域分布,多联(蹭)系(饭)

作品简介

「同学在哪儿」是一个地图小程序,用户可以创建班级,同学通过填写自己的毕业去向,就可以加入班级,并查看其他的同学的毕业位置去向。小程序的初衷就是希望能够将同学们联系的更加紧密,等到一个陌生的城市,打开这个小程序,可以直接找到能够联(蹭)络(饭)的人。

目标用户

即将毕业、或者已经毕业的学生群体。

实现思路

产品设计

项目的灵感来源于自己的一个 idea,这是我来到初次来到杭州实习的一个感受。刚来的那几天,迫切地想知道有没有同学在杭州。因此有了这样的一个 idea。做一个分布地图,让我能直接在地图上知道大家目前所在的位置以及目前的状态,是在工作 or 在学习。

在网上查了相关信息,没有类似的产品,而知乎上有相关的提问需求,因此也坚定了我做这个产品的信念。

这是最初的一个手稿:

之后学习了 Sketch,将这个手稿用 Skech 进行完善,这是小程序的设计稿:「同学在哪儿」小程序设计稿

这篇文章介绍了我的一个产品设计的相关理念以及思路:一个 Weekend Project 引发的产品设计思考

产品开发

小程序使用 Taro 框架,利用小程序云开发存储数据并进行前后台交互。整个开发周期约 2 周,并于 8 月中旬上线,中间经历了几次小型的迭代。

整体的构架如下图所示:

前端

小程序的前端页面使用 Taro 框架进行开发,Taro 是一个开放式跨端跨框架解决方案,使用 React 的语法,可以编译出微信、QQ 等平台的小程序。

前端最主要做的就是页面的展示、模块的拆分,项目的大致目录如下:

.
├── app.scss
├── app.tsx
├── assets
├── components
├── constants
├── index.html
├── pages
├── styles
└── utils

其中利用组件化的思想,将一些模块拆分成可复用的组件,例如小程序的弹窗、标签、按钮、提示框等等。

这里我并没有完全使用 Taro-UI,因为引入后会大大增加小程序的体积。大部分的 UI 都是纯手写,通过 SCSS 这类的预编译样式,利用变量、继承、mixin 等一些特性,我可以很方便的抽离出一套属于自己的样式。

// theme.scss
$primary-color: #2F54EB;
$hover-primary-color: #1d39c4;
$second-color: #ADC6FF;
$tag-bg-color: #D6E4FF;

$primary-text-color: #303030;
$second-text-color: #666666;
$grey: #AAAAAA;
$light-grey: #DDDDDD;

$shadow-color: rgba(0,0,0,0.08);
$radius: 12px;

// mixin.scss
[@mixin](/user/mixin) flex($dir: row, $main: start, $cross: flex-start) {
  display: flex;
  flex-direction: $dir;
  justify-content: $main;
  align-items: $cross;
}

小程序的页面和组件都是函数式的,比较轻量级,通过 Taro 提供的 hooks,可以达到与原生小程序一样的生命周期。

import './index.scss'

interface IAvatarProps {
  image: string
  radius: number
  border?: number  
}

function Avatar (props: IAvatarProps) {
  const { image, radius, border} = props
  
  useDidShow(() => {
  })
  
  return (
    <View className='avatar_container'> 
    </View>
  )
}

export default Avatar

云开发

云开发其实就是一套完 Serverless 服务,来降低开发者的成本。目前云开发和小程序结合,可以简化复杂的登录授权、消息订阅、支付等能力。

「同学在哪儿」小程序的所有后台能力都是使用云开发来完成,云函数处理用户的请求逻辑、查询数据、内容合法检测等等,云存储存放用户上传的照片以及头像。

云函数中使用到了 tcb-router 这个轻量级类路由库,可以用于优化服务端函数处理逻辑。比如可以在一个云函数里面,分别对某一个数据库进行__增删改查__。

exports.main = async (event) => {
  const {OPENID} = cloud.getWXContext()
	const app = new TcbRouter({ event })
  const collection = 'info'
  const { info } = event
  app.use(async (ctx, next) => {
		ctx.data = {}
		await next()
  });
  // 添加一条记录
  app.router('add', async (ctx, next) => {
    const now = Date.now()
    const data = await db.collection(collection).add({
      data: {...info, openId: OPENID, createTime: now, updateTime: now}
    })
		ctx.body = { data }
  })
  // 修改个人信息
  app.router('update', async (ctx, next) => {
    const now = Date.now()
    const data = await db.collection(collection).where({
      openId: OPENID
    }).update({
      data: {
        ...info,
        updateTime: now
      }
    })
		ctx.body = { data }
  })
  // 获取个人信息
  app.router('get', async (ctx, next) => {
    const { data } = await db.collection(collection).where({
      openId: OPENID
    }).get()
		ctx.body = { data }
  })
	return app.serve()
}

功能介绍

首页

创建班级

首页可以直接创建班级,填写好相关的信息。如果取消勾选「允许被搜索」选项,用户只能通过分享进入。

信息准确无误后,跳转到创建成功的页面,这时候就可以将创建的班级分享出去。

加入班级

将班级分享到班级群,同学输入正确口令即可加入。

已加入的班级会在首页显示,长按可以退出班级。

完善信息

在加入班级前,会跳转到完善信息的页面,需要同学填好毕业去向以及联系方式,方便其他同学可以及时联系。

个人信息只能被同一班级的同学查看。如需修改信息,可在首页点击头像跳转到修改页。

查看分布地图

如果已经加入一个班级,可以在班级详情页面点击「查看分布地图」按钮,进入到地图页面。

点击具体的头像可以查看更多详细的信息,也可以一键联系对方。

作品体验二维码

视频介绍

「同学在哪儿」视频介绍

团队介绍

阿远:来自关山口男子职业技术学校,性别男,爱好音乐和足球,脑子里时不时会有些灵光一现的想法。

8 回复

感觉像是同学录。

请问文章怎么添加目录啊

我就提一个点。。。。你在参赛项目添加广告会不会不太好

我有几个问题……

1.如果同学不手动加入,那么是不是就永远不会有他的位置信息?

2.如果同学不进入小程序刷新自己的位置,那么是不是位置信息永远不会变?

3.……算了,没什么,抛开实用性来说,感觉还是不错的

请学会如何「提问」(👈戳我)【个体工商户】微信认证问题(👈戳我)

i了i了,界面做的真的好看😃

感觉这个程序好棒

珍爱生命 远离编程

回到顶部