tag 标签: 办公

相关资源
  • 所需E币: 0
    时间: 2023-12-21 11:36
    大小: 3.66KB
    一个完整的在线办公系统具备哪些功能:1、线下会议管理功能2、审批会议申请功能3、TRTC在线视频会议功能4、罚款模块5、请假管理6、报销管理那么,如何去开发这样一个在线办公的系统,这样的系统用到哪些技术才能实现?接下来,我将带着大家一步步来开发这样的办公系统。这个项目我用的技术有:SpringBoot2.4.1,SpringMVC5.3.1,MyBatis3.5.7,VUE3.0.3,ElementUIplus1.0.2。第一步,环境搭建数据库mysql我用的是8.0版本,使用Navicat作为MySQL的客户端,大家可以到网上下载Navicat安装文件。另外,强烈建议大家的操作系统要用Win10,不建议大家使用Win7或者Win11系统。安装客户端程序(RedisDesktopManager),如果是MacOS的用户,可以到软件商店中查找免费的Redis客户端软件。MongoDB的客户端,我们使用Navicat就可以,写上正确的连接信息就能连接上MongoDB。我们不需要向MongoDB导入数据,将来使用的过程中,MongoDB会积累业务数据。安装JDK,大家本地的JDK尽量使用1.8+的版本吧安装Maven环境,后端Java项目使用Maven构建,所以大家要在本地建立Maven环境第二步就是最关键的代码实战部分:用上了GROUP_CONCAT()函数,我们的SQL语句变成了下面的样子SELECTu.username,    d.dept_nameASdeptName,( SELECTGROUP_CONCAT(role_nameseparator",") FROMtb_role WHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)) )ASrolesFROMtb_useruJOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))LEFTJOINtb_deptdONu.dept_id=d.idWHERE r.role_name="超级管理员" 了解过SQL语句的各种语法之后,下面才是我们正式要写的SQL语句。<selectid="searchUserByPage"parameterType="HashMap"resultType="HashMap">  SELECT    DISTINCTu.id,    u.name,    u.sex,    u.tel,    u.email,    d.dept_nameASdept,    u.hiredate,    u.root,    u.status,    (SELECTGROUP_CONCAT(role_nameseparator",")FROMtb_roleWHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)))ASroles  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  LEFTJOINtb_deptdONu.dept_id=d.id  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDd.id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if>  LIMIT#{start},#{length}</select><selectid="searchUserCount"parameterType="HashMap"resultType="long">  SELECT     COUNT(DISTINCTu.id)  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDu.dept_id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if></select>在UserServiceImpl.java类中实现抽象方法。publicclassUserServiceImplimplementsUserService{  ……  @Override  publicPageUtilssearchUserByPage(HashMapparam){    ArrayList<HashMap>list=userDao.searchUserByPage(param);    longcount=userDao.searchUserCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在Vue的声明周期回调函数created()中调用了loadRoleList()和loadDeptList()函数,所以可以保证用户管理页面显示的时候,部门列表和角色列表的数据都是从数据库中查询得来的。<el-table  :data="dataList"  border  v-loading="dataListLoading"  @selection-change="selectionChangeHandle"  cell-style="padding:4px0"  style="width:100%;"  size="medium">  <el-table-columntype="selection"header-align="center"align="center"width="50"/>  <el-table-columntype="index"header-align="center"align="center"width="100"label="序号">    <template#default="scope">      <span>{{(pageIndex-1)*pageSize+scope.$index+1}}</span>    </template>  </el-table-column>  <el-table-columnprop="name"header-align="center"align="center"min-width="100"label="姓名"/>  <el-table-columnprop="sex"header-align="center"align="center"min-width="60"label="性别"/>  <el-table-columnprop="tel"header-align="center"align="center"min-width="130"label="电话"/>  <el-table-column    prop="email"    header-align="center"    align="center"    min-width="240"    label="邮箱"    :show-overflow-tooltip="true"  />  <el-table-columnprop="hiredate"header-align="center"align="center"min-width="130"label="入职日期"/>  <el-table-column    prop="roles"    header-align="center"    align="center"    min-width="150"    label="角色"    :show-overflow-tooltip="true"  />  <el-table-columnprop="dept"header-align="center"align="center"min-width="120"label="部门"/>  <el-table-columnprop="status"header-align="center"align="center"min-width="100"label="状态"/>  <el-table-columnheader-align="center"align="center"width="150"label="操作">    <template#default="scope">      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        @click="updateHandle(scope.row.id)"      >        修改      </el-button>      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        :disabled="scope.row.status=='离职'||scope.row.root"        @click="dimissHandle(scope.row.id)"      >        离职      </el-button>      <el-button        type="text"        size="medium"        :disabled="scope.row.root"        v-if="isAuth(['ROOT','USER:DELETE'])"        @click="deleteHandle(scope.row.id)"      >        删除      </el-button>    </template>  </el-table-column></el-table>在TbRoleDao.xml文件中,定义SQL用于查询角色分页数据。看上面的截图可知,在角色管理页面上,只有按照角色名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个角色拥有的权限数量,而且tb_role表的permissions字段是JSON数组格式,所以我们统计数组的元素数量,就是该角色拥有的权限数量。恰好JSON_LENGTH()函数能获取JSON数组的长度,所以我就用在SQL语句中了。@Data@Schema(description="查询角色分页表单")publicclassSearchRoleByPageForm{  @Pattern(regexp="^[0-9a-zA-Z\\u4e00-\\u9fa5]{1,10}$",message="roleName内容不正确")  @Schema(description="角色名称")  privateStringroleName;  @NotNull(message="page不能为空")  @Min(value=1,message="page不能小于1")  @Schema(description="页数")  privateIntegerpage;  @NotNull(message="length不能为空")  @Range(min=10,max=50,message="length必须在10~50之间")  @Schema(description="每页记录数")  privateIntegerlength;}在TbDeptDao.xml文件中,定义SQL用于查询部门分页数据。看上面的截图可知,在部门管理页面上,只有按照部门名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个部门拥有的员工数量,所以用了COUNT()汇总函数。publicclassDeptServiceImplimplementsDeptService{  ……  @Override  publicPageUtilssearchDeptByPage(HashMapparam){    ArrayList<HashMap>list=deptDao.searchDeptByPage(param);    longcount=deptDao.searchDeptCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在DeptController.java类中,定义Web方法,然后大家就可以在Swagger页面测试Web方法了。publicclassDeptController{……  @PostMapping("/searchDeptByPage")  @Operation(summary="查询部门分页数据")  @SaCheckPermission(value={"ROOT","DEPT:SELECT"},mode=SaMode.OR)  publicRsearchDeptByPage(@Valid@RequestBodySearchDeptByPageFormform){    intpage=form.getPage();    intlength=form.getLength();    intstart=(page-1)*length;    HashMapparam=JSONUtil.parse(form).toBean(HashMap.class);    param.put("start",start);    PageUtilspageUtils=deptService.searchDeptByPage(param);    returnR.ok().put("page",pageUtils);  }}本文到此告一段落,感谢大家的观看!
  • 所需E币: 1
    时间: 2023-4-25 14:52
    大小: 149.45KB
    上传者: 张红川
    基于凌阳单片机实现的办公电器语音控制系统.pdf
  • 所需E币: 5
    时间: 2023-2-11 11:35
    大小: 3.41MB
    上传者: ZHUANG
    居家办公Wi-Fi网络设计方案的研究与实现
  • 所需E币: 0
    时间: 2023-2-8 14:26
    大小: 1.81MB
    上传者: ZHUANG
    办公计算机网络应用中泄密隐患排查与防范要点
  • 所需E币: 5
    时间: 2022-9-26 22:24
    大小: 794.25KB
    上传者: czd886
    人脸识别技术在行政办公中的应用.
  • 所需E币: 2
    时间: 2022-3-4 10:52
    大小: 242.23KB
    上传者: ZHUANG
    基于流演算和FLUX的办公室机器人控制
  • 所需E币: 1
    时间: 2021-3-10 20:45
    大小: 518.42KB
    上传者: czd886
    办公用自动存取储物柜的设计与开发
  • 所需E币: 0
    时间: 2020-12-19 21:52
    大小: 103.31KB
    上传者: samewell
    更改DNS让办公室网络恢复正常
  • 所需E币: 0
    时间: 2020-5-30 19:29
    大小: 2.26MB
    上传者: Goodluck2020
    中国联通-5G+安全云办公白皮书
  • 所需E币: 5
    时间: 2020-1-15 11:19
    大小: 149.49KB
    上传者: 978461154_qq
    办公室项目管理简介科技正在改变着项目管理的前景,然而令人眼界大开的技术本身并不能确保项目的成功。不管是对建筑、宇航、水力电器或是信息技术的项目进行管理,挑战都是相似的。如今,各个企业在全球范围内寻找合作伙伴、运作项目,顾客们希望更加迅速、便宜地得到高质量的商品,竞争无疑是激烈的。成功的公司,如EDS、IBM、朗讯、Bechtel、惠普及AseaBrownBoveri等公司都认识到它们的市场份额与未来增长依赖于有能力的项目管理。这些公司多年来一直致力于研究新的项目管理方法和培养项目经理。目前又将重点转移到项目办公室上来,使之保持稳定一致并使项目管理成为其竞争优势。此文概括了全球的大环境,以及环境带来的挑战与机遇,描述了公司如何运用项目管理与项目办公室,来更有效地管理大型国际项目。在信息科技产业中,也有很多由于项目管理不善而造成的失败项目。比如,《计算机世界》(ComputerWorld)中的一篇文章里谈到,只有25%的信息技术项目在预算内按时完成,并可使客户满意。有一半的已完成项目的预算都被高估了60%到190%,并且其可用性只是原来承诺的70%。《PM网络》(PMNetwork)中一项研究结果表明,大约70%的开放系统项目都会在实物方面发生时间拖延、超出运算等问题,或者不能达到一些重要用户的预期。这些令人吃惊的统计数字反映了信息科技产业中项目管理的困难,而若是在全球的大环境下进行就更加增加了管理的难度。在此文的上下文中,全球管理意味着将资源在一国国内或在国家之间进行配置。LesAlberthal在担任EDS公司的首席执行官时曾说过:最佳的全球公司,是那些能够认识并使用其专门技术、观念及人们技能的公司。倘若每进入一个国家,都要重新创立公司的资产,既不聪明,同时在经济上也不可行。如今越来越多的公司都认识到管理大型……