SSM+Vue在线OA办公系统

         在线办公分三个用户登录,管理员,经理,员工。   SSM架构,maven管理工具,数据库Mysql,系统有文档,可有偿安装调试及讲解,项目保证质量。需要划到 最底 下可以联系到我。
 
功能如下:
1.个人信息修改
2.部门管理
3.财务报账类型管理
4.帖子类管理
5.公文类型管理
6.新闻类型管理
8.请假类型管理
9.日程类型管理
10邮件类型管理
11.职位管理
12.部门任命管理
13.考勤管理
14.论坛管理
15.公文管理
16.新闻管理
17.请假管理
18日程管理
19.薪资管理
20.邮件管理
21.经理管理
22.员工管理

部分实体设计:

部分表设计

服务表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yuangong_id

Integer

员工

3

fuwu_uuid_number

String

服务唯一编号

4

fuwu_name

String

服务名称

5

fuwu_types

Integer

服务类型

6

fuwu_content

String

服务详情

7

chuli_types

Integer

是否处理

8

insert_time

Date

添加时间

9

create_time

Date

创建时间

公告信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

gonggao_name

String

公告名称

3

gonggao_photo

String

公告图片

4

gonggao_types

Integer

公告类型

5

insert_time

Date

公告发布时间

6

gonggao_content

String

公告详情

7

create_time

Date

创建时间

代码示例:
出业务接口

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ChuqinEntity;
import com.entity.YonghuEntity;
import com.entity.view.ChuqinView;
import com.service.ChuqinService;
import com.service.DictionaryService;
import com.service.YonghuService;
import com.utils.PageUtils;
import com.utils.PoiUtil;
import com.utils.R;
import com.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.URL;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;/*** 考勤* 后端接口*/
@RestController
@Controller
@RequestMapping("/chuqin")
public class ChuqinController {private static final Logger logger = LoggerFactory.getLogger(ChuqinController.class);@Autowiredprivate ChuqinService chuqinService;@Autowiredprivate DictionaryService dictionaryService;//级联表service@Autowiredprivate YonghuService yonghuService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request) {logger.debug("page方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if (false)return R.error(511, "永不会进入");else if ("维修人员".equals(role))params.put("weixiurenyuanId", request.getSession().getAttribute("userId"));else if ("员工".equals(role))params.put("yonghuId", request.getSession().getAttribute("userId"));if (params.get("orderBy") == null || params.get("orderBy") == "") {params.put("orderBy", "id");}PageUtils page = chuqinService.queryPage(params);//字典表数据转换List<ChuqinView> list = (List<ChuqinView>) page.getList();for (ChuqinView c : list) {//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request) {logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);ChuqinEntity chuqin = chuqinService.selectById(id);if (chuqin != null) {//entity转viewChuqinView view = new ChuqinView();BeanUtils.copyProperties(chuqin, view);//把实体数据重构到view中//级联表YonghuEntity yonghu = yonghuService.selectById(chuqin.getYonghuId());if (yonghu != null) {BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);} else {return R.error(511, "查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody ChuqinEntity chuqin, HttpServletRequest request) {logger.debug("save方法:,,Controller:{},,chuqin:{}", this.getClass().getName(), chuqin.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if (false)return R.error(511, "永远不会进入");else if ("员工".equals(role))chuqin.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<ChuqinEntity> queryWrapper = new EntityWrapper<ChuqinEntity>().eq("yonghu_id", chuqin.getYonghuId()).eq("chuqin_types", chuqin.getChuqinTypes()).eq("overtimeNumber", chuqin.getOvertimeNumber()).eq("insert_time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));logger.info("sql语句:" + queryWrapper.getSqlSegment());ChuqinEntity chuqinEntity = chuqinService.selectOne(queryWrapper);if (chuqinEntity == null) {chuqin.setInsertTime(new Date());chuqin.setCreateTime(new Date());chuqinService.insert(chuqin);return R.ok();} else {return R.error(511, "表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody ChuqinEntity chuqin, HttpServletRequest request) {logger.debug("update方法:,,Controller:{},,chuqin:{}", this.getClass().getName(), chuqin.toString());//根据字段查询是否有相同数据Wrapper<ChuqinEntity> queryWrapper = new EntityWrapper<ChuqinEntity>().notIn("id", chuqin.getId()).andNew().eq("yonghu_id", chuqin.getYonghuId()).eq("chuqin_types", chuqin.getChuqinTypes()).eq("overtimeNumber", chuqin.getOvertimeNumber()).eq("insert_time", new SimpleDateFormat("yyyy-MM-dd").format(chuqin.getInsertTime()));logger.info("sql语句:" + queryWrapper.getSqlSegment());ChuqinEntity chuqinEntity = chuqinService.selectOne(queryWrapper);if (chuqinEntity == null) {chuqinService.updateById(chuqin);//根据id更新return R.ok();} else {return R.error(511, "表中有相同数据");}}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids) {logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());chuqinService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save(String fileName, HttpServletRequest request) {logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);try {List<ChuqinEntity> chuqinList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields = new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if (lastIndexOf == -1) {return R.error(511, "该文件没有后缀");} else {String suffix = fileName.substring(lastIndexOf);if (!".xls".equals(suffix)) {return R.error(511, "只支持后缀为xls的excel文件");} else {URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if (!file.exists()) {return R.error(511, "找不到上传文件,请联系管理员");} else {List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for (List<String> data : dataList) {//循环ChuqinEntity chuqinEntity = new ChuqinEntity();chuqinList.add(chuqinEntity);//把要查询是否重复的字段放入map中}//查询是否重复chuqinService.insertBatch(chuqinList);return R.ok();}}}} catch (Exception e) {e.printStackTrace();return R.error(511, "批量插入数据异常,请联系管理员");}}/*** 打卡*/@RequestMapping("/clockIn")public R clockIn(String flag, HttpServletRequest request) {logger.debug("clockIn方法:,,Controller:{},,flag:{}", this.getClass().getName(), flag);try {Integer id = (Integer) request.getSession().getAttribute("userId");String role = String.valueOf(request.getSession().getAttribute("role"));if (StringUtil.isEmpty(role) || "管理员".equals(role)) {return R.error(511, "没有打卡权限");}Date d = new Date();SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");String date = format1.format(d);List<ChuqinEntity> chuqinList = new ArrayList<ChuqinEntity>();//要生成的list数据List<String> s = new ArrayList<>();s.add("yonghu_id+0");Wrapper<ChuqinEntity> queryWrapper3 = new EntityWrapper<ChuqinEntity>().eq("yonghu_id", id).orderDesc(s);List<ChuqinEntity> oldChuqinList = chuqinService.selectList(queryWrapper3);if ("1".equals(flag)) {//上班卡Date date1 = new Date();date1.setHours(8);date1.setMinutes(0);date1.setSeconds(0);//上班打卡//新增前先查看当前用户最大打卡时间if (oldChuqinList != null && oldChuqinList.size() > 0) {ChuqinEntity entity = oldChuqinList.get(0);Date todayTime = entity.getInsertTime();//获取出勤表最大出勤String today = format1.format(todayTime);//把日期加一天Calendar calendar = new GregorianCalendar();calendar.setTime(todayTime);calendar.add(calendar.DATE, 1);String newToday = format1.format(calendar.getTime());if (date.equals(today)) {return R.error(511, "已经打过上班卡了");} else if (!date.equals(newToday)) {//当天日期 不是出勤最大日期加一天的话   就是补充缺勤日期chuqinList = this.getQueQin(d, format1, today, id);}if (chuqinList != null && chuqinList.size() > 0) {chuqinService.insertBatch(chuqinList);}//插入当天的上班卡ChuqinEntity chuqin = new ChuqinEntity();chuqin.setOnTime(d);if (d.compareTo(date1) > 0) {//当前时间d 大于规定时间date1chuqin.setChuqinTypes(6);//设置为迟到} else if (d.compareTo(date1) <= 0) {//当前时间d 小于等于规定时间date1chuqin.setChuqinTypes(3);//设置为未打下班卡}chuqin.setCreateTime(d);chuqin.setInsertTime(format1.parse(date));chuqin.setYonghuId(id);chuqinService.insert(chuqin);} else {//第一次打卡ChuqinEntity chuqin = new ChuqinEntity();chuqin.setOnTime(d);if (d.compareTo(date1) > 0) {//当前时间d 大于规定时间date1chuqin.setChuqinTypes(6);//设置为迟到} else if (d.compareTo(date1) <= 0) {//当前时间d 小于等于规定时间date1chuqin.setChuqinTypes(3);//设置为未打下班卡}chuqin.setCreateTime(d);chuqin.setInsertTime(format1.parse(date));chuqin.setYonghuId(id);chuqinService.insert(chuqin);}} else if ("2".equals(flag)) {//下班打卡的地方Date date1 = new Date();date1.setHours(19);date1.setMinutes(00);date1.setSeconds(0);Date date2 = new Date();date2.setHours(18);date2.setMinutes(00);date2.setSeconds(0);//下班打卡if (oldChuqinList != null) {//不是第一次打卡//查询当前用户是否生成了上班打卡Wrapper<ChuqinEntity> queryWrapper = new EntityWrapper<ChuqinEntity>().eq("yonghu_id", id).eq("insert_time", date).orderDesc(s);ChuqinEntity chuqinEntity = chuqinService.selectOne(queryWrapper);if (chuqinEntity != null) {//生成了上班打卡chuqinEntity.setDownTime(d);if ("6".equals(String.valueOf(chuqinEntity.getChuqinTypes()))) {} else if (d.compareTo(date1) > 0) {//当前时间d 大于规定时间   加班int hours = d.getHours();int i = hours - 19 + 1;if (i > 0) {chuqinEntity.setOvertimeNumber(i);}chuqinEntity.setChuqinTypes(5);//设置为迟到} else if (d.compareTo(date2) < 0) {//当前时间d 小于等于规定时间 早退chuqinEntity.setChuqinTypes(7);//设置为未打下班卡} else {chuqinEntity.setChuqinTypes(1);}chuqinService.updateById(chuqinEntity);} else {//当天上午没有生成上班打卡,要防止用户昨天及之前没有生成打卡记录Wrapper<ChuqinEntity> queryWrapper1 = new EntityWrapper<ChuqinEntity>().eq("yonghu_id", id).orderDesc(s);List<ChuqinEntity> list = chuqinService.selectList(queryWrapper1);if (list != null && list.size() > 0) {ChuqinEntity entity = list.get(0);Date todayTime = entity.getInsertTime();//获取出勤表最大出勤String today = format1.format(todayTime);Calendar calendar = new GregorianCalendar();calendar.setTime(todayTime);calendar.add(calendar.DATE, 1);String newToday = format1.format(calendar.getTime());if (date.equals(today)) {//昨天id+1  等于今天的话  就是直接新增下午打卡ChuqinEntity chuqin = new ChuqinEntity();chuqin.setDownTime(d);chuqin.setChuqinTypes(2);chuqinService.insert(chuqin);} else if (!date.equals(newToday)) {//当天日期 不是出勤最大日期加一天的话   就是补充缺勤日期chuqinList = this.getQueQin(d, format1, today, id);}if (chuqinList != null && chuqinList.size() > 0) {chuqinService.insertBatch(chuqinList);}}}} else {//第一次打卡ChuqinEntity chuqin = new ChuqinEntity();chuqin.setDownTime(d);chuqin.setChuqinTypes(2);chuqinService.insert(chuqin);}} else {return R.error(511, "未知错误");}} catch (ParseException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return R.ok();}/*** 补充缺勤和未打的情况** @param d        当前日期* @param format1  "yyyy-MM-dd"* @param newToday 数据库存的最大打卡日期 加一天* @param id       打卡人id* @return* @throws ParseException*/public static List<ChuqinEntity> getQueQin(Date d, SimpleDateFormat format1, String newToday, Integer id) throws ParseException {List<ChuqinEntity> list = new ArrayList<>();// 返回的日期集合DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Date start = dateFormat.parse(newToday);//缺勤那天Calendar calendar = new GregorianCalendar();calendar.setTime(d);calendar.add(calendar.DATE, -1); //当前时间减去一天,即一天前的时间Date end = dateFormat.parse(format1.format(calendar.getTime()));Calendar tempStart = Calendar.getInstance();tempStart.setTime(start);Calendar tempEnd = Calendar.getInstance();tempEnd.setTime(end);tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)while (tempStart.before(tempEnd)) {ChuqinEntity chuqinEntity = new ChuqinEntity();chuqinEntity.setYonghuId(id);chuqinEntity.setInsertTime(tempStart.getTime());chuqinEntity.setCreateTime(d);chuqinEntity.setChuqinTypes(4);list.add(chuqinEntity);tempStart.add(Calendar.DAY_OF_YEAR, 1);}return list;}
}

出勤实体类

import com.entity.ChuqinEntity;
import com.baomidou.mybatisplus.annotations.TableName;
import org.apache.commons.beanutils.BeanUtils;import java.lang.reflect.InvocationTargetException;import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;import java.io.Serializable;
import java.util.Date;/*** 考勤* 后端返回视图实体辅助类* (通常后端关联的表或者自定义的字段需要返回使用)*/
@TableName("chuqin")
@Date
public class ChuqinView extends ChuqinEntity {/*** 打卡类型的值*/private String chuqinValue;//级联表 yonghu/*** 员工编号*/private String yonghuUuidNumber;/*** 员工姓名*/private String yonghuName;/*** 员工手机号*/private String yonghuPhone;/*** 员工身份证号*/private String yonghuIdNumber;/*** 员工头像*/private String yonghuPhoto;/*** 电子邮箱*/private String yonghuEmail;/*** 部门*/private Integer bumenTypes;/*** 部门的值*/private String bumenValue;/*** 职位*/private Integer zhiweiTypes;/*** 职位的值*/private String zhiweiValue;
}

需要加我私聊即可:

                               

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

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

相关文章

Redis之Linux下的安装配置

Redis之Linux下的安装配置 Redis下载 Linux下下载源码安装配置 方式一 官网下载&#xff1a;https://redis.io/download ​ 其他版本下载&#xff1a;https://download.redis.io/releases/ 方式二&#xff08;推荐&#xff09; GitHub下载&#xff1a;https://github.com/r…

游戏全自动打金搬砖,单号收益300+ 轻松日入1000+

详情介绍 游戏全自动打金搬砖&#xff0c;单号收益300左右&#xff0c;多开收益更多&#xff0c;轻松日入1000 可矩阵操作。 项目长期稳定&#xff0c;全自动挂机无需人工操作&#xff0c;小白&#xff0c;宝妈&#xff0c;想做副业的都可以。

css浮动(float)

浮动&#xff08;Float&#xff09; 在CSS中是一个重要的布局技术&#xff0c;它允许元素向左或向右移动&#xff0c;其周围的元素会重新排列。当一个元素被设置为浮动时&#xff0c;它会脱离正常的文档流&#xff0c;这意味着它不再占据原本在文档流中的空间&#xff0c;而会尽…

VS编辑器下使用MFC完成数据相册系统

背景&#xff1a; 实验项目8:数字相册系统 (2周) (一)实验目的 通过该实验&#xff0c;使学生掌握windows程序设计的基本方法。了解相册的基本功能&#xff0c;在传统相册的基础上&#xff0c; 通过应用时钟、图形绘制功能、图形文件的读写功能以及数据库技术&#xff0c;实现对…

《Linux运维总结:ARM64架构CPU基于docker-compose一离线部署rabbitmq 3.10.25容器版镜像模式集群工具》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

DC-DC电路中电感的下方该不该挖空

DC-DC电路中的电感下方该不该挖空&#xff1f; 在回答这个问题之前&#xff0c;先来了解一下DC-DC电路中常见的功率电感类型 一&#xff0e;DC-DC电路常用功率电感类型 图1 DC-DC电路常用电感类型 这四种类型电感&#xff0c;按照无屏蔽电感→磁封胶半屏蔽电感→组装式全屏蔽…

01-MySQL 基础篇笔记

一、MySQL 概述 1.1 数据库相关概念 数据库:(DB:DataBase) 存储数据的仓库,数据是有组织的进行存储 数据库管理系统:(DBMS:DataBase Management System) 操作和管理数据库的大型软件 SQL:(SQL:Structured Query Language,结构化查询语言) 操作关系型数据库的编…

ThreeJS:常见几何体与基础材质入门

在前文《ThreeJS:Geometry与顶点|索引|面》中&#xff0c;我们了解了与Geometry几何体相关的基础概念&#xff0c;也尝试了如何通过BufferGeometry自定义几何体。 常见Geometry几何体 ThreeJS内部也提供了诸多封装好的几何体&#xff0c;常见的Geometry几何体如下图所示&#…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

【C++历练之路】红黑树——map与set的封装实现

W...Y的个人主页&#x1f495; gitee代码仓库分享&#x1f60a; 前言&#xff1a;上篇博客中&#xff0c;我们为了使二叉搜索树不会出现”一边倒“的情况&#xff0c;使用了AVL树对搜索树进行了处理&#xff0c;从而解决了数据在有序或者接近有序时出现的情况。但是AVL树还会…

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如&#xff1a;v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

风与水如何联合优化?基于混合遗传算法的风-水联合优化运行程序代码!

前言 为提高风电场的供电质量同时增加其发电效益,利用储能技术为风电场配置一个蓄能系统是比较重要的解决措施之一。风电的蓄能技术有水力蓄能、压缩空气蓄能、超导磁力蓄能、流体电池组、电解水制氢等&#xff0c;其中水力蓄能是技术较成熟的一种蓄能方式&#xff0c;且小型的…

【JavaEE初阶系列】——Servlet运行原理以及Servlet API详解

目录 &#x1f6a9;Servlet运行原理 &#x1f6a9;Servlet API 详解 &#x1f393;HttpServlet核心方法 &#x1f393;HttpServletRequest核心方法 &#x1f388;核心方法的使用 &#x1f534;获取请求中的参数 &#x1f4bb;query string &#x1f4bb;直接通过form表…

【Cpp】运算符重载 | 前置++(--)# 后置++(--)

标题&#xff1a;【Cpp】运算符重载 | 前置&#xff08;--&#xff09;# 后置&#xff08;--&#xff09; 水墨不写bug 正文开始&#xff1a; 对于内置类型的前置后置&#xff08;--&#xff09;我们已经很清楚了&#xff1a; 前置&#xff08;--&#xff09;先&#xff08;--…

记录一个RSA加密js逆向

network调试就不说了吧 pwd加密参数 搜索pwd参数定位逆向 可以看到有很多关键词 但是我们细心的朋友会发现加密函数关键字 encrypte 打上断点 调试 发现在断点处停止了 并且框选函数发现了一串加密值 虽然不一样但是大概率是这个 并且没你每次放置移开都会刷新 所以如果这个就是…

js自定义实现类似锚点(内容部分滚动)

场景&#xff1a; 效果图如上&#xff0c;类似锚点&#xff0c;但是屏幕不滚动。高度计算我不是很熟练。for循环写的比较麻烦。element plus 和Ant Design有类似组件效果。 html&#xff1a; <template><div><div style"height: 400px;" class&q…

数据丢失不慌张,手机数据恢复一键解决!

如今手机已经成为我们生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;手机都扮演着重要的角色。随着使用时间的增加&#xff0c;手机数据丢失的问题也时常发生。那么手机数据恢复有哪些方法呢&#xff1f;面对这种情况&#xff0c;先不要慌张&#xff0c;本文将…

STEP BY STEP带你使用Docker搭建MySql-MGR高可用集群

数据的重要性 数据已成为当今数字时代最重要的资产之一&#xff0c;对于企业的成功至关重要。它可以帮助企业了解客户、市场和自身运营&#xff0c;提高运营效率&#xff0c;做出明智决策&#xff0c;推动创新&#xff0c;并获得竞争优势。 数据的采集&#xff0c;存储&#…

Python运维-文本处理、系统和文件信息监控、外部命令

本节主要目录如下&#xff1a; 一、文本处理 1.1、Python编码解码 1.2、文件操作 1.3、读写配置文件 1.4、解析XML文件 二、系统信息监控 2.1、监控CPU信息 2.2、监控内存信息 2.3、监控磁盘信息 2.4、监控网络信息 2.5、获取进程信息 2.6、实例&#xff1a;常见的…

报表控件Stimulsoft在JavaScript报告工具中的事件:查看器事件(下)

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…