摘 要
随着企业信息化建设的不断推进,传统的职工投票方式逐渐无法满足现代企业对高效、便捷、数据准确性的需求。基于微信小程序的企业职工投票系统,利用微信小程序的普及性和便捷性,提供了一种全新的投票解决方案。该系统通过Node.js作为后端开发框架,结合数据库技术实现了对投票活动的高效管理。系统主要包括管理员、管理用户和员工用户三大角色,每个角色具有不同的操作权限。管理员通过后台管理系统对投票主题、投票活动、投票记录、统计数据等进行管理;管理用户则负责创建和管理投票活动,查看统计数据并进行记录查询;员工用户可以参与投票、查看企业资讯、公告以及投票结果,提供了一个用户友好的界面和流畅的使用体验。系统通过微信小程序与后端的联动,确保了数据的实时更新和投票结果的即时统计,同时具备了信息安全保障措施,确保投票数据的保密性和完整性。
本系统的设计与实现,能够有效提升企业内部投票活动的参与度和管理效率,为企业决策提供数据支持,具有较高的应用价值。
关键词:微信小程序,企业职工,投票系统,Node.js,系统设计
Abstract
With the continuous advancement of enterprise informatization construction, traditional employee voting methods are gradually unable to meet the modern enterprise's needs for efficiency, convenience, and data accuracy. The enterprise employee voting system based on WeChat mini program provides a new voting solution by utilizing the popularity and convenience of WeChat mini program. The system utilizes Node.js as the backend development framework and combines database technology to achieve efficient management of voting activities. The system mainly includes three roles: administrator, management user, and employee user, each with different operational permissions. Administrators manage voting topics, voting activities, voting records, statistical data, etc. through the backend management system; Managing users is responsible for creating and managing voting activities, viewing statistical data, and conducting record queries; Employee users can participate in voting, view company information, announcements, and voting results, providing a user-friendly interface and smooth user experience. The system ensures real-time updates of data and real-time statistics of voting results through the linkage between WeChat mini programs and the backend. At the same time, it has information security measures to ensure the confidentiality and integrity of voting data.
The design and implementation of this system can effectively enhance the participation and management efficiency of internal voting activities in enterprises, provide data support for enterprise decision-making, and have high application value.
Keywords: WeChat Mini Program, Enterprise Employees, Voting System, Node.js, systems design
目录
第1章引言
1.1研究背景与意义
在现代企业的管理中,职工的意见和建议是推动企业持续发展的重要因素。企业决策不仅仅依赖于高层管理者的判断,更需要广泛吸纳来自员工的反馈和意见。传统的投票方式存在一定的局限性,如操作繁琐、时间和空间的限制,无法充分调动员工的参与积极性,也无法及时获取反馈数据。随着信息技术的不断发展,尤其是移动互联网和社交媒体的广泛应用,企业职工投票系统的建设逐渐成为提升员工参与度和决策透明度的重要手段。
微信小程序作为一种轻量级的应用,具备高用户渗透率和便捷性,成为企业在信息化建设中不可忽视的工具。通过微信小程序,员工可以随时随地参与投票,企业能够高效地收集员工意见,并实时统计投票结果,确保决策的公正性和透明度。Node.js作为一种高效的后端开发框架,能够处理高并发请求,确保系统在访问量较大时依然保持稳定运行。同时,Node.js支持多种数据库和服务的集成,使得系统的数据处理和管理更加便捷。
在企业职工投票系统的设计与实施过程中,不仅提高了投票活动的效率和准确性,还增强了企业内部信息流通的透明性,提升了员工对公司管理的信任感和参与感。通过系统化的投票管理,企业能够及时了解员工的需求和意见,做出更加科学合理的决策,从而推动企业文化建设和整体发展。
1.2国内外研究现状
随着企业管理模式的不断创新和信息技术的快速发展,职工投票系统逐渐成为提高员工参与感和决策透明度的重要工具。国内外关于企业职工投票系统的研究经历了从传统投票方式到信息化、数字化投票系统的转变。国外在企业职工投票系统的研究和应用上起步较早,许多发达国家的企业已经通过互联网技术为员工提供了更加便捷和高效的投票平台。例如,一些跨国公司通过电子投票系统实现了全球范围内员工意见的快速收集和反馈,这些系统通常具备多种功能,如投票统计、结果分析和意见反馈等,极大地提升了企业决策的透明度和员工的参与度。
在国内,随着信息化建设的推进,越来越多的企业开始尝试采用微信小程序等移动平台,结合互联网技术进行职工投票管理。尤其是在大型企业和国有企业中,职工投票系统逐渐成为日常管理的重要组成部分。这些系统不仅提高了投票活动的参与度,还有效减少了人工管理成本。国内的一些研究主要集中在投票系统的设计与实现、数据安全性和投票过程的透明度等方面。此外,随着员工对企业管理模式要求的不断提升,国内的研究也在不断深入,越来越多的学者开始关注如何通过技术手段提升投票结果的公正性和数据的有效性。
总体而言,虽然国内外的研究都在不断推进,技术的应用也在逐步完善,但在一些特定的行业和企业中,职工投票系统的普及程度和应用效果仍存在一定差异。未来,随着技术的不断发展和企业需求的多样化,职工投票系统的功能和应用场景将会更加丰富,为企业管理提供更加精准的决策依据。
1.3论文组成结构
论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对系统需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:
第一章:引言。第一章主要介绍了课题研究的背景和意义,系统开发的国内外研究现状和本文的组成结构。
第二章:开发工具及相关技术介绍。主要介绍系统开发所采用的工具和技术。
第三章:系统需求分析。主要从系统的用户、功能等方面进行需求分析。
第四章:系统设计。主要对系统框架、系统功能模块、数据库进行功能设计。
第五章:系统实现。主要介绍了系统框架搭建、系统界面的实现。
第六章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
第七章:总结与展望。
第2章相关技术介绍
2.1Express介绍
Express是目前流行的基于Node.js运行环境的Web应用程序开发框架,它简洁且灵活,为Web应用程序提供了强大的功能。Express提供了一个轻量级模块,类似于jQuery(封装的工具库),它把Node.js的HTTP模块的功能封装在一个简单易用的接口中,用于扩展HTTP模块的功能,能够轻松地处理服务器的路由、响应、Cookie和HTTP请求的状态[1]。
Express的优势:
(1)简洁的路由定义方式。
(2)简化HTTP请求参数的处理。
(3)提供中间件机制控制HTTP请求。
(4)拥有大量第三方中间件。
(5)支持多种模版引擎。
2.2Node.js介绍
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。
Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用[2]。
2.3MySQL数据库
MySQL是一种开源关系型数据库管理系统,广泛应用于Web应用和企业级数据存储。MySQL支持结构化查询语言,允许开发者通过标准语句进行数据的创建、读取、更新和删除操作[3]。数据库通过表格形式组织数据,支持数据完整性和约束条件的定义。MySQL的存储引擎机制使得用户可以根据具体需求选择不同的存储引擎,以优化性能和功能。
MySQL具有高性能和可扩展性,支持大规模数据存储和高并发访问。系统提供了丰富的用户权限管理和数据加密安全特性。MySQL能够与多种编程语言和框架兼容,广泛应用于内容管理系统、电子商务平台和数据分析等各种场景。
2.4JavaScript 运行模式
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的[4]。
是一种解释性脚本语言(代码不进行预编译)。
主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离[5]。
跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)[6]。
JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
2.5B/S框架
B/S(Browser/Server)架构是一种基于浏览器和服务器的系统架构模式,用户通过浏览器与服务器进行交互。B/S架构简化了客户端的部署和管理,用户无需在本地安装复杂的软件,只需使用标准浏览器即可访问应用程序。服务器端负责处理业务逻辑和数据存储,客户端则主要负责展示用户界面和数据交互[7]。B/S架构的设计使得系统更新和维护集中在服务器端,降低了维护成本。
B/S架构通常采用Web技术进行实现,包括HTML、CSS和JavaScript等。用户在浏览器中发起请求,服务器响应并返回数据。数据传输通常通过HTTP或HTTPS协议进行,B/S架构的灵活性使其适用于在线购物、信息管理系统和社交网络等各类应用场景[8]。由于其易于扩展性,B/S架构可以方便地支持大规模用户访问,适应不断变化的业务需求。
微信开发者工具是一款专为小程序开发而设计的应用,它不断改进,提供了便捷的操作方式,并且在开发过程中可以通过微信扫描二维码来访问,从而实现快速、准确的小程序开发和调试。
根据用户的需求,我们将采用不同的屏幕大小来制作小程序。
在完成了视图布置之后,可以通过执行编辑功能,快速更改当前的视图界面。
控制台:方便调试打印输出信息。
将代码上传至腾讯服务器,并在审核过程中填写版本号和备注信息,以确保代码的安全性和准确性。
通过查看资源文件,我们可以快速地调整相关项目的文件目录,从而实现断点调试。
使用远程调试技术,无论是在手机端还是PC端,都能够轻松地进行开发工作。
本地数据存储:显示的是本地存储的数据。
通过使用子父层级结构,我们可以更容易地进行视图调试。
微信的代码体积应该保持在2M 以内,而且在开发过程中,应该严格检查合法域名信息,并且为小程序的后台配置服务器域名。
微信开发者工具已经成为了开发过程中不可或缺的一部分,并且正在不断地改进和完善。=
这款微信小程序的设计旨在帮助用户快速、便捷地创建出一款拥有完全独特 特色的应用。它由一套完善的框架结构,将用户界面、操作界面、功能界面等多种功能完美结合,使用户只需要一点点的操作,就能轻松实现微信小程序的创建。框架的核心功能是一个快速的数据绑定机制,它能够轻松地将用户的信息和界面进行一致性的管理。它不仅支持对用户信息的实时监控,还能够根据用户的需求,实现对界面的快速调整和优化,从而使用户能够轻松地构建强大的微信小程序。
第3章系统分析
3.1可行性分析
开发任何一个系统,都要对其可行性进行分析,对其时间和资源上的限制进行考虑,这样可以减少系统开发的风险。同时,分析之后不仅能够合理的运用人力,还能在各方面资源的消耗上得到节省。下面就对技术、经济和操作三个方面来介绍。
3.1.1技术可行性
企业职工投票系统具有较高的技术可行性。首先,Node.js作为一种高效的服务器端运行环境,具备非阻塞I/O和事件驱动的特性,能够在高并发情况下保持系统的高性能,适应企业职工投票系统的实时数据处理需求。Express框架简化了Web应用的开发,提供了灵活的路由和中间件支持,确保了后台逻辑的快速实现。MySQL作为成熟的关系型数据库,能够高效地管理和查询大量的数据,保证了数据的完整性与一致性。通过这些技术的结合,系统能够提供稳定、可靠的服务,同时具有良好的扩展性和维护性,满足企业职工投票系统未来的增长需求。
3.1.2经济可行性
企业职工投票系统在经济上具有较高的可行性。采用Node.js和Express框架进行开发,可以大大减少开发时间和人力成本,同时由于这两者都是开源技术,避免了昂贵的商业软件授权费用。MySQL作为一款广泛应用的开源数据库,其成本较低且支持高效的数据管理,能够满足系统的存储需求而不增加额外开销。此外,系统的模块化设计与高效的性能支持,意味着平台能够处理大量用户和租赁数据,提升运营效率,进而降低了后期维护和扩展的成本。因此,从初期开发到长期运营,系统的经济性都表现出较强的竞争力,为企业职工投票系统提供了低成本、高回报的解决方案。
3.1.3操作可行性
企业职工投票系统在操作上具有较高的可行性。首先,Node.js和Express框架的广泛应用使得开发人员能够快速上手,开发周期短且易于维护。系统采用的前后端分离架构,前端与后端通过API进行高效通信,简化了操作流程,提升了用户体验。同时,MySQL数据库的管理和查询操作直观且稳定,能够保证数据的准确性和实时性。对于管理员和用户而言,系统界面设计简洁直观,操作流程清晰,且通过权限控制,确保了不同角色的操作权限。系统的可扩展性和易于升级的特性,也为后期操作的灵活调整提供了保障。因此,该系统在日常操作中具备高效、稳定且易于管理的特点,确保了平台的顺利运行。
综上所述,企业职工投票系统在技术、经济、操作三个方面都是完全可行的。
3.2系统功能需求
在系统开发设计前,应该对功能做初步设想,清楚这个管理系统有什么板块,每个板块有什么功能,整体的设计是否满足使用者的需求,接着对所开发的系统功能进行的详细分析总结,从而设计出完整的系统并将其实现。用户与开发人员的交流分析,使其达到最佳理解程度,使系统功能达到最佳。
员工用户用例图如下所示。

图3-1 员工用户用例图
管理员用例图如下所示。

图3-2 管理员用例图
管理用户用例图如下所示。

图3-3 管理用户用例图
通过对用例图的分析和调查,根据本系统的实际需要,从用户角度提出需求功能如下:
1. 员工用户功能描述
员工用户通过微信小程序可轻松访问系统,查看企业最新资讯和公告,参与当前的投票活动。员工可通过“我的”页面管理个人收藏、评论、统计和投票记录,及时了解自己在各项投票中的表现和投票结果,同时接收到关于系统更新和活动提醒的通知。通过这一系列功能,员工能够便捷地参与公司决策,并获得与公司相关的重要信息,增强了员工的参与感和企业文化的凝聚力。
2.管理员功能描述
管理员可以通过后台首页实时查看系统的整体概况,管理系统用户信息,进行部门分类的设置和调整。管理员还可以管理投票主题的创建和投票活动的安排,确保投票活动有序进行。除此之外,管理员可以查看并管理投票记录,实时监控投票情况,还能够进行详细的投票统计分析,以便生成数据报告。通知提醒管理功能帮助管理员及时向用户推送系统更新和投票相关的提醒信息。此外,系统管理部分,包括轮播图和网站公告的管理,进一步提升了系统的可操作性和用户体验。管理员还可以管理企业资讯及其分类,确保企业内部信息的及时传递。
3.管理用户功能描述
管理用户可以通过后台首页对系统进行概览,进行部门分类和投票主题的设置与管理,安排投票活动并跟踪其进展。管理用户还能够查看和管理投票记录,实时掌握投票活动的参与情况,并通过投票统计管理获取相关数据分析,支持科学决策。通知提醒管理功能确保管理用户及时接收到系统和投票活动的相关通知,方便其高效进行日常工作。
3.3系统性能需求
评判一个系统好坏的一项重要指标就是性能,下面是对此系统的一些性能进行阐述。
1.系统的安全性和稳定性: 企业职工投票系统在管理权限上有着严格的控制,即想登录此平台进行操作,则必须要有操作权限,没有权限的用户是不可能登录平台查看任何的信息和数据,从而确保了系统的安全性。
2.数据的完整性和准确性:第一个是各项记录信息的完整性,信息记录的内容可以为空;第二个是各项信息数据之间相互联系的准确性;第三个是数据在不同记录信息的一致性
3.用户操作系统简单方便:在系统开发中按照“简单易用”的原则,能够使用户对系统的使用一目了然,既能保证用户使用,同时又能保证维护人员方便维护。
3.4.1系统开发流程
企业职工投票系统开发时,首先进行需求分析,进而对系统进行总体的设计规划,设计系统功能模块,数据库的选择等,本系统的开发流程如图3-4所示。

图3-4系统开发流程图
3.4.2用户登录流程
为了保证系统的安全性,要使用本系统对系统信息进行管理,必须先登陆到系统中。如图3-5所示。

图3-5 登录流程图
3.4.3系统操作流程
用户打开并进入系统后,会先显示登录界面,输入正确的用户名和密码,系统自动检测信息,若信息无误,则用户会进入系统功能界面,进行操作,否则会提示错误无法登录,操作流程如图3-6所示。

图3-6 系统操作流程图
3.4.4添加信息流程
管理员可以进行信息的添加,用户也可以对自己权限内的信息进行添加,输入信息后,系统会自行验证输入的信息和数据,若信息正确,会将其添加到数据库内,若信息有误,则会提示重新输入信息,添加信息流程如图3-7所示。

图3-7 添加信息流程图
3.4.5修改信息流程
管理员可以进行信息修改,用户也可以对自己权限内的信息进行修改,首先进入修改信息界面,输入修改信息数据,系统进行数据的判断验证,修改信息合法则修改成功,信息更新至数据库,信息不合法则修改失败,重新输入。修改信息流程图如图3-8所示。

图3-8 修改信息流程图
3.4.6删除信息流程
管理员可以进行信息删除,对要删除的信息进行选中后,点击删除按钮,系统会询问是否确定,若点击确定,则系统会删除掉选中的信息,并在数据库内对信息进行删除,删除信息流程图如图3-9所示。

图3-9 删除信息流程图
第4章系统设计
4.1系统体系结构
企业职工投票系统选择B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式。适合在互联网上进行操作,只要用户能连网,任何时间、任何地点都可以进行系统的操作使用。系统工作原理图如图4-1所示:

图4-1 系统工作原理图
其最终前后台交互原理如图4-2所示。

图4-2前后台交互原理
具体交互流程为:浏览器中执行具体操作,操作命令将生成一个do方法。该方法使得浏览器能够访问后台中的Controller层,Controller层由于业务上的需要执行进而访问Service层。Service层收到指令后将会去调用内部DAO层的接口。接口将会和MyBatis层下的一个SQL语句相对接。对接好之后进而访问MySql数据库。更新底层数据,然后将数据同步回MyBatis层,同步变化后的数据将通过DAO层接口,Service层和后台Controller层,直观反映到浏览器页面上。
4.2总体结构设计
企业职工投票系统的整体结构设计如下图所示。

图4-3系统功能结构图
4.3数据库设计
在进行数据库设计时,概念设计帮助明确系统的整体结构和需求。在这一阶段,需要确定实体、属性以及它们之间的关系,为后续的数据库表设计奠定基础。接下来,将深入探讨数据库表设计的具体细节,实现更高效的数据存储和管理。
4.3.1概念设计
概念设计是数据库设计的第一步,其主要目标是对系统的数据需求进行全面的理解和抽象[9]。在这一阶段,通过建立实体-关系模型(ER模型)来识别系统中的关键实体、属性及其相互关系。概念设计的输出是一个清晰的ER图,作为后续数据库表设计的基础。以下将展示系统的全局E-R图。

图4-4数据库E-R图
4.3.2数据库表设计
这一阶段的重点是将概念模型转换为实际的数据库结构,包括表的创建、字段的定义及数据类型的选择。每个实体通常对应于数据库中的一张表,而实体的属性则转化为表的列[10]。以下是系统的数据库表设计展示。
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | token_id | int | 是 | 是 | 临时访问牌ID | |
| 2 | token | varchar | 64 | 否 | 否 | 临时访问牌 |
| 3 | info | text | 65535 | 否 | 否 | 信息 |
| 4 | maxage | int | 是 | 否 | 最大寿命:默认2小时 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 7 | user_id | int | 是 | 否 | 用户编号 |
表 4-2-article(文章)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | article_id | mediumint | 是 | 是 | 文章id | |
| 2 | title | varchar | 125 | 是 | 是 | 标题 |
| 3 | type | varchar | 64 | 是 | 否 | 文章分类 |
| 4 | hits | int | 是 | 否 | 点击数 | |
| 5 | praise_len | int | 是 | 否 | 点赞数 | |
| 6 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 7 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 8 | source | varchar | 255 | 否 | 否 | 来源 |
| 9 | url | varchar | 255 | 否 | 否 | 来源地址 |
| 10 | tag | varchar | 255 | 否 | 否 | 标签 |
| 11 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 12 | img | varchar | 255 | 否 | 否 | 封面图 |
| 13 | description | text | 65535 | 否 | 否 | 文章描述 |
表 4-3-article_type(文章分类)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | type_id | smallint | 是 | 是 | 分类ID | |
| 2 | display | smallint | 是 | 否 | 显示顺序 | |
| 3 | name | varchar | 16 | 是 | 否 | 分类名称 |
| 4 | father_id | smallint | 是 | 否 | 上级分类ID | |
| 5 | description | varchar | 255 | 否 | 否 | 描述 |
| 6 | icon | text | 65535 | 否 | 否 | 分类图标 |
| 7 | url | varchar | 255 | 否 | 否 | 外链地址 |
| 8 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 9 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-4-auth(用户权限管理)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | auth_id | int | 是 | 是 | 授权ID | |
| 2 | user_group | varchar | 64 | 否 | 否 | 用户组 |
| 3 | mod_name | varchar | 64 | 否 | 否 | 模块名 |
| 4 | table_name | varchar | 64 | 否 | 否 | 表名 |
| 5 | page_title | varchar | 255 | 否 | 否 | 页面标题 |
| 6 | path | varchar | 255 | 否 | 否 | 路由路径 |
| 7 | parent | varchar | 64 | 否 | 否 | 父级菜单 |
| 8 | parent_sort | int | 是 | 否 | 父级菜单排序 | |
| 9 | position | varchar | 32 | 否 | 否 | 位置 |
| 10 | mode | varchar | 32 | 是 | 否 | 跳转方式 |
| 11 | add | tinyint | 是 | 否 | 是否可增加 | |
| 12 | del | tinyint | 是 | 否 | 是否可删除 | |
| 13 | set | tinyint | 是 | 否 | 是否可修改 | |
| 14 | get | tinyint | 是 | 否 | 是否可查看 | |
| 15 | field_add | text | 65535 | 否 | 否 | 添加字段 |
| 16 | field_set | text | 65535 | 否 | 否 | 修改字段 |
| 17 | field_get | text | 65535 | 否 | 否 | 查询字段 |
| 18 | table_nav_name | varchar | 500 | 否 | 否 | 跨表导航名称 |
| 19 | table_nav | varchar | 500 | 否 | 否 | 跨表导航 |
| 20 | option | text | 65535 | 否 | 否 | 配置 |
| 21 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 22 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-5-code_token(验证码)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | code_token_id | int | 是 | 是 | 验证码ID | |
| 2 | token | varchar | 255 | 否 | 否 | 令牌 |
| 3 | code | varchar | 255 | 否 | 否 | 验证码 |
| 4 | expire_time | timestamp | 是 | 否 | 失效时间 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-6-collect(收藏)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | collect_id | int | 是 | 是 | 收藏ID | |
| 2 | user_id | int | 是 | 是 | 收藏人ID | |
| 3 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 4 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 5 | source_id | int | 是 | 否 | 来源ID | |
| 6 | title | varchar | 255 | 否 | 否 | 标题 |
| 7 | img | varchar | 255 | 否 | 否 | 封面 |
| 8 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 9 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-7-comment(评论)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | comment_id | int | 是 | 是 | 评论ID | |
| 2 | user_id | int | 是 | 是 | 评论人ID | |
| 3 | reply_to_id | int | 是 | 否 | 回复评论ID | |
| 4 | content | longtext | 4294967295 | 否 | 否 | 内容 |
| 5 | nickname | varchar | 255 | 否 | 否 | 昵称 |
| 6 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 7 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 11 | source_id | int | 是 | 否 | 来源ID |
表 4-8-department_classification(部门分类)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | department_classification_id | int | 是 | 是 | 部门分类ID | |
| 2 | department_classification | varchar | 64 | 否 | 否 | 部门分类 |
| 3 | limit_times | int | 是 | 否 | 限制次数 | |
| 4 | limit_type | tinyint | 是 | 否 | 限制次数类型1-每天次,2-总计次 | |
| 5 | create_time | datetime | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-9-employee_users(员工用户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | employee_users_id | int | 是 | 是 | 员工用户ID | |
| 2 | employee_id | varchar | 64 | 否 | 否 | 员工工号 |
| 3 | employee_name | varchar | 64 | 否 | 否 | 员工姓名 |
| 4 | employee_mobile_phone | varchar | 16 | 是 | 是 | 员工手机 |
| 5 | work_department | varchar | 64 | 否 | 否 | 工作部门 |
| 6 | employee_position | varchar | 64 | 否 | 否 | 员工职位 |
| 7 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 8 | user_id | int | 是 | 否 | 用户ID | |
| 9 | create_time | datetime | 是 | 否 | 创建时间 | |
| 10 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-10-hits(用户点击)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | hits_id | int | 是 | 是 | 点赞ID | |
| 2 | user_id | int | 是 | 否 | 点赞人 | |
| 3 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 4 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID |
表 4-11-manage_users(管理用户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | manage_users_id | int | 是 | 是 | 管理用户ID | |
| 2 | management_id | varchar | 64 | 否 | 否 | 管理工号 |
| 3 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 4 | users_mobile_phone | varchar | 16 | 是 | 是 | 用户手机 |
| 5 | work_department | varchar | 64 | 否 | 否 | 工作部门 |
| 6 | user_position | varchar | 64 | 否 | 否 | 用户职位 |
| 7 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 8 | user_id | int | 是 | 否 | 用户ID | |
| 9 | create_time | datetime | 是 | 否 | 创建时间 | |
| 10 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-12-notice(公告)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notice_id | mediumint | 是 | 是 | 公告ID | |
| 2 | title | varchar | 125 | 是 | 否 | 标题 |
| 3 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 4 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 5 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-13-notification_reminder(通知提醒)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notification_reminder_id | int | 是 | 是 | 通知提醒ID | |
| 2 | employee_users | int | 否 | 否 | 员工用户 | |
| 3 | notification_title | varchar | 64 | 否 | 否 | 通知标题 |
| 4 | notification_type | varchar | 64 | 否 | 否 | 通知类型 |
| 5 | notification_date | date | 否 | 否 | 通知日期 | |
| 6 | notification_content | text | 65535 | 否 | 否 | 通知内容 |
| 7 | create_time | datetime | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-14-praise(点赞)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | praise_id | int | 是 | 是 | 点赞ID | |
| 2 | user_id | int | 是 | 是 | 点赞人 | |
| 3 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 4 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID | |
| 8 | status | tinyint | 是 | 否 | 点赞状态:1为点赞,0已取消 |
表 4-15-schedule(日程管理)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | schedule_id | smallint | 是 | 是 | 日程ID | |
| 2 | content | varchar | 255 | 否 | 否 | 日程内容 |
| 3 | scheduled_time | datetime | 否 | 否 | 计划时间 | |
| 4 | user_id | int | 是 | 否 | 用户ID | |
| 5 | create_time | datetime | 否 | 否 | 创建时间 | |
| 6 | update_time | datetime | 否 | 否 | 更新时间 |
表 4-16-score(评分)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | score_id | int | 是 | 是 | 评分ID | |
| 2 | user_id | int | 是 | 否 | 评分人 | |
| 3 | nickname | varchar | 64 | 否 | 否 | 昵称 |
| 4 | score_num | double | 是 | 否 | 评分 | |
| 5 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 6 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 7 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 8 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 9 | source_id | int | 是 | 否 | 来源ID |
表 4-17-slides(轮播图)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | slides_id | int | 是 | 是 | 轮播图ID | |
| 2 | title | varchar | 64 | 否 | 否 | 标题 |
| 3 | content | varchar | 255 | 否 | 否 | 内容 |
| 4 | url | varchar | 255 | 否 | 否 | 链接 |
| 5 | img | varchar | 255 | 否 | 否 | 轮播图 |
| 6 | hits | int | 是 | 否 | 点击量 | |
| 7 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 8 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-18-upload(文件上传)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | upload_id | int | 是 | 是 | 上传ID | |
| 2 | name | varchar | 64 | 否 | 否 | 文件名 |
| 3 | path | varchar | 255 | 否 | 否 | 访问路径 |
| 4 | file | varchar | 255 | 否 | 否 | 文件路径 |
| 5 | display | varchar | 255 | 否 | 否 | 显示顺序 |
| 6 | father_id | int | 否 | 否 | 父级ID | |
| 7 | dir | varchar | 255 | 否 | 否 | 文件夹 |
| 8 | type | varchar | 32 | 否 | 否 | 文件类型 |
表 4-19-user(用户账户)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_id | int | 是 | 是 | 用户ID | |
| 2 | state | smallint | 是 | 否 | 账户状态:(1可用|2异常|3已冻结|4已注销) | |
| 3 | user_group | varchar | 32 | 否 | 否 | 所在用户组 |
| 4 | login_time | timestamp | 是 | 否 | 上次登录时间 | |
| 5 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 6 | phone_state | smallint | 是 | 否 | 手机认证:(0未认证|1审核中|2已认证) | |
| 7 | username | varchar | 16 | 是 | 否 | 用户名 |
| 8 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 9 | password | varchar | 64 | 是 | 否 | 密码 |
| 10 | | varchar | 64 | 否 | 否 | 邮箱 |
| 11 | email_state | smallint | 是 | 否 | 邮箱认证:(0未认证|1审核中|2已认证) | |
| 12 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 13 | open_id | varchar | 255 | 否 | 否 | 针对获取用户信息字段 |
| 14 | create_time | timestamp | 是 | 否 | 创建时间 |
表 4-20-user_group(用户组)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | group_id | mediumint | 是 | 是 | 用户组ID | |
| 2 | display | smallint | 是 | 否 | 显示顺序 | |
| 3 | name | varchar | 16 | 是 | 否 | 名称 |
| 4 | description | varchar | 255 | 否 | 否 | 描述 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | 是 | 否 | 来源ID | |
| 8 | register | smallint | 否 | 否 | 注册位置 | |
| 9 | create_time | timestamp | 是 | 否 | 创建时间 | |
| 10 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-21-voting_activity(投票活动)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | voting_activity_id | int | 是 | 是 | 投票活动ID | |
| 2 | voting_theme | varchar | 64 | 否 | 否 | 投票主题 |
| 3 | voting_image | varchar | 255 | 否 | 否 | 投票图片 |
| 4 | voting_figures | varchar | 64 | 是 | 是 | 投票人物 |
| 5 | department_classification | varchar | 64 | 否 | 否 | 部门分类 |
| 6 | number_of_votes_cast | double | 否 | 否 | 已投票数 | |
| 7 | total_number_of_votes_for_the_theme | double | 否 | 否 | 主题总票数 | |
| 8 | date_of_initiation | date | 否 | 否 | 发起日期 | |
| 9 | closing_date | datetime | 否 | 否 | 截止日期 | |
| 10 | initiate_user | int | 否 | 否 | 发起用户 | |
| 11 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 12 | character_introduction | text | 65535 | 否 | 否 | 人物介绍 |
| 13 | voting_rules | text | 65535 | 否 | 否 | 投票规则 |
| 14 | voting_department | text | 65535 | 否 | 否 | 可投票部门 |
| 15 | voting_details | longtext | 4294967295 | 否 | 否 | 投票详情 |
| 16 | hits | int | 是 | 否 | 点击数 | |
| 17 | praise_len | int | 是 | 否 | 点赞数 | |
| 18 | collect_len | int | 是 | 否 | 收藏数 | |
| 19 | comment_len | int | 是 | 否 | 评论数 | |
| 20 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 21 | timer_title | varchar | 64 | 否 | 否 | 计时器标题 |
| 22 | timing_start_time | datetime | 否 | 否 | 计时开始时间 | |
| 23 | timing_end_time | datetime | 否 | 否 | 计时结束时间 | |
| 24 | voting_record_limit_times | int | 是 | 否 | 立即投票限制次数 | |
| 25 | voting_statistics_limit_times | int | 是 | 否 | 生成统计限制次数 | |
| 26 | create_time | datetime | 是 | 否 | 创建时间 | |
| 27 | update_time | timestamp | 是 | 否 | 更新时间 |
表 4-22-voting_record(投票记录)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | voting_record_id | int | 是 | 是 | 投票记录ID | |
| 2 | voting_number | varchar | 64 | 否 | 否 | 投票编号 |
| 3 | voting_theme | varchar | 64 | 否 | 否 | 投票主题 |
| 4 | voting_image | varchar | 255 | 否 | 否 | 投票图片 |
| 5 | voting_figures | varchar | 64 | 否 | 否 | 投票人物 |
| 6 | department_classification | varchar | 64 | 否 | 否 | 部门分类 |
| 7 | initiate_user | int | 否 | 否 | 发起用户 | |
| 8 | employee_users | int | 否 | 否 | 员工用户 | |
| 9 | employee_id | varchar | 64 | 否 | 否 | 员工工号 |
| 10 | employee_name | varchar | 64 | 否 | 否 | 员工姓名 |
| 11 | voting_time | date | 否 | 否 | 投票时间 | |
| 12 | number_of_voters | varchar | 64 | 是 | 否 | 投票人数 |
| 13 | personal_remarks | text | 65535 | 否 | 否 | 个人备注 |
| 14 | user_id | int | 是 | 否 | 用户ID | |
| 15 | create_time | datetime | 是 | 否 | 创建时间 | |
| 16 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 17 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 18 | source_id | int | 否 | 否 | 来源ID | |
| 19 | source_user_id | int | 否 | 否 | 来源用户 |
表 4-23-voting_statistics(投票统计)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | voting_statistics_id | int | 是 | 是 | 投票统计ID | |
| 2 | voting_figures | varchar | 64 | 否 | 否 | 投票人物 |
| 3 | voting_theme | varchar | 64 | 否 | 否 | 投票主题 |
| 4 | department_classification | varchar | 64 | 否 | 否 | 部门分类 |
| 5 | number_of_votes_cast | double | 否 | 否 | 已投票数 | |
| 6 | total_number_of_votes_for_the_theme | double | 否 | 否 | 主题总票数 | |
| 7 | initiate_user | int | 否 | 否 | 发起用户 | |
| 8 | statistical_title | varchar | 64 | 否 | 否 | 统计标题 |
| 9 | statistical_date | date | 否 | 否 | 统计日期 | |
| 10 | voting_percentage | double | 否 | 否 | 得票率 | |
| 11 | voting_trends | text | 65535 | 否 | 否 | 投票趋势 |
| 12 | create_time | datetime | 是 | 否 | 创建时间 | |
| 13 | update_time | timestamp | 是 | 否 | 更新时间 | |
| 14 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 15 | source_id | int | 否 | 否 | 来源ID | |
| 16 | source_user_id | int | 否 | 否 | 来源用户 |
表 4-24-voting_theme(投票主题)
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | voting_theme_id | int | 是 | 是 | 投票主题ID | |
| 2 | voting_theme | varchar | 64 | 是 | 是 | 投票主题 |
| 3 | create_time | datetime | 是 | 否 | 创建时间 | |
| 4 | update_time | timestamp | 是 | 否 | 更新时间 |
第5章系统实现
5.1登录模块的实现
为确保系统安全性,系统操作员只有在登录界面输入正确的用户名、密码、权限以及验证码,单击“登录”按钮后才能够进入本系统的主界面。登录界面如下图所示。
图5-1登录界面
Login.prototype.api = async function(req) {
var body = req.body;
var obj = await $.services["user"].get_obj({
username: body.username
},{like:false});
if (obj) {
var group = await $.services["user_group"].get_obj({
name:obj.user_group
})
if (group){
if (group.name!=="管理员"){
var sql = "select examine_state from "+ group.source_table +" WHERE user_id = " + obj.user_id;
var userExamine = await $.mysql.run(sql);
if (userExamine && userExamine.length > 0 && userExamine[0].examine_state!=="已通过"){
return {
error: {
code: 70000,
message: "该用户审核未通过"
},
};
}
}
if (obj.state!==1){
return {
error: {
code: 70000,
message: "用户非可用状态,不能登录"
},
};
}
var password = md5(body.password);
if (password === obj.password) {
req.session.user = obj;
var date = Date.parse(new Date());
var token = md5(obj.user_id + "_" + date);
await $.services["access_token"].add({
token,
info: JSON.stringify(obj),
user_id:obj.user_id
});
obj.token = token;
return {
result: {obj}
};
} else {
return {
error: {
code: 70000,
message: "密码错误"
},
};
}
}else {
return {
error: {
code: 70000,
message: "用户组不存在"
},
};
}
} else {
return {
error: {
code: 70000,
message: "账户不存在"
}
};
}
};
5.2 员工用户子系统模块的实现
5.2.1 用户首页模块
首页是系统的主界面,展示系统的核心内容,包括轮播图、最新企业资讯等。用户可以通过首页快速访问各个功能模块,还可以根据关键词搜索相关内容,如下图所示。

图5-2 首页界面
前台首页关键代码如下:
Service.prototype.get_list = async function(query, config) {
var sql = $.mysql.toGetSql(query, Object.assign({}, this.config, config || {}));
return await this.run(sql);
};
5.2.2 新闻资讯模块
用户点击“新闻资讯”,将显示新闻列表,用户可以查看有关新闻的资讯信息,支持通过关键词搜索或者筛选、排序,点击可查看资讯详情,在详情页面可以进行点赞、收藏、评论等操作。界面如下图所示。

图5-3新闻资讯界面
5.2.3 投票记录模块
投票记录功能详细列出员工参与过的所有投票活动,包括每次投票的时间、投票主题和选项等内容。员工可以随时查阅自己的投票历史,查看自己曾经做出的选择,并对比不同时间段的投票行为。这项功能增强了员工对投票活动的透明度和信任度,确保投票过程的公正性。页面如下图所示。

图5-4投票记录界面
5.2.4 投票活动模块
点击系统导航栏上的“投票活动”菜单按钮,将进入投票活动列表,用户可以查看所有的投票活动,支持通过关键词搜索和下拉搜索。点击某个投票活动,用户可以查看该投票活动的详细信息,可以进行投票、点赞、收藏、评论等操作。页面如下图所示。

图5-5投票活动界面
5.3 管理用户子系统模块的实现
5.3.1 部门分类管理模块
管理用户点击“部门分类管理”这一菜单会显示部门分类列表和部门分类添加两个子菜单,点击“部门分类列表”可以查看所有的部门分类,还可以进行重置、查询、删除等操作。点击“部门分类添加”,管理用户可以添加新的部门分类信息。页面如下图所示。
图5-6部门分类管理界面
5.3.2投票主题管理模块
管理用户点击“投票主题管理”这一菜单会显示投票主题列表和投票主题添加两个子菜单,点击“投票主题列表”可以查看所有的投票主题,还可以进行重置、查询、删除等操作。点击“投票主题添加”,管理用户可以添加新的投票主题信息。页面如下图所示。
图5-7投票主题管理界面
5.3.3 投票活动管理模块
管理用户点击“投票活动管理”这一菜单会显示投票活动列表和投票活动添加两个子菜单,点击“投票活动列表”可以查看所有的投票活动,还可以进行重置、查询、删除等操作。点击“投票活动添加”,管理用户可以添加新的投票活动信息。界面如下图所示。
图5-8投票活动管理界面
5.4 管理员子系统模块的实现
管理员点击“部门分类管理”这一菜单会显示部门分类列表和部门分类添加两个子菜单,点击“部门分类列表”可以查看所有的部门分类,还可以进行重置、查询、删除等操作。点击“部门分类添加”,管理员可以添加新的部门分类信息。页面如下图所示。
图5-9部门分类管理界面图
新增部门分类代码如下:
Controller.prototype.add = async function(ctx) {
var result = await this.service.add(ctx.request.body, this.config);
if (this.service.error) {
return {
error: this.service.error,
};
}
return {
result,
};
};
管理员点击“系统用户”,可以管理所有用户的信息,包括新增、修改、删除、搜索等。界面如下图所示。
图5-10系统用户界面图
系统用户的关键代码如下:
Register.prototype.index = async function(req,res) {
var group_list = await $.services["user_group"].get_list({}, Object.assign({}, this.config));
return await res.render(this.config.tpl + "index.html", {
group_list
});
};
Register.prototype.api = async function(req) {
var user = $.services.user;
var body = req.body;
var username = body.username;
var obj = await user.get_obj({
username
});
if (obj) {
return {
error: {
code: 70000,
message: "账户名已存在",
},
};
} else {
var password = md5(body.password);
var nickname = body.nickname;
var user_group = body.user_group;
var email = body.email;
var email_state= body.hasOwnProperty('email_state') ? body.email_state : 0;
var phone = body.phone;
var phone_state= body.hasOwnProperty('phone_state') ? body.phone_state : 0;
var bl_reg = await user.add({
username,
password,
nickname,
user_group,
email,
email_state,
phone,
phone_state
});
if (bl_reg) {
return {
result: "注册成功"
};
} else {
return {
error: {
code: 70000,
message: "注册失败",
},
};
}
}
};
管理员点击“投票记录管理”这一菜单会显示投票记录列表,管理员可以查看用户提交的投票记录,还可以进行重置、查询、删除等操作。页面如下图所示。
图5-11投票记录管理界面图
管理员点击“投票统计管理”这个菜单,这一菜单会显示投票统计列表,管理员可以查看投票统计详情,还可以进行重置、查询、删除等操作。投票统计管理界面如下图所示。
图5-12投票统计管理界面图
上传文件代码如下:
Controller.prototype.upload = async function(ctx) {
var req = ctx.request;
var query = req.query;
var url = "";
if (req.files && req.files.file) {
var f = req.files.file;
const render = fs.createReadStream(f.path);
var name = f.name;
var dir = f.dir || "";
var file = _dir + dir + name;
try {
if (fs.existsSync(file)) {
var arr = name.split(".");
name = arr[0];
var extension = arr[arr.length - 1];
var num = 10000;
for (var i = 0; i < num; i++) {
var na = name + "_" + (i + 1) + "." + extension;
file = path.join(_dir, na);
if (!fs.existsSync(file)) {
name = na;
break;
}
}
}
const upStream = fs.createWriteStream(file);
render.pipe(upStream);
url = _path + name;
} catch (e) {
console.log("上传失败:", e);
}
return {
result: {
url
}
};
} else {
return {
code: 10000,
message: "上传的文件(file)不能为空!",
};
}
};
管理员点击“系统管理-轮播图管理”菜单,可以对前台展示的轮播图进行设置,系统管理。页面如下图所示。

图5-13系统管理界面图
管理员点击“网站公告管理”这个菜单,可以对系统中的通知公告进行管理,包括通知公告的增删改查等操作。页面如下图所示。
图5-14网站公告管理界面图
第6章系统测试
6.1 测试目的
测试的主要目的是确保系统的功能和性能满足预期的需求,同时识别和修复潜在的缺陷。通过系统测试,可以验证各个功能模块的正确性和稳定性,确保系统在不同使用场景下的表现符合设计要求。测试目的包括确认系统功能的完整性、验证数据处理的准确性、评估系统的性能和安全性。测试还可以提高用户满意度,保证用户在使用系统时获得流畅和可靠的体验。通过全面的测试,可以降低后期维护成本,减少系统上线后出现故障的风险,从而保障系统的长期稳定运行。
6.2测试方法
在本系统中,测试方法主要依赖于测试用例的设计与执行。测试用例是根据系统需求文档编写的,覆盖所有功能模块及其边界情况。每个测试用例包含输入数据、预期结果和实际结果的对比,以验证系统的功能是否按预期工作。
常见的测试用例包括功能测试用例、边界测试用例和异常测试用例[11]。功能测试用例针对系统的各项功能进行验证;边界测试用例则侧重于输入数据的边界条件,验证系统在极端情况下是否能够稳定运行;异常测试用例则用于验证系统在处理错误输入或异常情况时的反应。本文选择功能测试用例进行系统测试。
在测试执行过程中,记录每个用例的执行结果,并根据实际结果与预期结果的对比,判断系统是否存在缺陷。通过系统化的测试用例执行,可以有效提高测试的覆盖率和效率,为系统的最终上线提供保障。
6.3测试内容
通过对系统中所含的主要实体对象及其功能操作进行测试用例设计。以下是详细的测试:
表6-1用户注册登录测试表
用户注册登录测试用例:
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 用户注册、登录 | 测试用户正确注册、登录 |
| 用户注册成功,登录成功 | 结果输出符合预期 | 通过 |
表6-2投票活动测试表
投票活动用例:
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 投票活动 | 测试用户投票活动功能 |
| 用户投票成功,生成投票信息 | 结果输出符合预期 | 通过 |
表6-3企业资讯评论测试表
企业资讯评论测试用例:
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 企业资讯评论 | 测试用户企业资讯评论功能 | 1、在首页点击企业资讯并看详情; 2、点击评论,输入相关信息点击提交 | 生成新的评论信息 | 结果输出符合预期 | 通过 |
表6-4企业资讯添加测试表
管理员企业资讯添加测试用例:
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 企业资讯添加测试 | 测试管理员添加企业资讯功能 |
| 企业资讯添加成功 | 结果输出符合预期 | 通过 |
表6-5系统公告删除测试表
系统公告删除测试用例:
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 系统公告删除测试 | 测试系统公告删除功能 |
| 系统公告删除成功,前端不在展示该系统公告 | 结果输出符合预期 | 通过 |
6.4测试结果
在本次测试的过程主要针对所有功能下的添加操作,修改操作和删除操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都是能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。
结论
经过了几个月的努力,企业职工投票系统终于完成了,虽然在校期间也开发过一些小型的系统,但是都是在老师的讲解以及辅助下完成的,没有经历过开发之前的需求分析、系统分析,都是直接从系统设计开始的,因此开发企业职工投票系统对我意义重大。
在开发系统最初,首先对各个企业职工投票系统方面的需求进行调研,了解对于用户来说,开发的平台需要实现哪些功能才能满足各方需求,对需求进行分析;其次选择自己比较熟悉的Nodejs语言,MYSQL数据库来设计开发,通过知网库、学校图书馆等地方查阅、学习这些技术,掌握编程的思想和方法,然后就是对系统进行分析,从系统开发的可行性、系统实现的功能、系统应该具备的性能以及系统的操作流程方面,对系统进行全方位的分析,确定系统的最终功能,从而对系统的功能和数据库进行设计,最后就是系统的实现以及对实现的功能的测试,确保系统能够稳定的运行。
在开发的过程中暴露出了自己的很多问题,比如前期的准备还是不够充分,不能完全掌握其操作流程;在开发过程中对Nodejs的编程掌握的还不够熟练以及对系统的环境配置上还存在很多问题,经常会导致项目在运行的时候出现错误。学无止境,通过一边查阅资料一边向导师请教,慢慢的解决了这些问题,在以后的学习、工作者我会更加严谨,通过本项目的开发,我将会受益终生!
参考文献
- 凌杰.Node.js后端全程实战[M].人民邮电出版社:202305.371.
- 唐小燕,刘洪武.Node.js应用开发[M].人民邮电出版社:202111.308.
- 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
- 董宁,袁晓曦.JavaScript程序设计[M].人民邮电出版社:202308.265.
- 何勇,王瑶.HTML5+CSS3+JavaScript 网页设计基础与实战[M].人民邮电出版社:202211.262.
- 孙文江,陈义辉.JavaScript交互式网页设计[M].人民邮电出版社:202309.419.
- 刘江涛,王亮亮,吴庆茹,等.基于B/S模式的铁路勘测设计案例信息化管理系统设计与实现[J].铁路计算机应用,2021,30(03):32-35.
- 张丹丹,李弘.基于B/S架构的办公管理系统设计与开发[J].铁路通信信号工程技术,2024,21(09):44-48+106.
- 周晓玉,崔文超.基于Web技术的数据库应用系统设计[J].信息与电脑(理论版),2023,35(09):189-191.
- 马艳艳,吴晓光.计算机软件与数据库的设计策略分析[J].电子技术,2024,53(05):104-105.
- 李俊萌.计算机软件测试技术与开发应用策略分析[J].信息记录材料,2023,24(03):50-52.
- 李启南,邹楷文.SM2可链接环签名在匿名电子投票系统中的应用[J].河南科技,2024,51(20):20-25.DOI:10.19968/j.cnki.hnkj.1003-5168.2024.20.004.
- Salunke V S ,Ouda A .A Performance Benchmark for the PostgreSQL and MySQL Databases[J].Future Internet,2024,16(10):382-382.
- Elias N .MySQL Cookbook:100+ recipes for database development and administration in MySQL (English Edition)[M].BPB Publishers:2024-08-21.DOI:10.0000/9789355519290.
- 杨景奕.基于可链接环签名的区块链电子投票系统研究[D].湖北民族大学,2024.
- 黄一鸿.实用拜占庭共识算法优化及其在电子投票系统中的应用[D].江西师范大学,2024.DOI:10.27178/d.cnki.gjxsu.2024.001734.
- 张岭坡.基于区块链的同态加密投票系统的设计与实现[C]//中国电机工程学会电力信息化专业委员会,国家电网公司信息通信分公司.2023电力行业信息化年会论文集.国网英大国际控股集团有限公司;,2023:233-238.DOI:10.26914/c.cnkihy.2023.106025.
- 桑柳剑,张常泉.基于国密算法的匿名投票系统设计与实现[J].电脑编程技巧与维护,2023,(09):12-14+18.DOI:10.16184/j.cnki.comprg.2023.09.042.
- 李明成,企业级微信投票评选系统V1.0.陕西省,陕西弈聪软件信息技术股份有限公司,2021-01-12.
- Mario C ,Luciano M .Node.js Design Patterns:Design and implement production-grade Node.js applications using proven patterns and techniques[M].Packt Publishing Limited:2020-07-29.DOI:10.0000/9781839210440.
致谢
在此论文完成之际,感谢我的指导老师。在指导老师的网页设计课上,当时我学到了很多东西,这对于我实习过程中也打了一定的基础,而且指导老师对于我的设计也提出许多建议,并予以悉心的指导,对于一些细小的问题都耐心的指导我去完善,授予我写论文的交流消息,时常的鼓励我,另外感谢教导我完善此项目的前端同学,对于这个项目,我是边学习边实现完成的,有许多东西开始并不是很明白,但前端开发的同学非常耐心的引导我去将这个项目完成,在系统的后端开发中,所用到的后台开发技术也时常会给我讲解,助于我更好的将论文完成,在此对帮助到我的同学和一直予以教导的指导老师致以衷心的感谢,祝事业有成。

被折叠的 条评论
为什么被折叠?



