#云开发挑战赛#-中北请假助手-田园创新队
发布于 4 年前 作者 guoping 2962 次浏览 来自 分享

应用场景

为了解决高校请假事务管理手段落后,各学院之间的统一和协调工作需要耗费人力物力,学校处理效率较低的问题,方便快捷地处理高校学生请假事务,而且能够充分利用高校校园覆盖广阔的校园网络和几乎人手一部的学生智能终端设备等资源,可节约高校基础建设成本,促进高校学生事务管理的信息化,从而提高高校学生工作的办公效率.。在此提出了基于工作流技术的请假审批方法,讨论了基于工作流的请假审批系统的设计过程,包括需求分析,系统功能模块设计以及工作流引擎的设计。在开发过程中用自研框架作为工作流引擎,腾讯云数据库作为后台数据的依赖。

目标用户

因为高校教师常常事物缠身导致请假一直来是高校同学中的难点和痛点,我们的小程序为高校中不想额外下载APP或在电脑网页上请假不方便的同学提供了一种良好的解决方案。

实现思路

架构图

系统架构图

业务ER架构图

效果截图

为了良好的交互效果,我们团队决定使用 Color-UI 作为样式库。

接下来是我的作品的展示,更多内容可以通过视频文件查看。

功能代码展示

众所周知,开发效率是开发过程中的一道难题,为了提高开发效率,我们在小程序文档原有基础上开发了一套统一风格的 API 调用接口,极大的增加了我们的开发效率。

// common.js
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

exports.main = async (event, context) => {

  const wxContext = cloud.getWXContext()
  const appid = wxContext.APPID
  const openid = wxContext.OPENID

  const serviceName = event.serviceName
  const serviceOperation = event.serviceOperation
  const serviceData = event.serviceData
  serviceData.openid = openid

  try {
    if (serviceOperation === 'add') {
      return await db.collection(serviceName).add({
        data: serviceData
      })
    }

    if (serviceOperation === 'remove') {
      return await db.collection(serviceName).where({
        id: serviceData.id
      }).remove()
    }

    if (serviceOperation === 'update') {
      return await db.collection(serviceName).where({
        id: serviceData.id
      }).update({
        data: serviceData
      })
    }

    if (serviceOperation === 'get') {
      if (serviceData.id) {
        const promise = db.collection(serviceName).where({
          id: serviceData.id
        }).get()
        const tasks = []
        tasks.push(promise)
        return (await Promise.all(tasks)).reduce((acc, cur) => {
          return {
            data: acc.data.concat(cur.data),
            errMsg: acc.errMsg,
          }
        })
      } else {
        const MAX_LIMIT = 100
        const countResult = await db.collection(serviceName).count()
        const total = countResult.total
        const batchTimes = Math.ceil(total / MAX_LIMIT)
        const tasks = []
        for (let i = 0; i < batchTimes; i++) {
          const promise = db.collection(serviceName).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
          tasks.push(promise)
        }
        return (await Promise.all(tasks)).reduce((acc, cur) => {
          return {
            data: acc.data.concat(cur.data),
            errMsg: acc.errMsg,
          }
        })
      }
    }
  } catch (e) {
    return {
      erre
    }
  }

  return {
    // appidappid,
    openidopenid,
    serviceNameserviceName,
    serviceOperationserviceOperation,
    serviceDataserviceData,
    supportOperation: ['add', 'get', 'remove', 'update']
  }
}

作品体验二维码(如已上线)



团队简介

田园创新技术团队以小程序技术研究为基础,参与到中北二龙山小程序的开发,团队成员团结一心,共创辉煌。

回到顶部