diff --git a/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java b/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java index 4767cda249..8e32c44079 100644 --- a/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java +++ b/backend/src/main/java/io/dataease/auth/config/ShiroConfig.java @@ -48,13 +48,11 @@ public class ShiroConfig { // 添加自己的过滤器并且取名为jwt Map filterMap = new LinkedHashMap<>(); filterMap.put("f2cPerms", new F2CPermissionsFilter()); - //filterMap.put("f2cRoles", new F2CRolesFilter()); filterMap.put("jwt", new JWTFilter()); - /*filterMap.put("jwt", jwtFilter);*/ filterMap.put("logout", new F2CLogoutFilter()); factoryBean.setSecurityManager(securityManager); - factoryBean.setLoginUrl("/index.html"); - factoryBean.setUnauthorizedUrl("/index.html"); + factoryBean.setLoginUrl("/login"); + factoryBean.setUnauthorizedUrl("/login"); factoryBean.setFilterChainDefinitionMap(shiroService.loadFilterChainDefinitionMap()); factoryBean.setFilters(filterMap); return factoryBean; diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 314803d371..62316b95a9 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -80,12 +80,14 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { }else { response401(request, response); } - } } return false; } + + + private String refreshToken(ServletRequest request, ServletResponse response) throws Exception{ // 获取AccessToken(Shiro中getAuthzHeader方法已经实现) String token = this.getAuthzHeader(request); 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 8711b9d27b..1d15c536b9 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 @@ -34,17 +34,19 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/fonts/**", ANON); filterChainDefinitionMap.put("/favicon.ico", ANON); filterChainDefinitionMap.put("/", ANON); + filterChainDefinitionMap.put("/login", ANON); + filterChainDefinitionMap.put("/link/**", ANON); + filterChainDefinitionMap.put("/test/**", ANON); filterChainDefinitionMap.put("/index.html", ANON); + filterChainDefinitionMap.put("/link.html", ANON); filterChainDefinitionMap.put("/api/auth/login", ANON); filterChainDefinitionMap.put("/unauth", ANON); filterChainDefinitionMap.put("/display/**", ANON); filterChainDefinitionMap.put("/tokenExpired", ANON); filterChainDefinitionMap.put("/downline", ANON); filterChainDefinitionMap.put("/common-files/**", ANON); - - - filterChainDefinitionMap.put("/api/auth/logout", "logout"); + filterChainDefinitionMap.put("/**", "authc"); filterChainDefinitionMap.put("/**", "jwt"); return filterChainDefinitionMap; } diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLink.java b/backend/src/main/java/io/dataease/base/domain/PanelLink.java new file mode 100644 index 0000000000..b64e46299f --- /dev/null +++ b/backend/src/main/java/io/dataease/base/domain/PanelLink.java @@ -0,0 +1,15 @@ +package io.dataease.base.domain; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class PanelLink implements Serializable { + private String resourceId; + + private Boolean enablePwd; + + private String pwd; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java new file mode 100644 index 0000000000..f1303717f9 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java @@ -0,0 +1,400 @@ +package io.dataease.base.domain; + +import java.util.ArrayList; +import java.util.List; + +public class PanelLinkExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public PanelLinkExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andResourceIdIsNull() { + addCriterion("resource_id is null"); + return (Criteria) this; + } + + public Criteria andResourceIdIsNotNull() { + addCriterion("resource_id is not null"); + return (Criteria) this; + } + + public Criteria andResourceIdEqualTo(String value) { + addCriterion("resource_id =", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdNotEqualTo(String value) { + addCriterion("resource_id <>", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdGreaterThan(String value) { + addCriterion("resource_id >", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdGreaterThanOrEqualTo(String value) { + addCriterion("resource_id >=", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdLessThan(String value) { + addCriterion("resource_id <", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdLessThanOrEqualTo(String value) { + addCriterion("resource_id <=", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdLike(String value) { + addCriterion("resource_id like", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdNotLike(String value) { + addCriterion("resource_id not like", value, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdIn(List values) { + addCriterion("resource_id in", values, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdNotIn(List values) { + addCriterion("resource_id not in", values, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdBetween(String value1, String value2) { + addCriterion("resource_id between", value1, value2, "resourceId"); + return (Criteria) this; + } + + public Criteria andResourceIdNotBetween(String value1, String value2) { + addCriterion("resource_id not between", value1, value2, "resourceId"); + return (Criteria) this; + } + + public Criteria andEnablePwdIsNull() { + addCriterion("enable_pwd is null"); + return (Criteria) this; + } + + public Criteria andEnablePwdIsNotNull() { + addCriterion("enable_pwd is not null"); + return (Criteria) this; + } + + public Criteria andEnablePwdEqualTo(Boolean value) { + addCriterion("enable_pwd =", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdNotEqualTo(Boolean value) { + addCriterion("enable_pwd <>", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdGreaterThan(Boolean value) { + addCriterion("enable_pwd >", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdGreaterThanOrEqualTo(Boolean value) { + addCriterion("enable_pwd >=", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdLessThan(Boolean value) { + addCriterion("enable_pwd <", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdLessThanOrEqualTo(Boolean value) { + addCriterion("enable_pwd <=", value, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdIn(List values) { + addCriterion("enable_pwd in", values, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdNotIn(List values) { + addCriterion("enable_pwd not in", values, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdBetween(Boolean value1, Boolean value2) { + addCriterion("enable_pwd between", value1, value2, "enablePwd"); + return (Criteria) this; + } + + public Criteria andEnablePwdNotBetween(Boolean value1, Boolean value2) { + addCriterion("enable_pwd not between", value1, value2, "enablePwd"); + return (Criteria) this; + } + + public Criteria andPwdIsNull() { + addCriterion("pwd is null"); + return (Criteria) this; + } + + public Criteria andPwdIsNotNull() { + addCriterion("pwd is not null"); + return (Criteria) this; + } + + public Criteria andPwdEqualTo(String value) { + addCriterion("pwd =", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdNotEqualTo(String value) { + addCriterion("pwd <>", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdGreaterThan(String value) { + addCriterion("pwd >", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdGreaterThanOrEqualTo(String value) { + addCriterion("pwd >=", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdLessThan(String value) { + addCriterion("pwd <", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdLessThanOrEqualTo(String value) { + addCriterion("pwd <=", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdLike(String value) { + addCriterion("pwd like", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdNotLike(String value) { + addCriterion("pwd not like", value, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdIn(List values) { + addCriterion("pwd in", values, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdNotIn(List values) { + addCriterion("pwd not in", values, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdBetween(String value1, String value2) { + addCriterion("pwd between", value1, value2, "pwd"); + return (Criteria) this; + } + + public Criteria andPwdNotBetween(String value1, String value2) { + addCriterion("pwd not between", value1, value2, "pwd"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.java b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.java new file mode 100644 index 0000000000..1202095bf2 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.java @@ -0,0 +1,30 @@ +package io.dataease.base.mapper; + +import io.dataease.base.domain.PanelLink; +import io.dataease.base.domain.PanelLinkExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface PanelLinkMapper { + long countByExample(PanelLinkExample example); + + int deleteByExample(PanelLinkExample example); + + int deleteByPrimaryKey(String resourceId); + + int insert(PanelLink record); + + int insertSelective(PanelLink record); + + List selectByExample(PanelLinkExample example); + + PanelLink selectByPrimaryKey(String resourceId); + + int updateByExampleSelective(@Param("record") PanelLink record, @Param("example") PanelLinkExample example); + + int updateByExample(@Param("record") PanelLink record, @Param("example") PanelLinkExample example); + + int updateByPrimaryKeySelective(PanelLink record); + + int updateByPrimaryKey(PanelLink record); +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml new file mode 100644 index 0000000000..fb76f65c1d --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + resource_id, enable_pwd, pwd + + + + + delete from panel_link + where resource_id = #{resourceId,jdbcType=VARCHAR} + + + delete from panel_link + + + + + + insert into panel_link (resource_id, enable_pwd, pwd + ) + values (#{resourceId,jdbcType=VARCHAR}, #{enablePwd,jdbcType=BIT}, #{pwd,jdbcType=VARCHAR} + ) + + + insert into panel_link + + + resource_id, + + + enable_pwd, + + + pwd, + + + + + #{resourceId,jdbcType=VARCHAR}, + + + #{enablePwd,jdbcType=BIT}, + + + #{pwd,jdbcType=VARCHAR}, + + + + + + update panel_link + + + resource_id = #{record.resourceId,jdbcType=VARCHAR}, + + + enable_pwd = #{record.enablePwd,jdbcType=BIT}, + + + pwd = #{record.pwd,jdbcType=VARCHAR}, + + + + + + + + update panel_link + set resource_id = #{record.resourceId,jdbcType=VARCHAR}, + enable_pwd = #{record.enablePwd,jdbcType=BIT}, + pwd = #{record.pwd,jdbcType=VARCHAR} + + + + + + update panel_link + + + enable_pwd = #{enablePwd,jdbcType=BIT}, + + + pwd = #{pwd,jdbcType=VARCHAR}, + + + where resource_id = #{resourceId,jdbcType=VARCHAR} + + + update panel_link + set enable_pwd = #{enablePwd,jdbcType=BIT}, + pwd = #{pwd,jdbcType=VARCHAR} + where resource_id = #{resourceId,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/controller/IndexController.java b/backend/src/main/java/io/dataease/controller/IndexController.java index 3cf0d50130..948dc5c2df 100644 --- a/backend/src/main/java/io/dataease/controller/IndexController.java +++ b/backend/src/main/java/io/dataease/controller/IndexController.java @@ -2,6 +2,7 @@ package io.dataease.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller @@ -15,11 +16,18 @@ public class IndexController { @GetMapping(value = "/login") public String login() { -// if (SessionUtils.getUser() == null) { - if (null == null) { - return "login.html"; - } else { - return "redirect:/"; - } + return "index.html"; } + + @GetMapping("/link") + public String link() { + return "link.html"; + } + + @GetMapping("/test") + public String test() { + return "test.html"; + } + + } diff --git a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java new file mode 100644 index 0000000000..33e60e3f65 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java @@ -0,0 +1,23 @@ +package io.dataease.controller.panel.api; + + +import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.PasswordRequest; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +@Api(tags = "仪表板:链接管理") +@RequestMapping("/api/link") +public interface LinkApi { + + + @ApiOperation("设置密码") + @PostMapping("/replacePwd") + void replacePwd(PasswordRequest request); + + @ApiOperation("生成") + @PostMapping("/generate") + void generateLink(LinkRequest request); + +} diff --git a/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java new file mode 100644 index 0000000000..a0c902dd88 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java @@ -0,0 +1,40 @@ +package io.dataease.controller.panel.server; + +import io.dataease.base.domain.PanelLink; +import io.dataease.commons.utils.ServletUtils; +import io.dataease.controller.panel.api.LinkApi; +import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.PasswordRequest; +import io.dataease.service.panel.PanelLinkService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@RestController +public class LinkServer implements LinkApi { + + + + @Autowired + private PanelLinkService panelLinkService; + + + @Override + public void replacePwd(@RequestBody PasswordRequest request) { + panelLinkService.password(request); + } + + @Override + public void generateLink(@RequestBody LinkRequest request) { + panelLinkService.generator(request); + } + +} diff --git a/backend/src/main/java/io/dataease/controller/request/panel/link/LinkRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/link/LinkRequest.java new file mode 100644 index 0000000000..2fa0e46402 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/link/LinkRequest.java @@ -0,0 +1,15 @@ +package io.dataease.controller.request.panel.link; + +import lombok.Data; + +@Data +public class LinkRequest { + + private String resourceId; + + private String password; + + private Boolean enablePwd; + + private String uri; +} diff --git a/backend/src/main/java/io/dataease/controller/request/panel/link/PasswordRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/link/PasswordRequest.java new file mode 100644 index 0000000000..c714c7a6dd --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/link/PasswordRequest.java @@ -0,0 +1,13 @@ +package io.dataease.controller.request.panel.link; + +import lombok.Data; + +@Data +public class PasswordRequest { + + private String resourceId; + + private String password; + + +} diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java index 5b93d472d3..9eae0f4a58 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldDTO.java @@ -2,6 +2,8 @@ package io.dataease.dto.chart; import lombok.Data; +import java.util.List; + /** * @Author gin * @Date 2021/3/11 1:18 下午 @@ -29,4 +31,6 @@ public class ChartViewFieldDTO { private String summary; private String sort; + + private List filter; } diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldFilterDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldFilterDTO.java new file mode 100644 index 0000000000..b5303899a3 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldFilterDTO.java @@ -0,0 +1,15 @@ +package io.dataease.dto.chart; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author gin + * @Date 2021/3/25 10:31 上午 + */ +@Getter +@Setter +public class ChartViewFieldFilterDTO { + private String term; + private String value; +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelLinkDto.java b/backend/src/main/java/io/dataease/dto/panel/PanelLinkDto.java new file mode 100644 index 0000000000..260dfba692 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/PanelLinkDto.java @@ -0,0 +1,6 @@ +package io.dataease.dto.panel; + +public class PanelLinkDto { + + +} diff --git a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java index b825250c00..9f5150a431 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java @@ -2,9 +2,12 @@ package io.dataease.service.chart; import io.dataease.base.domain.ChartGroup; import io.dataease.base.domain.ChartGroupExample; +import io.dataease.base.domain.DatasetGroup; +import io.dataease.base.domain.DatasetTable; import io.dataease.base.mapper.ChartGroupMapper; import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.request.chart.ChartGroupRequest; +import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.chart.ChartGroupDTO; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -21,6 +24,8 @@ import java.util.stream.Collectors; public class ChartGroupService { @Resource private ChartGroupMapper chartGroupMapper; + @Resource + private ChartViewService chartViewService; public ChartGroupDTO save(ChartGroup chartGroup) { if (StringUtils.isEmpty(chartGroup.getId())) { @@ -28,7 +33,7 @@ public class ChartGroupService { chartGroup.setCreateTime(System.currentTimeMillis()); chartGroupMapper.insert(chartGroup); } else { - chartGroupMapper.updateByPrimaryKey(chartGroup); + chartGroupMapper.updateByPrimaryKeySelective(chartGroup); } ChartGroupDTO ChartGroupDTO = new ChartGroupDTO(); BeanUtils.copyBean(ChartGroupDTO, chartGroup); @@ -45,6 +50,14 @@ public class ChartGroupService { ChartGroupExample ChartGroupExample = new ChartGroupExample(); ChartGroupExample.createCriteria().andIdIn(ids); chartGroupMapper.deleteByExample(ChartGroupExample); + // 删除所有chart + deleteChart(ids); + } + + public void deleteChart(List sceneIds) { + for (String sceneId : sceneIds) { + chartViewService.deleteBySceneId(sceneId); + } } public ChartGroup getScene(String id) { diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 2f3341a1b1..a283c131d1 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -45,7 +45,7 @@ public class ChartViewService { public ChartViewWithBLOBs save(ChartViewWithBLOBs chartView) { long timestamp = System.currentTimeMillis(); chartView.setUpdateTime(timestamp); - int i = chartViewMapper.updateByPrimaryKeyWithBLOBs(chartView); + int i = chartViewMapper.updateByPrimaryKeySelective(chartView); if (i == 0) { chartView.setId(UUID.randomUUID().toString()); chartView.setCreateTime(timestamp); @@ -75,6 +75,12 @@ public class ChartViewService { chartViewMapper.deleteByPrimaryKey(id); } + public void deleteBySceneId(String sceneId) { + ChartViewExample chartViewExample = new ChartViewExample(); + chartViewExample.createCriteria().andSceneIdEqualTo(sceneId); + chartViewMapper.deleteByExample(chartViewExample); + } + public ChartViewDTO getData(String id) throws Exception { ChartViewWithBLOBs view = chartViewMapper.selectByPrimaryKey(id); List xAxis = new Gson().fromJson(view.getXAxis(), new TypeToken>() { @@ -174,6 +180,41 @@ public class ChartViewService { sql = sql.substring(0, sql.length() - 1); } // 如果是对结果字段过滤,则再包裹一层sql - return sql; + String[] resultFilter = yAxis.stream().filter(y -> CollectionUtils.isNotEmpty(y.getFilter()) && y.getFilter().size() > 0) + .map(y -> { + String[] s = y.getFilter().stream().map(f -> "AND _" + y.getSummary() + "_" + y.getOriginName() + transMysqlFilterTerm(f.getTerm()) + f.getValue()).toArray(String[]::new); + return StringUtils.join(s, " "); + }).toArray(String[]::new); + if (resultFilter.length == 0) { + return sql; + } else { + String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1}", + "(" + sql + ") AS tmp", + StringUtils.join(resultFilter, " ")); + return filterSql; + } + } + + public String transMysqlFilterTerm(String term) { + switch (term) { + case "eq": + return " = "; + case "not_eq": + return " <> "; + case "lt": + return " < "; + case "le": + return " <= "; + case "gt": + return " > "; + case "ge": + return " >= "; + case "null": + return " IS NULL "; + case "not_null": + return " IS NOT NULL "; + default: + return ""; + } } } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index d5a8609d35..2abaef77d6 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -35,7 +35,7 @@ public class DataSetGroupService { datasetGroup.setCreateTime(System.currentTimeMillis()); datasetGroupMapper.insert(datasetGroup); } else { - datasetGroupMapper.updateByPrimaryKey(datasetGroup); + datasetGroupMapper.updateByPrimaryKeySelective(datasetGroup); } DataSetGroupDTO dataSetGroupDTO = new DataSetGroupDTO(); BeanUtils.copyBean(dataSetGroupDTO, datasetGroup); @@ -52,10 +52,8 @@ public class DataSetGroupService { DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); datasetGroupExample.createCriteria().andIdIn(ids); datasetGroupMapper.deleteByExample(datasetGroupExample); - // 获取type为scene的id,删除场景下的表和字段 - deleteTableAndField(tree.stream().filter(ele -> { - return StringUtils.equalsIgnoreCase(ele.getType(), "scene"); - }).map(DatasetGroup::getId).collect(Collectors.toList())); + // 删除场景下的表和字段 + deleteTableAndField(ids); } public DatasetGroup getScene(String id) { diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java index e53e38faef..b4367ae8ac 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java @@ -31,7 +31,7 @@ public class DataSetTableFieldsService { datasetTableField.setId(UUID.randomUUID().toString()); datasetTableFieldMapper.insert(datasetTableField); } else { - datasetTableFieldMapper.updateByPrimaryKey(datasetTableField); + datasetTableFieldMapper.updateByPrimaryKeySelective(datasetTableField); } return datasetTableField; } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 01640780c9..15629e6679 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -62,7 +62,7 @@ public class DataSetTableService { saveTableField(datasetTable); } } else { - datasetTableMapper.updateByPrimaryKeyWithBLOBs(datasetTable); + datasetTableMapper.updateByPrimaryKeySelective(datasetTable); } return datasetTable; } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java index 783e564be7..91b7d88e2f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java @@ -29,7 +29,7 @@ public class DataSetTableTaskLogService { datasetTableTaskLog.setCreateTime(System.currentTimeMillis()); datasetTableTaskLogMapper.insert(datasetTableTaskLog); } else { - datasetTableTaskLogMapper.updateByPrimaryKey(datasetTableTaskLog); + datasetTableTaskLogMapper.updateByPrimaryKeySelective(datasetTableTaskLog); } return datasetTableTaskLog; } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java index 5640cd3020..514d05df64 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java @@ -39,7 +39,7 @@ public class DataSetTableTaskService { datasetTableTask.setCreateTime(System.currentTimeMillis()); datasetTableTaskMapper.insert(datasetTableTask); } else { - datasetTableTaskMapper.updateByPrimaryKey(datasetTableTask); + datasetTableTaskMapper.updateByPrimaryKeySelective(datasetTableTask); } scheduleService.addSchedule(datasetTableTask); return datasetTableTask; diff --git a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java new file mode 100644 index 0000000000..2de2c2210d --- /dev/null +++ b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java @@ -0,0 +1,46 @@ +package io.dataease.service.panel; + +import io.dataease.base.domain.PanelLink; +import io.dataease.base.mapper.PanelLinkMapper; +import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.PasswordRequest; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +@Service +public class PanelLinkService { + + @Resource + private PanelLinkMapper mapper; + + public void generator(LinkRequest request){ + String resourceId = request.getResourceId(); + PanelLink panelLink = mapper.selectByPrimaryKey(resourceId); + PanelLink po = new PanelLink(); + po.setResourceId(resourceId); + po.setEnablePwd(request.getEnablePwd()); + po.setPwd(request.getPassword()); + if (ObjectUtils.isEmpty(panelLink)){ + mapper.insert(po); + }else{ + mapper.updateByPrimaryKey(po); + } + } + + public void password(PasswordRequest request){ + PanelLink po = new PanelLink(); + po.setResourceId(request.getResourceId()); + po.setPwd(request.getPassword()); + mapper.updateByPrimaryKeySelective(po); + } + + public PanelLink findOne(String resourceId){ + PanelLink panelLink = mapper.selectByPrimaryKey(resourceId); + return panelLink; + } + + + + +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 8b7d88331d..d983daf2be 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -60,6 +60,8 @@ logging.level.org.springframework.boot.web=trace spring.mvc.log-request-details=true pagehelper.PageRowBounds=true +front-url=http://localhost:9528 + diff --git a/backend/src/main/resources/db/migration/V12__panel_table.sql b/backend/src/main/resources/db/migration/V12__panel_table.sql index b2955454a9..eb417d1dfe 100644 --- a/backend/src/main/resources/db/migration/V12__panel_table.sql +++ b/backend/src/main/resources/db/migration/V12__panel_table.sql @@ -134,3 +134,12 @@ INSERT INTO `file_metadata` VALUES ('VIEW_DEFAULT_IMAGE', 'view-demo.png', 'PNG' COMMIT; SET FOREIGN_KEY_CHECKS = 1; + + +DROP TABLE IF EXISTS `panel_link`; +CREATE TABLE `panel_link` ( + `resource_id` varchar(50) NOT NULL COMMENT '资源ID', + `enable_pwd` tinyint(1) default 0 COMMENT '启用密码', + `pwd` varchar(255) DEFAULT NULL COMMENT '密码', + PRIMARY KEY (`resource_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='仪表板链接'; diff --git a/frontend/build/index.js b/frontend/build/index.js index 0c57de2aad..6dcdfdaa01 100644 --- a/frontend/build/index.js +++ b/frontend/build/index.js @@ -19,7 +19,8 @@ if (process.env.npm_config_preview || rawArgv.includes('--preview')) { app.use( publicPath, serveStatic('./dist', { - index: ['index.html', '/'] + index: ['index.html', '/'], + link: ['link.html'] }) ) diff --git a/frontend/package.json b/frontend/package.json index 224186a09c..3d780023b4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -37,6 +37,7 @@ "vue-uuid": "2.0.2", "vuedraggable": "^2.24.3", "vuex": "3.1.0", + "vue-clipboard2": "0.3.1", "webpack": "^4.46.0" }, "devDependencies": { diff --git a/frontend/public/link.html b/frontend/public/link.html new file mode 100644 index 0000000000..49f14a454c --- /dev/null +++ b/frontend/public/link.html @@ -0,0 +1,13 @@ + + + + + + + + DataEase + + + + + diff --git a/frontend/src/api/link/index.js b/frontend/src/api/link/index.js new file mode 100644 index 0000000000..15d1b1b61f --- /dev/null +++ b/frontend/src/api/link/index.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +export function validate(param) { + return request({ + url: 'api/link/validate', + method: 'post', + loading: true, + param + }) +} + +export function generate(param) { + return request({ + url: 'api/link/generate', + method: 'post', + param + }) +} diff --git a/frontend/src/components/dataease/DeAsideContainer.vue b/frontend/src/components/dataease/DeAsideContainer.vue index b4542868cc..f9bb956c24 100644 --- a/frontend/src/components/dataease/DeAsideContainer.vue +++ b/frontend/src/components/dataease/DeAsideContainer.vue @@ -21,7 +21,7 @@ export default { props: { width: { type: String, - default: '300px' + default: '260px' }, enableAsideHidden: { type: Boolean, diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index c5b4bfb8ed..fdcc2230c2 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -681,7 +681,19 @@ export default { filter: '过滤', none: '无', background: '背景', - alpha: '透明度' + alpha: '透明度', + add_filter: '添加过滤', + no_limit: '无限制', + filter_eq: '等于', + filter_not_eq: '不等于', + filter_lt: '小于', + filter_le: '小于等于', + filter_gt: '大于', + filter_ge: '大于等于', + filter_null: '为空', + filter_not_null: '不为空', + filter_include: '包含', + filter_not_include: '不包含' }, dataset: { datalist: '数据集', @@ -756,7 +768,8 @@ export default { incremental_delete: '增量删除', last_update_time: '上次更新时间', current_update_time: '当前更新时间', - param: '参数' + param: '参数', + edit_sql: '编辑SQL' }, datasource: { create: '新建数据连接', diff --git a/frontend/src/link/Link.vue b/frontend/src/link/Link.vue new file mode 100644 index 0000000000..e00d2fd5d5 --- /dev/null +++ b/frontend/src/link/Link.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/src/link/link-router.js b/frontend/src/link/link-router.js new file mode 100644 index 0000000000..f0d14133de --- /dev/null +++ b/frontend/src/link/link-router.js @@ -0,0 +1,18 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +export default new Router({ + routes: [ + { + path: '/', + name: 'home', + component: () => + import('../views/link/index.vue'), + meta: { + title: '首页' + } + } + ] +}) diff --git a/frontend/src/link/link.js b/frontend/src/link/link.js new file mode 100644 index 0000000000..b009b56bfa --- /dev/null +++ b/frontend/src/link/link.js @@ -0,0 +1,8 @@ +import Vue from 'vue' +import Link from './Link.vue' +import router from './link-router' +Vue.config.productionTip = false +new Vue({ + router, + render: h => h(Link) +}).$mount('#link') diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js index e1d77a8393..4d274e199d 100644 --- a/frontend/src/utils/index.js +++ b/frontend/src/utils/index.js @@ -162,3 +162,14 @@ export function formatCondition(param) { } return result } + +export function getQueryVariable(variable) { + const query = window.location.search.substring(1) + const vars = query.split('&') + for (var i = 0; i < vars.length; i++) { + const pair = vars[i].split('=') + if (pair[0] === variable) { return pair[1] } + } + return (false) +} + diff --git a/frontend/src/views/chart/components/component-style/BackgroundColorSelector.vue b/frontend/src/views/chart/components/component-style/BackgroundColorSelector.vue index 7ec8fc943a..038e201afa 100644 --- a/frontend/src/views/chart/components/component-style/BackgroundColorSelector.vue +++ b/frontend/src/views/chart/components/component-style/BackgroundColorSelector.vue @@ -9,9 +9,9 @@ - + - + diff --git a/frontend/src/views/chart/components/drag-item/DimensionItem.vue b/frontend/src/views/chart/components/drag-item/DimensionItem.vue index 192b7454c5..78665a05c5 100644 --- a/frontend/src/views/chart/components/drag-item/DimensionItem.vue +++ b/frontend/src/views/chart/components/drag-item/DimensionItem.vue @@ -15,18 +15,6 @@ - - - - - - - - - @@ -45,15 +33,6 @@ export default { }, data() { return { - renameItem: false, - itemForm: { - name: '' - }, - itemFormRules: { - name: [ - { required: true, message: this.$t('commons.input_content'), trigger: 'change' } - ] - } } }, mounted() { @@ -80,22 +59,9 @@ export default { } }, showRename() { - this.itemForm.name = this.item.name - this.renameItem = true - }, - closeRename() { - this.renameItem = false - this.resetRename() - }, - saveRename(param) { - this.item.name = param.name - this.$emit('onDimensionItemChange', this.item) - this.closeRename() - }, - resetRename() { - this.itemForm = { - name: '' - } + this.item.index = this.index + this.item.renameType = 'dimension' + this.$emit('onNameEdit', this.item) }, removeItem() { this.item.index = this.index diff --git a/frontend/src/views/chart/components/drag-item/QuotaItem.vue b/frontend/src/views/chart/components/drag-item/QuotaItem.vue index ad7d985411..ae5a1f5738 100644 --- a/frontend/src/views/chart/components/drag-item/QuotaItem.vue +++ b/frontend/src/views/chart/components/drag-item/QuotaItem.vue @@ -59,7 +59,7 @@ - + {{ $t('chart.filter') }}... @@ -71,18 +71,6 @@ - - - - - - - - - @@ -101,15 +89,6 @@ export default { }, data() { return { - renameItem: false, - itemForm: { - name: '' - }, - itemFormRules: { - name: [ - { required: true, message: this.$t('commons.input_content'), trigger: 'change' } - ] - } } }, mounted() { @@ -127,6 +106,9 @@ export default { case 'remove': this.removeItem() break + case 'filter': + this.editFilter() + break default: break } @@ -167,28 +149,18 @@ export default { type: type } }, - showRename() { - this.itemForm.name = this.item.name - this.renameItem = true - }, - closeRename() { - this.renameItem = false - this.resetRename() - }, - saveRename(param) { - this.item.name = param.name - this.$emit('onQuotaItemChange', this.item) - this.closeRename() - }, - resetRename() { - this.itemForm = { - name: '' - } + this.item.index = this.index + this.item.renameType = 'quota' + this.$emit('onNameEdit', this.item) }, removeItem() { this.item.index = this.index this.$emit('onQuotaItemRemove', this.item) + }, + editFilter() { + this.item.index = this.index + this.$emit('editItemFilter', this.item) } } } diff --git a/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue b/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue new file mode 100644 index 0000000000..cd74405567 --- /dev/null +++ b/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/frontend/src/views/chart/group/Group.vue b/frontend/src/views/chart/group/Group.vue index 2b62b520f4..0836c30843 100644 --- a/frontend/src/views/chart/group/Group.vue +++ b/frontend/src/views/chart/group/Group.vue @@ -528,7 +528,7 @@ export default { yAxis: DEFAULT_YAXIS_STYLE, background: DEFAULT_BACKGROUND_COLOR }) - view.customFilter = JSON.stringify({}) + view.customFilter = JSON.stringify([]) post('/chart/view/save', view).then(response => { this.selectTableFlag = false this.$store.dispatch('chart/setTableId', null) diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 238cb6bfe6..ddbb0ef56a 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -15,18 +15,18 @@ - + -
+
{{ $t('chart.dimension') }} @@ -35,14 +35,14 @@
-
+
{{ $t('chart.quota') }} @@ -54,7 +54,7 @@
@@ -73,7 +73,7 @@
-
+
{{ $t('chart.chart_type') }}
@@ -151,7 +151,7 @@ @end="end2" > - + @@ -166,16 +166,44 @@ @end="end2" > - + - + + + + + + + + + + + + + + + + + @@ -207,10 +235,11 @@ import TooltipSelector from '../components/shape-attr/TooltipSelector' import XAxisSelector from '../components/component-style/XAxisSelector' import YAxisSelector from '../components/component-style/YAxisSelector' import BackgroundColorSelector from '../components/component-style/BackgroundColorSelector' +import QuotaFilterEditor from '../components/filter/QuotaFilterEditor' export default { name: 'ChartEdit', - components: { BackgroundColorSelector, FilterItem, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable }, + components: { QuotaFilterEditor, BackgroundColorSelector, FilterItem, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable }, data() { return { table: {}, @@ -240,6 +269,17 @@ export default { moveId: -1, chart: { id: 'echart' + }, + filterEdit: false, + quotaItem: {}, + renameItem: false, + itemForm: { + name: '' + }, + itemFormRules: { + name: [ + { required: true, message: this.$t('commons.input_content'), trigger: 'change' } + ] } } }, @@ -305,6 +345,9 @@ export default { if (!ele.sort || ele.sort === '') { ele.sort = 'none' } + if (!ele.filter) { + ele.filter = [] + } }) if (view.type.startsWith('pie') || view.type.startsWith('funnel')) { if (view.yaxis.length > 1) { @@ -490,6 +533,40 @@ export default { onChangeBackgroundForm(val) { this.view.customStyle.background = val this.save() + }, + + showEditFilter(item) { + this.quotaItem = JSON.parse(JSON.stringify(item)) + this.filterEdit = true + }, + closeQuotaFilter() { + this.filterEdit = false + }, + saveQuotaFilter() { + this.view.yaxis[this.quotaItem.index].filter = this.quotaItem.filter + this.save() + this.closeQuotaFilter() + }, + + showRename(val) { + this.itemForm = JSON.parse(JSON.stringify(val)) + this.renameItem = true + }, + saveRename() { + if (this.itemForm.renameType === 'quota') { + this.view.yaxis[this.itemForm.index].name = this.itemForm.name + } else if (this.itemForm.renameType === 'dimension') { + this.view.xaxis[this.itemForm.index].name = this.itemForm.name + } + this.save() + this.closeRename() + }, + closeRename() { + this.renameItem = false + this.resetRename() + }, + resetRename() { + // this.itemForm = {} } } } @@ -518,6 +595,16 @@ export default { margin-left: 10px; } + .view-panel { + display: flex; + height: calc(100% - 40px); + } + + .drag-list { + height: calc(100% - 26px); + overflow:auto; + } + .item { padding: 2px 10px; margin: 2px 2px 0 2px; @@ -621,6 +708,17 @@ export default { } .chart-class{ - height: calc(100% - 124px); + height: calc(100% - 84px); + padding: 10px; + } + + .dialog-css>>>.el-dialog__title { + font-size: 14px; + } + .dialog-css >>> .el-dialog__header { + padding: 20px 20px 0; + } + .dialog-css >>> .el-dialog__body { + padding: 10px 20px 20px; } diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index d2001b884b..4e7f75f6e8 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -3,7 +3,7 @@ - {{ $t('dataset.add_sql_table') }} + {{ param.tableId?$t('dataset.edit_sql'):$t('dataset.add_sql_table') }} @@ -85,6 +85,7 @@ - diff --git a/frontend/src/views/dataset/data/ViewTable.vue b/frontend/src/views/dataset/data/ViewTable.vue index ae0b3df02e..2505d6386b 100644 --- a/frontend/src/views/dataset/data/ViewTable.vue +++ b/frontend/src/views/dataset/data/ViewTable.vue @@ -7,6 +7,9 @@ {{ table.name }} + + {{ $t('dataset.edit_sql') }} + {{ $t('dataset.edit') }} @@ -29,7 +32,7 @@ - +