【小程序】基于云开发的微信校园约拍平台《壹瞬》

壹瞬约拍

前言

调查与发现

  • 多数大学生用微博/朋友圈约拍
  • 约拍为兼职摄影师主要收入来源之一
  • 同类型产品较少
  • 大部分同类型App定位模糊
  • 缺少合适的摄影师认证门槛
  • 成人内容擦边球

一些问题

  • 产品定位: 先例较少
  • 主打方向: 朋友圈 or 闲鱼 ? 社交工具 or 类购物平台 ?
  • 运作模式: 线上线下情况多且复杂
  • 用户群体: 仅大学生 or 允许商业工作室介入
  • 约拍方式: 自行搜索 or 智能推荐
  • 运营与保障:参考滴滴/Uber等网约平台

一些再创造(理想化)

  • 三重门槛:实名认证、在校认证、摄影水平审核
  • 社交模块:点赞、关注、私信、转发功能
  • 微交易模块:线上支付订金、线下自行协商
  • 信息拓展:支持上传个人作品集
  • 用户检索:引入风格标签、同城标签
  • 模仿豆瓣:可创建小组/发布线上线下活动

项目流程

参考文档

开发工具

  • 原型设计:墨刀
  • 程序模板:Github
  • UI样式库:WeUI
  • UI样式库:ColorUI
  • 图标库:阿里图标库
  • 开发工具:微信开发者工具
  • API文档:小程序官方文档
  • 参考教程:Github/B站/CSDN

UI设计

1
2

后台管理

  • 未进行任何优化
    1
    2

核心技术(引例)

云函数:登录捕获
const cloud = require('wx-server-sdk')
// 初始化 cloud
cloud.init()
const db = cloud.database()
/**
 * 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
 * 
 * event 参数包含小程序端调用传入的 data
 * 
 */
exports.main = async(event, context) => {
  let openId = event.userInfo.openId
  const result = await db.collection("userList").where({
    openId: openId
  }).get();
  if (result.data.length > 0) {
    return await db.collection("userList").doc(result.data._id).update({
      data: {
        avatarUrl: event.avatarUrl,
        nickName: event.nickName,
        gender: event.gender
      }
    })
  } else {
    return await db.collection("userList").add({
      data: {
        avatarUrl: event.avatarUrl,
        nickName: event.nickName,
        gender: event.gender,
        openId: openId,
        isAuth: false,
        createTime: new Date()
      }
    })
  }
}
CSS3:搜索动画
 <view id='preloader'>              //外围的圆形框定义
    <view id='loader'></view>       //内部的线条定义
</view>
#preloader {
  width: 150px;
  height: 150px;
  border-radius: 50%;
  border: 1px solid #97b2ff;
}
#loader {         //中间线条定义
  display: block;
  position: relative;
  left: 50%;
  top: 50%;
  width: 150px;
  height: 150px;
  margin: -75px 0 0 -75px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #97b2ff;
  -webkit-animation: spin 2s linear infinite;
  animation: spin 2s linear infinite;
}
#loader:before {          //通过伪类元素定义外围线条
  content: "";
  position: absolute;
  top: 5px;
  left: 5px;
  right: 5px;
  bottom: 5px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #97b2ff;
  -webkit-animation: spin 3s linear infinite;
  animation: spin 3s linear infinite;
}
#loader:after {       //通过伪类元素定义最内部线条
  content: "";
  position: absolute;
  top: 15px;
  left: 15px;
  right: 15px;
  bottom: 15px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #97b2ff;
  -webkit-animation: spin 1.5s linear infinite;
  animation: spin 1.5s linear infinite;
}

底层代码(引例)

  • userCenter.js(个人中心页面)
// pages/userCenter/userCenter.js
const app = getApp();
var that;
const db = wx.cloud.database();
Page({
  data: {
    isShow: false,
    // 显示加载更多 loading
    hothidden: true,
    userInfo: {},
    // loading
    hidden: true,
    iconList: [{
      icon: 'camerafill',
      color: 'purple',
      badge: 0,
      name: '我的约拍',
      url: '/pages/userCenter/myLaunch/myLaunch'
    }, {
      icon: 'home',
      color: 'blue',
      badge: 0,
      name: '个人主页',
      url: '/pages/userCenter/personal/personal'
    }, {
      icon: 'writefill',
      color: 'yellow',
      badge: 0,
      name: '编辑资料',
      url: '/pages/userCenter/editDetail/editDetail'
    }, {
      icon: 'share',
      color: 'olive',
      badge: 0,
      name: '分享名片',
        url: '/pages/userCenter/shareCard/shareCard'
    }, {
      icon: 'likefill',
      color: 'red',
      badge: 0,
      name: '我的收藏',
      url: '/pages/userCenter/collect/collect'
    }, {
      icon: 'edit',
      color: 'blue',
      badge: 0,
      name: '建议反馈',
      url: '/pages/userCenter/advice/advice'
    }],
    gridCol: 3,
    skin: false
  },
  //......
  })
  • userCenter.wxss(个人中心页面)
/* pages/userCenter/userCenter.wxss */
 .page__bd{
   padding-bottom: 0;
 }
.weui-media-box__thumb{
 border: 1px solid beige;
  border-radius: 50%;
}
.page {
  /* height: 100Vh;
  width: 100vw; */
}

.page.show {
  overflow: hidden;
}

.switch-sex::after {
  content: "\e716";
}

.switch-sex::before {
  content: "\e7a9";
}

.switch-music::after {
  content: "\e66a";
}

.switch-music::before {
  content: "\e6db";
}

实机演示(部分截图)

  • 核心功能:约拍信息的发布、查看、匹配等等
    1
  • 社交基本功能
    2
  • 个人中心管理
    3

项目总结

  • 本项目为小程序入门练手用途,代码部分仅供参考;
  • 大致思路已经形成,但诸多功能仍未完善,由于后期开发难度较大(画饼太大),目前处于beta搁置阶段;
  • 希望这篇文章能给刚入坑的同学一些帮助!如果能给想做校园约拍平台的同行一点新的思路更是再好不过了!
发布了17 篇原创文章 · 获赞 4 · 访问量 669

猜你喜欢

转载自blog.csdn.net/cleanlii/article/details/104190196