JayChou 2 weeks ago
commit 2ffb08972f
  1. 115
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expert/controller/ExpertController.java
  2. 14
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expproject/controller/ExpprojectController.java
  3. 16
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/expproject/entity/ExpproVo.java
  4. 2
      jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/instrument/controller/InstrumentController.java
  5. 22
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
  6. 148
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
  7. 3
      jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
  8. 3
      jeecgboot-vue3/src/locales/lang/zh-CN/sys.ts
  9. 10
      jeecgboot-vue3/src/views/dashboard/workbench/components/DynamicInfo.vue
  10. 86
      jeecgboot-vue3/src/views/dashboard/workbench/components/ProjectCard.vue
  11. 26
      jeecgboot-vue3/src/views/dashboard/workbench/components/QuickNav.vue
  12. 32
      jeecgboot-vue3/src/views/dashboard/workbench/components/api.ts
  13. 10
      jeecgboot-vue3/src/views/dashboard/workbench/components/data.ts
  14. 20
      jeecgboot-vue3/src/views/declarant/user.data.ts
  15. 7
      jeecgboot-vue3/src/views/declarantUnit/declarantUnitList.vue
  16. 2
      jeecgboot-vue3/src/views/expert/adminback/Expert.api.ts
  17. 17
      jeecgboot-vue3/src/views/system/depart/components/DepartLeftTree.vue
  18. 4
      jeecgboot-vue3/src/views/system/depart/depart.api.ts
  19. 9
      jeecgboot-vue3/src/views/system/depart/depart.data.ts
  20. 9
      jeecgboot-vue3/src/views/system/departUser/depart.user.data.ts
  21. 19
      jeecgboot-vue3/src/views/system/loginmini/MiniRegister4faren.vue
  22. 25
      jeecgboot-vue3/src/views/system/loginmini/MiniRegister4shenbaoren.vue
  23. 1
      jeecgboot-vue3/types/store.d.ts

@ -29,6 +29,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.demo.expproject.entity.Expandpro;
import org.jeecg.modules.demo.expproject.entity.ExpproVo;
import org.jeecg.modules.demo.expproject.entity.Expproject;
import org.jeecg.modules.demo.expproject.service.IExpandproService;
import org.jeecg.modules.demo.expproject.service.IExpprojectService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDepartService;
@ -69,6 +74,12 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
private ISysDepartService sysDepartService;
@Autowired
private IDisciplineFieidService disciplineFieidService;
@Autowired
private IExpprojectService expprojectService;
@Autowired
private IExpandproService expandproService;
/**
* 分页列表查询
@ -88,6 +99,39 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
HttpServletRequest req) {
//用于查看所有信息无论是否审核,无论哪个部门
QueryWrapper<Expert> queryWrapper = QueryGenerator.initQueryWrapper(expert, req.getParameterMap());
queryWrapper.eq("isdone","Y");
Page<Expert> page = new Page<Expert>(pageNo, pageSize);
IPage<Expert> pageList = expertService.page(page, queryWrapper);
pageList.getRecords().forEach(experttemp -> {
//开始用于修改数据
SysUser sysUser = sysUserService.query().eq("username",experttemp.getSeusername()).one();
String depid = expertService.getdeps(sysUser.getId());
SysDepart sysDepart = sysDepartService.getById(depid);
experttemp.setRealname(sysUser.getRealname());
experttemp.setWorkon(sysUser.getWorkNo());
experttemp.setSex(sysUser.getSex());
experttemp.setTopPic(sysUser.getAvatar());
experttemp.setPhone(sysUser.getPhone());
experttemp.setEmails(sysUser.getEmail());
experttemp.setSsdep(sysDepart.getDepartName());
experttemp.setPsd(sysUser.getPassword());
experttemp.setSepsd(sysUser.getPassword());
});
return Result.OK(pageList);
}
@ApiOperation(value="专家管理-分页列表查询/管理员角色", notes="专家管理-分页列表查询/管理员角色")
@GetMapping(value = "/listadminstatic")
public Result<IPage<Expert>> listadminstatic(Expert expert,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
//用于查看所有信息无论是否审核,无论哪个部门
QueryWrapper<Expert> queryWrapper = QueryGenerator.initQueryWrapper(expert, req.getParameterMap());
queryWrapper.eq("isdone","Y");
queryWrapper.eq("adminopen","2");
queryWrapper.eq("compopen","2");
Page<Expert> page = new Page<Expert>(pageNo, pageSize);
IPage<Expert> pageList = expertService.page(page, queryWrapper);
pageList.getRecords().forEach(experttemp -> {
@ -138,6 +182,7 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
//用于查看本县区下面的专家信息无论是否审核,无论哪个部门
QueryWrapper<Expert> queryWrapper = QueryGenerator.initQueryWrapper(expert, req.getParameterMap());
queryWrapper.eq("isdone","Y");
queryWrapper.in("seusername",usernames);
Page<Expert> page = new Page<Expert>(pageNo, pageSize);
IPage<Expert> pageList = expertService.page(page, queryWrapper);
@ -687,6 +732,8 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
user.setDelFlag(CommonConstant.DEL_FLAG_0);
sysUserService.saveUser(user, "1843478958968647681", ssdep, "");
Expert expert = new Expert();
expert.setAdminopen("1");
expert.setCompopen("1");
expert.setSeusername(username);
expertService.save(expert);
return Result.OK("注册成功");
@ -764,6 +811,40 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
List<Expert> expertList = expertService.query().eq("adminopen","2").eq("compopen","2").eq("expsture","Y").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---异常专家数--请假", notes="管理员专家数据---异常专家数--请假")
@GetMapping(value = "/expdatanumberycxj")
public Result<Integer> expdatanumberycxj() {
List<Expert> expertList = expertService.query().eq("adminopen","2").eq("compopen","2").eq("expsture","Y").eq("errinfo","2").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---异常专家数--出差", notes="管理员专家数据---异常专家数--出差")
@GetMapping(value = "/expdatanumberyccc")
public Result<Integer> expdatanumberyccc() {
List<Expert> expertList = expertService.query().eq("adminopen","2").eq("compopen","2").eq("expsture","Y").eq("errinfo","1").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---异常专家数--其他", notes="管理员专家数据---异常专家数--其他")
@GetMapping(value = "/expdatanumberycqt")
public Result<Integer> expdatanumberycqt() {
List<Expert> expertList = expertService.query().eq("adminopen","2").eq("compopen","2").eq("expsture","Y").eq("errinfo","3").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---专家待提交/未审核", notes="管理员专家数据---专家待提交/未审核")
@GetMapping(value = "/expdatawtjsh")
public Result<Integer> expdatawtjsh() {
List<Expert> expertList = expertService.query().eq("adminopen","1").or().eq("compopen","1").or().eq("isdone","N").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---专家已审核", notes="管理员专家数据---专家已审核")
@GetMapping(value = "/expdatayish")
public Result<Integer> expdatayish() {
List<Expert> expertList = expertService.query().eq("adminopen","2").eq("compopen","2").eq("isdone","Y").list();
return Result.OK(expertList.size());
}
@ApiOperation(value="管理员专家数据---不同的领域专家数", notes="管理员专家数据---不同的领域专家数")
@GetMapping(value = "/expdatanumberdiffect")
@ -780,4 +861,38 @@ public class ExpertController extends JeecgController<Expert, IExpertService> {
return Result.OK(expdefVoList);
}
//统计项目的总个数
@ApiOperation(value="管理员专家数据---查询项目个数", notes="管理员专家数据---查询项目个数")
@GetMapping(value = "/projectnumber")
public Result<?> projectnumber() {
List<Expproject> expprojectList = expprojectService.list();
return Result.OK(expprojectList.size());
}
@ApiOperation(value="管理员专家数据---查询项目和项目需要的专家", notes="管理员专家数据---查询项目和项目需要的专家")
@GetMapping(value = "/findprojectandnumber")
public Result<List<ExpproVo>> findprojectandnumber() {
List<ExpproVo> expproVos =new ArrayList<>();
List<Expproject> expprojectList = expprojectService.list();
for (Expproject expproject : expprojectList) {
ExpproVo expproVo = new ExpproVo();
expproVo.setCreateTime(expproject.getCreateTime());
expproVo.setProname(expproject.getProname());
expproVo.setNeedexp(expproject.getNeedexp());
expproVo.setExptype(disciplineFieidService.query().eq("id",expproject.getExptype()).one().getName());
List<Expandpro> expandpros =expandproService.query().eq("expprojectid",expproject.getId()).list();
if (!expandpros.isEmpty()){
expproVo.setExperts(expandpros.stream().map(Expandpro::getExpname).collect(Collectors.toList()));
}
expproVos.add(expproVo);
}
expproVos.sort(Comparator.comparing(ExpproVo::getCreateTime).reversed());
// 截取前 6 条数据
if (expproVos.size() > 6) {
expproVos = expproVos.subList(0, 6);
}
return Result.OK(expproVos);
}
}

@ -2,7 +2,9 @@ package org.jeecg.modules.demo.expproject.controller;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URLDecoder;
import java.security.SecureRandom;
import java.util.*;
import java.util.stream.Collectors;
@ -141,12 +143,17 @@ public class ExpprojectController {
public Result<String> add(@RequestBody ExpprojectPage expprojectPage) {
Expproject expproject = new Expproject();
BeanUtils.copyProperties(expprojectPage, expproject);
if (expproject.getNeedexp()>=expprojectPage.getExpandproList().size()) {
if (!expprojectPage.getExpandproList().isEmpty()) {
if (expproject.getNeedexp() >= expprojectPage.getExpandproList().size()) {
expprojectService.saveMain(expproject, expprojectPage.getExpandproList());
return Result.OK("添加成功!");
}else {
} else {
return Result.error("确定项目专家数量");
}
}else {
expprojectService.saveMain(expproject, expprojectPage.getExpandproList());
return Result.OK("添加成功!");
}
}
/**
@ -241,9 +248,10 @@ public class ExpprojectController {
List<String> usernamelist = expandproService.getusernamelist();
Collections.shuffle(usernamelist);
List<String> randomUsers = getRandomUsers(usernamelist, a);
Expandpro expandpro =new Expandpro();
List<Expert> expertList = expertService.query().in("seusername",randomUsers).list();
for (int i=0;i<expertList.size();i++){
Expandpro expandpro =new Expandpro();
SysUser sysUser = sysUserService.query().eq("username",expertList.get(i).getSeusername()).one();
expandpro.setExpid(expertList.get(i).getSeusername());
expandpro.setExpprojectid(id);

@ -0,0 +1,16 @@
package org.jeecg.modules.demo.expproject.entity;
import lombok.Data;
import org.jeecg.modules.demo.expert.entity.Expert;
import java.util.Date;
import java.util.List;
@Data
public class ExpproVo {
private Date createTime;
private String proname;
private String exptype;
private Integer needexp;
private List<String> experts;
}

@ -205,7 +205,7 @@ public class InstrumentController extends JeecgController<Instrument, IInstrumen
IPage<Instrument> pageList = instrumentService.page(page, queryWrapper);
return Result.OK(pageList);
}
if(loginUser.getRoleCode().indexOf("yuwukeshi_admin")!= -1){
if(loginUser.getRoleCode().indexOf("kejiju_admin")!= -1){
//市直业务科室管理员角色
queryWrapper.in("state",2,3);
queryWrapper.in("flag",0,2);

@ -4,10 +4,12 @@ import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.jeecg.common.api.vo.Result;
@ -21,10 +23,7 @@ import org.jeecg.common.util.*;
import org.jeecg.common.util.encryption.EncryptedString;
import org.jeecg.config.JeecgBaseConfig;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysRoleIndex;
import org.jeecg.modules.system.entity.SysTenant;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.entity.*;
import org.jeecg.modules.system.model.SysLoginModel;
import org.jeecg.modules.system.service.*;
import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
@ -38,7 +37,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author scott
@ -68,6 +66,12 @@ public class LoginController {
@Autowired
private JeecgBaseConfig jeecgBaseConfig;
@Autowired
private ISysUserRoleService sysUserRoleService;
@Autowired
private ISysRoleService sysRoleService;
private final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890";
@ApiOperation("登录接口")
@ -162,6 +166,14 @@ public class LoginController {
//update-end---author:scott ---date::2022-06-20 for:vue3前端,支持自定义首页--------------
log.info("2 获取用户信息耗时 (首页面配置)" + (System.currentTimeMillis() - start) + "毫秒");
List<SysUserRole> userRole = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, sysUser.getId()));
if(ObjectUtils.isNotEmpty(userRole)){
String rollId = userRole.get(0).getRoleId();
SysRole sysRole = sysRoleService.getById(rollId);
if(ObjectUtils.isNotEmpty(sysRole)){
sysUser.setRoleCode(sysRole.getRoleCode());
}
}
obj.put("userInfo",sysUser);
obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
log.info("3 获取用户信息耗时 (字典数据)" + (System.currentTimeMillis() - start) + "毫秒");

@ -1,6 +1,5 @@
package org.jeecg.modules.system.controller;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -17,7 +16,6 @@ import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.YouBianCodeUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.system.entity.SysDepart;
@ -67,6 +65,7 @@ public class SysDepartController {
private ISysUserService sysUserService;
@Autowired
private ISysUserDepartService sysUserDepartService;
/**
* 查询数据 查出我的部门,并以树结构数据格式响应给前端
*
@ -77,22 +76,22 @@ public class SysDepartController {
Result<List<SysDepartTreeModel>> result = new Result<>();
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
try {
if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){
if (oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals(CommonConstant.USER_IDENTITY_2)) {
//update-begin--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06
String departIds = user.getDepartIds();
if(StringUtils.isNotBlank(departIds)){
if (StringUtils.isNotBlank(departIds)) {
List<SysDepartTreeModel> list = sysDepartService.queryMyDeptTreeList(departIds);
result.setResult(list);
}
//update-end--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06
result.setMessage(CommonConstant.USER_IDENTITY_2.toString());
result.setSuccess(true);
}else{
} else {
result.setMessage(CommonConstant.USER_IDENTITY_1.toString());
result.setSuccess(true);
}
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return result;
}
@ -111,36 +110,60 @@ public class SysDepartController {
// if (CollectionUtils.isEmpty(list)) {
// list = sysDepartService.queryTreeList();
// }
if(oConvertUtils.isNotEmpty(ids)){
if (oConvertUtils.isNotEmpty(ids)) {
List<SysDepartTreeModel> departList = sysDepartService.queryTreeList(ids);
result.setResult(departList);
}else{
} else {
List<SysDepartTreeModel> list = sysDepartService.queryTreeList();
result.setResult(list);
}
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return result;
}
/**
* 异步查询部门list
*
* @param parentId 父节点 异步加载时传递
* @param ids 前端回显是传递
* @param primaryKey 主键字段id或者orgCode
* @return
*/
@RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET)
public Result<List<SysDepartTreeModel>> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId,@RequestParam(name = "ids", required = false) String ids, @RequestParam(name = "primaryKey", required = false) String primaryKey) {
public Result<List<SysDepartTreeModel>> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId, @RequestParam(name = "ids", required = false) String ids, @RequestParam(name = "primaryKey", required = false) String primaryKey) {
Result<List<SysDepartTreeModel>> result = new Result<>();
try {
List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid(parentId,ids, primaryKey);
List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid(parentId, ids, primaryKey);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
result.setSuccess(false);
result.setMessage("查询失败");
}
return result;
}
/**
* @description: 根据当前登录角色查询 下级部门数据
* @param: [parentId, ids, primaryKey]
* @return: org.jeecg.common.api.vo.Result<java.util.List<org.jeecg.modules.system.model.SysDepartTreeModel>>
* @author: z.h.c
* @date: 24/11/9 16:07
*/
@RequestMapping(value = "/queryDepartTreeSync4ZhuGuanBuMen", method = RequestMethod.GET)
public Result<List<SysDepartTreeModel>> queryDepartTreeSync4ZhuGuanBuMen(@RequestParam(name = "parentOrgCode", required = false) String parentOrgCode, @RequestParam(name = "ids", required = false) String ids, @RequestParam(name = "primaryKey", required = false) String primaryKey) {
Result<List<SysDepartTreeModel>> result = new Result<>();
SysDepart sysDepart = sysDepartService.getOne(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getOrgCode, parentOrgCode));
try {
List<SysDepartTreeModel> list = sysDepartService.queryTreeListByPid(sysDepart.getId(), ids, primaryKey);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(), e);
result.setSuccess(false);
result.setMessage("查询失败");
}
@ -189,7 +212,13 @@ public class SysDepartController {
// List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>()
QueryWrapper<SysDepart> queryWrapper = QueryGenerator.initQueryWrapper(depart, req.getParameterMap());
queryWrapper.eq("del_flag", 0);
//单位法人角色时,只查询自己部门
if ("faren_admin".equals(user.getRoleCode())) {
queryWrapper.eq("id", user.getOrgId());
} else { // 查询下级部门
queryWrapper.eq("parent_id", user.getOrgId());
}
return sysDepartService.queryPageList(req, queryWrapper, pageSize, pageNo);
}
@ -211,7 +240,7 @@ public class SysDepartController {
String[] arr = ids.split(",");
for (String id : arr) {
if (oConvertUtils.isNotEmpty(id)) {
sysDepartService.lambdaUpdate().eq(SysDepart::getId,id).set(SysDepart::getStatus,status).update();
sysDepartService.lambdaUpdate().eq(SysDepart::getId, id).set(SysDepart::getStatus, status).update();
}
}
} catch (Exception e) {
@ -229,9 +258,9 @@ public class SysDepartController {
* @param sysDepart
* @return
*/
@RequiresPermissions("system:depart:add")
// @RequiresPermissions("system:depart:add")
@RequestMapping(value = "/add", method = RequestMethod.POST)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<SysDepart> add(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
Result<SysDepart> result = new Result<SysDepart>();
String username = JwtUtil.getUserNameByToken(request);
@ -243,7 +272,7 @@ public class SysDepartController {
// FindsDepartsChildrenUtil.clearDepartIdModel();
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
result.error500("操作失败");
}
return result;
@ -255,9 +284,9 @@ public class SysDepartController {
* @param sysDepart
* @return
*/
@RequiresPermissions("system:depart:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
// @RequiresPermissions("system:depart:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<SysDepart> edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
String username = JwtUtil.getUserNameByToken(request);
sysDepart.setUpdateBy(username);
@ -280,19 +309,20 @@ public class SysDepartController {
/**
* 通过id删除
*
* @param id
* @return
*/
@RequiresPermissions("system:depart:delete")
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
public Result<SysDepart> delete(@RequestParam(name="id",required=true) String id) {
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<SysDepart> delete(@RequestParam(name = "id", required = true) String id) {
Result<SysDepart> result = new Result<SysDepart>();
SysDepart sysDepart = sysDepartService.getById(id);
if(sysDepart==null) {
if (sysDepart == null) {
result.error500("未找到对应实体");
}else {
} else {
sysDepartService.deleteDepart(id);
//清除部门树内存
//FindsDepartsChildrenUtil.clearSysDepartTreeList();
@ -311,7 +341,7 @@ public class SysDepartController {
*/
@RequiresPermissions("system:depart:deleteBatch")
@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<SysDepart> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
Result<SysDepart> result = new Result<SysDepart>();
@ -356,7 +386,7 @@ public class SysDepartController {
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return result;
}
@ -370,15 +400,15 @@ public class SysDepartController {
* @return
*/
@RequestMapping(value = "/searchBy", method = RequestMethod.GET)
public Result<List<SysDepartTreeModel>> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord,@RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) {
public Result<List<SysDepartTreeModel>> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord, @RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) {
Result<List<SysDepartTreeModel>> result = new Result<List<SysDepartTreeModel>>();
//部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String departIds = null;
if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){
if (oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals(CommonConstant.USER_IDENTITY_2)) {
departIds = user.getDepartIds();
}
List<SysDepartTreeModel> treeList = this.sysDepartService.searchByKeyWord(keyWord,myDeptSearch,departIds);
List<SysDepartTreeModel> treeList = this.sysDepartService.searchByKeyWord(keyWord, myDeptSearch, departIds);
if (treeList == null || treeList.size() == 0) {
result.setSuccess(false);
result.setMessage("未查询匹配数据!");
@ -395,10 +425,10 @@ public class SysDepartController {
* @param request
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(SysDepart sysDepart,HttpServletRequest request) {
public ModelAndView exportXls(SysDepart sysDepart, HttpServletRequest request) {
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
sysDepart.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
}
//------------------------------------------------------------------------------------------------
@ -425,7 +455,7 @@ public class SysDepartController {
//step.2 组装导出数据
Integer tenantId = sysDepart == null ? null : sysDepart.getTenantId();
//update-begin---author:wangshuai---date:2024-07-05---for:【TV360X-1671】部门管理不支持选中的记录导出---
List<SysDepartExportVo> sysDepartExportVos = sysDepartService.getExportDepart(tenantId,idList);
List<SysDepartExportVo> sysDepartExportVos = sysDepartService.getExportDepart(tenantId, idList);
//update-end---author:wangshuai---date:2024-07-05---for:【TV360X-1671】部门管理不支持选中的记录导出---
//导出文件名称
mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表");
@ -435,7 +465,7 @@ public class SysDepartController {
"1、标题为第三行,部门路径和部门名称的标题不允许修改,否则会匹配失败;第四行为数据填写范围;\n" +
"2、部门路径用英文字符/分割,部门名称为部门路径的最后一位;\n" +
"3、部门从一级名称开始创建,如果有同级就需要多添加一行,如研发部/研发一部;研发部/研发二部;\n" +
"4、自定义的部门编码需要满足规则才能导入。如一级部门编码为A01,那么子部门为A01A01,同级子部门为A01A02,编码固定为三位,首字母为A-Z,后两位为数字0-99,依次递增;", "导出人:"+user.getRealname(), "导出信息"));
"4、自定义的部门编码需要满足规则才能导入。如一级部门编码为A01,那么子部门为A01A01,同级子部门为A01A02,编码固定为三位,首字母为A-Z,后两位为数字0-99,依次递增;", "导出人:" + user.getRealname(), "导出信息"));
mv.addObject(NormalExcelConstants.DATA_LIST, sysDepartExportVos);
//update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径---
@ -453,7 +483,7 @@ public class SysDepartController {
*/
@RequiresPermissions("system:depart:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
List<String> errorMessageList = new ArrayList<>();
@ -518,7 +548,7 @@ public class SysDepartController {
//update-begin---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径---
listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepartExportVo.class, params);
sysDepartService.importSysDepart(listSysDeparts,errorMessageList);
sysDepartService.importSysDepart(listSysDeparts, errorMessageList);
//update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径---
//清空部门缓存
@ -528,8 +558,8 @@ public class SysDepartController {
redisTemplate.delete(keys4);
return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList);
} catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
log.error(e.getMessage(), e);
return Result.error("文件导入失败:" + e.getMessage());
} finally {
try {
file.getInputStream().close();
@ -544,6 +574,7 @@ public class SysDepartController {
/**
* 查询所有部门信息
*
* @return
*/
@GetMapping("listAll")
@ -551,37 +582,38 @@ public class SysDepartController {
Result<List<SysDepart>> result = new Result<>();
LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
query.orderByAsc(SysDepart::getOrgCode);
if(oConvertUtils.isNotEmpty(id)){
if (oConvertUtils.isNotEmpty(id)) {
String[] arr = id.split(",");
query.in(SysDepart::getId,arr);
query.in(SysDepart::getId, arr);
}
List<SysDepart> ls = this.sysDepartService.list(query);
result.setSuccess(true);
result.setResult(ls);
return result;
}
/**
* 查询数据 查出所有部门,并以树结构数据格式响应给前端
*
* @return
*/
@RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET)
public Result<Map<String,Object>> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) {
Result<Map<String,Object>> result = new Result<>();
public Result<Map<String, Object>> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) {
Result<Map<String, Object>> result = new Result<>();
try {
Map<String,Object> map=new HashMap(5);
Map<String, Object> map = new HashMap(5);
List<SysDepartTreeModel> list = sysDepartService.queryTreeByKeyWord(keyWord);
//根据keyWord获取用户信息
LambdaQueryWrapper<SysUser> queryUser = new LambdaQueryWrapper<SysUser>();
queryUser.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0);
queryUser.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord));
List<SysUser> sysUsers = this.sysUserService.list(queryUser);
map.put("userList",sysUsers);
map.put("departList",list);
map.put("userList", sysUsers);
map.put("departList", list);
result.setResult(map);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return result;
}
@ -619,9 +651,9 @@ public class SysDepartController {
}
/**
* @功能根据id 批量查询
* @param deptIds
* @return
* @功能根据id 批量查询
*/
@RequestMapping(value = "/queryByIds", method = RequestMethod.GET)
public Result<Collection<SysDepart>> queryByIds(@RequestParam(name = "deptIds") String deptIds) {
@ -635,40 +667,42 @@ public class SysDepartController {
}
@GetMapping("/getMyDepartList")
public Result<List<SysDepart>> getMyDepartList(){
public Result<List<SysDepart>> getMyDepartList() {
List<SysDepart> list = sysDepartService.getMyDepartList();
return Result.ok(list);
}
/**
* 异步查询部门list
*
* @param parentId 父节点 异步加载时传递
* @return
*/
@RequestMapping(value = "/queryBookDepTreeSync", method = RequestMethod.GET)
public Result<List<SysDepartTreeModel>> queryBookDepTreeSync(@RequestParam(name = "pid", required = false) String parentId,
@RequestParam(name = "tenantId") Integer tenantId,
@RequestParam(name = "departName",required = false) String departName) {
@RequestParam(name = "departName", required = false) String departName) {
Result<List<SysDepartTreeModel>> result = new Result<>();
try {
List<SysDepartTreeModel> list = sysDepartService.queryBookDepTreeSync(parentId, tenantId, departName);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
}
return result;
}
/**
* 通过部门id和租户id获取用户 低代码应用: 用于选择部门负责人
*
* @param departId
* @return
*/
@GetMapping("/getUsersByDepartTenantId")
public Result<List<SysUser>> getUsersByDepartTenantId(@RequestParam("departId") String departId){
public Result<List<SysUser>> getUsersByDepartTenantId(@RequestParam("departId") String departId) {
int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
List<SysUser> sysUserList = sysUserDepartService.getUsersByDepartTenantId(departId,tenantId);
List<SysUser> sysUserList = sysUserDepartService.getUsersByDepartTenantId(departId, tenantId);
return Result.ok(sysUserList);
}
@ -678,7 +712,7 @@ public class SysDepartController {
* @param request
*/
@RequestMapping(value = "/appExportXls")
public ModelAndView appExportXls(SysDepart sysDepart,HttpServletRequest request) {
public ModelAndView appExportXls(SysDepart sysDepart, HttpServletRequest request) {
// Step.1 组装查询条件
int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
@ -688,7 +722,7 @@ public class SysDepartController {
mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表");
mv.addObject(NormalExcelConstants.CLASS, ExportDepartVo.class);
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息"));
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:" + user.getRealname(), "导出信息"));
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
return mv;
}
@ -699,7 +733,7 @@ public class SysDepartController {
* @param request
*/
@RequestMapping(value = "/appImportExcel", method = RequestMethod.POST)
@CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true)
@CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
public Result<?> appImportExcel(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
List<String> errorMessageList = new ArrayList<>();
@ -714,7 +748,7 @@ public class SysDepartController {
params.setNeedSave(true);
try {
listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), ExportDepartVo.class, params);
sysDepartService.importExcel(listSysDeparts,errorMessageList);
sysDepartService.importExcel(listSysDeparts, errorMessageList);
//清空部门缓存
Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
@ -722,8 +756,8 @@ public class SysDepartController {
redisTemplate.delete(keys4);
return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList);
} catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
log.error(e.getMessage(), e);
return Result.error("文件导入失败:" + e.getMessage());
} finally {
try {
file.getInputStream().close();

@ -222,4 +222,7 @@ public class SysUser implements Serializable {
*/
@TableField(exist = false)
private boolean izBindThird;
@TableField(exist = false)
private String roleCode;
}

@ -89,13 +89,16 @@ export default {
// placeholder
accountPlaceholder: '请输入账号',
passwordPlaceholder: '请输入密码',
passwordPlaceholderNotReg: '密码格式不对(包含字母(大小写)数字以及特殊字符,至少8位)',
inputCodePlaceholder: '请输入验证码',
smsPlaceholder: '请输入验证码',
mobilePlaceholder: '请输入手机号码',
mobilePlaceholderNotReg: '手机号格式不对',
mobileCorrectPlaceholder: '请输入正确的手机号码',
policyPlaceholder: '勾选后才能注册',
diffPwd: '两次输入密码不一致',
selectorgPlaceholder: '请选择所属单位',
selectorgPlaceholder4Kejiju: '请选择科技主管部门',
realNamePlaceholder: '请输入姓名',
workNoPlaceholder: '请输入工号',

@ -1,5 +1,5 @@
<template>
<Card title="单个领域专家个数" v-bind="$attrs">
<Card title="项目粗略信息" v-bind="$attrs">
<template #extra>
</template>
@ -8,10 +8,10 @@
<ListItem>
<ListItemMeta>
<template #description>
{{ item.number }}
目评审专家: {{ item.experts.join(', ') }}
</template>
<!-- eslint-disable-next-line -->
<template #title> {{ item.name }} <span v-html="item.desc"> </span> </template>
<template #title> 项目名称{{ item.proname }} 需要的专家数{{item.needexp}} 需要的专家类型{{item.exptype}}<span v-html="item.desc"> </span> </template>
<template #avatar>
<Icon :icon="item.avatar" :size="30" />
</template>
@ -23,7 +23,7 @@
</template>
<script lang="ts" setup>
import { Card, List } from 'ant-design-vue';
import { expdatanumberdiffect } from './api';
import { findprojectandnumber } from './api';
/* import { dynamicInfoItems } from './data';*/
import {getDataListApi, getDataListApiyc} from './api';
import { Icon } from '/@/components/Icon';
@ -33,7 +33,7 @@
const dynamicInfoItems= ref([])
function item03(){
expdatanumberdiffect().then(res => {
findprojectandnumber().then(res => {
console.log("1919219191919",res)
res.forEach(item => {
dynamicInfoItems.value.push(item);

@ -15,22 +15,53 @@
</CardGrid>
<CardGrid class="!md:w-1/3 !w-full">
<span class="flex">
<span class="text-lg ml-4">状态异常的专家数</span>
<span class="text-lg ml-4">已审核状态异常的专家数</span>
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item3 }}</span>
</span>
<div class="flex justify-between text-secondary">
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item3 }}</span>
<span style="font-weight: bold; font-size: em; margin-left: auto; display: inline-block; width: fit-content;">请假{{ item5 }}</span>
<span style="font-weight: bold; font-size: em; margin-left: auto; display: inline-block; width: fit-content;">出差{{ item6 }}</span>
<span style="font-weight: bold; font-size: em; margin-left: auto; display: inline-block; width: fit-content;">出差{{ item7 }}</span>
</div>
</CardGrid>
<CardGrid class="!md:w-1/3 !w-full">
<span class="flex">
<span class="text-lg ml-4">状态正常的专家数</span>
<span class="text-lg ml-4">已审核状态正常的专家数</span>
</span>
<div class="flex justify-between text-secondary">
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item2 }}</span>
</div>
</CardGrid>
<CardGrid class="!md:w-1/3 !w-full">
<span class="flex">
<span class="text-lg ml-4">未提交/待审核专家数</span>
</span>
<div class="flex justify-between text-secondary">
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item8 }}</span>
</div>
</CardGrid>
<CardGrid class="!md:w-1/3 !w-full">
<span class="flex">
<span class="text-lg ml-4">已审核专家数</span>
</span>
<div class="flex justify-between text-secondary">
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item9 }}</span>
</div>
</CardGrid>
<CardGrid class="!md:w-1/3 !w-full">
<span class="flex">
<span class="text-lg ml-4">项目总个数</span>
</span>
<div class="flex justify-between text-secondary">
<span style="font-weight: bold; font-size: 2em; margin-left: auto; display: inline-block; width: fit-content;">{{ item4 }}</span>
</div>
</CardGrid>
<!-- </template>-->
</Card>
@ -39,7 +70,7 @@
import { defineComponent, ref } from 'vue';
import { Card } from 'ant-design-vue';
import { Icon } from '/@/components/Icon';
import { getDataListApi,getDataListApizc,getDataListApiyc } from './api';
import { getDataListApi,getDataListApizc,getDataListApiyc,projectnumber,expdatanumberycxj,expdatanumberyccc,expdatanumberycqt,expdatawtjsh,expdatayish } from './api';
export default defineComponent({
components: { Card, CardGrid: Card.Grid, Icon },
setup() {
@ -67,8 +98,51 @@
})}
item03();
const item4 = ref("0");
function item04(){
projectnumber().then(res => {
item4.value = res
})}
item04();
/*请假*/
const item5 = ref("0");
function item05(){
expdatanumberycxj().then(res => {
item5.value = res
})}
item05();
/*出差*/
const item6 = ref("0");
function item06(){
expdatanumberyccc().then(res => {
item6.value = res
})}
item06();
return {item1,item2,item3}
/*其他*/
const item7 = ref("0");
function item07(){
expdatanumberycqt().then(res => {
item7.value = res
})}
item07();
/*未提交/待审核转家属*/
const item8 = ref("0");
function item08(){
expdatawtjsh().then(res => {
item8.value = res
})}
item08();
/*审核转家属*/
const item9 = ref("0");
function item09(){
expdatayish().then(res => {
item9.value = res
})}
item09();
return {item1,item2,item3,item4,item5,item6,item7,item8,item9}
},

@ -1,19 +1,33 @@
<template>
<!-- <Card title="快捷导航" v-bind="$attrs">
<template v-for="item in navItems" :key="item">
<Card title="不同领域专家个数" v-bind="$attrs">
<template v-for="item in dynamicInfoItems" :key="item">
<CardGrid>
<span class="flex flex-col items-center">
<Icon :icon="item.icon" :color="item.color" size="20" />
<span class="text-md mt-2">{{ item.title }}</span>
<!-- <Icon :icon="item.icon" :color="item.color" size="20" />-->
<span class="text-md mt-2">{{ item.name }}</span>
<span class="text-md mt-2">{{item.number}}</span>
</span>
</CardGrid>
</template>
</Card>-->
</Card>
</template>
<script lang="ts" setup>
import { Card } from 'ant-design-vue';
import { navItems } from './data';
/*import { navItems } from './data';*/
import { Icon } from '/@/components/Icon';
import {ref} from "vue";
import {expdatanumberdiffect} from "@/views/dashboard/workbench/components/api";
const dynamicInfoItems= ref([])
function item03(){
expdatanumberdiffect().then(res => {
console.log("1919219191919",res)
res.forEach(item => {
dynamicInfoItems.value.push(item);
});
})}
item03();
const CardGrid = Card.Grid;
</script>

@ -8,6 +8,13 @@ enum Api {
zclist = '/expert/expert/expdatanumberzc',
lyzjlist = '/expert/expert/expdatanumberdiffect',
yclist= '/expert/expert/expdatanumberyc',
pronumber= '/expert/expert/projectnumber',
findprojectandnumberapi= '/expert/expert/findprojectandnumber',
expdatanumberycxjapi= '/expert/expert/expdatanumberycxj',
expdatanumberycccapi= '/expert/expert/expdatanumberyccc',
expdatanumberycqtapi= '/expert/expert/expdatanumberycqt',
expdatawtjshapi= '/expert/expert/expdatawtjsh',
expdatayishapi= '/expert/expert/expdatayish',
}
export function getDataListApi() {
@ -26,3 +33,28 @@ export function getDataListApiyc() {
export function expdatanumberdiffect() {
return defHttp.get({ url: Api.lyzjlist });
}
export function projectnumber() {
return defHttp.get({ url: Api.pronumber });
}
export function findprojectandnumber() {
return defHttp.get({ url: Api.findprojectandnumberapi });
}
export function expdatanumberycxj() {
return defHttp.get({ url: Api.expdatanumberycxjapi });
}
export function expdatanumberyccc() {
return defHttp.get({ url: Api.expdatanumberycccapi });
}
export function expdatanumberycqt() {
return defHttp.get({ url: Api.expdatanumberycqtapi });
}
export function expdatawtjsh() {
return defHttp.get({ url: Api.expdatawtjshapi });
}
export function expdatayish() {
return defHttp.get({ url: Api.expdatayishapi });
}

@ -51,6 +51,16 @@ export const navItems: NavItem[] = [
icon: 'ion:bar-chart-outline',
color: '#00d8ff',
},
{
title: '权限管理',
icon: 'ion:key-outline',
color: '#4daf1bc9',
},
{
title: '图表',
icon: 'ion:bar-chart-outline',
color: '#00d8ff',
},
];
export const dynamicInfoItems: DynamicInfoItem[] = [

@ -175,7 +175,7 @@ export const formSchema: FormSchema[] = [
required: true,
component: 'Input',
},
{
/*{
label: '工号',
field: 'workNo',
required: true,
@ -190,7 +190,7 @@ export const formSchema: FormSchema[] = [
componentProps: {
labelKey: 'name',
},
},
},*/
{
label: '角色',
field: 'selectedroles',
@ -234,7 +234,7 @@ export const formSchema: FormSchema[] = [
};
},
},
{
/*{
label: '租户',
field: 'relTenantIds',
component: 'ApiSelect',
@ -263,8 +263,8 @@ export const formSchema: FormSchema[] = [
},
};
},
},
{
},*/
/*{
label: '负责部门',
field: 'departIds',
component: 'Select',
@ -272,7 +272,7 @@ export const formSchema: FormSchema[] = [
mode: 'multiple',
},
ifShow: ({ values }) => values.userIdentity == 2,
},
},*/
{
label: '头像',
field: 'avatar',
@ -320,13 +320,13 @@ export const formSchema: FormSchema[] = [
];
},
},
{
/*{
label: '座机',
field: 'telephone',
component: 'Input',
rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
},
{
},*/
/*{
label: '工作流引擎',
field: 'activitiSync',
defaultValue: 1,
@ -336,7 +336,7 @@ export const formSchema: FormSchema[] = [
type: 'radio',
stringToNumber: true,
},
},
},*/
];
export const formPasswordSchema: FormSchema[] = [

@ -58,6 +58,8 @@ import {useMessage} from "@/hooks/web/useMessage";
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
const userStore = useUserStore();
// console.log("userStore.getUserInfo---",JSON.stringify(userStore.getUserInfo))
// console.log("userStore.getRoleList---",userStore.getRoleList)
const {createMessage, createConfirm} = useMessage();
//model
@ -180,7 +182,7 @@ function getTableAction(record) {
// },
{
label: '驳回',
ifShow: record.status == 1,
ifShow: userStore.getUserInfo.roleCode !='faren_admin' && record.status == 1,
popConfirm: {
title: '确定驳回吗?',
confirm: handleFrozen.bind(null, record, 0),
@ -188,7 +190,7 @@ function getTableAction(record) {
},
{
label: '通过',
ifShow: record.status == 0,
ifShow: userStore.getUserInfo.roleCode !='faren_admin' && record.status == 0,
popConfirm: {
title: '确定通过吗?',
confirm: handleFrozen.bind(null, record, 1),
@ -196,6 +198,7 @@ function getTableAction(record) {
},
{
label: '删除',
ifShow: userStore.getUserInfo.roleCode !='faren_admin',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),

@ -4,7 +4,7 @@ import { useMessage } from "/src/hooks/web/useMessage";
const { createConfirm } = useMessage();
enum Api {
list = '/expert/expert/listadmin',
list = '/expert/expert/listadminstatic',
save='/expert/expert/add',
edit='/expert/expert/edit',
deleteOne = '/expert/expert/delete',

@ -3,9 +3,9 @@
<div class="j-table-operator" style="width: 100%">
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAddDepart">新增</a-button>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAddChildDepart()">添加下级</a-button>
<a-upload name="file" :showUploadList="false" :customRequest="onImportXls">
<!-- <a-upload name="file" :showUploadList="false" :customRequest="onImportXls">
<a-button type="primary" preIcon="ant-design:import-outlined">导入</a-button>
</a-upload>
</a-upload>-->
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls">导出</a-button>
<!-- <a-button type="primary" preIcon="ant-design:sync-outlined">同步企微?</a-button>
<a-button type="primary" preIcon="ant-design:sync-outlined">同步钉钉?</a-button>-->
@ -92,10 +92,11 @@
import { useModal } from '/@/components/Modal';
import { useMessage } from '/@/hooks/web/useMessage';
import { useMethods } from '/@/hooks/system/useMethods';
import { Api, deleteBatchDepart, queryDepartTreeSync } from '../depart.api';
import { Api, deleteBatchDepart, queryDepartTreeSync4ZhuGuanBuMen } from '../depart.api';
import { searchByKeywords } from '/@/views/system/departUser/depart.user.api';
import DepartFormModal from '/@/views/system/depart/components/DepartFormModal.vue';
import { Popconfirm } from 'ant-design-vue';
import {useUserStore} from "@/store/modules/user";
const prefixCls = inject('prefixCls');
const emit = defineEmits(['select', 'rootTreeData']);
@ -124,13 +125,16 @@
// modal
const [registerModal, { openModal }] = useModal();
const userStore = useUserStore();
//
async function loadRootTreeData() {
try {
loading.value = true;
treeData.value = [];
const result = await queryDepartTreeSync();
const result = await queryDepartTreeSync4ZhuGuanBuMen({
parentOrgCode: userStore.getUserInfo.orgCode,
});
if (Array.isArray(result)) {
treeData.value = result;
}
@ -158,8 +162,9 @@
//
async function loadChildrenTreeData(treeNode) {
try {
const result = await queryDepartTreeSync({
pid: treeNode.dataRef.id,
const result = await queryDepartTreeSync4ZhuGuanBuMen({
// pid: treeNode.dataRef.id,
parentOrgCode: treeNode.dataRef.orgCode,
});
if (result.length == 0) {
treeNode.dataRef.isLeaf = true;

@ -6,6 +6,7 @@ const { createConfirm } = useMessage();
export enum Api {
queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',
queryDepartTreeSync4ZhuGuanBuMen = '/sys/sysDepart/queryDepartTreeSync4ZhuGuanBuMen',
save = '/sys/sysDepart/add',
edit = '/sys/sysDepart/edit',
delete = '/sys/sysDepart/delete',
@ -31,6 +32,9 @@ export enum Api {
*/
export const queryDepartTreeSync = (params?) => defHttp.get({ url: Api.queryDepartTreeSync, params });
// add by zhc 11.09
export const queryDepartTreeSync4ZhuGuanBuMen = (params?) => defHttp.get({ url: Api.queryDepartTreeSync4ZhuGuanBuMen, params });
/**
* 保存或者更新部门角色
*/

@ -81,10 +81,13 @@ export function useBasicFormSchema() {
//
export const orgCategoryOptions = {
//
root: [{ value: '1', label: '公司' }],
// root: [{ value: '1', label: '' }],
root: [{ value: '1', label: '管理单位' }],
//
child: [
{ value: '2', label: '部门' },
{ value: '3', label: '岗位' },
// { value: '2', label: '' },
{ value: '2', label: '直属法人单位' },
// { value: '3', label: '' },
{ value: '3', label: '县区法人单位' },
],
};

@ -163,11 +163,14 @@ export function useBaseInfoForm(treeData: Ref<any[]>) {
label: '机构类型',
render(val) {
if (val === '1') {
return '公司';
// return '';
return '管理单位';
} else if (val === '2') {
return '部门';
// return '';
return '直属法人单位';
} else if (val === '3') {
return '岗位';
// return '';
return '县区法人单位';
}
return val;
},

@ -3,9 +3,9 @@
<div class="aui-container">
<div class="aui-form">
<div class="aui-image">
<div class="aui-image-text">
<!-- <div class="aui-image-text">
<img :src="jeecgAdTextImg" alt="" />
</div>
</div>-->
</div>
<div class="aui-formBox">
<div class="aui-formWell">
@ -41,7 +41,7 @@
</a-form-item>
<a-form-item>
<div class="aui-input-line">
<JSelectDept :placeholder="t('sys.login.selectorgPlaceholder')" v-model:value="formData.department" :multiple="false" />
<JSelectDept :placeholder="t('sys.login.selectorgPlaceholder4Kejiju')" v-model:value="formData.department" :multiple="false" />
</div>
</a-form-item>
<a-form-item>
@ -224,7 +224,7 @@
return;
}
if (!formData.department) {
createMessage.warn(t('sys.login.selectorgPlaceholder'));
createMessage.warn(t('sys.login.selectorgPlaceholder4Kejiju'));
return;
}
if (!formData.username) {
@ -235,10 +235,21 @@
createMessage.warn(t('sys.login.mobilePlaceholder'));
return;
}
const phoneRegex = /^1[3-9]\d{9}$/;
if (!phoneRegex.test(formData.mobile)) {
createMessage.warn(t('sys.login.mobilePlaceholderNotReg'));
return;
}
if (!formData.password) {
createMessage.warn(t('sys.login.passwordPlaceholder'));
return;
}
// 8
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&+=!])(?=.{8,})$/;
if (!passwordRegex.test(formData.password)) {
createMessage.warn(t('sys.login.passwordPlaceholderNotReg'));
return;
}
// if (!formData.workno) {
// createMessage.warn(t('sys.login.passwordPlaceholder'));
// return;

@ -3,13 +3,13 @@
<div class="aui-container">
<div class="aui-form">
<div class="aui-image">
<div class="aui-image-text">
<!-- <div class="aui-image-text">
<img :src="jeecgAdTextImg" alt="" />
</div>
</div>-->
</div>
<div class="aui-formBox">
<div class="aui-formWell">
<a-form ref="formRef" :model="formData">
<a-form ref="formRef" :model="formData" :rules="rules">
<div class="aui-flex aui-form-nav aui-clear-left" style="padding-bottom: 21px">
<div class="aui-flex-box activeNav on">{{t('sys.login.registerButton4shenbaoren')}}</div>
</div>
@ -42,7 +42,7 @@
<!-- </a-form-item>-->
<a-form-item>
<div class="aui-input-line">
<JSelectDept :placeholder="t('sys.login.selectorgPlaceholder')" v-model:value="formData.department" :multiple="false" />
<JSelectDept :placeholder="t('sys.login.selectorgPlaceholder4Kejiju')" v-model:value="formData.department" :multiple="false" />
</div>
</a-form-item>
@ -229,21 +229,28 @@
return;
}
if (!formData.department) {
createMessage.warn(t('sys.login.selectorgPlaceholder'));
createMessage.warn(t('sys.login.selectorgPlaceholder4Kejiju'));
return;
}
if (!formData.mobile) {
createMessage.warn(t('sys.login.mobilePlaceholder'));
return;
}
const phoneRegex = /^1[3-9]\d{9}$/;
if (!phoneRegex.test(formData.mobile)) {
createMessage.warn(t('sys.login.mobilePlaceholderNotReg'));
return;
}
if (!formData.password) {
createMessage.warn(t('sys.login.passwordPlaceholder'));
return;
}
// if (!formData.workno) {
// createMessage.warn(t('sys.login.passwordPlaceholder'));
// return;
// }
// 8
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&+=!])(?=.{8,})$/;
if (!passwordRegex.test(formData.password)) {
createMessage.warn(t('sys.login.passwordPlaceholderNotReg'));
return;
}
if (!formData.confirmPassword) {
createMessage.warn(t('sys.login.confirmPassword'));
return;

@ -40,6 +40,7 @@ export interface UserInfo {
homePath?: string;
tenantid?: string | number;
roles: RoleInfo[];
roleCode: string;
orgCode?: string;
}

Loading…
Cancel
Save