diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java index fdf4c43a6f..44db0ba932 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java @@ -53,7 +53,7 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/linkJump/queryPanelJumpInfo/**", ANON); //未读消息数量 - filterChainDefinitionMap.put("/api/sys_msg/unReadCount", ANON); + // filterChainDefinitionMap.put("/api/sys_msg/unReadCount/**", ANON); filterChainDefinitionMap.put("/**/*.json", ANON); filterChainDefinitionMap.put("/system/ui/**", ANON); diff --git a/backend/src/main/java/io/dataease/base/domain/SysMsgChannel.java b/backend/src/main/java/io/dataease/base/domain/SysMsgChannel.java index 2bae1b3142..4febdde0fb 100644 --- a/backend/src/main/java/io/dataease/base/domain/SysMsgChannel.java +++ b/backend/src/main/java/io/dataease/base/domain/SysMsgChannel.java @@ -2,10 +2,12 @@ package io.dataease.base.domain; import java.io.Serializable; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data +@ApiModel("消息渠道") public class SysMsgChannel implements Serializable { @ApiModelProperty("消息渠道ID") diff --git a/backend/src/main/java/io/dataease/base/domain/SysMsgSetting.java b/backend/src/main/java/io/dataease/base/domain/SysMsgSetting.java index 49862f077e..13780af7d8 100644 --- a/backend/src/main/java/io/dataease/base/domain/SysMsgSetting.java +++ b/backend/src/main/java/io/dataease/base/domain/SysMsgSetting.java @@ -2,10 +2,12 @@ package io.dataease.base.domain; import java.io.Serializable; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data +@ApiModel("订阅信息") public class SysMsgSetting implements Serializable { @ApiModelProperty(hidden = true) private Long msgSettingId; diff --git a/backend/src/main/java/io/dataease/base/domain/SysMsgType.java b/backend/src/main/java/io/dataease/base/domain/SysMsgType.java index 97262451b5..63d1e7db8a 100644 --- a/backend/src/main/java/io/dataease/base/domain/SysMsgType.java +++ b/backend/src/main/java/io/dataease/base/domain/SysMsgType.java @@ -2,10 +2,12 @@ package io.dataease.base.domain; import java.io.Serializable; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data +@ApiModel("消息类型") public class SysMsgType implements Serializable { @ApiModelProperty("消息类型ID") @@ -17,10 +19,10 @@ public class SysMsgType implements Serializable { @ApiModelProperty("消息类型名称") private String typeName; - @ApiModelProperty(hidden = true) + @ApiModelProperty("回调路由") private String router; - @ApiModelProperty(hidden = true) + @ApiModelProperty("回调函数") private String callback; private static final long serialVersionUID = 1L; diff --git a/backend/src/main/java/io/dataease/base/domain/SysUser.java b/backend/src/main/java/io/dataease/base/domain/SysUser.java index 8867cc75c4..19b0ad8da8 100644 --- a/backend/src/main/java/io/dataease/base/domain/SysUser.java +++ b/backend/src/main/java/io/dataease/base/domain/SysUser.java @@ -1,44 +1,64 @@ package io.dataease.base.domain; import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class SysUser implements Serializable { + @ApiModelProperty("ID") private Long userId; + @ApiModelProperty("组织ID") private Long deptId; + @ApiModelProperty("账号") private String username; + @ApiModelProperty("姓名") private String nickName; + @ApiModelProperty("性别") private String gender; + @ApiModelProperty("电话") private String phone; + @ApiModelProperty("邮箱") private String email; + @ApiModelProperty(hidden = true) private String password; + @ApiModelProperty("是否管理员") private Boolean isAdmin; + @ApiModelProperty("状态") private Long enabled; + @ApiModelProperty("创建人") private String createBy; + @ApiModelProperty("修改人") private String updateBy; + @ApiModelProperty("密码重置时间") private Long pwdResetTime; + @ApiModelProperty("创建时间") private Long createTime; + @ApiModelProperty("修改时间") private Long updateTime; + @ApiModelProperty("语言") private String language; + @ApiModelProperty("用户来源") private Integer from; + @ApiModelProperty(hidden = true) private String sub; private static final long serialVersionUID = 1L; diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml index 14f6a46568..d755e2dc61 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml @@ -94,6 +94,7 @@ `custom_attr`, `custom_style`, `custom_filter`, + `drill_fields`, `create_by`, `create_time`, `update_time`, @@ -117,6 +118,7 @@ `custom_attr`, `custom_style`, `custom_filter`, + `drill_fields`, `create_by`, `create_time`, `update_time`, diff --git a/backend/src/main/java/io/dataease/controller/IndexController.java b/backend/src/main/java/io/dataease/controller/IndexController.java index 7cb3f07b78..3edc80323d 100644 --- a/backend/src/main/java/io/dataease/controller/IndexController.java +++ b/backend/src/main/java/io/dataease/controller/IndexController.java @@ -43,8 +43,8 @@ public class IndexController { return "doc.html"; default: // DataEaseException.throwException("Invalid License."); - return "nolic.html"; - // return "doc.html"; + /* return "nolic.html"; */ + return "doc.html"; } // return "index.html"; } diff --git a/backend/src/main/java/io/dataease/controller/response/ExistLdapUser.java b/backend/src/main/java/io/dataease/controller/response/ExistLdapUser.java new file mode 100644 index 0000000000..f8ffcc9957 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/response/ExistLdapUser.java @@ -0,0 +1,15 @@ +package io.dataease.controller.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data + +@ApiModel("已同步用户") +public class ExistLdapUser { + + @ApiModelProperty("账号") + private String username; + +} diff --git a/backend/src/main/java/io/dataease/controller/sys/MsgController.java b/backend/src/main/java/io/dataease/controller/sys/MsgController.java index 8db6b4cba9..eddcc18bda 100644 --- a/backend/src/main/java/io/dataease/controller/sys/MsgController.java +++ b/backend/src/main/java/io/dataease/controller/sys/MsgController.java @@ -23,6 +23,8 @@ import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; @Api(tags = "系统:消息管理") @ApiSupport(order = 230) @@ -35,6 +37,11 @@ public class MsgController { @ApiOperation("分页查询") @PostMapping("/list/{goPage}/{pageSize}") + @ApiImplicitParams({ + @ApiImplicitParam(paramType="path", name = "goPage", value = "页码", required = true, dataType = "Integer"), + @ApiImplicitParam(paramType="path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "msgRequest", value = "查询条件", required = true) + }) public Pager> messages(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody MsgRequest msgRequest) { Long userId = AuthUtils.getUser().getUserId(); List typeIds = null; @@ -50,16 +57,18 @@ public class MsgController { @ApiOperation("查询未读数量") @PostMapping("/unReadCount") - public Long unReadCount(@RequestBody Map request) { - if(null == request || null == request.get("userId")) { + public Long unReadCount() {; + Long userId = null; + if(null == AuthUtils.getUser() || (userId = AuthUtils.getUser().getUserId()) == null) { throw new RuntimeException("缺少用户ID"); } - Long userId = request.get("userId"); + // Long userId = request.get("userId"); return sysMsgService.queryCount(userId); } @ApiOperation("设置已读") @PostMapping("/setReaded/{msgId}") + @ApiImplicitParam(paramType="path", name = "msgId", value = "消息ID", required = true, dataType = "Long") public void setReaded(@PathVariable Long msgId) { sysMsgService.setReaded(msgId); } @@ -67,6 +76,7 @@ public class MsgController { @ApiOperation("批量设置已读") @PostMapping("/batchRead") + @ApiImplicitParam(name = "msgIds", value = "消息ID集合", required = true, dataType = "List") public void batchRead(@RequestBody List msgIds) { sysMsgService.setBatchReaded(msgIds); } @@ -79,6 +89,7 @@ public class MsgController { @ApiOperation("批量删除") @PostMapping("/batchDelete") + @ApiImplicitParam(name = "msgIds", value = "消息ID集合", required = true, dataType = "List") public void batchDelete(@RequestBody List msgIds) { sysMsgService.batchDelete(msgIds); } 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 ff0706a6c5..f91d32ef81 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java @@ -9,6 +9,7 @@ import io.dataease.base.domain.SysRole; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.PageUtils; import io.dataease.commons.utils.Pager; +import io.dataease.controller.response.ExistLdapUser; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.controller.sys.request.SysUserCreateRequest; import io.dataease.controller.sys.request.SysUserPwdRequest; @@ -18,13 +19,17 @@ import io.dataease.controller.sys.response.SysUserGridResponse; import io.dataease.service.sys.SysRoleService; import io.dataease.service.sys.SysUserService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; + import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @RestController @Api(tags = "系统:用户管理") @@ -40,6 +45,11 @@ public class SysUserController { @ApiOperation("查询用户") @PostMapping("/userGrid/{goPage}/{pageSize}") + @ApiImplicitParams({ + @ApiImplicitParam(paramType="path", name = "goPage", value = "页码", required = true, dataType = "Integer"), + @ApiImplicitParam(paramType="path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "request", value = "查询条件", required = true) + }) public Pager> userGrid(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) { Page page = PageHelper.startPage(goPage, pageSize, true); return PageUtils.setPageInfo(page, sysUserService.query(request)); @@ -63,6 +73,7 @@ public class SysUserController { @ApiOperation("删除用户") @PostMapping("/delete/{userId}") + @ApiImplicitParam(paramType = "path", value = "用户ID", name = "userId", required = true, dataType = "Integer") public void delete(@PathVariable("userId") Long userId){ sysUserService.delete(userId); } @@ -103,6 +114,7 @@ public class SysUserController { @ApiOperation("设置语言") @PostMapping("/setLanguage/{language}") + @ApiImplicitParam(paramType="path", name = "language", value = "语言(zh_CN, zh_TW, en_US)", required = true, dataType = "String") public void setLanguage(@PathVariable String language) { CurrentUserDto user = AuthUtils.getUser(); Optional.ofNullable(language).ifPresent(currentLanguage -> { @@ -122,6 +134,11 @@ public class SysUserController { @ApiOperation("查询角色") @PostMapping("/roleGrid/{goPage}/{pageSize}") + @ApiImplicitParams({ + @ApiImplicitParam(paramType="path", name = "goPage", value = "页码", required = true, dataType = "Integer"), + @ApiImplicitParam(paramType="path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "request", value = "查询条件", required = true) + }) public Pager> roleGrid(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) { Page page = PageHelper.startPage(goPage, pageSize, true); Pager> listPager = PageUtils.setPageInfo(page, sysRoleService.query(request)); @@ -137,8 +154,13 @@ public class SysUserController { @ApiOperation("已同步用户") @PostMapping("/existLdapUsers") - public List getExistLdapUsers() { - return sysUserService.ldapUserNames(); + public List getExistLdapUsers() { + List userNames = sysUserService.ldapUserNames(); + return userNames.stream().map(name -> { + ExistLdapUser ldapUser = new ExistLdapUser(); + ldapUser.setUsername(name); + return ldapUser; + }).collect(Collectors.toList()); } } diff --git a/backend/src/main/java/io/dataease/controller/sys/base/BaseGridRequest.java b/backend/src/main/java/io/dataease/controller/sys/base/BaseGridRequest.java index 0e645dab29..91a25a9c9c 100644 --- a/backend/src/main/java/io/dataease/controller/sys/base/BaseGridRequest.java +++ b/backend/src/main/java/io/dataease/controller/sys/base/BaseGridRequest.java @@ -1,6 +1,7 @@ package io.dataease.controller.sys.base; import io.dataease.base.mapper.ext.query.GridExample; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.collections.CollectionUtils; @@ -8,9 +9,11 @@ import java.io.Serializable; import java.util.List; + +@ApiModel("查询条件") public class BaseGridRequest implements Serializable { - @ApiModelProperty("查询条件") + @ApiModelProperty("条件集合") private List conditions; public List getConditions() { diff --git a/backend/src/main/java/io/dataease/controller/sys/request/MsgRequest.java b/backend/src/main/java/io/dataease/controller/sys/request/MsgRequest.java index 3645287be2..3e5ac7f497 100644 --- a/backend/src/main/java/io/dataease/controller/sys/request/MsgRequest.java +++ b/backend/src/main/java/io/dataease/controller/sys/request/MsgRequest.java @@ -1,5 +1,6 @@ package io.dataease.controller.sys.request; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -7,6 +8,7 @@ import java.io.Serializable; import java.util.List; @Data +@ApiModel("消息条件") public class MsgRequest implements Serializable { private static final long serialVersionUID = 1920091635946508658L; 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 4ddf049a69..0aeb3c2a4c 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,12 +1,14 @@ package io.dataease.controller.sys.request; import io.dataease.base.domain.SysUser; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data +@ApiModel("用户信息") public class SysUserCreateRequest extends SysUser { @ApiModelProperty(value = "角色ID集合", required = true, position = 7) diff --git a/backend/src/main/java/io/dataease/controller/sys/request/SysUserPwdRequest.java b/backend/src/main/java/io/dataease/controller/sys/request/SysUserPwdRequest.java index 7f8c2aa3f1..7e15abb20b 100644 --- a/backend/src/main/java/io/dataease/controller/sys/request/SysUserPwdRequest.java +++ b/backend/src/main/java/io/dataease/controller/sys/request/SysUserPwdRequest.java @@ -1,12 +1,14 @@ package io.dataease.controller.sys.request; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @Data +@ApiModel("更新密码参数") public class SysUserPwdRequest implements Serializable { @ApiModelProperty(value = "用户ID", required = true) diff --git a/backend/src/main/java/io/dataease/controller/sys/request/SysUserStateRequest.java b/backend/src/main/java/io/dataease/controller/sys/request/SysUserStateRequest.java index 379eb14d47..115c96b9e9 100644 --- a/backend/src/main/java/io/dataease/controller/sys/request/SysUserStateRequest.java +++ b/backend/src/main/java/io/dataease/controller/sys/request/SysUserStateRequest.java @@ -1,16 +1,18 @@ package io.dataease.controller.sys.request; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @Data +@ApiModel("更新状态参数") public class SysUserStateRequest implements Serializable { @ApiModelProperty(value = "用户ID", required = true) private Long userId; - @ApiModelProperty(value = "状态", required = true, allowableValues = "1,0") + @ApiModelProperty(value = "状态{1:可用, 0:禁用}", required = true, allowableValues = "1,0") private Long enabled; } diff --git a/backend/src/main/java/io/dataease/controller/sys/response/SettingTreeNode.java b/backend/src/main/java/io/dataease/controller/sys/response/SettingTreeNode.java index 74d3f6a718..3b04880dba 100644 --- a/backend/src/main/java/io/dataease/controller/sys/response/SettingTreeNode.java +++ b/backend/src/main/java/io/dataease/controller/sys/response/SettingTreeNode.java @@ -1,6 +1,7 @@ package io.dataease.controller.sys.response; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -8,6 +9,7 @@ import java.io.Serializable; import java.util.List; @Data +@ApiModel("消息类型节点") public class SettingTreeNode implements Serializable { private static final long serialVersionUID = -2416283978185545199L; diff --git a/backend/src/main/resources/db/migration/V27__de1.4.sql b/backend/src/main/resources/db/migration/V27__de1.4.sql index 69a25ceedc..2b6b07d669 100644 --- a/backend/src/main/resources/db/migration/V27__de1.4.sql +++ b/backend/src/main/resources/db/migration/V27__de1.4.sql @@ -158,32 +158,6 @@ INSERT INTO `sys_theme_item` VALUES (2, 'customSiderTextColor', '#ACBAC3'); INSERT INTO `sys_theme_item` VALUES (2, 'customTableBG', '#21333B'); INSERT INTO `sys_theme_item` VALUES (2, 'customTableColor', '#ACBAC3'); INSERT INTO `sys_theme_item` VALUES (2, 'customTableBorderColor', '#495865'); -INSERT INTO `sys_theme_item` VALUES (7, 'primary', '#409EFF'); -INSERT INTO `sys_theme_item` VALUES (7, 'deSuccess', '#67C23A'); -INSERT INTO `sys_theme_item` VALUES (7, 'deWarning', '#E6A23C'); -INSERT INTO `sys_theme_item` VALUES (7, 'deDanger', '#F56C6C'); -INSERT INTO `sys_theme_item` VALUES (7, 'deInfo', '#909399'); -INSERT INTO `sys_theme_item` VALUES (7, 'deTextPrimary', '#303133'); -INSERT INTO `sys_theme_item` VALUES (7, 'deTextRegular', '#606266'); -INSERT INTO `sys_theme_item` VALUES (7, 'deTextSecondary', '#909399'); -INSERT INTO `sys_theme_item` VALUES (7, 'deTextPlaceholder', '#C0C4CC'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBorderBase', '#DCDFE6'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBorderLight', '#E4E7ED'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBorderLighter', '#EBEEF5'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBorderExtraLight', '#F2F6FC'); -INSERT INTO `sys_theme_item` VALUES (7, 'deWhite', '#FFFFFF'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBlack', '#000000'); -INSERT INTO `sys_theme_item` VALUES (7, 'deBackgroundBase', '#F5F7FA'); -INSERT INTO `sys_theme_item` VALUES (7, 'shade-1', 'rgb(58, 142, 230)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-1', 'rgb(83, 168, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-2', 'rgb(102, 177, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-3', 'rgb(121, 187, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-4', 'rgb(140, 197, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-5', 'rgb(160, 207, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-6', 'rgb(179, 216, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-7', 'rgb(198, 226, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-8', 'rgb(217, 236, 255)'); -INSERT INTO `sys_theme_item` VALUES (7, 'light-9', 'rgb(236, 245, 255)'); INSERT INTO `sys_theme_item` VALUES (1, 'primary', '#409EFF'); INSERT INTO `sys_theme_item` VALUES (1, 'deSuccess', '#67C23A'); INSERT INTO `sys_theme_item` VALUES (1, 'deWarning', '#E6A23C'); diff --git a/frontend/src/api/system/msg.js b/frontend/src/api/system/msg.js index 4dc120ae61..8c1623b0c3 100644 --- a/frontend/src/api/system/msg.js +++ b/frontend/src/api/system/msg.js @@ -9,12 +9,12 @@ export function query(pageIndex, pageSize, data) { }) } -export function unReadCount(data) { +export function unReadCount() { return request({ url: '/api/sys_msg/unReadCount', method: 'post', - loading: false, - data + loading: false + // data }) } diff --git a/frontend/src/components/Notification/index.vue b/frontend/src/components/Notification/index.vue index 796ac96762..8bc2c9bdf0 100644 --- a/frontend/src/components/Notification/index.vue +++ b/frontend/src/components/Notification/index.vue @@ -187,10 +187,10 @@ export default { }.bind(this) }) } - const param = { + /* const param = { userId: this.user.userId - } - unReadCount(param).then(res => { + } */ + unReadCount().then(res => { this.count = res.data }) }, diff --git a/frontend/src/components/canvas/components/Editor/DateFormat.vue b/frontend/src/components/canvas/components/Editor/DateFormat.vue index cbf7b2f4ef..d1a513aac6 100644 --- a/frontend/src/components/canvas/components/Editor/DateFormat.vue +++ b/frontend/src/components/canvas/components/Editor/DateFormat.vue @@ -114,7 +114,8 @@ export default { }, computed: { ...mapState([ - 'curComponent' + 'curComponent', + 'curCanvasScale' ]) }, created() { @@ -135,10 +136,13 @@ export default { modelChange(val) { if (val === '0') { this.curComponent.style.height = 100 + this.curComponent.sizey = Math.round(this.curComponent.style.height / this.curCanvasScale.matrixStyleOriginHeight) } else if (val === '1') { this.curComponent.style.height = 150 + this.curComponent.sizey = Math.round(this.curComponent.style.height / this.curCanvasScale.matrixStyleOriginHeight) } else { this.curComponent.style.height = 300 + this.curComponent.sizey = Math.round(this.curComponent.style.height / this.curCanvasScale.matrixStyleOriginHeight) } } } diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue index c4d7aff9d8..0a5e3da298 100644 --- a/frontend/src/components/canvas/custom-component/UserView.vue +++ b/frontend/src/components/canvas/custom-component/UserView.vue @@ -339,14 +339,20 @@ export default { }, jumpClick(param) { - const dimension = param.dimensionList[0] - - param.sourcePanelId = this.panelInfo.id - param.sourceViewId = param.viewId - param.sourceFieldId = dimension.id - const sourceInfo = param.viewId + '#' + dimension.id - const jumpInfo = this.nowPanelJumpInfo[sourceInfo] + let dimension, jumpInfo, sourceInfo + // 倒序取最后一个能匹配的 + for (let i = param.dimensionList.length - 1; i >= 0; i--) { + dimension = param.dimensionList[i] + sourceInfo = param.viewId + '#' + dimension.id + jumpInfo = this.nowPanelJumpInfo[sourceInfo] + if (jumpInfo) { + break + } + } if (jumpInfo) { + param.sourcePanelId = this.panelInfo.id + param.sourceViewId = param.viewId + param.sourceFieldId = dimension.id // 内部仪表板跳转 if (jumpInfo.linkType === 'inner') { if (jumpInfo.targetPanelId) { diff --git a/frontend/src/components/canvas/custom-component/UserViewDialog.vue b/frontend/src/components/canvas/custom-component/UserViewDialog.vue index 1a077dc2a0..3dbb90cb1f 100644 --- a/frontend/src/components/canvas/custom-component/UserViewDialog.vue +++ b/frontend/src/components/canvas/custom-component/UserViewDialog.vue @@ -58,6 +58,9 @@ export default { } } } + if (!style.background) { + style.background = '#FFFFFF' + } return style }, ...mapState([ diff --git a/frontend/src/icons/svg/word-cloud.svg b/frontend/src/icons/svg/word-cloud.svg new file mode 100644 index 0000000000..7b42315b37 --- /dev/null +++ b/frontend/src/icons/svg/word-cloud.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 8682b36dcc..6b4bcb57e6 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -423,7 +423,14 @@ export default { theme: { change: 'Change Theme', documentation: 'Theme documentation', - tips: 'Tips: It is different from the theme-pick on the navbar is two different skinning methods, each with different application scenarios. Refer to the documentation for details.' + tips: 'Tips: It is different from the theme-pick on the navbar is two different skinning methods, each with different application scenarios. Refer to the documentation for details.', + base: 'Base color', + font: 'Font color', + border: 'Border color', + background: 'Background color', + custom: 'Custom color', + otherSave: 'Theme Save as', + info: 'Theme info' }, tagsView: { refresh: 'Refresh', @@ -946,7 +953,10 @@ export default { table_page_size: 'Page Size', table_page_size_unit: 'Item/Page', result_count: 'Result', - result_mode_all: 'ALL' + result_mode_all: 'ALL', + chart_word_cloud: 'Word Cloud', + drag_block_word_cloud_label: 'Word Label', + drag_block_word_cloud_size: 'Word Size' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 47cca6524e..1393e2e979 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -423,7 +423,14 @@ export default { theme: { change: '換膚', documentation: '換膚文檔', - tips: 'Tips: 它區別于 navbar 上的 theme-pick, 是兩種不同的換膚方法,各自有不同的應用場景,具體請參考文檔。' + tips: 'Tips: 它區別于 navbar 上的 theme-pick, 是兩種不同的換膚方法,各自有不同的應用場景,具體請參考文檔。', + base: '基礎配色', + font: '字體顏色', + border: '邊框顏色', + background: '背景顏色', + custom: '自定義顏色', + otherSave: '主題另存為', + info: '主題信息' }, tagsView: { refresh: '刷新', @@ -947,7 +954,10 @@ export default { table_page_size: '分頁', table_page_size_unit: '條/頁', result_count: '結果展示', - result_mode_all: '全部' + result_mode_all: '全部', + chart_word_cloud: '詞雲', + drag_block_word_cloud_label: '詞標簽', + drag_block_word_cloud_size: '詞大小' }, dataset: { sheet_warn: '有多個 Sheet 頁,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index e0d5a42d6a..5a6b1381b1 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -425,7 +425,14 @@ export default { theme: { change: '换肤', documentation: '换肤文档', - tips: 'Tips: 它区别于 navbar 上的 theme-pick, 是两种不同的换肤方法,各自有不同的应用场景,具体请参考文档。' + tips: 'Tips: 它区别于 navbar 上的 theme-pick, 是两种不同的换肤方法,各自有不同的应用场景,具体请参考文档。', + base: '基础配色', + font: '字体颜色', + border: '边框颜色', + background: '背景颜色', + custom: '自定义颜色', + otherSave: '主题另存为', + info: '主题信息' }, tagsView: { refresh: '刷新', @@ -950,7 +957,10 @@ export default { table_page_size: '分页', table_page_size_unit: '条/页', result_count: '结果展示', - result_mode_all: '全部' + result_mode_all: '全部', + chart_word_cloud: '词云', + drag_block_word_cloud_label: '词标签', + drag_block_word_cloud_size: '词大小' }, dataset: { sheet_warn: '有多个 Sheet 页,默认抽取第一个', diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index 77a8cd1007..043268e780 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -864,6 +864,6 @@ export const COLOR_PANEL = [ '#1e90ff', '#c71585', '#999999', - '#ffffff', + '#00008b', '#000000' ] diff --git a/frontend/src/views/chart/chart/common/common.js b/frontend/src/views/chart/chart/common/common.js index 493926d33d..3945d4f4bf 100644 --- a/frontend/src/views/chart/chart/common/common.js +++ b/frontend/src/views/chart/chart/common/common.js @@ -51,7 +51,7 @@ export function componentStyle(chart_option, chart) { chart_option.legend.orient = customStyle.legend.orient chart_option.legend.icon = customStyle.legend.icon chart_option.legend.textStyle = customStyle.legend.textStyle - if (chart.type === 'treemap') { + if (chart.type === 'treemap' || chart.type === 'gauge') { chart_option.legend.show = false } } diff --git a/frontend/src/views/chart/chart/waterfall/waterfall.js b/frontend/src/views/chart/chart/waterfall/waterfall.js index 4432fe6c7a..fdb3805d9d 100644 --- a/frontend/src/views/chart/chart/waterfall/waterfall.js +++ b/frontend/src/views/chart/chart/waterfall/waterfall.js @@ -103,5 +103,8 @@ export function baseWaterfallOptionAntV(plot, container, chart, action) { } plot = new Waterfall(container, options) + plot.off('interval:click') + plot.on('interval:click', action) + return plot } diff --git a/frontend/src/views/chart/chart/wordCloud/word_cloud.js b/frontend/src/views/chart/chart/wordCloud/word_cloud.js new file mode 100644 index 0000000000..c506e7cf8b --- /dev/null +++ b/frontend/src/views/chart/chart/wordCloud/word_cloud.js @@ -0,0 +1,62 @@ +import { + getPadding, + getTheme, + getTooltip +} from '@/views/chart/chart/common/common_antv' +import { WordCloud } from '@antv/g2plot' + +export function baseWordCloudOptionAntV(plot, container, chart, action) { + // theme + const theme = getTheme(chart) + // attr + const tooltip = getTooltip(chart) + // data + const data = chart.data.datas + // options + const options = { + theme: theme, + data: data, + wordField: 'field', + weightField: 'value', + colorField: 'field', + wordStyle: { + fontFamily: 'Verdana', + fontSize: [8, 32], + rotation: [0, 0], + padding: 6 + }, + random: () => 0.5, + appendPadding: getPadding(chart), + tooltip: tooltip, + legend: false, + interactions: [ + { + type: 'element-active', cfg: { + start: [{ trigger: 'element:mouseenter', action: ['element-highlight:highlight', 'element-active:reset', 'cursor:pointer'] }], + end: [{ trigger: 'element:mouseleave', action: ['element-highlight:reset', 'element-active:reset', 'cursor:default'] }] + } + } + ] + } + // size + // let customAttr = {} + // if (chart.customAttr) { + // customAttr = JSON.parse(chart.customAttr) + // if (customAttr.size) { + // const s = JSON.parse(JSON.stringify(customAttr.size)) + // if (s.barDefault) { + // delete options.marginRatio + // } else { + // options.marginRatio = s.barGap + // } + // } + // } + + // 开始渲染 + if (plot) { + plot.destroy() + } + plot = new WordCloud(container, options) + + return plot +} diff --git a/frontend/src/views/chart/components/ChartComponentG2.vue b/frontend/src/views/chart/components/ChartComponentG2.vue index 48156af50d..6e9eef6d43 100644 --- a/frontend/src/views/chart/components/ChartComponentG2.vue +++ b/frontend/src/views/chart/components/ChartComponentG2.vue @@ -23,6 +23,7 @@ import { baseFunnelOptionAntV } from '@/views/chart/chart/funnel/funnel_antv' import { baseTreemapOptionAntV } from '@/views/chart/chart/treemap/treemap_antv' import { baseRadarOptionAntV } from '@/views/chart/chart/radar/radar_antv' import { baseWaterfallOptionAntV } from '@/views/chart/chart/waterfall/waterfall' +import { baseWordCloudOptionAntV } from '@/views/chart/chart/wordCloud/word_cloud' export default { name: 'ChartComponentG2', @@ -161,6 +162,8 @@ export default { this.myChart = baseLiquid(this.myChart, this.chartId, chart) } else if (chart.type === 'waterfall') { this.myChart = baseWaterfallOptionAntV(this.myChart, this.chartId, chart, this.antVAction) + } else if (chart.type === 'word-cloud') { + this.myChart = baseWordCloudOptionAntV(this.myChart, this.chartId, chart, this.antVAction) } else { if (this.myChart) { this.antVRenderStatus = false diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 8c57a5d51f..448217a4ea 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -176,6 +176,7 @@ {{ $t('chart.drag_block_radar_label') }} {{ $t('chart.area') }} {{ $t('chart.drag_block_treemap_label') }} + {{ $t('chart.drag_block_word_cloud_label') }} / {{ $t('chart.dimension') }} {{ $t('chart.dimension_or_quota') }} @@ -211,6 +212,7 @@ {{ $t('chart.drag_block_treemap_size') }} {{ $t('chart.drag_block_value_axis_main') }} {{ $t('chart.drag_block_progress') }} + {{ $t('chart.drag_block_word_cloud_size') }} / {{ $t('chart.quota') }} @@ -334,7 +336,7 @@ {{ $t('chart.placeholder_field') }} - + {{ $t('chart.drill') }} / @@ -381,11 +383,11 @@ - + - + @@ -418,7 +420,7 @@ - + diff --git a/frontend/src/views/chart/view/ChartType.vue b/frontend/src/views/chart/view/ChartType.vue index 46170ced83..136bcb155a 100644 --- a/frontend/src/views/chart/view/ChartType.vue +++ b/frontend/src/views/chart/view/ChartType.vue @@ -103,13 +103,17 @@ + + + + + -
diff --git a/frontend/src/views/link/generate/index.vue b/frontend/src/views/link/generate/index.vue index 887c32e930..5535777648 100644 --- a/frontend/src/views/link/generate/index.vue +++ b/frontend/src/views/link/generate/index.vue @@ -120,6 +120,10 @@ export default { this.form.uri = uri ? (this.origin + uri) : uri // 返回的密码是共钥加密后的 所以展示需要私钥解密一波 pwd && (this.form.pwd = pwd) + + if (pwd && pwd.length > 0 && pwd.length > this.pwdNums) { + this.resetPwd() + } /* pwd && (this.form.pwd = decrypt(pwd)) */ /* overTime && (this.form.overTime = overTime) */ overTime && (this.$set(this.form, 'overTime', overTime)) diff --git a/frontend/src/views/system/user/imp-ldap.vue b/frontend/src/views/system/user/imp-ldap.vue index ff8af77267..a6b48b5816 100644 --- a/frontend/src/views/system/user/imp-ldap.vue +++ b/frontend/src/views/system/user/imp-ldap.vue @@ -238,7 +238,7 @@ export default { ldapUsers().then(res => { if (res && res.data) { this.users = res.data.map(item => { - if (this.exitsUsers.some(existUser => existUser === item.userName)) { + if (this.exitsUsers.some(existUser => existUser.username === item.userName)) { item.disabled = true } return item