从0到1:企业办公审批小程序开发笔记

可行性分析

企业办公审批小程序,适合各大公司,企业,机关部门办公审批流程,适用于请假审批,报销审批,外出审批,合同审批,采购审批,入职审批,其他审批等规划化审批流程。本系统分为管理员,员工,审批人员,三种角色;审批人员可以根据申请进行审批,并用微信消息提醒形式发送给申请者

功能设计

  • 1.发起申请: 员工填写各种申请单,包括个人资料,审批事项,附加图片,附加文档(PDF,word,ppt,excel等)。
  • 2.审批流程: 各部门具有审批权限的人员,根据本类型的审批流程(可自定义),依次对审批进行审批,并把审批结果流转到下一审批人(微信通知),如果审批不通过,则直接驳回至申请人(微信通知)
  • 3.通知提醒:向相关人员发送审批通知,包括申请提交通知、审批结果通知等,确保审批流程的及时性和透明度;
  • 4.审批人角色:可以分配不同的部门,对本部门的申请进行审批,每个部门可以设置1人或者多人具有审批权限
  • 5.审批记录与查询:记录审批流程中的每一步操作和审批结果,确保审批过程的可追溯性和安全性,员工随时查询自己的审批记录和当前审批进度。
  • 6.后台可以按时间,按状态查询审批记录,并导出记录Excel文件
  • 7.用户身份认证:后台可以添加员工白名单,只有白名单里的用户才可以正常注册,确保只有合法的员工可以提交和处理审批申请。

概要设计

在这里插入图片描述

数据库设计

FlowModel.DB_STRUCTURE = {_pid: 'string|true',FLOW_ID: 'string|true',FLOW_NO: 'int|true|default=0',FLOW_CATE_ID: 'string|true',FLOW_CATE_NAME: 'string|false',FLOW_DAY: 'string|false',FLOW_STATUS: 'int|true|default=1|comment=状态 1=审批中,8=驳回,9=完成',FLOW_DEPTS: 'array|true|default=[]|comment=审批流程',FLOW_USER_ID: 'string|true',FLOW_USER_NAME: 'string|true',FLOW_USER_DEPT: 'string|true',FLOW_FORMS: 'array|true|default=[]',FLOW_OBJ: 'object|true|default={}',FLOW_TIME: 'int|true|default=0',FLOW_TO_DEPT: 'string|true|comment=待处理的部门',FLOW_TO_NATIVE_DEPT: 'string|true|comment=待处理的部门',FLOW_TO_STEP: 'int|true|default=0|comment=待处理的步骤',FLOW_NOW_STEP: 'int|true|default=0|comment=当前步骤',FLOW_NOW_DEPT: 'string|false|comment=审批部门(不包含本部门)',FLOW_NOW_NATIVE_DEPT: 'string|false|comment=审批部门(包含本部门)',FLOW_NOW_USER_NAME: 'string|false',FLOW_NOW_USER_ID: 'string|false',FLOW_NOW_STATE: 'int|true|default=1',FLOW_LIST: 'array|true|default=[]',/*step:'int|false|default=0',dept: 'string|false',nativeDept: 'string|false',forms: 'array|false|default=[]',obj: 'object|false|default={}',time: 'int|false|default=0',userId: 'string|false',userName: 'string|false', state: 'int|false|default=1|comment=状态 1=通过 8=驳回',*/FLOW_ADD_TIME: 'int|true',FLOW_EDIT_TIME: 'int|true',FLOW_ADD_IP: 'string|false',FLOW_EDIT_IP: 'string|false',
};

核心实现

/** 浏览资讯信息 */async viewNews(id) {let fields = '*';let where = {_id: id,NEWS_STATUS: 1}let news = await NewsModel.getOne(where, fields);if (!news) return null;return news;}/** 取得分页列表 */async getNewsList({cateId, search, // 搜索条件sortType, // 搜索菜单sortVal, // 搜索菜单orderBy, // 排序 page,size,isTotal = true,oldTotal}) {orderBy = orderBy || {'NEWS_ORDER': 'asc','NEWS_ADD_TIME': 'desc'};let fields = 'NEWS_PIC,NEWS_VIEW_CNT,NEWS_TITLE,NEWS_DESC,NEWS_CATE_ID,NEWS_ADD_TIME,NEWS_ORDER,NEWS_STATUS,NEWS_CATE_NAME,NEWS_OBJ';let where = {};where.and = {_pid: this.getProjectId() //复杂的查询在此处标注PID};where.and.NEWS_STATUS = 1; // 状态 if (cateId && cateId !== '0') where.and.NEWS_CATE_ID = cateId;if (util.isDefined(search) && search) {where.or = [{ NEWS_TITLE: ['like', search] },];} else if (sortType && util.isDefined(sortVal)) {// 搜索菜单switch (sortType) {case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'NEWS_ADD_TIME');break;}case 'cateId': {if (sortVal) where.and.NEWS_CATE_ID = String(sortVal);break;}}}return await NewsModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);}  }

UI设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后台系统设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

git代码

git下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-7 二分搜索

7-7 二分搜索 分数 10 全屏浏览 切换布局 作者 王东 单位 贵州师范学院 二分搜索。 输入样例: 第一行输入一个数n,第二行输入n个数,第三行输入要查的值。 12 11 14 23 25 68 78 84 97 155 201 310 479 97输出样例: 输出ke…

云计算期末复习(3)

Amazon云计算 习题 私有IP、公有IP和弹性IP的区别在哪里? EC2的实例一旦被创建就会动态地分配公共IP地址和私有IP地址。私有IP地址由动态主机配置协议(DHCP)分配产生。 私有IP、公有IP和弹性IP的主要区别在于它们的使用场景、可达性和管理方式: 私有IP&#xff1a…

基于Flask的python后端,组合支付记录,充值余额+赠送余额+微信支付功能实现详解

手里一个项目 涉及到订单补差价的支付问题,记录下代码与逻辑 该系统基于Flask框架,并支持多种支付方式的组合,包括直接微信支付、充值账户余额支付和赠送账户余额支付。 本文将详细介绍这一差价支付功能的实现细节,代码主要包括四…

46-1 护网溯源 - 钓鱼邮件溯源

一、客户提供钓鱼邮件样本 二、行为分析 三、样本分析 对钓鱼邮件中的木马程序1111.exe文件进行了分析,提交了360安全大脑沙箱云和微步在线云沙箱。 360安全大脑沙箱云显示,该1111.exe文件存在危险,因此在解压时需要谨慎操作,以免触发木马程序。 建议使用360压缩软件进行…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始?如果从1开始不行吗? 二、ArrayList底层的实现原理是什么? ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次? 四、如何实现数组与List之间的转换? 五、ArrayList…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(三)

概述 在上一篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二) 博文中,我们介绍了如何构建一个自定义类型中“多属性”排序的通用实现。 而在本课中我们将再接再厉介绍 iOS 15+ 中新的排序机制,并简要剖析就地排序(In-place sorting)对运行性能有着怎样的显著影…

基础乐理入门

基础概念 乐音:音高(频率)固定,振动规则的音。钢琴等乐器发出的是乐音,听起来悦耳、柔和。噪音:振动不规则,音高也不明显的音。风声、雨声、机器轰鸣声是噪音,大多数打击乐器&#…

【RK3568】制作Android11开机动画

Android 开机 logo 分为两种:静态显示和动态显示。静态显示就是循环显示一张图片;动态显示就是以特定帧率顺序显示多张图片 1.准备 android logo 图片 Android logo最好是png格式的,因为同一张图片的情况下,png 格式的比 jpg和b…

线性表和链表

一,线性结构 1.Array Array文档:可以自行阅读相关文档来了解Array class array.array(typecode[, initializer]) array.append(x):添加元素到数组末尾 array.count(x):计算元素出现次数 array.extend(iterable):将迭代…

shell编程(二)——字符串与数组

本文为shell 编程的第二篇,介绍shell中的字符串和数组相关内容。 一、字符串 shell 字符串可以用单引号 ‘’,也可以用双引号 “”,也可以不用引号。 单引号的特点 单引号里不识别变量单引号里不能出现单独的单引号(使用转义符…

ChatTTS增强版V2,批量导出srt,语速控制,情感控制,支持朗读数字,问题修复

ChatTTS增强版最新版本已经发布,本次更新我主要增加了多文本批量、SRT导出、语速控制、情感控制、停顿控制等新功能,并针对上一版本中存在的数字读音异常、随机uv_break等问题进行了修复。 视频版本 【ChatTTS增强版V2,批量导出srt&#xff…

Java - Date类与Calendar类

在Java中,Date 类和 Calendar 类都被用于处理日期和时间,但它们之间存在一些重要的差异。下面是对这两个类的简要说明以及它们之间的主要区别。 Date 类 java.util.Date 类表示一个特定的时间点(精确到毫秒)。它包含自1970年1月…

Android AAudio——C API控制音频流(四)

上一篇文章我们介绍了 C API 中音频流的创建流程,以及打开音频流操作,这里我们再来看一下音频流的其他操作流程 一、音频流操作介绍 1、操作流程图 下图是状态变化流程图,虚线框表示瞬时状态,实线框表示稳定状态。 2、操作函数 上图中主要包含下面几个操作函数: aaudio…

代码随想录训练营Day30

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、重新安排行程 前言 提示:这里可以添加本文要记录的大概内容: 今天是跟着代码随想录刷题的第30天,主要是复习了回溯算法…

ubuntu上存在多个版本python,根据需要选择你想使用的python版本

文章目录 前言一、二、使用步骤总结 前言 参考1 一、 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1二、使用步骤 总结

2022 hnust 湖科大 javaweb课设 数据库课设 报告+源代码+流程图文件+课设指导书+附赠数据库课堂实验指导书

2022 hnust 湖科大 javaweb课设 数据库课设 报告源代码流程图文件课设指导书附赠数据库课堂实验指导书 描述 湖南科技大学大二下学期先后开展java web和数据库课程设计,两个课设项目可以通用,老师一般会允许自拟选题,所以在此统一打包&…

打造无障碍网络体验:Edge 浏览器代理服务器设置指南

引言 无论你是指尖飞快的技术达人,还是刚踏入IT世界的探索者,网络配置中的代理服务器设置可能都会让你掉几根头发。今天,我们聚焦的是 Microsoft Edge 浏览器中的代理服务器设置,特别是如何配置哪些地址不用通过代理服务器&#…

批量高效调整图片像素:自定义缩小bmp图片,画质优先,一键实现高效优化

图片已经成为我们生活中不可或缺的一部分。无论是社交媒体分享,还是工作文件传输,图片总是扮演着重要的角色。然而,有时候,我们可能会面临一个问题:图片像素过大,不仅占用过多的存储空间,还可能…

了解 Babel 的底层原理

1. 了解Babel的基本概念和作用 Babel 是一个 JavaScript 编译器,也是一个工具链,主要用于将 ECMAScript 2015(即ES6)代码转换为当前和旧版浏览器或环境中向后兼容的 JavaScript 版本(如ES5)。Babel 的主要…

【环境搭建】1.阿里云ECS服务器 安装jdk8

在阿里云服务器上安装 JDK 8 可以通过以下步骤完成。假设你使用的是 CentOS 或者其他基于 Red Hat 的发行版或Alibaba Cloud Linux 3.2104 LTS 64位。 1.更新系统软件包 sudo yum update -y2.安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8…