From cfd30ffa8727ce8883b5bc87ddf1094fafe690bb Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 21 Sep 2022 10:55:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=E6=96=B0=E5=BB=BA=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=94=AF=E6=8C=81=E4=B8=8D=E8=AE=BE=E7=BD=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/system/user/userEditer.vue | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/frontend/src/views/system/user/userEditer.vue b/frontend/src/views/system/user/userEditer.vue index ee5840c1e2..0407833d85 100644 --- a/frontend/src/views/system/user/userEditer.vue +++ b/frontend/src/views/system/user/userEditer.vue @@ -299,13 +299,6 @@ export default { trigger: "blur", }, ], - roleIds: [ - { - required: true, - message: this.$t("user.role_mandatory"), - trigger: "change", - }, - ], deptId: [], gender: [], enabled: [{ required: true, trigger: "change" }], @@ -590,4 +583,4 @@ export default { height: 300px; overflow: auto; } - \ No newline at end of file + From bf5bf82a30818d5f1475ae4fdc11157e026185cb Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 21 Sep 2022 14:01:02 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=BE=85=E5=8A=A9=E4=BF=A1=E6=81=AF=E5=8C=85=E5=90=AB=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=B9=B3=E5=8F=B0=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/sys/SysUserController.java | 32 +- .../sys/request/SysUserCreateRequest.java | 4 + .../dataease/ext/ExtSysUserAssistMapper.java | 17 - .../strategy/impl/EmailTaskHandler.java | 56 ++- .../service/strategy/SendDingtalk.java | 16 +- .../message/service/strategy/SendLark.java | 16 +- .../message/service/strategy/SendWecom.java | 16 +- .../dataease/service/sys/SysUserService.java | 87 +++- frontend/src/api/system/user.js | 13 +- frontend/src/lang/en.js | 11 +- frontend/src/lang/tw.js | 11 +- frontend/src/lang/zh.js | 10 +- frontend/src/views/system/user/userEditer.vue | 383 ++++++++++-------- 13 files changed, 419 insertions(+), 253 deletions(-) delete mode 100644 backend/src/main/java/io/dataease/ext/ExtSysUserAssistMapper.java diff --git a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java index a03fad7d85..e95563f748 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java @@ -24,6 +24,7 @@ import io.dataease.controller.sys.request.SysUserStateRequest; import io.dataease.controller.sys.response.RoleUserItem; import io.dataease.controller.sys.response.SysUserGridResponse; import io.dataease.plugins.common.base.domain.SysUser; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.dataease.service.sys.SysRoleService; import io.dataease.service.sys.SysUserService; import io.swagger.annotations.Api; @@ -66,7 +67,7 @@ public class SysUserController { @ApiImplicitParam(name = "request", value = "查询条件", required = true) }) public Pager> userGrid(@PathVariable int goPage, @PathVariable int pageSize, - @RequestBody KeyGridRequest request) { + @RequestBody KeyGridRequest request) { Page page = PageHelper.startPage(goPage, pageSize, true); List users = sysUserService.query(request); users.forEach(user -> { @@ -87,9 +88,9 @@ public class SysUserController { @RequiresPermissions("user:add") @PostMapping("/create") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.CREATE, - sourcetype = SysLogConstants.SOURCE_TYPE.USER, - value = "userId" + operatetype = SysLogConstants.OPERATE_TYPE.CREATE, + sourcetype = SysLogConstants.SOURCE_TYPE.USER, + value = "userId" ) public void create(@RequestBody SysUserCreateRequest request) { sysUserService.save(request); @@ -99,9 +100,9 @@ public class SysUserController { @RequiresPermissions("user:edit") @PostMapping("/update") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, - sourcetype = SysLogConstants.SOURCE_TYPE.USER, - value = "userId" + operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, + sourcetype = SysLogConstants.SOURCE_TYPE.USER, + value = "userId" ) public void update(@RequestBody SysUserCreateRequest request) { sysUserService.update(request); @@ -112,8 +113,8 @@ public class SysUserController { @PostMapping("/delete/{userId}") @ApiImplicitParam(paramType = "path", value = "用户ID", name = "userId", required = true, dataType = "Integer") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.DELETE, - sourcetype = SysLogConstants.SOURCE_TYPE.USER + operatetype = SysLogConstants.OPERATE_TYPE.DELETE, + sourcetype = SysLogConstants.SOURCE_TYPE.USER ) public void delete(@PathVariable("userId") Long userId) { sysUserService.delete(userId); @@ -124,9 +125,9 @@ public class SysUserController { @RequiresRoles("1") @PostMapping("/updateStatus") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, - sourcetype = SysLogConstants.SOURCE_TYPE.USER, - value = "userId" + operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, + sourcetype = SysLogConstants.SOURCE_TYPE.USER, + value = "userId" ) public void updateStatus(@RequestBody SysUserStateRequest request) { sysUserService.updateStatus(request); @@ -201,7 +202,7 @@ public class SysUserController { @ApiImplicitParam(name = "request", value = "查询条件", required = true) }) public Pager> roleGrid(@PathVariable int goPage, @PathVariable int pageSize, - @RequestBody BaseGridRequest request) { + @RequestBody BaseGridRequest request) { Page page = PageHelper.startPage(goPage, pageSize, true); Pager> listPager = PageUtils.setPageInfo(page, sysRoleService.query(request)); return listPager; @@ -226,4 +227,9 @@ public class SysUserController { authUserService.unlockAccount(username, one.getFrom()); } + @PostMapping("/assistInfo/{userId}") + public SysUserAssist assistInfo(@PathVariable("userId") Long userId) { + return sysUserService.assistInfo(userId); + } + } diff --git a/backend/src/main/java/io/dataease/controller/sys/request/SysUserCreateRequest.java b/backend/src/main/java/io/dataease/controller/sys/request/SysUserCreateRequest.java index 69b63ee655..5ecc781fc7 100644 --- a/backend/src/main/java/io/dataease/controller/sys/request/SysUserCreateRequest.java +++ b/backend/src/main/java/io/dataease/controller/sys/request/SysUserCreateRequest.java @@ -1,6 +1,7 @@ package io.dataease.controller.sys.request; import io.dataease.plugins.common.base.domain.SysUser; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -14,4 +15,7 @@ public class SysUserCreateRequest extends SysUser { @ApiModelProperty(value = "角色ID集合", required = true, position = 7) private List roleIds; + @ApiModelProperty(value = "辅助信息", required = false, position = 8) + private SysUserAssist sysUserAssist; + } diff --git a/backend/src/main/java/io/dataease/ext/ExtSysUserAssistMapper.java b/backend/src/main/java/io/dataease/ext/ExtSysUserAssistMapper.java deleted file mode 100644 index ad6d042a0b..0000000000 --- a/backend/src/main/java/io/dataease/ext/ExtSysUserAssistMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.dataease.ext; - -import io.dataease.plugins.common.base.domain.SysUserAssist; -import org.apache.ibatis.annotations.Insert; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Select; - -@Mapper -public interface ExtSysUserAssistMapper { - - @Insert("insert into sys_user_assist values(#{po.userId}, #{po.needFirstNoti})") - void save(@Param("po") SysUserAssist po); - - @Select("select * from sys_user_assist where user_id = #{userId}") - SysUserAssist query(@Param("userId") Long userId); -} diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java index 2833af3d71..ce61fc0395 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java @@ -14,6 +14,7 @@ import io.dataease.commons.utils.LogUtil; import io.dataease.commons.utils.ServletUtils; import io.dataease.job.sechedule.ScheduleManager; import io.dataease.job.sechedule.strategy.TaskHandler; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.dataease.plugins.common.entity.GlobalTaskEntity; import io.dataease.plugins.common.entity.GlobalTaskInstance; import io.dataease.plugins.config.SpringContextUtil; @@ -28,6 +29,7 @@ import io.dataease.plugins.xpack.lark.service.LarkXpackService; import io.dataease.plugins.xpack.wecom.dto.entity.WecomMsgResult; import io.dataease.plugins.xpack.wecom.service.WecomXpackService; import io.dataease.service.chart.ViewExportExcel; +import io.dataease.service.sys.SysUserService; import io.dataease.service.system.EmailService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -154,6 +156,7 @@ public class EmailTaskHandler extends TaskHandler implements Job { EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); AuthUserServiceImpl userService = SpringContextUtil.getBean(AuthUserServiceImpl.class); + SysUserService sysUserService = SpringContextUtil.getBean(SysUserService.class); try { XpackEmailTaskRequest taskForm = emailXpackService.taskForm(taskInstance.getTaskId()); if (ObjectUtils.isEmpty(taskForm) || CronUtils.taskExpire(taskForm.getEndTime())) { @@ -215,17 +218,24 @@ public class EmailTaskHandler extends TaskHandler implements Job { for (int i = 0; i < channels.size(); i++) { String channel = channels.get(i); switch (channel) { - case "email" : + case "email": if (StringUtils.isNotBlank(recipients)) - emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files); + emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files); break; - case "wecom" : + case "wecom": if (SpringContextUtil.getBean(AuthUserService.class).supportWecom()) { - - List wecomUsers = reciLists.stream().filter(reci -> { + List wecomUsers = new ArrayList<>(); + for (int j = 0; j < reciLists.size(); j++) { + String reci = reciLists.get(j); SysUserEntity userBySub = userService.getUserBySub(reci, 4); - return ObjectUtils.isNotEmpty(userBySub); - }).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(userBySub)) continue; + Long userId = userBySub.getUserId(); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isEmpty(sysUserAssist) || StringUtils.isBlank(sysUserAssist.getLarkId())) + continue; + wecomUsers.add(sysUserAssist.getLarkId()); + } + if (CollectionUtils.isNotEmpty(wecomUsers)) { WecomXpackService wecomXpackService = SpringContextUtil.getBean(WecomXpackService.class); WecomMsgResult wecomMsgResult = wecomXpackService.pushOaMsg(wecomUsers, emailTemplateDTO.getTitle(), contentStr, bytes, files); @@ -236,12 +246,20 @@ public class EmailTaskHandler extends TaskHandler implements Job { } break; - case "dingtalk" : + case "dingtalk": if (SpringContextUtil.getBean(AuthUserService.class).supportDingtalk()) { - List dingTalkUsers = reciLists.stream().filter(reci -> { + List dingTalkUsers = new ArrayList<>(); + for (int j = 0; j < reciLists.size(); j++) { + String reci = reciLists.get(j); SysUserEntity userBySub = userService.getUserBySub(reci, 5); - return ObjectUtils.isNotEmpty(userBySub); - }).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(userBySub)) continue; + Long userId = userBySub.getUserId(); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isEmpty(sysUserAssist) || StringUtils.isBlank(sysUserAssist.getLarkId())) + continue; + dingTalkUsers.add(sysUserAssist.getLarkId()); + } + if (CollectionUtils.isNotEmpty(dingTalkUsers)) { DingtalkXpackService dingtalkXpackService = SpringContextUtil.getBean(DingtalkXpackService.class); DingtalkMsgResult dingtalkMsgResult = dingtalkXpackService.pushOaMsg(dingTalkUsers, emailTemplateDTO.getTitle(), contentStr, bytes, files); @@ -252,12 +270,20 @@ public class EmailTaskHandler extends TaskHandler implements Job { } break; - case "lark" : + case "lark": if (SpringContextUtil.getBean(AuthUserService.class).supportLark()) { - List larkUsers = reciLists.stream().filter(reci -> { + List larkUsers = new ArrayList<>(); + for (int j = 0; j < reciLists.size(); j++) { + String reci = reciLists.get(j); SysUserEntity userBySub = userService.getUserBySub(reci, 6); - return ObjectUtils.isNotEmpty(userBySub); - }).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(userBySub)) continue; + Long userId = userBySub.getUserId(); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isEmpty(sysUserAssist) || StringUtils.isBlank(sysUserAssist.getLarkId())) + continue; + larkUsers.add(sysUserAssist.getLarkId()); + } + if (CollectionUtils.isNotEmpty(larkUsers)) { LarkXpackService larkXpackService = SpringContextUtil.getBean(LarkXpackService.class); LarkMsgResult larkMsgResult = larkXpackService.pushOaMsg(larkUsers, emailTemplateDTO.getTitle(), contentStr, bytes, files); diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java index 101bfd973a..3f428d71aa 100644 --- a/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java @@ -1,13 +1,17 @@ package io.dataease.service.message.service.strategy; -import io.dataease.auth.entity.SysUserEntity; import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.dingtalk.service.DingtalkXpackService; import io.dataease.service.message.service.SendService; +import io.dataease.service.sys.SysUserService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -17,12 +21,14 @@ public class SendDingtalk implements SendService { @Autowired private AuthUserService authUserService; + @Resource + private SysUserService sysUserService; + @Override public void sendMsg(Long userId, Long typeId, String content, String param) { - SysUserEntity userEntity = authUserService.getUserById(userId); - - if (userEntity.getFrom() == 5 && authUserService.supportDingtalk()) { - String username = userEntity.getUsername(); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isNotEmpty(sysUserAssist) && StringUtils.isNotBlank(sysUserAssist.getDingtalkId()) && authUserService.supportDingtalk()) { + String username = sysUserAssist.getDingtalkId(); DingtalkXpackService dingtalkXpackService = SpringContextUtil.getBean(DingtalkXpackService.class); List userIds = new ArrayList<>(); userIds.add(username); diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java index 7793d4c7db..1c400ec3c9 100644 --- a/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java @@ -1,13 +1,17 @@ package io.dataease.service.message.service.strategy; -import io.dataease.auth.entity.SysUserEntity; import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.lark.service.LarkXpackService; import io.dataease.service.message.service.SendService; +import io.dataease.service.sys.SysUserService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -17,12 +21,14 @@ public class SendLark implements SendService { @Autowired private AuthUserService authUserService; + @Resource + private SysUserService sysUserService; + @Override public void sendMsg(Long userId, Long typeId, String content, String param) { - SysUserEntity userEntity = authUserService.getUserById(userId); - - if (userEntity.getFrom() == 6 && authUserService.supportLark()) { - String username = userEntity.getUsername(); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isNotEmpty(sysUserAssist) && StringUtils.isNotBlank(sysUserAssist.getLarkId()) && authUserService.supportLark()) { + String username = sysUserAssist.getLarkId(); LarkXpackService larkXpackService = SpringContextUtil.getBean(LarkXpackService.class); List userIds = new ArrayList<>(); userIds.add(username); diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java index de5481b561..4ccdf141e0 100644 --- a/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java @@ -1,13 +1,17 @@ package io.dataease.service.message.service.strategy; -import io.dataease.auth.entity.SysUserEntity; import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.common.base.domain.SysUserAssist; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.wecom.service.WecomXpackService; import io.dataease.service.message.service.SendService; +import io.dataease.service.sys.SysUserService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -16,12 +20,16 @@ public class SendWecom implements SendService { @Autowired private AuthUserService authUserService; + + @Resource + private SysUserService sysUserService; + @Override public void sendMsg(Long userId, Long typeId, String content, String param) { - SysUserEntity userEntity = authUserService.getUserById(userId); + SysUserAssist sysUserAssist = sysUserService.assistInfo(userId); + if (ObjectUtils.isNotEmpty(sysUserAssist) && StringUtils.isNotBlank(sysUserAssist.getWecomId()) && authUserService.supportWecom()) { - if (userEntity.getFrom() == 4 && authUserService.supportWecom()) { - String username = userEntity.getUsername(); + String username = sysUserAssist.getWecomId(); WecomXpackService wecomXpackService = SpringContextUtil.getBean(WecomXpackService.class); List userIds = new ArrayList<>(); userIds.add(username); diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index f9189d80f0..ab70cae6a5 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -5,7 +5,6 @@ import io.dataease.auth.service.AuthUserService; import io.dataease.auth.service.ExtAuthService; import io.dataease.commons.exception.DEException; import io.dataease.controller.sys.request.*; -import io.dataease.ext.ExtSysUserAssistMapper; import io.dataease.ext.ExtSysUserMapper; import io.dataease.ext.query.GridExample; import io.dataease.commons.constants.AuthConstants; @@ -16,6 +15,7 @@ import io.dataease.controller.sys.response.SysUserGridResponse; import io.dataease.controller.sys.response.SysUserRole; import io.dataease.i18n.Translator; import io.dataease.plugins.common.base.domain.*; +import io.dataease.plugins.common.base.mapper.SysUserAssistMapper; import io.dataease.plugins.common.base.mapper.SysUserMapper; import io.dataease.plugins.common.base.mapper.SysUsersRolesMapper; import io.dataease.plugins.common.entity.XpackLdapUserEntity; @@ -36,6 +36,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -57,8 +58,9 @@ public class SysUserService { @Resource private ExtAuthService extAuthService; + @Resource - private ExtSysUserAssistMapper extSysUserAssistMapper; + private SysUserAssistMapper sysUserAssistMapper; @Resource private AuthUserService authUserService; @@ -99,8 +101,15 @@ public class SysUserService { } int insert = sysUserMapper.insert(user); SysUser dbUser = findOne(user); - request.setUserId(dbUser.getUserId()); - saveUserRoles(dbUser.getUserId(), request.getRoleIds());//插入用户角色关联 + Long userId = dbUser.getUserId(); + request.setUserId(userId); + saveUserRoles(userId, request.getRoleIds());//插入用户角色关联 + + SysUserAssist sysUserAssist = request.getSysUserAssist(); + if (ObjectUtils.isNotEmpty(sysUserAssist) && (StringUtils.isNotBlank(sysUserAssist.getWecomId()) || StringUtils.isNotBlank(sysUserAssist.getDingtalkId()) || StringUtils.isNotBlank(sysUserAssist.getLarkId()))) { + saveAssist(userId, sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId()); + } + return insert; } @@ -125,12 +134,12 @@ public class SysUserService { // oidc默认角色是普通员工 List roleIds = new ArrayList(); roleIds.add(2L); - saveUserRoles( dbUser.getUserId(), roleIds); + saveUserRoles(dbUser.getUserId(), roleIds); } } @Transactional - public void saveWecomCUser(Map userMap , String userId, String email) { + public void saveWecomCUser(Map userMap, String userId, String email) { long now = System.currentTimeMillis(); SysUser sysUser = new SysUser(); @@ -148,6 +157,7 @@ public class SysUserService { sysUser.setIsAdmin(false); sysUser.setSub(userId); sysUserMapper.insert(sysUser); + Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), u.getUsername(), null, null)); } @@ -170,7 +180,7 @@ public class SysUserService { sysUser.setSub(dingUserEntity.getUnionid()); sysUser.setPhone(dingUserEntity.getMobile()); sysUserMapper.insert(sysUser); - + Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, u.getUsername(), null)); } @Transactional @@ -192,7 +202,7 @@ public class SysUserService { sysUser.setSub(larkUserInfo.getSub()); sysUser.setPhone(larkUserInfo.getMobile()); sysUserMapper.insert(sysUser); - + Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, null, u.getUsername())); } @Transactional @@ -215,7 +225,7 @@ public class SysUserService { // oidc默认角色是普通员工 List roleIds = new ArrayList(); roleIds.add(2L); - saveUserRoles( dbUser.getUserId(), roleIds); + saveUserRoles(dbUser.getUserId(), roleIds); } } @@ -247,7 +257,7 @@ public class SysUserService { sysUserMapper.insert(sysUser); SysUser dbUser = findOne(sysUser); if (null != dbUser && null != dbUser.getUserId()) { - saveUserRoles( dbUser.getUserId(), request.getRoleIds()); + saveUserRoles(dbUser.getUserId(), request.getRoleIds()); } }); } @@ -285,7 +295,13 @@ public class SysUserService { saveUserRoles(user.getUserId(), request.getRoleIds());//再插入角色关联 if (ObjectUtils.isEmpty(user.getDeptId())) user.setDeptId(0L); authUserService.clearCache(user.getUserId()); - return sysUserMapper.updateByPrimaryKeySelective(user); + int result = sysUserMapper.updateByPrimaryKeySelective(user); + + SysUserAssist sysUserAssist = request.getSysUserAssist(); + if (ObjectUtils.isNotEmpty(sysUserAssist) && (StringUtils.isNotBlank(sysUserAssist.getWecomId()) || StringUtils.isNotBlank(sysUserAssist.getDingtalkId()) || StringUtils.isNotBlank(sysUserAssist.getLarkId()))) { + saveAssist(user.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId()); + } + return result; } /** @@ -308,6 +324,7 @@ public class SysUserService { * 更新用户基本信息 * 只允许修改 email, nickname, phone * 防止此接口被恶意利用更改不允许更改的信息,新建SysUser对象并只设置部分值 + * * @param request * @return */ @@ -426,33 +443,34 @@ public class SysUserService { SysUserExample example = new SysUserExample(); example.createCriteria().andUsernameEqualTo(userName); List users = sysUserMapper.selectByExample(example); - if(CollectionUtils.isNotEmpty(users)) { - throw new RuntimeException("用户ID【"+userName+"】已存在,请联系管理员"); + if (CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户ID【" + userName + "】已存在,请联系管理员"); } } + public void validateExistUser(String userName, String nickName, String email) { SysUserExample example = new SysUserExample(); if (StringUtils.isNotBlank(userName)) { example.createCriteria().andUsernameEqualTo(userName); List users = sysUserMapper.selectByExample(example); - if(CollectionUtils.isNotEmpty(users)) { - throw new RuntimeException("用户ID【"+userName+"】已存在,请联系管理员"); + if (CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户ID【" + userName + "】已存在,请联系管理员"); } } if (StringUtils.isNotBlank(nickName)) { example.createCriteria().andNickNameEqualTo(nickName); List users = sysUserMapper.selectByExample(example); - if(CollectionUtils.isNotEmpty(users)) { - throw new RuntimeException("用户姓名【"+nickName+"】已存在,请联系管理员"); + if (CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户姓名【" + nickName + "】已存在,请联系管理员"); } } example.clear(); if (StringUtils.isNotBlank(email)) { example.createCriteria().andEmailEqualTo(email); List users = sysUserMapper.selectByExample(example); - if(CollectionUtils.isNotEmpty(users)) { - throw new RuntimeException("用户邮箱【"+email+"】已存在,请联系管理员"); + if (CollectionUtils.isNotEmpty(users)) { + throw new RuntimeException("用户邮箱【" + email + "】已存在,请联系管理员"); } } } @@ -510,16 +528,43 @@ public class SysUserService { } public boolean needPwdNoti(Long userId) { - SysUserAssist userAssist = extSysUserAssistMapper.query(userId); + SysUserAssist userAssist = sysUserAssistMapper.selectByPrimaryKey(userId); return ObjectUtils.isEmpty(userAssist) || userAssist.getNeedFirstNoti(); } public void saveUserAssist(Boolean noti) { Long userId = AuthUtils.getUser().getUserId(); + SysUserAssist existAssist = sysUserAssistMapper.selectByPrimaryKey(userId); + if (ObjectUtils.isNotEmpty(existAssist)) { + existAssist.setNeedFirstNoti(noti); + sysUserAssistMapper.updateByPrimaryKey(existAssist); + return; + } SysUserAssist sysUserAssist = new SysUserAssist(); sysUserAssist.setUserId(userId); sysUserAssist.setNeedFirstNoti(noti); - extSysUserAssistMapper.save(sysUserAssist); + sysUserAssistMapper.insertSelective(sysUserAssist); + } + + public void saveAssist(Long userId, String wecomId, String dingtlkId, String larkId) { + SysUserAssist existAssist = sysUserAssistMapper.selectByPrimaryKey(userId); + if (ObjectUtils.isNotEmpty(existAssist)) { + existAssist.setWecomId(wecomId); + existAssist.setDingtalkId(dingtlkId); + existAssist.setLarkId(larkId); + sysUserAssistMapper.updateByPrimaryKey(existAssist); + return; + } + SysUserAssist sysUserAssist = new SysUserAssist(); + sysUserAssist.setUserId(userId); + sysUserAssist.setWecomId(wecomId); + sysUserAssist.setDingtalkId(dingtlkId); + sysUserAssist.setLarkId(larkId); + sysUserAssistMapper.insert(sysUserAssist); + } + + public SysUserAssist assistInfo(Long userId) { + return sysUserAssistMapper.selectByPrimaryKey(userId); } } diff --git a/frontend/src/api/system/user.js b/frontend/src/api/system/user.js index 4e4ee78512..cdfc543a6d 100644 --- a/frontend/src/api/system/user.js +++ b/frontend/src/api/system/user.js @@ -10,7 +10,8 @@ const pathMap = { updatePath: '/api/user/update', editPasswordPath: '/api/user/adminUpdatePwd', editStatusPath: '/api/user/updateStatus', - unlockPath: '/api/user/unlock/' + unlockPath: '/api/user/unlock/', + queryAssistPath: '/api/user/assistInfo/' } export function userLists(page, size, data) { return request({ @@ -142,4 +143,12 @@ export function unLock(username) { }) } -export default { editPassword, delUser, editUser, addUser, userLists, editStatus, personInfo, updatePerson, updatePersonPwd, allRoles, roleGrid, ldapUsers, saveLdapUser, existLdapUsers, unLock } +export function queryAssist(userId) { + return request({ + url: pathMap.queryAssistPath + userId, + method: 'post', + loading: false + }) +} + +export default { editPassword, delUser, editUser, addUser, userLists, editStatus, personInfo, updatePerson, updatePersonPwd, allRoles, roleGrid, ldapUsers, saveLdapUser, existLdapUsers, unLock, queryAssist } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 15b7c31d3c..9d5e823df9 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -132,11 +132,10 @@ export default { }, commons: { - unlock: 'Unlock', unlock_success: 'Unlock success', - uninstall:'Uninstall', + uninstall: 'Uninstall', no_result: 'No Result', manage_member: 'Managing members', @@ -671,7 +670,13 @@ export default { filter: 'Screen', list: 'List item', list_info: 'Please select the information to be displayed in the list', - sure_delete: 'Are you sure to delete this user?' + sure_delete: 'Are you sure to delete this user?', + wecom_id: 'Wecom Account', + dingtalk_id: 'Dingtalk Account', + lark_id: 'Lark Account', + input_wecom_id: 'Please input wecom account', + input_dingtalk_id: 'Please input dingtalk account', + input_lark_id: 'Please input lark account' }, ldap: { url: 'LDAP url', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index ed7a4863db..ae8171f657 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -132,11 +132,10 @@ export default { }, commons: { - unlock: '解鎖', unlock_success: '解鎖成功', - uninstall:'卸载', + uninstall: '卸载', no_result: '没有找到相关内容', manage_member: '管理成員', @@ -671,7 +670,13 @@ export default { filter: '篩選', list: '列表項', list_info: '請選擇列表中要展示的信息', - sure_delete: '確定刪除該用戶嗎?' + sure_delete: '確定刪除該用戶嗎?', + wecom_id: '企業微信賬號', + dingtalk_id: '釘釘賬號', + lark_id: '飛書賬號', + input_wecom_id: '請輸入企業微信賬號', + input_dingtalk_id: '請輸入釘釘賬號', + input_lark_id: '請輸入飛書賬號' }, ldap: { url: 'LDAP地址', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 2179467cf2..5da3e288fd 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -134,7 +134,7 @@ export default { unlock: '解锁', unlock_success: '解锁成功', - uninstall:'卸载', + uninstall: '卸载', no_result: '没有找到相关内容', manage_member: '管理成员', @@ -669,7 +669,13 @@ export default { filter: '筛选', list: '列表项', list_info: '请选择列表中要展示的信息', - sure_delete: '确定删除该用户吗?' + sure_delete: '确定删除该用户吗?', + wecom_id: '企业微信账号', + dingtalk_id: '钉钉账号', + lark_id: '飞书账号', + input_wecom_id: '请输入企业微信账号', + input_dingtalk_id: '请输入钉钉账号', + input_lark_id: '请输入飞书账号' }, ldap: { url: 'LDAP地址', diff --git a/frontend/src/views/system/user/userEditer.vue b/frontend/src/views/system/user/userEditer.vue index ee5840c1e2..2d328ccbfe 100644 --- a/frontend/src/views/system/user/userEditer.vue +++ b/frontend/src/views/system/user/userEditer.vue @@ -9,7 +9,7 @@ :before-close="reset" >
- + {{ $t("commons.default_pwd") + ":" + defaultPWD }} @@ -36,16 +36,16 @@ @@ -55,24 +55,24 @@ - + @@ -82,14 +82,13 @@ - - - - + + + @@ -100,37 +99,37 @@ prop="deptId" > - - - - - + + + + + @@ -165,14 +164,24 @@ /> + + + + + + + + + + + - + /> @@ -187,287 +196,335 @@ \ No newline at end of file + From 6cd176ab665f3fd0023b2d5095c59295aa35aa2b Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 21 Sep 2022 14:06:27 +0800 Subject: [PATCH 3/6] =?UTF-8?q?perf(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BE=85=E5=8A=A9=E4=BF=A1=E6=81=AFsql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/db/migration/V40__1.15.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/main/resources/db/migration/V40__1.15.sql b/backend/src/main/resources/db/migration/V40__1.15.sql index 0dbc5b1707..b4b31501c6 100644 --- a/backend/src/main/resources/db/migration/V40__1.15.sql +++ b/backend/src/main/resources/db/migration/V40__1.15.sql @@ -116,3 +116,8 @@ INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_typ INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('98d77463-38bb-11ed-8383-0242ac130005', 'f4e07708-26f1-4f42-9a4a-8e6dae63353c', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1663661389000, NULL, NULL, NULL); INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('98d77856-38bb-11ed-8383-0242ac130005', 'f4e07708-26f1-4f42-9a4a-8e6dae63353c', 'i18n_auth_use', 1, 1, 'use', '基础权限-使用', 'admin', 1663661389000, NULL, NULL, NULL); +ALTER TABLE `sys_user_assist` + ADD COLUMN `wecom_id` varchar(255) NULL COMMENT '企业微信账号' AFTER `need_first_noti`, + ADD COLUMN `dingtalk_id` varchar(255) NULL COMMENT '钉钉账号' AFTER `wecom_id`, + ADD COLUMN `lark_id` varchar(255) NULL COMMENT '飞书账号' AFTER `dingtalk_id`; + From c6c6d9accf57409dad9420c6027cbe573142a199 Mon Sep 17 00:00:00 2001 From: junjun Date: Wed, 21 Sep 2022 14:12:09 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E9=98=88?= =?UTF-8?q?=E5=80=BC=E6=94=AF=E6=8C=81=E4=BB=8B=E4=BA=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/chart/chart/table/table-info.js | 7 + .../chart/components/normal/LabelNormal.vue | 7 + .../chart/components/senior/Threshold.vue | 122 ++++++++++++------ .../senior/dialog/TableThresholdEdit.vue | 28 +++- .../senior/dialog/TextThresholdEdit.vue | 30 ++++- 5 files changed, 147 insertions(+), 47 deletions(-) diff --git a/frontend/src/views/chart/chart/table/table-info.js b/frontend/src/views/chart/chart/table/table-info.js index ffa5ac370b..1a5e06c06f 100644 --- a/frontend/src/views/chart/chart/table/table-info.js +++ b/frontend/src/views/chart/chart/table/table-info.js @@ -536,6 +536,13 @@ function mappingColor(value, defaultColor, field, type) { color = t[type] flag = true } + } else if (t.term === 'between') { + const min = parseFloat(t.min) + const max = parseFloat(t.max) + if (min <= value && value <= max) { + color = t[type] + flag = true + } } if (flag) { break diff --git a/frontend/src/views/chart/components/normal/LabelNormal.vue b/frontend/src/views/chart/components/normal/LabelNormal.vue index 707f6ca950..7daac33deb 100644 --- a/frontend/src/views/chart/components/normal/LabelNormal.vue +++ b/frontend/src/views/chart/components/normal/LabelNormal.vue @@ -243,6 +243,13 @@ export default { this.label_content_class.color = t.color flag = true } + } else if (t.term === 'between') { + const min = parseFloat(t.min) + const max = parseFloat(t.max) + if (min <= value && value <= max) { + this.label_content_class.color = t.color + flag = true + } } if (flag) { break diff --git a/frontend/src/views/chart/components/senior/Threshold.vue b/frontend/src/views/chart/components/senior/Threshold.vue index dae3a65bb4..c3e0950d11 100644 --- a/frontend/src/views/chart/components/senior/Threshold.vue +++ b/frontend/src/views/chart/components/senior/Threshold.vue @@ -32,18 +32,22 @@ /> - + {{ $t('chart.filter_eq') }} {{ $t('chart.filter_not_eq') }} {{ $t('chart.filter_lt') }} {{ $t('chart.filter_gt') }} {{ $t('chart.filter_le') }} {{ $t('chart.filter_ge') }} + {{ $t('chart.filter_between') }} - - {{ item.value }} + + {{ item.value }} + + {{ item.min }} ≤{{ $t('chart.drag_block_label_value') }}≤ {{ item.max }} + - + @@ -81,6 +85,7 @@ {{ $t('chart.filter_gt') }} {{ $t('chart.filter_le') }} {{ $t('chart.filter_ge') }} + {{ $t('chart.filter_between') }} {{ $t('chart.filter_like') }} {{ $t('chart.filter_not_like') }} {{ $t('chart.filter_null') }} @@ -88,14 +93,17 @@ {{ $t('chart.filter_empty') }} {{ $t('chart.filter_not_empty') }} - - {{ item.value }} + + {{ item.value }} + + {{ item.min }} ≤{{ $t('chart.drag_block_label_value') }}≤ {{ item.max }} +   - + - + @@ -250,21 +258,40 @@ export default { }) return } - if (!ele.value) { - this.$message({ - message: this.$t('chart.value_can_not_empty'), - type: 'error', - showClose: true - }) - return - } - if (parseFloat(ele.value).toString() === 'NaN') { - this.$message({ - message: this.$t('chart.value_error'), - type: 'error', - showClose: true - }) - return + if (ele.term === 'between') { + if (!ele.min || !ele.max) { + this.$message({ + message: this.$t('chart.value_can_not_empty'), + type: 'error', + showClose: true + }) + return + } + if (parseFloat(ele.min).toString() === 'NaN' || parseFloat(ele.max).toString() === 'NaN') { + this.$message({ + message: this.$t('chart.value_error'), + type: 'error', + showClose: true + }) + return + } + } else { + if (!ele.value) { + this.$message({ + message: this.$t('chart.value_can_not_empty'), + type: 'error', + showClose: true + }) + return + } + if (parseFloat(ele.value).toString() === 'NaN') { + this.$message({ + message: this.$t('chart.value_error'), + type: 'error', + showClose: true + }) + return + } } } this.thresholdForm.labelThreshold = JSON.parse(JSON.stringify(this.thresholdArr)) @@ -314,21 +341,40 @@ export default { }) return } - if (!ele.term.includes('null') && !ele.term.includes('empty') && !ele.value) { - this.$message({ - message: this.$t('chart.value_can_not_empty'), - type: 'error', - showClose: true - }) - return - } - if ((field.field.deType === 2 || field.field.deType === 3 || field.field.deType === 4) && parseFloat(ele.value).toString() === 'NaN') { - this.$message({ - message: this.$t('chart.value_error'), - type: 'error', - showClose: true - }) - return + if (ele.term === 'between') { + if (!ele.term.includes('null') && !ele.term.includes('empty') && (!ele.min || !ele.max)) { + this.$message({ + message: this.$t('chart.value_can_not_empty'), + type: 'error', + showClose: true + }) + return + } + if ((field.field.deType === 2 || field.field.deType === 3 || field.field.deType === 4) && (parseFloat(ele.min).toString() === 'NaN' || parseFloat(ele.max).toString() === 'NaN')) { + this.$message({ + message: this.$t('chart.value_error'), + type: 'error', + showClose: true + }) + return + } + } else { + if (!ele.term.includes('null') && !ele.term.includes('empty') && !ele.value) { + this.$message({ + message: this.$t('chart.value_can_not_empty'), + type: 'error', + showClose: true + }) + return + } + if ((field.field.deType === 2 || field.field.deType === 3 || field.field.deType === 4) && parseFloat(ele.value).toString() === 'NaN') { + this.$message({ + message: this.$t('chart.value_error'), + type: 'error', + showClose: true + }) + return + } } } } diff --git a/frontend/src/views/chart/components/senior/dialog/TableThresholdEdit.vue b/frontend/src/views/chart/components/senior/dialog/TableThresholdEdit.vue index 82df8aa7f8..84ff33682a 100644 --- a/frontend/src/views/chart/components/senior/dialog/TableThresholdEdit.vue +++ b/frontend/src/views/chart/components/senior/dialog/TableThresholdEdit.vue @@ -58,9 +58,9 @@ - + + + + ≤{{ $t('chart.drag_block_label_value') }}≤ + + {{ $t('chart.textColor') }} @@ -89,7 +94,7 @@ @change="changeThreshold" /> - + - - + + + + + ≤{{ $t('chart.drag_block_label_value') }}≤ + + - + - + @@ -51,7 +56,9 @@ export default { term: 'eq', field: '0', value: '0', - color: '#ff0000ff' + color: '#ff0000ff', + min: '0', + max: '1' }, valueOptions: [ { @@ -83,6 +90,13 @@ export default { value: 'ge', label: this.$t('chart.filter_ge') }] + }, + { + label: '', + options: [{ + value: 'between', + label: this.$t('chart.filter_between') + }] } ], predefineColors: COLOR_PANEL @@ -137,6 +151,12 @@ span { width: 200px !important; } +.between-item { + position: relative; + display: inline-block; + width: 100px !important; +} + .select-item { position: relative; display: inline-block; From 19128021f9589b6a5a337c54e7ec120c3c87ce9a Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 21 Sep 2022 15:44:53 +0800 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=A0=87?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9=EF=BC=8C=E9=98=B2=E6=AD=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=A0=87=E9=A2=98=E6=97=B6=E5=88=87=E6=8D=A2=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E5=87=BA=E7=8E=B0=E4=BF=AE=E6=94=B9=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E4=B8=8E=E8=A7=86=E5=9B=BE=E4=B8=8D=E5=AF=B9=E5=BA=94=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/DeDrag/index.vue | 4 +++- frontend/src/views/chart/view/ChartEdit.vue | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/DeDrag/index.vue b/frontend/src/components/DeDrag/index.vue index d232e01bf5..515f573c62 100644 --- a/frontend/src/components/DeDrag/index.vue +++ b/frontend/src/components/DeDrag/index.vue @@ -815,11 +815,13 @@ export default { e.stopPropagation() // 此处阻止冒泡 但是外层需要获取pageX pageY this.element.auxiliaryMatrix && this.$emit('elementMouseDown', e) - this.$store.commit('setCurComponent', { component: this.element, index: this.index }) // 移动端组件点击自动置顶 this.mobileLayoutStatus && this.$store.commit('topComponent') eventsFor = events.mouse this.elementDown(e) + this.$nextTick(()=>{ + this.$store.commit('setCurComponent', { component: this.element, index: this.index }) + }) }, // 元素按下 elementDown(e) { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index e876b24dc4..68085f2936 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -1817,9 +1817,9 @@ export default { viewEditSave(this.panelInfo.id, viewSave) if (modifyName === 'color') { - bus.$emit('view-in-cache', { type: 'styleChange', viewId: this.param.id, viewInfo: view, refreshProp: 'customAttr' }) + bus.$emit('view-in-cache', { type: 'styleChange', viewId: this.view.id, viewInfo: view, refreshProp: 'customAttr' }) } else { - bus.$emit('view-in-cache', { type: 'styleChange', viewId: this.param.id, viewInfo: view }) + bus.$emit('view-in-cache', { type: 'styleChange', viewId: this.view.id, viewInfo: view }) } }, From f773a3109f9ffed0e43237f8a8683b266da93878 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 21 Sep 2022 17:09:16 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=A2=9E=E5=8A=A0=E6=A0=B7=E5=BC=8F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/lang/en.js | 3 ++ frontend/src/lang/tw.js | 3 ++ frontend/src/lang/zh.js | 3 ++ frontend/src/views/chart/chart/chart.js | 5 +++- .../src/views/chart/chart/common/common.js | 30 +++++++++++++++++++ .../views/chart/chart/common/common_antv.js | 25 ++++++++++++++++ .../chart/components/senior/FunctionCfg.vue | 14 +++++++-- 7 files changed, 80 insertions(+), 3 deletions(-) diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index ea90af461c..48ce97f7a1 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1314,6 +1314,9 @@ export default { analyse_cfg: 'Analyse', slider: 'Slider', slider_range: 'Range', + slider_bg: 'Background', + slider_fill_bg: 'Selected Background', + slider_text_color: 'Font Color', chart_no_senior: 'This chart type not support senior config,please look forward to.', chart_no_properties: 'This chart type not support properties config.', assist_line: 'Assist Line', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index cb6c2df8eb..5df944cb3b 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1314,6 +1314,9 @@ export default { analyse_cfg: '分析預警', slider: '縮略軸', slider_range: '默認範圍', + slider_bg: '背景', + slider_fill_bg: '選中背景', + slider_text_color: '字體顏色', chart_no_senior: '當前圖表類型暫無高級配置,敬請期待', chart_no_properties: '當前圖表類型暫無样式配置.', assist_line: '輔助線', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 511dba8785..5a2bf46a75 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1313,6 +1313,9 @@ export default { analyse_cfg: '分析预警', slider: '缩略轴', slider_range: '默认范围', + slider_bg: '背景', + slider_fill_bg: '选中背景', + slider_text_color: '字体颜色', chart_no_senior: '当前图表类型暂无高级配置,敬请期待', chart_no_properties: '当前图表类型暂无样式配置', assist_line: '辅助线', diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index 65eea85321..43548d3e71 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -382,7 +382,10 @@ export const DEFAULT_SPLIT = { } export const DEFAULT_FUNCTION_CFG = { sliderShow: false, - sliderRange: [0, 10] + sliderRange: [0, 10], + sliderBg: '#FFFFFF', + sliderFillBg: '#BCD6F1', + sliderTextClolor: '#999999' } export const DEFAULT_THRESHOLD = { gaugeThreshold: '', diff --git a/frontend/src/views/chart/chart/common/common.js b/frontend/src/views/chart/chart/common/common.js index ccb98c70d6..38a601ce2a 100644 --- a/frontend/src/views/chart/chart/common/common.js +++ b/frontend/src/views/chart/chart/common/common.js @@ -192,6 +192,16 @@ export function componentStyle(chart_option, chart) { } } +const hexToRgba = (hex, opacity) => { + let rgbaColor = '' + const reg = /^#[\da-f]{6}$/i + if (reg.test(hex)) { + rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt( + '0x' + hex.slice(3, 5) + )},${parseInt('0x' + hex.slice(5, 7))},${opacity})` + } + return rgbaColor +} export function seniorCfg(chart_option, chart) { if (chart.senior && chart.type && (chart.type.includes('bar') || chart.type.includes('line') || chart.type.includes('mix'))) { const senior = JSON.parse(chart.senior) @@ -209,6 +219,26 @@ export function seniorCfg(chart_option, chart) { end: parseInt(senior.functionCfg.sliderRange[1]) } ] + if (senior.functionCfg.sliderBg) { + chart_option.dataZoom[1].dataBackground = { + lineStyle: { color: reverseColor(senior.functionCfg.sliderBg), opacity: 0.3 }, + areaStyle: { color: reverseColor(senior.functionCfg.sliderBg), opacity: 0.1 } + } + } + if (senior.functionCfg.sliderFillBg) { + chart_option.dataZoom[1].selectedDataBackground = { + lineStyle: { color: senior.functionCfg.sliderFillBg }, + areaStyle: { color: senior.functionCfg.sliderFillBg } + } + const rgba = hexToRgba(senior.functionCfg.sliderFillBg, 0.5) + chart_option.dataZoom[1].fillerColor = rgba + } + if (senior.functionCfg.sliderTextClolor) { + chart_option.dataZoom[1].textStyle = { color: senior.functionCfg.sliderTextClolor } + const rgba = hexToRgba(senior.functionCfg.sliderTextClolor, 0.5) + chart_option.dataZoom[1].handleStyle = { color: rgba } + } + if (chart.type.includes('horizontal')) { chart_option.dataZoom[0].yAxisIndex = [0] chart_option.dataZoom[1].yAxisIndex = [0] diff --git a/frontend/src/views/chart/chart/common/common_antv.js b/frontend/src/views/chart/chart/common/common_antv.js index 9c736d0d8e..d67c066803 100644 --- a/frontend/src/views/chart/chart/common/common_antv.js +++ b/frontend/src/views/chart/chart/common/common_antv.js @@ -636,6 +636,31 @@ export function getSlider(chart) { start: parseInt(senior.functionCfg.sliderRange[0]) / 100, end: parseInt(senior.functionCfg.sliderRange[1]) / 100 } + + if (senior.functionCfg.sliderBg) { + cfg.backgroundStyle = { + fill: senior.functionCfg.sliderBg, + stroke: senior.functionCfg.sliderBg, + lineWidth: 1, + strokeOpacity: 0.5 + } + } + if (senior.functionCfg.sliderFillBg) { + cfg.foregroundStyle = { + 'fill': senior.functionCfg.sliderFillBg, + 'fillOpacity': 0.5 + } + } + if (senior.functionCfg.sliderTextClolor) { + cfg.textStyle = { + 'fill': senior.functionCfg.sliderTextClolor + } + cfg.handlerStyle = { + 'fill': senior.functionCfg.sliderTextClolor, + 'fillOpacity': 0.5, + 'highLightFill': senior.functionCfg.sliderTextClolor + } + } } } } diff --git a/frontend/src/views/chart/components/senior/FunctionCfg.vue b/frontend/src/views/chart/components/senior/FunctionCfg.vue index 1ed5249cf0..b3f4920542 100644 --- a/frontend/src/views/chart/components/senior/FunctionCfg.vue +++ b/frontend/src/views/chart/components/senior/FunctionCfg.vue @@ -8,13 +8,22 @@ + + + + + + + + +