forked from github/dataease
commit
32e639ee62
@ -342,11 +342,11 @@
|
||||
<artifactId>spring-boot-starter-data-ldap</artifactId>
|
||||
</dependency>-->
|
||||
|
||||
<!--<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>4.1.2</version>
|
||||
</dependency>-->
|
||||
<dependency>
|
||||
<groupId>ru.yandex.clickhouse</groupId>
|
||||
<artifactId>clickhouse-jdbc</artifactId>
|
||||
<version>0.3.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -119,9 +119,12 @@ public class AuthServer implements AuthApi {
|
||||
if (isOpenOidc()) {
|
||||
HttpServletRequest request = ServletUtils.request();
|
||||
String idToken = request.getHeader("IdToken");
|
||||
if (StringUtils.isNotBlank(idToken)) {
|
||||
OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class);
|
||||
oidcXpackService.logout(idToken);
|
||||
}
|
||||
|
||||
}
|
||||
if (StringUtils.isEmpty(token) || StringUtils.equals("null", token) || StringUtils.equals("undefined", token)) {
|
||||
return "success";
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ public interface AuthUserService {
|
||||
|
||||
SysUserEntity getUserByName(String username);
|
||||
|
||||
SysUserEntity getUserBySub(String sub);
|
||||
|
||||
List<String> roles(Long userId);
|
||||
|
||||
List<String> permissions(Long userId);
|
||||
|
@ -52,6 +52,11 @@ public class AuthUserServiceImpl implements AuthUserService {
|
||||
return authMapper.findUserByName(username);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserEntity getUserBySub(String sub) {
|
||||
return authMapper.findUserBySub(sub);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> roles(Long userId){
|
||||
return authMapper.roleCodes(userId);
|
||||
|
@ -13,7 +13,6 @@ import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -1,29 +1,28 @@
|
||||
package io.dataease.base.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Datasource implements Serializable {
|
||||
@ApiModelProperty("ID")
|
||||
private String id;
|
||||
@ApiModelProperty("名称")
|
||||
|
||||
private String name;
|
||||
@ApiModelProperty("描述")
|
||||
|
||||
private String desc;
|
||||
@ApiModelProperty("类型")
|
||||
|
||||
private String type;
|
||||
@ApiModelProperty("创建时间")
|
||||
|
||||
private Long createTime;
|
||||
@ApiModelProperty("更新时间")
|
||||
|
||||
private Long updateTime;
|
||||
@ApiModelProperty("创建者")
|
||||
|
||||
private String createBy;
|
||||
@ApiModelProperty("状态")
|
||||
|
||||
private String status;
|
||||
@ApiModelProperty("配置")
|
||||
|
||||
private String computeType;
|
||||
|
||||
private String configuration;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -643,6 +643,76 @@ public class DatasourceExample {
|
||||
addCriterion("`status` not between", value1, value2, "status");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeIsNull() {
|
||||
addCriterion("compute_type is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeIsNotNull() {
|
||||
addCriterion("compute_type is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeEqualTo(String value) {
|
||||
addCriterion("compute_type =", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeNotEqualTo(String value) {
|
||||
addCriterion("compute_type <>", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeGreaterThan(String value) {
|
||||
addCriterion("compute_type >", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeGreaterThanOrEqualTo(String value) {
|
||||
addCriterion("compute_type >=", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeLessThan(String value) {
|
||||
addCriterion("compute_type <", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeLessThanOrEqualTo(String value) {
|
||||
addCriterion("compute_type <=", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeLike(String value) {
|
||||
addCriterion("compute_type like", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeNotLike(String value) {
|
||||
addCriterion("compute_type not like", value, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeIn(List<String> values) {
|
||||
addCriterion("compute_type in", values, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeNotIn(List<String> values) {
|
||||
addCriterion("compute_type not in", values, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeBetween(String value1, String value2) {
|
||||
addCriterion("compute_type between", value1, value2, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andComputeTypeNotBetween(String value1, String value2) {
|
||||
addCriterion("compute_type not between", value1, value2, "computeType");
|
||||
return (Criteria) this;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Criteria extends GeneratedCriteria {
|
||||
|
@ -39,5 +39,7 @@ public class SysUser implements Serializable {
|
||||
|
||||
private Integer from;
|
||||
|
||||
private String sub;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -1213,6 +1213,76 @@ public class SysUserExample {
|
||||
addCriterion("`from` not between", value1, value2, "from");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubIsNull() {
|
||||
addCriterion("sub is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubIsNotNull() {
|
||||
addCriterion("sub is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubEqualTo(String value) {
|
||||
addCriterion("sub =", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubNotEqualTo(String value) {
|
||||
addCriterion("sub <>", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubGreaterThan(String value) {
|
||||
addCriterion("sub >", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubGreaterThanOrEqualTo(String value) {
|
||||
addCriterion("sub >=", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubLessThan(String value) {
|
||||
addCriterion("sub <", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubLessThanOrEqualTo(String value) {
|
||||
addCriterion("sub <=", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubLike(String value) {
|
||||
addCriterion("sub like", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubNotLike(String value) {
|
||||
addCriterion("sub not like", value, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubIn(List<String> values) {
|
||||
addCriterion("sub in", values, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubNotIn(List<String> values) {
|
||||
addCriterion("sub not in", values, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubBetween(String value1, String value2) {
|
||||
addCriterion("sub between", value1, value2, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andSubNotBetween(String value1, String value2) {
|
||||
addCriterion("sub not between", value1, value2, "sub");
|
||||
return (Criteria) this;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Criteria extends GeneratedCriteria {
|
||||
|
@ -10,6 +10,7 @@
|
||||
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
|
||||
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
|
||||
<result column="status" jdbcType="VARCHAR" property="status" />
|
||||
<result column="compute_type" jdbcType="VARCHAR" property="computeType" />
|
||||
</resultMap>
|
||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.dataease.base.domain.Datasource">
|
||||
<result column="configuration" jdbcType="LONGVARCHAR" property="configuration" />
|
||||
@ -73,7 +74,7 @@
|
||||
</where>
|
||||
</sql>
|
||||
<sql id="Base_Column_List">
|
||||
id, `name`, `desc`, `type`, create_time, update_time, create_by, `status`
|
||||
id, `name`, `desc`, `type`, create_time, update_time, create_by, `status`, compute_type
|
||||
</sql>
|
||||
<sql id="Blob_Column_List">
|
||||
configuration
|
||||
@ -129,12 +130,12 @@
|
||||
<insert id="insert" parameterType="io.dataease.base.domain.Datasource">
|
||||
insert into datasource (id, `name`, `desc`,
|
||||
`type`, create_time, update_time,
|
||||
create_by, `status`, configuration
|
||||
)
|
||||
create_by, `status`, compute_type,
|
||||
configuration)
|
||||
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR},
|
||||
#{type,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
|
||||
#{createBy,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{configuration,jdbcType=LONGVARCHAR}
|
||||
)
|
||||
#{createBy,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{computeType,jdbcType=VARCHAR},
|
||||
#{configuration,jdbcType=LONGVARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="io.dataease.base.domain.Datasource">
|
||||
insert into datasource
|
||||
@ -163,6 +164,9 @@
|
||||
<if test="status != null">
|
||||
`status`,
|
||||
</if>
|
||||
<if test="computeType != null">
|
||||
compute_type,
|
||||
</if>
|
||||
<if test="configuration != null">
|
||||
configuration,
|
||||
</if>
|
||||
@ -192,6 +196,9 @@
|
||||
<if test="status != null">
|
||||
#{status,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="computeType != null">
|
||||
#{computeType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="configuration != null">
|
||||
#{configuration,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
@ -230,6 +237,9 @@
|
||||
<if test="record.status != null">
|
||||
`status` = #{record.status,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.computeType != null">
|
||||
compute_type = #{record.computeType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.configuration != null">
|
||||
configuration = #{record.configuration,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
@ -248,6 +258,7 @@
|
||||
update_time = #{record.updateTime,jdbcType=BIGINT},
|
||||
create_by = #{record.createBy,jdbcType=VARCHAR},
|
||||
`status` = #{record.status,jdbcType=VARCHAR},
|
||||
compute_type = #{record.computeType,jdbcType=VARCHAR},
|
||||
configuration = #{record.configuration,jdbcType=LONGVARCHAR}
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
@ -262,7 +273,8 @@
|
||||
create_time = #{record.createTime,jdbcType=BIGINT},
|
||||
update_time = #{record.updateTime,jdbcType=BIGINT},
|
||||
create_by = #{record.createBy,jdbcType=VARCHAR},
|
||||
`status` = #{record.status,jdbcType=VARCHAR}
|
||||
`status` = #{record.status,jdbcType=VARCHAR},
|
||||
compute_type = #{record.computeType,jdbcType=VARCHAR}
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
</if>
|
||||
@ -291,6 +303,9 @@
|
||||
<if test="status != null">
|
||||
`status` = #{status,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="computeType != null">
|
||||
compute_type = #{computeType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="configuration != null">
|
||||
configuration = #{configuration,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
@ -306,6 +321,7 @@
|
||||
update_time = #{updateTime,jdbcType=BIGINT},
|
||||
create_by = #{createBy,jdbcType=VARCHAR},
|
||||
`status` = #{status,jdbcType=VARCHAR},
|
||||
compute_type = #{computeType,jdbcType=VARCHAR},
|
||||
configuration = #{configuration,jdbcType=LONGVARCHAR}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
@ -317,7 +333,8 @@
|
||||
create_time = #{createTime,jdbcType=BIGINT},
|
||||
update_time = #{updateTime,jdbcType=BIGINT},
|
||||
create_by = #{createBy,jdbcType=VARCHAR},
|
||||
`status` = #{status,jdbcType=VARCHAR}
|
||||
`status` = #{status,jdbcType=VARCHAR},
|
||||
compute_type = #{computeType,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
</mapper>
|
@ -19,6 +19,7 @@
|
||||
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
|
||||
<result column="language" jdbcType="VARCHAR" property="language" />
|
||||
<result column="from" jdbcType="INTEGER" property="from" />
|
||||
<result column="sub" jdbcType="VARCHAR" property="sub" />
|
||||
</resultMap>
|
||||
<sql id="Example_Where_Clause">
|
||||
<where>
|
||||
@ -81,7 +82,7 @@
|
||||
<sql id="Base_Column_List">
|
||||
user_id, dept_id, username, nick_name, gender, phone, email, `password`, is_admin,
|
||||
enabled, create_by, update_by, pwd_reset_time, create_time, update_time, `language`,
|
||||
`from`
|
||||
`from`, sub
|
||||
</sql>
|
||||
<select id="selectByExample" parameterType="io.dataease.base.domain.SysUserExample" resultMap="BaseResultMap">
|
||||
select
|
||||
@ -119,13 +120,15 @@
|
||||
email, `password`, is_admin,
|
||||
enabled, create_by, update_by,
|
||||
pwd_reset_time, create_time, update_time,
|
||||
`language`, `from`)
|
||||
`language`, `from`, sub
|
||||
)
|
||||
values (#{userId,jdbcType=BIGINT}, #{deptId,jdbcType=BIGINT}, #{username,jdbcType=VARCHAR},
|
||||
#{nickName,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR},
|
||||
#{email,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{isAdmin,jdbcType=BIT},
|
||||
#{enabled,jdbcType=BIGINT}, #{createBy,jdbcType=VARCHAR}, #{updateBy,jdbcType=VARCHAR},
|
||||
#{pwdResetTime,jdbcType=BIGINT}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
|
||||
#{language,jdbcType=VARCHAR}, #{from,jdbcType=INTEGER})
|
||||
#{language,jdbcType=VARCHAR}, #{from,jdbcType=INTEGER}, #{sub,jdbcType=VARCHAR}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="io.dataease.base.domain.SysUser">
|
||||
insert into sys_user
|
||||
@ -181,6 +184,9 @@
|
||||
<if test="from != null">
|
||||
`from`,
|
||||
</if>
|
||||
<if test="sub != null">
|
||||
sub,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
@ -234,6 +240,9 @@
|
||||
<if test="from != null">
|
||||
#{from,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="sub != null">
|
||||
#{sub,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<select id="countByExample" parameterType="io.dataease.base.domain.SysUserExample" resultType="java.lang.Long">
|
||||
@ -296,6 +305,9 @@
|
||||
<if test="record.from != null">
|
||||
`from` = #{record.from,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="record.sub != null">
|
||||
sub = #{record.sub,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
@ -319,7 +331,8 @@
|
||||
create_time = #{record.createTime,jdbcType=BIGINT},
|
||||
update_time = #{record.updateTime,jdbcType=BIGINT},
|
||||
`language` = #{record.language,jdbcType=VARCHAR},
|
||||
`from` = #{record.from,jdbcType=INTEGER}
|
||||
`from` = #{record.from,jdbcType=INTEGER},
|
||||
sub = #{record.sub,jdbcType=VARCHAR}
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
</if>
|
||||
@ -375,6 +388,9 @@
|
||||
<if test="from != null">
|
||||
`from` = #{from,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="sub != null">
|
||||
sub = #{sub,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where user_id = #{userId,jdbcType=BIGINT}
|
||||
</update>
|
||||
@ -395,7 +411,8 @@
|
||||
create_time = #{createTime,jdbcType=BIGINT},
|
||||
update_time = #{updateTime,jdbcType=BIGINT},
|
||||
`language` = #{language,jdbcType=VARCHAR},
|
||||
`from` = #{from,jdbcType=INTEGER}
|
||||
`from` = #{from,jdbcType=INTEGER},
|
||||
sub = #{sub,jdbcType=VARCHAR}
|
||||
where user_id = #{userId,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
@ -25,6 +25,8 @@ public interface AuthMapper {
|
||||
|
||||
SysUserEntity findUserByName(@Param("username") String username);
|
||||
|
||||
SysUserEntity findUserBySub(@Param("sub") String sub);
|
||||
|
||||
|
||||
List<CurrentRoleDto> roles(@Param("userId") Long userId);
|
||||
|
||||
|
@ -28,6 +28,10 @@
|
||||
select user_id, username,nick_name, dept_id, password, enabled,email, phone, language ,is_admin from sys_user where username = #{username}
|
||||
</select>
|
||||
|
||||
<select id="findUserBySub" resultMap="baseMap">
|
||||
select user_id, username,nick_name, dept_id, password, enabled,email, phone, language ,is_admin from sys_user where sub = #{sub}
|
||||
</select>
|
||||
|
||||
<select id="roleCodes" resultType="String">
|
||||
select r.id from sys_role r
|
||||
left join sys_users_roles sur on sur.role_id = r.role_id
|
||||
|
@ -8,7 +8,7 @@
|
||||
</resultMap>
|
||||
|
||||
<select id="query" parameterType="io.dataease.base.mapper.ext.query.GridExample" resultMap="BaseResultMapDTO">
|
||||
select id , name , `desc` ,`type` , configuration ,create_time ,update_time,
|
||||
select datasource.*,
|
||||
authInfo.privileges as `privileges`
|
||||
from (select GET_V_AUTH_MODEL_ID_P_USE (#{extendCondition}, 'link') cids) t,datasource
|
||||
left join (
|
||||
@ -55,7 +55,7 @@
|
||||
</select>
|
||||
|
||||
<select id="queryUnion" resultMap="BaseResultMapDTO">
|
||||
select id , name , `desc` ,`type` , configuration ,create_time ,update_time, status,
|
||||
select datasource.*,
|
||||
authInfo.privileges as `privileges`
|
||||
from (select GET_V_AUTH_MODEL_ID_P_USE (#{userId}, 'link') cids) t,datasource
|
||||
left join (
|
||||
|
@ -6,6 +6,7 @@ public class AuthConstants {
|
||||
public final static String USER_CACHE_NAME = "users_info";
|
||||
public final static String USER_ROLE_CACHE_NAME = "users_roles_info";
|
||||
public final static String USER_PERMISSION_CACHE_NAME = "users_permissions_info";
|
||||
public final static String ID_TOKEN_KEY = "IdToken";
|
||||
|
||||
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ public class DateUtils {
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
/* public static void main(String[] args) throws Exception {
|
||||
// System.out.println("start:");
|
||||
Date paramTime = getTime(getTimeString(new Long("1607672440731")));
|
||||
|
||||
@ -110,7 +110,7 @@ public class DateUtils {
|
||||
|
||||
// System.out.println(getTimeString(--countTimeLong));
|
||||
|
||||
}
|
||||
} */
|
||||
|
||||
|
||||
/**
|
||||
|
@ -68,8 +68,8 @@ public class ExcelReaderUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
/* public static void main(String[] args) throws Exception {
|
||||
String file ="Metersphere_case_DataEase功能用例.xlsx";
|
||||
ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ public enum DatasourceTypes {
|
||||
sqlServer("sqlServer", "sqlServer", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""),
|
||||
doris("doris", "doris", "com.mysql.jdbc.Driver", "`", "`", "", ""),
|
||||
oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""),
|
||||
ch("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"),
|
||||
es("es", "es", "", "\"", "\"", "\"", "\"");
|
||||
|
||||
private String feature;
|
||||
|
@ -0,0 +1,19 @@
|
||||
package io.dataease.datasource.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class CHConfigration extends JdbcDTO {
|
||||
|
||||
private String driver = "ru.yandex.clickhouse.ClickHouseDriver";
|
||||
|
||||
public String getJdbc() {
|
||||
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中
|
||||
return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE"
|
||||
.replace("HOSTNAME", getHost().trim())
|
||||
.replace("PORT", getPort().toString().trim())
|
||||
.replace("DATABASE", getDataBase().trim());
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ public class MysqlConfigration extends JdbcDTO {
|
||||
|
||||
public String getJdbc() {
|
||||
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中
|
||||
return "jdbc:mysql://HOSTNAME:PORT/DATABASE?characterEncoding=UTF-8&connectTimeout=5000"
|
||||
return "jdbc:mysql://HOSTNAME:PORT/DATABASE?characterEncoding=UTF-8&connectTimeout=5000&useSSL=false"
|
||||
.replace("HOSTNAME", getHost().trim())
|
||||
.replace("PORT", getPort().toString().trim())
|
||||
.replace("DATABASE", getDataBase().trim());
|
||||
|
@ -40,7 +40,7 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
List<String[]> list = new LinkedList<>();
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = getConnectionFromPool(dsr);
|
||||
connection = getConnection(dsr);
|
||||
Statement stat = connection.createStatement();
|
||||
ResultSet rs = stat.executeQuery(dsr.getQuery());
|
||||
list = fetchResult(rs);
|
||||
@ -196,7 +196,7 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
String queryStr = getTablesSql(datasourceRequest);
|
||||
Connection con = null;
|
||||
try {
|
||||
con = getConnectionFromPool(datasourceRequest);
|
||||
con = getConnection(datasourceRequest);
|
||||
Statement statement = con.createStatement();
|
||||
ResultSet resultSet = statement.executeQuery(queryStr);
|
||||
while (resultSet.next()) {
|
||||
@ -250,7 +250,12 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
ResultSet resultSet = databaseMetaData.getColumns(null, "%", datasourceRequest.getTable(), "%");
|
||||
while (resultSet.next()) {
|
||||
String tableName = resultSet.getString("TABLE_NAME");
|
||||
String database = resultSet.getString("TABLE_CAT");
|
||||
String database = null;
|
||||
if(datasourceRequest.getDatasource().getType().equalsIgnoreCase("ch")){
|
||||
database = resultSet.getString("TABLE_SCHEM");
|
||||
}else {
|
||||
database = resultSet.getString("TABLE_CAT");
|
||||
}
|
||||
if(database != null){
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
|
||||
TableFiled tableFiled = getTableFiled(resultSet);
|
||||
@ -436,6 +441,14 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
password = pgConfigration.getPassword();
|
||||
driver = pgConfigration.getDriver();
|
||||
jdbcurl = pgConfigration.getJdbc();
|
||||
break;
|
||||
case ch:
|
||||
CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class);
|
||||
username = chConfigration.getUsername();
|
||||
password = chConfigration.getPassword();
|
||||
driver = chConfigration.getDriver();
|
||||
jdbcurl = chConfigration.getJdbc();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -493,6 +506,14 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
dataSource.setJdbcUrl(pgConfigration.getJdbc());
|
||||
jdbcDTO = pgConfigration;
|
||||
break;
|
||||
case ch:
|
||||
CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class);
|
||||
dataSource.setUser(chConfigration.getUsername());
|
||||
dataSource.setDriverClass(chConfigration.getDriver());
|
||||
dataSource.setPassword(chConfigration.getPassword());
|
||||
dataSource.setJdbcUrl(chConfigration.getJdbc());
|
||||
jdbcDTO = chConfigration;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -515,7 +536,8 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
PgConfigration pgConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), PgConfigration.class);
|
||||
return pgConfigration.getDataBase();
|
||||
default:
|
||||
return null;
|
||||
JdbcDTO jdbcDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcDTO.class);
|
||||
return jdbcDTO.getDataBase();
|
||||
}
|
||||
}
|
||||
|
||||
@ -546,6 +568,9 @@ public class JdbcProvider extends DatasourceProvider {
|
||||
throw new Exception(Translator.get("i18n_schema_is_empty"));
|
||||
}
|
||||
return "SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' AND schemaname='SCHEMA' ;".replace("SCHEMA", pgConfigration.getSchema());
|
||||
case ch:
|
||||
CHConfigration chConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfigration.class);
|
||||
return "SELECT name FROM system.tables where database='DATABASE';".replace("DATABASE", chConfigration.getDataBase());
|
||||
default:
|
||||
return "show tables;";
|
||||
}
|
||||
|
@ -52,6 +52,8 @@ public class ProviderFactory implements ApplicationContextAware {
|
||||
return context.getBean("oracleQuery", QueryProvider.class);
|
||||
case es:
|
||||
return context.getBean("esQuery", QueryProvider.class);
|
||||
case ch:
|
||||
return context.getBean("chQuery", QueryProvider.class);
|
||||
default:
|
||||
return context.getBean("mysqlQuery", QueryProvider.class);
|
||||
}
|
||||
|
@ -52,10 +52,10 @@ public class SSOServer {
|
||||
SSOToken ssoToken = oidcXpackService.requestSsoToken(config, code, state);
|
||||
|
||||
SSOUserInfo ssoUserInfo = oidcXpackService.requestUserInfo(config, ssoToken.getAccessToken());
|
||||
SysUserEntity sysUserEntity = authUserService.getUserByName(ssoUserInfo.getUserName());
|
||||
SysUserEntity sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub());
|
||||
if(null == sysUserEntity){
|
||||
sysUserService.saveOIDCUser(ssoUserInfo);
|
||||
sysUserEntity = authUserService.getUserByName(ssoUserInfo.getUserName());
|
||||
sysUserEntity = authUserService.getUserBySub(ssoUserInfo.getSub());
|
||||
}
|
||||
TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build();
|
||||
String realPwd = CodingUtil.md5(sysUserService.defaultPWD());
|
||||
|
@ -0,0 +1,41 @@
|
||||
package io.dataease.provider.ch;
|
||||
|
||||
import io.dataease.provider.SQLConstants;
|
||||
|
||||
import static io.dataease.datasource.constants.DatasourceTypes.ch;
|
||||
|
||||
/**
|
||||
* @Author gin
|
||||
* @Date 2021/7/8 7:22 下午
|
||||
*/
|
||||
public class CHConstants extends SQLConstants {
|
||||
public static final String KEYWORD_TABLE = ch.getKeywordPrefix() + "%s" + ch.getKeywordSuffix();
|
||||
|
||||
public static final String KEYWORD_FIX = "%s." + ch.getKeywordPrefix() + "%s" + ch.getKeywordSuffix();
|
||||
|
||||
public static final String toInt32 = "toInt32(%s)";
|
||||
|
||||
public static final String toDateTime = "toDateTime(%s)";
|
||||
|
||||
public static final String toInt64 = "toInt64(%s)";
|
||||
|
||||
public static final String toFloat64 = "toFloat64(%s)";
|
||||
|
||||
public static final String formatDateTime = "formatDateTime(%s,'%s')";
|
||||
|
||||
public static final String toDecimal = "toDecimal64(%s,2)";
|
||||
|
||||
public static final String DEFAULT_DATE_FORMAT = "%Y-%m-%d %H:%M:%S";
|
||||
|
||||
public static final String WHERE_VALUE_NULL = "(NULL,'')";
|
||||
|
||||
public static final String WHERE_VALUE_VALUE = "'%s'";
|
||||
|
||||
public static final String AGG_COUNT = "COUNT(*)";
|
||||
|
||||
public static final String AGG_FIELD = "%s(%s)";
|
||||
|
||||
public static final String WHERE_BETWEEN = "'%s' AND '%s'";
|
||||
|
||||
public static final String BRACKETS = "(%s)";
|
||||
}
|
1008
backend/src/main/java/io/dataease/provider/ch/CHQueryProvider.java
Normal file
1008
backend/src/main/java/io/dataease/provider/ch/CHQueryProvider.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -865,6 +865,12 @@ public class DorisQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return "%Y-%m-%d %H:%i:%S";
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -816,6 +816,12 @@ public class EsQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return "YYYY-MM-dd HH:mm:ss";
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -859,6 +859,12 @@ public class MysqlQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return "%Y-%m-%d %H:%i:%S";
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -899,6 +899,12 @@ public class OracleQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return OracleConstants.DEFAULT_DATE_FORMAT;
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -886,6 +886,12 @@ public class PgQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return "'YYYY-MM-DD HH24:MI:SS'";
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -13,6 +13,7 @@ import io.dataease.dto.chart.ChartViewFieldDTO;
|
||||
import io.dataease.dto.sqlObj.SQLObj;
|
||||
import io.dataease.provider.QueryProvider;
|
||||
import io.dataease.provider.SQLConstants;
|
||||
import io.dataease.provider.oracle.OracleConstants;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -825,6 +826,12 @@ public class SqlserverQueryProvider extends QueryProvider {
|
||||
split = "-";
|
||||
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
|
||||
split = "/";
|
||||
} else {
|
||||
split = "-";
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(dateStyle)) {
|
||||
return "convert(varchar," + originField + ",120)";
|
||||
}
|
||||
|
||||
switch (dateStyle) {
|
||||
|
@ -805,21 +805,35 @@ public class DataSetTableService {
|
||||
String f = field.substring(0, field.length() - 1);
|
||||
|
||||
StringBuilder join = new StringBuilder();
|
||||
List<DataSetTableUnionDTO> unions = new ArrayList<>();
|
||||
for (DataTableInfoCustomUnion dataTableInfoCustomUnion : dataTableInfoDTO.getList()) {
|
||||
for (DataSetTableUnionDTO dto : list) {
|
||||
// 被关联表和自助数据集的表相等
|
||||
if (StringUtils.equals(dto.getTargetTableId(), dataTableInfoCustomUnion.getTableId())) {
|
||||
unions.add(dto);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(unions)) {
|
||||
for (int i = 0; i < unions.size(); i++) {
|
||||
DataSetTableUnionDTO dto = unions.get(i);
|
||||
DatasetTableField sourceField = dataSetTableFieldsService.get(dto.getSourceTableFieldId());
|
||||
DatasetTableField targetField = dataSetTableFieldsService.get(dto.getTargetTableFieldId());
|
||||
if (ObjectUtils.isEmpty(sourceField) || ObjectUtils.isEmpty(targetField)) {
|
||||
DEException.throwException(Translator.get("i18n_dataset_field_delete"));
|
||||
}
|
||||
if (i == 0) {
|
||||
join.append(convertUnionTypeToSQL(dto.getSourceUnionRelation()))
|
||||
.append(DorisTableUtils.dorisName(dto.getTargetTableId()))
|
||||
.append(" ON ")
|
||||
.append(DorisTableUtils.dorisName(dto.getSourceTableId())).append(".").append(sourceField.getDataeaseName())
|
||||
.append(" = ")
|
||||
.append(DorisTableUtils.dorisName(dto.getTargetTableId())).append(".").append(targetField.getDataeaseName());
|
||||
} else {
|
||||
join.append(" AND ")
|
||||
.append(DorisTableUtils.dorisName(dto.getSourceTableId())).append(".").append(sourceField.getDataeaseName())
|
||||
.append(" = ")
|
||||
.append(DorisTableUtils.dorisName(dto.getTargetTableId())).append(".").append(targetField.getDataeaseName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -865,10 +879,18 @@ public class DataSetTableService {
|
||||
String f = field.substring(0, field.length() - 1);
|
||||
|
||||
StringBuilder join = new StringBuilder();
|
||||
List<DataSetTableUnionDTO> unions = new ArrayList<>();
|
||||
for (DataTableInfoCustomUnion dataTableInfoCustomUnion : dataTableInfoDTO.getList()) {
|
||||
for (DataSetTableUnionDTO dto : list) {
|
||||
// 被关联表和自助数据集的表相等
|
||||
if (StringUtils.equals(dto.getTargetTableId(), dataTableInfoCustomUnion.getTableId())) {
|
||||
unions.add(dto);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(unions)) {
|
||||
for (int i = 0; i < unions.size(); i++) {
|
||||
DataSetTableUnionDTO dto = unions.get(i);
|
||||
DatasetTableField sourceField = dataSetTableFieldsService.get(dto.getSourceTableFieldId());
|
||||
DatasetTableField targetField = dataSetTableFieldsService.get(dto.getTargetTableFieldId());
|
||||
if (ObjectUtils.isEmpty(sourceField) || ObjectUtils.isEmpty(targetField)) {
|
||||
@ -878,12 +900,18 @@ public class DataSetTableService {
|
||||
String sourceTableName = new Gson().fromJson(sourceTable.getInfo(), DataTableInfoDTO.class).getTable();
|
||||
DatasetTable targetTable = datasetTableMapper.selectByPrimaryKey(dto.getTargetTableId());
|
||||
String targetTableName = new Gson().fromJson(targetTable.getInfo(), DataTableInfoDTO.class).getTable();
|
||||
if (i == 0) {
|
||||
join.append(convertUnionTypeToSQL(dto.getSourceUnionRelation()))
|
||||
.append(String.format(keyword, targetTableName))
|
||||
.append(" ON ")
|
||||
.append(String.format(keyword, sourceTableName)).append(".").append(String.format(keyword, sourceField.getOriginName()))
|
||||
.append(" = ")
|
||||
.append(String.format(keyword, targetTableName)).append(".").append(String.format(keyword, targetField.getOriginName()));
|
||||
} else {
|
||||
join.append(" AND ")
|
||||
.append(String.format(keyword, sourceTableName)).append(".").append(String.format(keyword, sourceField.getOriginName()))
|
||||
.append(" = ")
|
||||
.append(String.format(keyword, targetTableName)).append(".").append(String.format(keyword, targetField.getOriginName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ public class SysUserService {
|
||||
public void saveOIDCUser(SSOUserInfo ssoUserInfo) {
|
||||
long now = System.currentTimeMillis();
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUsername(ssoUserInfo.getUserName());
|
||||
sysUser.setUsername(ssoUserInfo.getUsername());
|
||||
sysUser.setNickName(ssoUserInfo.getNickName());
|
||||
sysUser.setEmail(ssoUserInfo.getEmail());
|
||||
sysUser.setPassword(CodingUtil.md5(DEFAULT_PWD));
|
||||
@ -120,6 +120,8 @@ public class SysUserService {
|
||||
sysUser.setEnabled(1L);
|
||||
sysUser.setLanguage("zh_CN");
|
||||
sysUser.setFrom(2);
|
||||
sysUser.setIsAdmin(false);
|
||||
sysUser.setSub(ssoUserInfo.getSub());
|
||||
sysUserMapper.insert(sysUser);
|
||||
SysUser dbUser = findOne(sysUser);
|
||||
if (null != dbUser && null != dbUser.getUserId()) {
|
||||
@ -148,6 +150,7 @@ public class SysUserService {
|
||||
sysUser.setUpdateTime(now);
|
||||
sysUser.setEnabled(request.getEnabled());
|
||||
sysUser.setLanguage("zh_CN");
|
||||
sysUser.setIsAdmin(false);
|
||||
sysUser.setFrom(1);
|
||||
return sysUser;
|
||||
}).collect(Collectors.toList());
|
||||
|
@ -229,9 +229,9 @@ public class SystemParameterService {
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
/* public static void main(String[] args) {
|
||||
String info="[{\"paramKey\":\"base.url\",\"paramValue\":null,\"type\":\"text\",\"sort\":1,\"file\":null,\"fileName\":null},{\"paramKey\":\"base.title\",\"paramValue\":\"DataEase Title\",\"type\":\"text\",\"sort\":3,\"file\":null,\"fileName\":null},{\"paramKey\":\"base.logo\",\"paramValue\":\"DataEase\",\"type\":\"text\",\"sort\":4,\"file\":null,\"fileName\":\"favicon.icon.png\"}]";
|
||||
List<SystemParameterDTO> temp = JSON.parseArray(info,SystemParameterDTO.class);
|
||||
// System.out.println("===>");
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
@ -29,12 +29,26 @@ ALTER TABLE `sys_user` ADD COLUMN `from` int(4) NOT NULL COMMENT '来源' AFTER
|
||||
|
||||
INSERT INTO `sys_menu` VALUES (60, 1, 0, 1, '导入LDAP用户', 'system-user-import', 'system/user/imp-ldap', 11, NULL, 'user-ldap', b'0', b'0', b'1', 'user:import', NULL, NULL, NULL, NULL);
|
||||
|
||||
ALTER TABLE `datasource` ADD COLUMN `compute_type` VARCHAR(45) NULL DEFAULT 'ALL' COMMENT '数据计算模式' AFTER `status`;
|
||||
update datasource set compute_type='ALL';
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.url', NULL, 'text', 1);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.dn', NULL, 'text', 2);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.password', NULL, 'password', 3);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.ou', NULL, 'text', 4);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.mapping', NULL, 'text', 6);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.open', NULL, 'text', 7);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.ou', NULL, 'text', 4);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.password', NULL, 'password', 3);
|
||||
INSERT INTO `system_parameter` VALUES ('ldap.url', NULL, 'text', 1);
|
||||
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.authEndpoint', NULL, 'text', 1);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.tokenEndpoint', NULL, 'text', 2);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.userinfoEndpoint', NULL, 'text', 3);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.logoutEndpoint', NULL, 'text', 4);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.clientId', NULL, 'text', 5);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.secret', NULL, 'password', 6);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.scope', NULL, 'text', 7);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.redirectUrl', NULL, 'text', 8);
|
||||
INSERT INTO `system_parameter` VALUES ('oidc.open', NULL, 'text', 9);
|
||||
COMMIT;
|
||||
|
||||
ALTER TABLE `sys_user` ADD COLUMN `sub` varchar(255) COMMENT 'oidc用户ID' AFTER `from`;
|
||||
|
@ -65,7 +65,7 @@
|
||||
<!--要生成的数据库表 -->
|
||||
|
||||
|
||||
<table tableName="chart_view"/>
|
||||
<table tableName="datasource"/>
|
||||
|
||||
<!-- <table tableName="sys_dict_item"/>-->
|
||||
<!-- <table tableName="dataset_table_field"/>-->
|
||||
|
@ -198,6 +198,7 @@ authsource_configuration_is_null=Authentication source configuration cannot be e
|
||||
删除角色=Delete Role
|
||||
删除连接=Delete Connection
|
||||
显示设置=Display
|
||||
系统参数=System Param
|
||||
参数管理=Parameter
|
||||
数据源=Data Source
|
||||
数据源表单=Data source form
|
||||
|
@ -198,6 +198,7 @@ authsource_configuration_is_null=认证源配置不能为空
|
||||
删除角色=删除角色
|
||||
删除连接=删除连接
|
||||
显示设置=显示设置
|
||||
系统参数=系统参数
|
||||
数据源=数据源
|
||||
数据源表单=数据源表单
|
||||
数据集=数据集
|
||||
|
@ -200,6 +200,7 @@ authsource_configuration_is_null=認證源配置不能為空
|
||||
删除角色=刪除角色
|
||||
刪除连接=刪除鏈接
|
||||
显示设置=顯示設置
|
||||
系统参数=系統參數
|
||||
参数管理=參數管理
|
||||
数据源=數據源
|
||||
数据源表单=數據源表單
|
||||
|
69
frontend/src/components/DeDrag/MoveInShadow.vue
Normal file
69
frontend/src/components/DeDrag/MoveInShadow.vue
Normal file
@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<div style="z-index:-1" :style="style" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
export default {
|
||||
replace: true,
|
||||
name: 'MoveInShadow',
|
||||
props: {
|
||||
w: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
h: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
x: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
y: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
z: {
|
||||
type: Number,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
style() {
|
||||
// 当前默认为自适应
|
||||
let left = this.x
|
||||
let top = this.y
|
||||
let width = this.w
|
||||
let height = this.h
|
||||
if (this.canvasStyleData.auxiliaryMatrix) {
|
||||
left = Math.round(left / this.curCanvasScale.matrixStyleWidth) * this.curCanvasScale.matrixStyleWidth
|
||||
width = Math.round(width / this.curCanvasScale.matrixStyleWidth) * this.curCanvasScale.matrixStyleWidth
|
||||
top = Math.round(top / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight
|
||||
height = Math.round(height / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight
|
||||
}
|
||||
const style = {
|
||||
transform: `translate(${left}px, ${top}px) rotate(0deg)`,
|
||||
width: width + 'px',
|
||||
height: height + 'px',
|
||||
opacity: 0.4,
|
||||
background: 'gray',
|
||||
position: 'absolute'
|
||||
}
|
||||
// console.log('style=>' + JSON.stringify(style))
|
||||
return style
|
||||
},
|
||||
...mapState([
|
||||
'curComponent',
|
||||
'editor',
|
||||
'curCanvasScale',
|
||||
'canvasStyleData',
|
||||
'linkageSettingStatus'
|
||||
])
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -21,6 +21,7 @@
|
||||
@mouseleave="leave"
|
||||
>
|
||||
<edit-bar v-if="active||linkageSettingStatus" style="transform: translateZ(10px)" :active-model="'edit'" :element="element" @showViewDetails="showViewDetails" />
|
||||
<div v-if="resizing" style="transform: translateZ(11px);position: absolute; z-index: 3" :style="resizeShadowStyle" />
|
||||
<div
|
||||
v-for="(handlei, indexi) in actualHandles"
|
||||
:key="indexi"
|
||||
@ -31,8 +32,10 @@
|
||||
>
|
||||
<slot :name="handlei" />
|
||||
</div>
|
||||
<div :style="mainSlotStyle" :class="{'gap_class':canvasStyleData.panel.gap==='yes'}">
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@ -49,7 +52,7 @@ import EditBar from '@/components/canvas/components/Editor/EditBar'
|
||||
|
||||
export default {
|
||||
replace: true,
|
||||
name: 'VueDragResizeRotate',
|
||||
name: 'Dedrag',
|
||||
components: { EditBar },
|
||||
props: {
|
||||
className: {
|
||||
@ -440,6 +443,14 @@ export default {
|
||||
...(this.dragging && this.disableUserSelect ? userSelectNone : userSelectAuto)
|
||||
}
|
||||
},
|
||||
resizeShadowStyle() {
|
||||
return {
|
||||
width: this.computedWidth,
|
||||
height: this.computedHeight,
|
||||
opacity: 0.4,
|
||||
background: 'gray'
|
||||
}
|
||||
},
|
||||
// 控制柄显示与否
|
||||
actualHandles() {
|
||||
if (!this.resizable) return []
|
||||
@ -464,9 +475,48 @@ export default {
|
||||
return this.height + 'px'
|
||||
},
|
||||
|
||||
// 根据left right 算出元素的宽度
|
||||
computedMainSlotWidth() {
|
||||
if (this.w === 'auto') {
|
||||
if (!this.widthTouched) {
|
||||
return 'auto'
|
||||
}
|
||||
}
|
||||
if (this.canvasStyleData.auxiliaryMatrix) {
|
||||
const width = Math.round(this.width / this.curCanvasScale.matrixStyleWidth) * this.curCanvasScale.matrixStyleWidth
|
||||
return width + 'px'
|
||||
} else {
|
||||
return this.width + 'px'
|
||||
}
|
||||
},
|
||||
// 根据top bottom 算出元素的宽度
|
||||
computedMainSlotHeight() {
|
||||
if (this.h === 'auto') {
|
||||
if (!this.heightTouched) {
|
||||
return 'auto'
|
||||
}
|
||||
}
|
||||
if (this.canvasStyleData.auxiliaryMatrix) {
|
||||
const height = Math.round(this.height / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight
|
||||
return height + 'px'
|
||||
} else {
|
||||
return this.height + 'px'
|
||||
}
|
||||
},
|
||||
|
||||
// private
|
||||
mainSlotStyle() {
|
||||
const style = {
|
||||
width: this.computedMainSlotWidth,
|
||||
height: this.computedMainSlotHeight
|
||||
}
|
||||
// console.log('style=>' + JSON.stringify(style))
|
||||
return style
|
||||
},
|
||||
curComponent() {
|
||||
return this.$store.state.curComponent
|
||||
},
|
||||
...mapState([
|
||||
'curComponent',
|
||||
'editor',
|
||||
'curCanvasScale',
|
||||
'canvasStyleData',
|
||||
@ -566,6 +616,18 @@ export default {
|
||||
this.beforeDestroyFunction()
|
||||
this.createdFunction()
|
||||
this.mountedFunction()
|
||||
},
|
||||
// private 监控dragging resizing
|
||||
dragging(val) {
|
||||
if (this.enabled) {
|
||||
this.curComponent.optStatus.dragging = val
|
||||
}
|
||||
},
|
||||
// private 监控dragging resizing
|
||||
resizing(val) {
|
||||
if (this.enabled) {
|
||||
this.curComponent.optStatus.resizing = val
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function() {
|
||||
@ -610,7 +672,7 @@ export default {
|
||||
const rect = this.$el.parentNode.getBoundingClientRect()
|
||||
this.parentX = rect.x
|
||||
this.parentY = rect.y
|
||||
return [Math.round(parseFloat(style.getPropertyValue('width'), 10)), Math.round(parseFloat(style.getPropertyValue('height'), 10))]
|
||||
return [Math.round(parseFloat(style.getPropertyValue('width'), 10)), 100000]
|
||||
}
|
||||
if (typeof this.parent === 'string') {
|
||||
const parentNode = document.querySelector(this.parent)
|
||||
@ -1490,7 +1552,7 @@ export default {
|
||||
// resize
|
||||
const self = this
|
||||
setTimeout(function() {
|
||||
self.$emit('resizestop')
|
||||
self.$emit('resizeView')
|
||||
}, 200)
|
||||
},
|
||||
mountedFunction() {
|
||||
@ -1650,6 +1712,10 @@ export default {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.gap_class{
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
/*.mouseOn >>> .icon-shezhi{*/
|
||||
/* z-index: 2;*/
|
||||
/* display:block!important;*/
|
||||
|
47
frontend/src/components/DeDrag/shadow.vue
Normal file
47
frontend/src/components/DeDrag/shadow.vue
Normal file
@ -0,0 +1,47 @@
|
||||
<template>
|
||||
<div style="z-index:1" :style="style" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
export default {
|
||||
replace: true,
|
||||
name: 'Shadow',
|
||||
computed: {
|
||||
style() {
|
||||
// 当前默认为自适应
|
||||
let left = this.curComponent.style.left * this.curCanvasScale.scaleWidth / 100
|
||||
let top = this.curComponent.style.top * this.curCanvasScale.scaleHeight / 100
|
||||
let width = this.curComponent.style.width * this.curCanvasScale.scaleWidth / 100
|
||||
let height = this.curComponent.style.height * this.curCanvasScale.scaleHeight / 100
|
||||
if (this.canvasStyleData.auxiliaryMatrix) {
|
||||
left = Math.round(left / this.curCanvasScale.matrixStyleWidth) * this.curCanvasScale.matrixStyleWidth
|
||||
width = Math.round(width / this.curCanvasScale.matrixStyleWidth) * this.curCanvasScale.matrixStyleWidth
|
||||
top = Math.round(top / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight
|
||||
height = Math.round(height / this.curCanvasScale.matrixStyleHeight) * this.curCanvasScale.matrixStyleHeight
|
||||
}
|
||||
const style = {
|
||||
transform: `translate(${left}px, ${top}px) rotate(0deg)`,
|
||||
width: width + 'px',
|
||||
height: height + 'px',
|
||||
opacity: 0.4,
|
||||
background: 'gray',
|
||||
position: 'absolute'
|
||||
}
|
||||
// console.log('style=>' + JSON.stringify(style))
|
||||
return style
|
||||
},
|
||||
...mapState([
|
||||
'curComponent',
|
||||
'editor',
|
||||
'curCanvasScale',
|
||||
'canvasStyleData',
|
||||
'linkageSettingStatus'
|
||||
])
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -199,6 +199,7 @@ export default {
|
||||
query(currentPage, pageSize, param).then(response => {
|
||||
this.data = response.data.listObject
|
||||
this.paginationConfig.total = response.data.itemCount
|
||||
this.count = this.paginationConfig.total
|
||||
}).catch(() => {
|
||||
const token = getToken()
|
||||
if (!token || token === 'null' || token === 'undefined') {
|
||||
|
@ -127,7 +127,7 @@ export default {
|
||||
box-shadow:0px 0px 7px #0a7be0;
|
||||
}
|
||||
.gap_class{
|
||||
padding:3px;
|
||||
padding:5px;
|
||||
}
|
||||
.component-custom {
|
||||
outline: none;
|
||||
|
@ -110,12 +110,16 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.canvasStyleData.selfAdaption) {
|
||||
style = {
|
||||
overflow: 'hidden',
|
||||
...style
|
||||
}
|
||||
}
|
||||
// if (this.canvasStyleData.selfAdaption) {
|
||||
// style = {
|
||||
// overflow: 'hidden',
|
||||
// ...style
|
||||
// }
|
||||
// }
|
||||
// style = {
|
||||
// overflow-x :'hidden',
|
||||
// ...style
|
||||
// }
|
||||
return style
|
||||
},
|
||||
// 此处单独计算componentData的值 不放入全局mapState中
|
||||
@ -168,10 +172,13 @@ export default {
|
||||
const canvasWidth = document.getElementById('canvasInfoTemp').offsetWidth
|
||||
this.scaleWidth = canvasWidth * 100 / parseInt(this.canvasStyleData.width)// 获取宽度比
|
||||
this.scaleHeight = canvasHeight * 100 / parseInt(this.canvasStyleData.height)// 获取高度比
|
||||
if (this.showType === 'width') {
|
||||
|
||||
this.scaleHeight = this.scaleWidth
|
||||
this.mainHeight = this.canvasStyleData.height * this.scaleHeight / 100 + 'px'
|
||||
}
|
||||
// this.mainHeight = this.canvasStyleData.height * this.scaleHeight / 100 + 'px'
|
||||
// if (this.showType === 'width') {
|
||||
// this.scaleHeight = this.scaleWidth
|
||||
// this.mainHeight = this.canvasStyleData.height * this.scaleHeight / 100 + 'px'
|
||||
// }
|
||||
this.handleScaleChange()
|
||||
},
|
||||
resetID(data) {
|
||||
@ -252,7 +259,7 @@ export default {
|
||||
color: #9ea6b2;
|
||||
}
|
||||
.gap_class{
|
||||
padding:3px;
|
||||
padding:5px;
|
||||
}
|
||||
.dialog-css>>>.el-dialog__title {
|
||||
font-size: 14px;
|
||||
|
@ -12,7 +12,7 @@
|
||||
@mousedown="handleMouseDown"
|
||||
>
|
||||
<!-- 网格线 -->
|
||||
<Grid v-if="canvasStyleData.auxiliaryMatrix&&!linkageSettingStatus" :matrix-style="matrixStyle" />
|
||||
<!-- <Grid v-if="canvasStyleData.auxiliaryMatrix&&!linkageSettingStatus" :matrix-style="matrixStyle" />-->
|
||||
|
||||
<!-- 仪表板联动清除按钮-->
|
||||
<canvas-opt-bar />
|
||||
@ -32,7 +32,6 @@
|
||||
:active="item === curComponent"
|
||||
:element="item"
|
||||
class-name-active="de-drag-active"
|
||||
:class="{'gap_class':canvasStyleData.panel.gap==='yes'}"
|
||||
:snap="true"
|
||||
:snap-tolerance="2"
|
||||
:change-style="customStyle"
|
||||
@ -41,7 +40,7 @@
|
||||
:linkage-active="linkageSettingStatus&&item===curLinkageView"
|
||||
@refLineParams="getRefLineParams"
|
||||
@showViewDetails="showViewDetails(index)"
|
||||
@resizestop="resizestop(index,item)"
|
||||
@resizeView="resizeView(index,item)"
|
||||
>
|
||||
<component
|
||||
:is="item.component"
|
||||
@ -104,6 +103,8 @@
|
||||
:active="item === curComponent"
|
||||
/>
|
||||
</de-drag>
|
||||
<!--拖拽阴影部分-->
|
||||
<drag-shadow v-if="curComponent&&this.curComponent.optStatus.dragging" />
|
||||
<!-- 右击菜单 -->
|
||||
<ContextMenu />
|
||||
<!-- 标线 (临时去掉标线 吸附等功能)-->
|
||||
@ -166,9 +167,10 @@ import { deepCopy } from '@/components/canvas/utils/utils'
|
||||
import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
|
||||
import DeOutWidget from '@/components/dataease/DeOutWidget'
|
||||
import CanvasOptBar from '@/components/canvas/components/Editor/CanvasOptBar'
|
||||
import DragShadow from '@/components/DeDrag/shadow'
|
||||
|
||||
export default {
|
||||
components: { Shape, ContextMenu, MarkLine, Area, Grid, DeDrag, UserViewDialog, DeOutWidget, CanvasOptBar },
|
||||
components: { Shape, ContextMenu, MarkLine, Area, Grid, DeDrag, UserViewDialog, DeOutWidget, CanvasOptBar, DragShadow },
|
||||
props: {
|
||||
isEdit: {
|
||||
type: Boolean,
|
||||
@ -216,10 +218,10 @@ export default {
|
||||
width: 80,
|
||||
height: 20
|
||||
},
|
||||
// 矩阵数量 默认 12 * 24
|
||||
// 矩阵数量 默认 128 * 72
|
||||
matrixCount: {
|
||||
x: 24,
|
||||
y: 72
|
||||
x: 36,
|
||||
y: 18
|
||||
},
|
||||
customStyleHistory: null,
|
||||
showDrag: true,
|
||||
@ -555,6 +557,9 @@ export default {
|
||||
if (this.canvasStyleData.matrixCount) {
|
||||
this.matrixCount = this.canvasStyleData.matrixCount
|
||||
}
|
||||
// 1.3 版本重新设计仪表板定位方式,基准画布宽高为 1600*900 宽度自适应当前画布获取缩放比例scaleWidth
|
||||
// 高度缩放比例scaleHeight = scaleWidth 基础矩阵为128*72 矩阵原始宽度12.5*12.5 矩阵高度可以调整
|
||||
|
||||
if (this.outStyle.width && this.outStyle.height) {
|
||||
// 矩阵计算
|
||||
if (!this.canvasStyleData.selfAdaption) {
|
||||
@ -628,8 +633,9 @@ export default {
|
||||
showViewDetails(index) {
|
||||
this.$refs.wrapperChild[index].openChartDetailsDialog()
|
||||
},
|
||||
resizestop(index, item) {
|
||||
resizeView(index, item) {
|
||||
if (item.type === 'view') {
|
||||
// console.log('view:resizeView')
|
||||
this.$refs.wrapperChild[index].chartResize()
|
||||
}
|
||||
}
|
||||
@ -642,6 +648,7 @@ export default {
|
||||
position: relative;
|
||||
/*background: #fff;*/
|
||||
margin: auto;
|
||||
overflow-x: hidden;
|
||||
background-size:100% 100% !important;
|
||||
/*transform-style:preserve-3d;*/
|
||||
.lock {
|
||||
|
@ -17,18 +17,6 @@
|
||||
<el-switch v-model="canvasStyleData.auxiliaryMatrix" :width="35" name="auxiliaryMatrix" />
|
||||
<span>{{ $t('panel.matrix_design') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="canvas-config" style="margin-right: 10px">
|
||||
<el-switch v-model="canvasStyleData.selfAdaption" :width="35" name="selfAdaption" />
|
||||
<span>{{ $t('panel.canvas_self_adaption') }} </span>
|
||||
</div>
|
||||
|
||||
<div class="canvas-config" style="margin-right: 55px">
|
||||
<span> {{ $t('panel.canvas_size') }} </span>
|
||||
<input v-model="canvasStyleData.width" :disabled="canvasStyleData.selfAdaption">
|
||||
<span>*</span>
|
||||
<input v-model="canvasStyleData.height" :disabled="canvasStyleData.selfAdaption">
|
||||
</div>
|
||||
<!-- <div class="canvas-config" style="margin-right: 10px">-->
|
||||
<!-- <span> {{ $t('panel.canvas_scale') }} </span>-->
|
||||
<!-- <input v-model="scale" @input="handleScaleChange"> %-->
|
||||
@ -383,7 +371,7 @@ export default {
|
||||
float: right;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
min-width: 900px;
|
||||
min-width: 500px;
|
||||
/*background: #fff;*/
|
||||
/*border-bottom: 1px solid #ddd;*/
|
||||
|
||||
|
@ -264,6 +264,7 @@ export default {
|
||||
this.chart.drillFields = this.chart.drillFields ? JSON.parse(this.chart.drillFields) : []
|
||||
if (!response.data.drill) {
|
||||
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
|
||||
this.resetDrill()
|
||||
}
|
||||
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters))
|
||||
this.drillFields = JSON.parse(JSON.stringify(response.data.drillFields))
|
||||
@ -434,7 +435,7 @@ export default {
|
||||
this.$refs[this.element.propValue.id].chartResize()
|
||||
}
|
||||
this.destroyTimeMachine()
|
||||
}, 200)
|
||||
}, 50)
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -51,9 +51,9 @@ const list = [
|
||||
icon: 'wenben',
|
||||
type: 'v-text',
|
||||
style: {
|
||||
width: 300,
|
||||
width: 400,
|
||||
height: 100,
|
||||
fontSize: 18,
|
||||
fontSize: 22,
|
||||
fontWeight: 400,
|
||||
lineHeight: '',
|
||||
letterSpacing: 0,
|
||||
@ -120,10 +120,10 @@ const list = [
|
||||
icon: 'juxing',
|
||||
type: 'rect-shape',
|
||||
style: {
|
||||
width: 200,
|
||||
height: 200,
|
||||
width: 400,
|
||||
height: 300,
|
||||
borderStyle: 'solid',
|
||||
borderWidth: 1,
|
||||
borderWidth: 0,
|
||||
borderColor: '#000000',
|
||||
backgroundColor: '#ffffff',
|
||||
borderRadius: 0
|
||||
|
@ -433,6 +433,11 @@ export default {
|
||||
fixedHeader: 'Fixed Header',
|
||||
sidebarLogo: 'Sidebar Logo'
|
||||
},
|
||||
sysParams: {
|
||||
display: 'Display Setting',
|
||||
ldap: 'LDAP Setting',
|
||||
oidc: 'OIDC Setting'
|
||||
},
|
||||
license: {
|
||||
i18n_no_license_record: 'No License Record',
|
||||
i18n_license_is_empty: 'License is empty.',
|
||||
@ -500,6 +505,47 @@ export default {
|
||||
change_password: 'Change Password',
|
||||
search_by_name: 'Search by name'
|
||||
},
|
||||
ldap: {
|
||||
url: 'LDAP url',
|
||||
dn: 'LDAP DN',
|
||||
password: 'Password',
|
||||
ou: 'OU',
|
||||
filter: 'filter',
|
||||
mapping: 'LDAP mapping',
|
||||
open: 'Enable LDAP Authentication',
|
||||
input_url: 'Please key LDAP url',
|
||||
input_dn: 'Please key DN',
|
||||
input_password: 'Please key password',
|
||||
input_ou: 'Please key OU',
|
||||
input_filter: 'Please key filter',
|
||||
input_mapping: 'Please key LDAP mapping',
|
||||
input_username: 'Please key username',
|
||||
input_url_placeholder: 'Please key url (like ldap://localhost:389)',
|
||||
input_ou_placeholder: 'Please key OU ',
|
||||
input_filter_placeholder: 'Please key filter',
|
||||
input_mapping_placeholder: 'like:{"username":"uid","name":"sn","email":"mail"}',
|
||||
test_connect: 'Test connect',
|
||||
edit: 'Edit',
|
||||
login_success: 'Login success',
|
||||
url_cannot_be_empty: 'LDAP url can not be empty',
|
||||
dn_cannot_be_empty: 'LDAP DN can not be empty',
|
||||
ou_cannot_be_empty: 'LDAP OU can not be empty',
|
||||
filter_cannot_be_empty: 'LDAP filter can not be empty',
|
||||
mapping_cannot_be_empty: 'LDAP mapping can not be empty',
|
||||
password_cannot_be_empty: 'LDAP password can not be empty',
|
||||
import_ldap: 'Import LDAP User'
|
||||
},
|
||||
oidc: {
|
||||
auth_endpoint: 'Please key AuthEndpoint',
|
||||
token_endpoint: 'Please key TokenEndpoint',
|
||||
userinfo_endpoint: 'Please key UserinfoEndpoint',
|
||||
logout_endpoint: 'Please key logoutEndpoint',
|
||||
clientId: 'Please key ClientId',
|
||||
secret: 'Please key Secret',
|
||||
scope: 'Please key scope',
|
||||
redirectUrl: 'Please key redirectUrl',
|
||||
open: 'Enable OIDC Authentication'
|
||||
},
|
||||
role: {
|
||||
menu_authorization: 'Menu Authorization',
|
||||
data_authorization: 'Data Authorization',
|
||||
@ -1063,6 +1109,8 @@ export default {
|
||||
password: 'Password',
|
||||
host: 'Host name / IP address',
|
||||
port: 'Port',
|
||||
datasource_url: 'URL address',
|
||||
please_input_datasource_url: 'Please enter Elasticsearch 地址,e.g: http://es_host:es_port',
|
||||
please_input_data_base: 'Please enter the database name',
|
||||
please_input_user_name: 'Please enter user name',
|
||||
please_input_password: 'Please enter Password',
|
||||
|
@ -45,7 +45,7 @@ export default {
|
||||
dashboard: '首頁',
|
||||
documentation: '文檔',
|
||||
guide: '引導頁',
|
||||
permission: '全縣測試頁',
|
||||
permission: '權限測試頁',
|
||||
rolePermission: '角色權限',
|
||||
pagePermission: '頁面權限',
|
||||
directivePermission: '指令權限',
|
||||
@ -91,7 +91,7 @@ export default {
|
||||
errorPages: '錯誤頁面',
|
||||
page401: '401',
|
||||
page404: '404',
|
||||
errorLog: '錯誤日誌',
|
||||
errorLog: '錯誤日志',
|
||||
excel: 'Excel',
|
||||
exportExcel: '導出 Excel',
|
||||
selectExcel: '導出 已選擇項',
|
||||
@ -109,36 +109,36 @@ export default {
|
||||
navbar: {
|
||||
dashboard: '首頁',
|
||||
github: '項目地址',
|
||||
logOut: '退出登陸',
|
||||
logOut: '退出登錄',
|
||||
profile: '個人中心',
|
||||
theme: '換膚',
|
||||
size: '佈局大小'
|
||||
size: '布局大小'
|
||||
},
|
||||
login: {
|
||||
title: '系統登陸',
|
||||
title: '系統登錄',
|
||||
welcome: '歡迎使用',
|
||||
logIn: '登陸',
|
||||
username: '帳號',
|
||||
logIn: '登錄',
|
||||
username: '賬號',
|
||||
password: '密碼',
|
||||
any: '任意字符',
|
||||
thirdparty: '第三方登陸',
|
||||
any: '隨便填',
|
||||
thirdparty: '第三方登錄',
|
||||
thirdpartyTips: '本地不能模擬,請結合自己業務進行模擬!!!',
|
||||
expires: '登陸信息過期,請重新登陸',
|
||||
tokenError: '信息錯誤,請重新登陸',
|
||||
expires: '登錄信息過期,請重新登錄',
|
||||
tokenError: '登陸信息錯誤,請重新登錄',
|
||||
username_error: '請輸入正確的 ID',
|
||||
password_error: '密碼不小於 8 位',
|
||||
re_login: '重新登陸'
|
||||
password_error: '密碼不小于 8 位',
|
||||
re_login: '重新登錄'
|
||||
},
|
||||
commons: {
|
||||
search: '搜索',
|
||||
folder: '目录',
|
||||
folder: '目錄',
|
||||
no_target_permission: '沒有權限',
|
||||
success: '成功',
|
||||
switch_lang: '切換語言成功',
|
||||
close: '關閉',
|
||||
icon: '圖標',
|
||||
all: '全部',
|
||||
enable: '啟用',
|
||||
enable: '啓用',
|
||||
disable: '禁用',
|
||||
yes: '是',
|
||||
no: '否',
|
||||
@ -155,30 +155,30 @@ export default {
|
||||
not_cover: '不覆蓋',
|
||||
import_mode: '導入模式',
|
||||
import_module: '導入模塊',
|
||||
please_fill_in_the_template: '請填寫模板內容',
|
||||
cut_back_old_version: '切匯舊版',
|
||||
cut_back_new_version: '切匯新版',
|
||||
please_fill_in_the_template: '請填寫模版內容',
|
||||
cut_back_old_version: '切回舊版',
|
||||
cut_back_new_version: '切回新版',
|
||||
comment: '評論',
|
||||
examples: '示例',
|
||||
help_documentation: '幫助文檔',
|
||||
api_help_documentation: 'API文檔',
|
||||
delete_cancelled: '已取消刪除',
|
||||
workspace: '工作空開你',
|
||||
workspace: '工作空間',
|
||||
organization: '組織',
|
||||
menu: '菜單',
|
||||
setting: '設置',
|
||||
project: '項目',
|
||||
about_us: '關於',
|
||||
about_us: '關于',
|
||||
current_project: '當前項目',
|
||||
name: '名稱',
|
||||
description: '描述',
|
||||
annotation: '註釋',
|
||||
annotation: '注釋',
|
||||
clear: '清空',
|
||||
save: '保存',
|
||||
update: '更新',
|
||||
save_success: '保存成功',
|
||||
delete_success: '刪除成功',
|
||||
copy_success: '複製成功',
|
||||
copy_success: '複制成功',
|
||||
modify_success: '修改成功',
|
||||
delete_cancel: '已取消刪除',
|
||||
confirm: '確定',
|
||||
@ -186,8 +186,8 @@ export default {
|
||||
prompt: '提示',
|
||||
operating: '操作',
|
||||
input_limit: '長度在 {0} 到 {1} 個字符',
|
||||
login: '登陸',
|
||||
welcome: '一站式開源數據分析平臺',
|
||||
login: '登錄',
|
||||
welcome: '一站式開源數據分析平台',
|
||||
username: '姓名',
|
||||
password: '密碼',
|
||||
input_username: '請輸入用戶姓名',
|
||||
@ -215,11 +215,11 @@ export default {
|
||||
input_content: '請輸入內容',
|
||||
create: '新建',
|
||||
edit: '編輯',
|
||||
copy: '複製',
|
||||
copy: '複制',
|
||||
refresh: '刷新',
|
||||
remark: '備註',
|
||||
remark: '備注',
|
||||
delete: '刪除',
|
||||
reduction: '恢復',
|
||||
reduction: '恢複',
|
||||
not_filled: '未填寫',
|
||||
please_select: '請選擇',
|
||||
search_by_name: '根據名稱搜索',
|
||||
@ -227,7 +227,7 @@ export default {
|
||||
exit_system: '退出系統',
|
||||
verification: '驗證',
|
||||
title: '標題',
|
||||
custom: '自動義',
|
||||
custom: '自定義',
|
||||
select_date: '選擇日期',
|
||||
months_1: '一月',
|
||||
months_2: '二月',
|
||||
@ -252,13 +252,13 @@ export default {
|
||||
connection_successful: '連接成功',
|
||||
connection_failed: '連接失敗',
|
||||
save_failed: '保存失敗',
|
||||
host_cannot_be_empty: '主機不能為空',
|
||||
port_cannot_be_empty: '端口號不能為空',
|
||||
account_cannot_be_empty: '帳戶不能為空',
|
||||
host_cannot_be_empty: '主機不能爲空',
|
||||
port_cannot_be_empty: '端口號不能爲空',
|
||||
account_cannot_be_empty: '帳戶不能爲空',
|
||||
remove: '移除',
|
||||
remove_cancel: '移除取消',
|
||||
remove_success: '移除成功',
|
||||
tips: '認證信息已過期,請重新登陸',
|
||||
tips: '認證信息已過期,請重新登錄',
|
||||
not_performed_yet: '尚未執行',
|
||||
incorrect_input: '輸入內容不正確',
|
||||
delete_confirm: '請輸入以下內容,確認刪除:',
|
||||
@ -266,13 +266,13 @@ export default {
|
||||
input_login_username: '請輸入用戶 ID 或 郵箱',
|
||||
input_name: '請輸入名稱',
|
||||
please_upload: '請上傳文件',
|
||||
please_fill_path: '請填寫url 路徑',
|
||||
please_fill_path: '請填寫ur路徑',
|
||||
formatErr: '格式錯誤',
|
||||
please_save: '請先保存',
|
||||
reference_documentation: '參考文檔',
|
||||
id: 'ID',
|
||||
millisecond: '毫秒',
|
||||
cannot_be_null: '不能為空',
|
||||
cannot_be_null: '不能爲空',
|
||||
required: '{0}是必填的',
|
||||
already_exists: '名稱不能重複',
|
||||
modifier: '修改人',
|
||||
@ -290,7 +290,7 @@ export default {
|
||||
start_date_time: '開始日期時間',
|
||||
end_date_time: '結束日期時間',
|
||||
range_separator: '至',
|
||||
data_time_error: '開始日期不能大與結束日期'
|
||||
data_time_error: '開始日期不能大于結束日期'
|
||||
},
|
||||
adv_search: {
|
||||
title: '高級搜索',
|
||||
@ -306,14 +306,14 @@ export default {
|
||||
is_not_empty: '非空',
|
||||
like: '包含',
|
||||
not_like: '不包含',
|
||||
in: '屬與',
|
||||
not_in: '不屬與',
|
||||
gt: '大與',
|
||||
ge: '大與等與',
|
||||
lt: '小與',
|
||||
le: '小與等與',
|
||||
equals: '等與',
|
||||
not_equals: '不等與',
|
||||
in: '屬于',
|
||||
not_in: '不屬于',
|
||||
gt: '大于',
|
||||
ge: '大于等于',
|
||||
lt: '小于',
|
||||
le: '小于等于',
|
||||
equals: '等于',
|
||||
not_equals: '不等于',
|
||||
between: '之間',
|
||||
current_user: '是當前用戶'
|
||||
},
|
||||
@ -357,23 +357,23 @@ export default {
|
||||
cancel: '取消'
|
||||
},
|
||||
guide: {
|
||||
description: '引導頁對與一些第一次進入項目的人很有用,你可以簡單介紹下項目的功能。本 Demo 是基與',
|
||||
description: '引導頁對于一些第一次進入項目的人很有用,你可以簡單介紹下項目的功能。本 Demo 是基于',
|
||||
button: '打開引導'
|
||||
},
|
||||
components: {
|
||||
documentation: '文檔',
|
||||
tinymceTips: '富文本是管理後臺一個核心的功能,但同時又是一個有很多坑的地方。在選擇富文本的過程中我也走了不少的彎路,市面上常見的富文本都基本用過了,最終權衡了一下選擇了Tinymce。更詳細的富文本比較和介紹見',
|
||||
dropzoneTips: '由與我司業務有特殊需求,而且要傳七牛 所以沒用第三方,選擇了自己封裝。代碼非常的簡單,具體代碼你可以在這裏看到 @/components/Dropzone',
|
||||
tinymceTips: '富文本是管理後台一個核心的功能,但同時又是一個有很多坑的地方。在選擇富文本的過程中我也走了不少的彎路,市面上常見的富文本都基本用過了,最終權衡了一下選擇了Tinymce。更詳細的富文本比較和介紹見',
|
||||
dropzoneTips: '由于我司業務有特殊需求,而且要傳七牛 所以沒用第三方,選擇了自己封裝。代碼非常的簡單,具體代碼你可以在這裏看到 @/components/Dropzone',
|
||||
stickyTips: '當頁面滾動到預設的位置會吸附在頂部',
|
||||
backToTopTips1: '頁面滾動到指定位置會在右下角出現返回頂部按鈕',
|
||||
backToTopTips2: '可自定義按鈕的樣式、show/hide、出現的高度、返回的位置 如需文字提示,可在外部使用Element的el-tooltip元素',
|
||||
imageUploadTips: '由與我在使用時它只有vue@1版本,而且和mockjs不兼容,所以自己改造了一下,如果大家要使用的話,優先還是使用官方版本。'
|
||||
imageUploadTips: '由于我在使用時它只有vue@1版本,而且和mockjs不兼容,所以自己改造了一下,如果大家要使用的話,優先還是使用官方版本。'
|
||||
},
|
||||
table: {
|
||||
dynamicTips1: '固定標頭,按照表頭順序排序',
|
||||
dynamicTips2: '不固定標頭, 按照點擊順序排序',
|
||||
dragTips1: '默認排序',
|
||||
dragTips2: '拖拽後排序',
|
||||
dynamicTips1: '固定表頭, 按照表頭順序排序',
|
||||
dynamicTips2: '不固定表頭, 按照點擊順序排序',
|
||||
dragTips1: '默認順序',
|
||||
dragTips2: '拖拽後順序',
|
||||
title: '標題',
|
||||
importance: '重要性',
|
||||
type: '類型',
|
||||
@ -392,15 +392,15 @@ export default {
|
||||
publish: '發布',
|
||||
draft: '草稿',
|
||||
delete: '刪除',
|
||||
cancel: '取消',
|
||||
confirm: '確定'
|
||||
cancel: '取 消',
|
||||
confirm: '確 定'
|
||||
},
|
||||
example: {
|
||||
warning: '創建和編輯頁面是不能被 keep-alive 緩存的,因為keep-alive 的 include 目前不支持根據路由來緩存,所以目前都是基與 component name 來進行緩存的。如果你想類似的實現緩存效果,可以使用 localStorage 等瀏覽器緩存方案。或者不要使用 keep-alive 的 include,直接緩存所有頁面。詳情見'
|
||||
warning: '創建和編輯頁面是不能被 keep-alive 緩存的,因爲keep-alive 的 include 目前不支持根據路由來緩存,所以目前都是基于 component name 來進行緩存的。如果你想類似的實現緩存效果,可以使用 localStorage 等浏覽器緩存方案。或者不要使用 keep-alive 的 include,直接緩存所有頁面。詳情見'
|
||||
},
|
||||
errorLog: {
|
||||
tips: '請點擊右上角bug小圖標',
|
||||
description: '現在的管理後臺基本都是spa的形式了,它增強了用戶體驗,但同時也會增加頁面出問題的可能性,可能一個小小的疏忽就導致整個頁面的死鎖。好在 Vue 官網提供了一個方法來捕獲處理異常,你可以在其中進行錯誤處理或者異常上報。',
|
||||
description: '現在的管理後台基本都是spa的形式了,它增強了用戶體驗,但同時也會增加頁面出問題的可能性,可能一個小小的疏忽就導致整個頁面的死鎖。好在 Vue 官網提供了一個方法來捕獲處理異常,你可以在其中進行錯誤處理或者異常上報。',
|
||||
documentation: '文檔介紹'
|
||||
},
|
||||
excel: {
|
||||
@ -418,29 +418,34 @@ export default {
|
||||
theme: {
|
||||
change: '換膚',
|
||||
documentation: '換膚文檔',
|
||||
tips: 'Tips: 它區別於 navbar 上的 theme-pick, 是兩種不同的換膚方法,各自有不同的應用場景,具體請參考文檔。'
|
||||
tips: 'Tips: 它區別于 navbar 上的 theme-pick, 是兩種不同的換膚方法,各自有不同的應用場景,具體請參考文檔。'
|
||||
},
|
||||
tagsView: {
|
||||
refresh: '刷新',
|
||||
close: '關閉',
|
||||
closeOthers: '關閉其他',
|
||||
closeOthers: '關閉其它',
|
||||
closeAll: '關閉所有'
|
||||
},
|
||||
settings: {
|
||||
title: '系統佈局配置',
|
||||
title: '系統布局配置',
|
||||
theme: '主題色',
|
||||
tagsView: '開啟 Tags-View',
|
||||
tagsView: '開啓 Tags-View',
|
||||
fixedHeader: '固定 Header',
|
||||
sidebarLogo: '側邊欄 Logo'
|
||||
},
|
||||
sysParams: {
|
||||
display: '顯示設置',
|
||||
ldap: 'LDAP設置',
|
||||
oidc: 'OIDC設置'
|
||||
},
|
||||
license: {
|
||||
i18n_no_license_record: '沒有 License 紀錄',
|
||||
i18n_license_is_empty: 'License 為空',
|
||||
i18n_no_license_record: '沒有 License 記錄',
|
||||
i18n_license_is_empty: 'License 爲空',
|
||||
title: '授權管理',
|
||||
corporation: '客戶名稱',
|
||||
time: '授權時間',
|
||||
product: '產品名稱',
|
||||
edition: '產品版本',
|
||||
product: '産品名稱',
|
||||
edition: '産品版本',
|
||||
licenseVersion: '授權版本',
|
||||
count: '授權數量',
|
||||
valid_license: '授權驗證',
|
||||
@ -471,7 +476,7 @@ export default {
|
||||
repeat_password: '確認密碼',
|
||||
inconsistent_passwords: '兩次輸入的密碼不一致',
|
||||
remove_member: '確定要移除該成員嗎',
|
||||
org_remove_member: '確定要移除該成員嗎?',
|
||||
org_remove_member: '將該用戶從組織中移除,將同時移除該組織下所有工作空間的權限,確定要移除該成員嗎?',
|
||||
input_id_or_email: '請輸入用戶 ID, 或者 用戶郵箱',
|
||||
no_such_user: '無此用戶信息, 請輸入正確的用戶 ID 或者 用戶郵箱!'
|
||||
},
|
||||
@ -484,6 +489,7 @@ export default {
|
||||
input_password: '請輸入密碼',
|
||||
input_phone: '請輸入電話號碼',
|
||||
input_roles: '請選擇角色',
|
||||
select_users: '請選擇用戶',
|
||||
special_characters_are_not_supported: '不支持特殊字符',
|
||||
mobile_number_format_is_incorrect: '手機號碼格式不正確',
|
||||
email_format_is_incorrect: '郵箱格式不正確',
|
||||
@ -498,7 +504,49 @@ export default {
|
||||
new_passwd: '新密碼',
|
||||
confirm_passwd: '確認密碼',
|
||||
change_password: '修改密碼',
|
||||
search_by_name: '按姓名搜索'
|
||||
search_by_name: '按姓名搜索',
|
||||
import_ldap: '導入LDAP用戶'
|
||||
},
|
||||
ldap: {
|
||||
url: 'LDAP地址',
|
||||
dn: '綁定DN',
|
||||
password: '密碼',
|
||||
ou: '用戶OU',
|
||||
filter: '用戶過濾器',
|
||||
mapping: 'LDAP屬性映射',
|
||||
open: '啓用LDAP認證',
|
||||
input_url: '請輸入LDAP地址',
|
||||
input_dn: '請輸入DN',
|
||||
input_password: '請輸入密碼',
|
||||
input_ou: '請輸入用戶OU',
|
||||
input_filter: '請輸入用戶過濾器',
|
||||
input_mapping: '請輸入LDAP屬性映射',
|
||||
input_username: '請輸入用戶名',
|
||||
input_url_placeholder: '請輸入LDAP地址 (如 ldap://localhost:389)',
|
||||
input_ou_placeholder: '輸入用戶OU (使用|分隔各OU)',
|
||||
input_filter_placeholder: '輸入過濾器 [可能的選項是cn或uid或sAMAccountName={0}, 如:(uid={0})]',
|
||||
input_mapping_placeholder: '如:{"username":"uid","name":"sn","email":"mail"}, username映射的選項可能是cn或uid或sAMAccountName',
|
||||
test_connect: '測試連接',
|
||||
test_login: '測試登錄',
|
||||
edit: '編輯',
|
||||
login_success: '登錄成功',
|
||||
url_cannot_be_empty: 'LDAP 地址不能爲空',
|
||||
dn_cannot_be_empty: 'LDAP DN不能爲空',
|
||||
ou_cannot_be_empty: 'LDAP OU不能爲空',
|
||||
filter_cannot_be_empty: 'LDAP 用戶過濾器不能爲空',
|
||||
mapping_cannot_be_empty: 'LDAP 用戶屬性映射不能爲空',
|
||||
password_cannot_be_empty: 'LDAP 密碼不能爲空'
|
||||
},
|
||||
oidc: {
|
||||
auth_endpoint: '請輸入AuthEndpoint',
|
||||
token_endpoint: '請輸入TokenEndpoint',
|
||||
userinfo_endpoint: '請輸入UserinfoEndpoint',
|
||||
logout_endpoint: '請輸入logoutEndpoint',
|
||||
clientId: '請輸入ClientId',
|
||||
secret: '請輸入Secret',
|
||||
scope: '請輸入scope',
|
||||
redirectUrl: '請輸入redirectUrl',
|
||||
open: '啓用OIDC認證'
|
||||
},
|
||||
role: {
|
||||
menu_authorization: '菜單授權',
|
||||
@ -530,7 +578,7 @@ export default {
|
||||
create: '創建菜單',
|
||||
modify: '修改菜單',
|
||||
delete: '刪除菜單',
|
||||
delete_confirm: '確定刪除菜單嗎?',
|
||||
delete_confirm: '確定刪除菜單嗎',
|
||||
menu_type: '菜單類型'
|
||||
},
|
||||
organization: {
|
||||
@ -553,19 +601,19 @@ export default {
|
||||
},
|
||||
system_parameter_setting: {
|
||||
mailbox_service_settings: '郵件設置',
|
||||
test_connection: '測試鏈接',
|
||||
test_connection: '測試連接',
|
||||
SMTP_host: 'SMTP主機',
|
||||
SMTP_port: 'SMTP端口',
|
||||
SMTP_account: 'SMTP帳號',
|
||||
SMTP_account: 'SMTP賬戶',
|
||||
SMTP_password: 'SMTP密碼',
|
||||
SSL: '開啟SSL(如果SMTP端口是465,通常需要啟用SSL)',
|
||||
TLS: '開啟TLS(如果SMTP端口是587,通常需要啟用TLS)',
|
||||
SSL: '開啓SSL(如果SMTP端口是465,通常需要啓用SSL)',
|
||||
TLS: '開啓TLS(如果SMTP端口是587,通常需要啓用TLS)',
|
||||
SMTP: '是否免密 SMTP',
|
||||
host: '主機不能為空',
|
||||
port: '端口號不能為空',
|
||||
account: '帳戶不能為空',
|
||||
host: '主機號不能爲空',
|
||||
port: '端口號不能爲空',
|
||||
account: '賬戶不能爲空',
|
||||
test_recipients: '測試收件人',
|
||||
tip: ' 提示: 僅用來作為測試郵件收件人'
|
||||
tip: '提示:僅用來作爲測試郵件收件人'
|
||||
},
|
||||
chart: {
|
||||
save_snapshot: '保存縮略圖',
|
||||
@ -591,14 +639,14 @@ export default {
|
||||
sql_data: 'SQL數據集',
|
||||
excel_data: 'Excel數據集',
|
||||
custom_data: '自定義數據集',
|
||||
pls_slc_tbl_left: '請從左側選擇視圖',
|
||||
add_db_table: '添加數據庫表',
|
||||
pls_slc_tbl_left: '請從左側選視圖',
|
||||
add_db_table: '添加數據庫數據集',
|
||||
pls_slc_data_source: '請選擇數據源',
|
||||
table: '表',
|
||||
edit: '編輯',
|
||||
create_view: '創建視圖',
|
||||
create_view: '創建試圖',
|
||||
data_preview: '數據預覽',
|
||||
dimension: '緯度',
|
||||
dimension: '維度',
|
||||
quota: '指標',
|
||||
title: '標題',
|
||||
show: '顯示',
|
||||
@ -610,22 +658,22 @@ export default {
|
||||
y_axis: '縱軸',
|
||||
chart: '視圖',
|
||||
close: '關閉',
|
||||
summary: '匯總方式',
|
||||
summary: '彙總方式',
|
||||
fast_calc: '快速計算',
|
||||
sum: '求和',
|
||||
count: '記數',
|
||||
count: '計數',
|
||||
avg: '平均',
|
||||
max: '最大值',
|
||||
min: '最小值',
|
||||
stddev_pop: '標準差',
|
||||
stddev_pop: '標准差',
|
||||
var_pop: '方差',
|
||||
quick_calc: '快速計算',
|
||||
show_name_set: '顯示名設置',
|
||||
color: '顏色',
|
||||
color: '顔色',
|
||||
color_case: '配色方案',
|
||||
pls_slc_color_case: '請選餓配色方案',
|
||||
pls_slc_color_case: '請選擇配色方案',
|
||||
color_default: '默認',
|
||||
color_retro: '復古',
|
||||
color_retro: '複古',
|
||||
color_future: '未來',
|
||||
color_gradual: '漸變',
|
||||
color_business: '商務',
|
||||
@ -642,7 +690,7 @@ export default {
|
||||
line_type: '線型',
|
||||
line_symbol: '折點',
|
||||
line_symbol_size: '折點大小',
|
||||
line_type_solid: '實現',
|
||||
line_type_solid: '實線',
|
||||
line_type_dashed: '虛線',
|
||||
line_symbol_circle: '圓形',
|
||||
line_symbol_emptyCircle: '空心圓',
|
||||
@ -654,13 +702,13 @@ export default {
|
||||
line_symbol_arrow: '箭頭',
|
||||
line_symbol_none: '無',
|
||||
line_area: '面積',
|
||||
pie_inner_radius: '內經',
|
||||
pie_outer_radius: '外經',
|
||||
pie_inner_radius: '內徑',
|
||||
pie_outer_radius: '外徑',
|
||||
funnel_width: '寬度',
|
||||
line_smooth: '平滑折線',
|
||||
title_style: '標題格式',
|
||||
title_style: '標題樣式',
|
||||
text_fontsize: '字體大小',
|
||||
text_color: '字體顏色',
|
||||
text_color: '字體顔色',
|
||||
text_h_position: '水平位置',
|
||||
text_v_position: '垂直位置',
|
||||
text_pos_left: '左',
|
||||
@ -676,23 +724,23 @@ export default {
|
||||
legend: '圖例',
|
||||
shape: '形狀',
|
||||
polygon: '多邊形',
|
||||
circle: '圖形',
|
||||
label: '標籤',
|
||||
label_position: '標籤位置',
|
||||
circle: '圓形',
|
||||
label: '標簽',
|
||||
label_position: '標簽位置',
|
||||
content_formatter: '內容格式',
|
||||
inside: '內',
|
||||
tooltip: '提示',
|
||||
tooltip_item: '數據項',
|
||||
tooltip_axis: '座標軸',
|
||||
formatter_plc: '內痛格式為空時,顯示默認格式',
|
||||
xAxis: '橫洲',
|
||||
tooltip_axis: '坐標軸',
|
||||
formatter_plc: '內容格式爲空時,顯示默認格式',
|
||||
xAxis: '橫軸',
|
||||
yAxis: '縱軸',
|
||||
position: '位置',
|
||||
rotate: '角度',
|
||||
name: '名稱',
|
||||
icon: '國際',
|
||||
icon: '圖標',
|
||||
trigger_position: '觸發位置',
|
||||
asc: '昇序',
|
||||
asc: '升序',
|
||||
desc: '降序',
|
||||
sort: '排序',
|
||||
filter: '過濾',
|
||||
@ -703,39 +751,39 @@ export default {
|
||||
border_radius: '邊框半徑',
|
||||
alpha: '透明度',
|
||||
add_filter: '添加過濾',
|
||||
no_limit: '無顯示',
|
||||
filter_eq: '等於',
|
||||
filter_not_eq: '不等於',
|
||||
filter_lt: '小於',
|
||||
filter_le: '小於等於',
|
||||
filter_gt: '大於',
|
||||
filter_ge: '大於等於',
|
||||
filter_null: '為空',
|
||||
filter_not_null: '不為空',
|
||||
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: '不包含',
|
||||
rose_type: '玫瑰圖模式',
|
||||
radius_mode: '半徑',
|
||||
area_mode: '面積',
|
||||
rose_radius: '園角',
|
||||
rose_radius: '圓角',
|
||||
view_name: '視圖標題',
|
||||
belong_group: '所屬分組',
|
||||
select_group: '選擇分組',
|
||||
name_can_not_empty: '名稱不能為空',
|
||||
template_can_not_empty: '請選擇儀表板',
|
||||
name_can_not_empty: '名稱不能爲空',
|
||||
template_can_not_empty: '請選擇儀表版',
|
||||
custom_count: '記錄數',
|
||||
table_title_fontsize: '表頭字體大小',
|
||||
table_item_fontsize: '表格字體大小',
|
||||
table_header_bg: '表頭背景',
|
||||
table_item_bg: '表格背景',
|
||||
table_item_font_color: '字體顏色',
|
||||
table_item_font_color: '字體顔色',
|
||||
stripe: '斑馬紋',
|
||||
start_angle: '起始角度',
|
||||
end_angle: '結束角度',
|
||||
style_priority: '樣式優先級',
|
||||
dashboard: '儀表板',
|
||||
dimension_color: '名稱顏色',
|
||||
quota_color: '值顏色',
|
||||
dimension_color: '名稱顔色',
|
||||
quota_color: '值顔色',
|
||||
dimension_font_size: '名稱字體大小',
|
||||
quota_font_size: '值字體大小',
|
||||
space_split: '名稱/值間隔',
|
||||
@ -743,11 +791,11 @@ export default {
|
||||
only_one_result: '僅顯示第1個計算結果',
|
||||
dimension_show: '名稱顯示',
|
||||
quota_show: '值顯示',
|
||||
title_limit: '標題不能大於50個字符',
|
||||
title_limit: '標題不能大于50個字符',
|
||||
filter_condition: '過濾條件',
|
||||
filter_field_can_null: '過濾字段必填',
|
||||
preview_100_data: '預覽前100條記錄',
|
||||
chart_table_normal: '匯總表',
|
||||
chart_table_normal: '彙總表',
|
||||
chart_table_info: '明細表',
|
||||
chart_card: '指標卡',
|
||||
chart_bar: '基礎柱狀圖',
|
||||
@ -775,24 +823,24 @@ export default {
|
||||
chartName: '新建視圖',
|
||||
chart_show_error: '無法正常顯示',
|
||||
chart_error_tips: '如有疑問請聯系管理員',
|
||||
title_cannot_empty: '標題不能為空',
|
||||
title_cannot_empty: '標題不能爲空',
|
||||
table_title_height: '表頭行高',
|
||||
table_item_height: '表格行高',
|
||||
axis_show: '軸線顯示',
|
||||
axis_color: '軸線顏色',
|
||||
axis_color: '軸線顔色',
|
||||
axis_width: '軸線寬度',
|
||||
axis_type: '軸線類型',
|
||||
axis_type_solid: '實線',
|
||||
axis_type_dashed: '虛線',
|
||||
axis_type_dotted: '點',
|
||||
axis_label_show: '標簽顯示',
|
||||
axis_label_color: '標簽顏色',
|
||||
axis_label_color: '標簽顔色',
|
||||
axis_label_fontsize: '標簽大小',
|
||||
text_style: '字體樣式',
|
||||
bolder: '加粗',
|
||||
change_ds: '更換數據集',
|
||||
change_ds_tip: '提示:更換數據集將導致字段發生變化,需重新製作視圖',
|
||||
axis_name_color: '名稱顏色',
|
||||
change_ds_tip: '提示:更換數據集將導致字段發生變化,需重新制作視圖',
|
||||
axis_name_color: '名稱顔色',
|
||||
axis_name_fontsize: '名稱字體',
|
||||
pie_label_line_show: '引導線',
|
||||
outside: '外',
|
||||
@ -802,10 +850,10 @@ export default {
|
||||
axis_label: '軸標簽',
|
||||
label_fontsize: '標簽大小',
|
||||
split_line: '分割線',
|
||||
split_color: '分割顏色',
|
||||
split_color: '分割顔色',
|
||||
shadow: '陰影',
|
||||
condition: '過濾值',
|
||||
filter_value_can_null: '過濾值不能為空',
|
||||
filter_value_can_null: '過濾值不能爲空',
|
||||
filter_like: '包含',
|
||||
filter_not_like: '不包含',
|
||||
color_light: '明亮',
|
||||
@ -840,7 +888,7 @@ export default {
|
||||
chart_scatter: '散點圖',
|
||||
bubble_size: '氣泡大小',
|
||||
chart_treemap: '矩形樹圖',
|
||||
drill: '鉆取',
|
||||
drill: '鑽取',
|
||||
drag_block_treemap_label: '色塊標簽',
|
||||
drag_block_treemap_size: '色塊大小',
|
||||
bubble_symbol: '圖形',
|
||||
@ -879,7 +927,7 @@ export default {
|
||||
liquid_shape_rect: '矩形'
|
||||
},
|
||||
dataset: {
|
||||
sheet_warn: '有多個sheet頁面,默認抽取第一個',
|
||||
sheet_warn: '有多個 Sheet 頁,默認抽取第一個',
|
||||
datalist: '數據集',
|
||||
name: '數據集名稱',
|
||||
add_group: '添加分組',
|
||||
@ -920,7 +968,7 @@ export default {
|
||||
time: '時間',
|
||||
value: '數值',
|
||||
mode: '模式',
|
||||
direct_connect: '直鏈',
|
||||
direct_connect: '直連',
|
||||
sync_data: '定時同步',
|
||||
update_setting: '更新設置',
|
||||
sync_now: '立即更新',
|
||||
@ -939,10 +987,10 @@ export default {
|
||||
add_scope: '增量更新',
|
||||
select_data_time: '選擇日期時間',
|
||||
execute_rate: '執行頻率',
|
||||
simple_cron: '簡單重複',
|
||||
execute_once: '立即執行',
|
||||
cron_config: '表達時設定',
|
||||
no_limit: '無限製',
|
||||
simple_cron: '簡單重複',
|
||||
cron_config: '表達式設定',
|
||||
no_limit: '無限制',
|
||||
set_end_time: '設定結束時間',
|
||||
operate: '操作',
|
||||
save_success: '保存成功',
|
||||
@ -952,7 +1000,7 @@ export default {
|
||||
add_sql_table: '添加 SQL 數據集',
|
||||
preview: '預覽',
|
||||
pls_input_name: '請輸入名稱',
|
||||
connect_mode: '鏈接模式',
|
||||
connect_mode: '連接模式',
|
||||
incremental_update_type: '增量更新方式',
|
||||
incremental_add: '增量添加',
|
||||
incremental_delete: '增量刪除',
|
||||
@ -961,7 +1009,7 @@ export default {
|
||||
param: '參數',
|
||||
edit_sql: '編輯 SQL 數據集',
|
||||
showRow: '顯示行',
|
||||
add_excel_table: ' 添加 Excel 數據集',
|
||||
add_excel_table: '添加Excel數據集',
|
||||
add_custom_table: '添加自定義數據集',
|
||||
upload_file: '上傳文件',
|
||||
detail: '詳情',
|
||||
@ -983,14 +1031,14 @@ export default {
|
||||
source_field: '關聯字段',
|
||||
target_table: '被關聯表',
|
||||
target_field: '被關聯字段',
|
||||
union_relation: '關聯關係',
|
||||
pls_setting_union_success: '請正確設置關聯關係',
|
||||
invalid_dataset: ' Kettle 未運行,無效數據集',
|
||||
check_all: '銓選',
|
||||
union_relation: '關聯關系',
|
||||
pls_setting_union_success: '請正確設置關聯關系',
|
||||
invalid_dataset: 'Kettle未運行,無效數據集',
|
||||
check_all: '全選',
|
||||
can_not_union_self: '被關聯表不能與關聯表相同',
|
||||
float: '小數',
|
||||
edit_custom_table: '編輯自助數據集',
|
||||
edit_field: '編輯自斷',
|
||||
edit_custom_table: '編輯自定義數據集',
|
||||
edit_field: '編輯字段',
|
||||
preview_100_data: '顯示前100行數據',
|
||||
invalid_table_check: '非直連數據集請先完成數據同步',
|
||||
parse_error: 'Excel解析失敗,請檢查格式、字段等信息。具體參考:https://dataease.io/docs/faq/dataset_faq/',
|
||||
@ -1008,7 +1056,7 @@ export default {
|
||||
sync_latter: '稍後同步',
|
||||
task: {
|
||||
list: '任務列表',
|
||||
record: '執行紀錄',
|
||||
record: '執行記錄',
|
||||
create: '新建任務',
|
||||
name: '任務名稱',
|
||||
last_exec_time: '上次執行時間',
|
||||
@ -1044,10 +1092,10 @@ export default {
|
||||
calc_field: '計算字段',
|
||||
show_sql: '顯示SQL',
|
||||
ple_select_excel: '請選擇要導入的 Excel',
|
||||
merge: '合併',
|
||||
no_merge: '不合併',
|
||||
merge_msg: '數據表中存在自斷一直的情況,是否合併到一個數據集中?',
|
||||
merge_title: '合併數據',
|
||||
merge: '合並',
|
||||
no_merge: '不合並',
|
||||
merge_msg: '數據表中存在字段一致的情況,是否合並到一個數據集中?',
|
||||
merge_title: '合並數據',
|
||||
field_name_less_50: '字段名不能超過50個字符'
|
||||
},
|
||||
datasource: {
|
||||
@ -1062,17 +1110,20 @@ export default {
|
||||
password: '密碼',
|
||||
host: '主機名/IP地址',
|
||||
port: '端口',
|
||||
datasource_url: '地址',
|
||||
please_input_datasource_url: '請輸入 Elasticsearch 地址,如: http://es_host:es_port',
|
||||
please_input_data_base: '請輸入數據庫名稱',
|
||||
please_select_oracle_type: '選擇連接類型',
|
||||
please_input_user_name: '請輸入用戶名',
|
||||
please_input_password: '請輸入密碼',
|
||||
please_input_host: '請輸入主機',
|
||||
please_input_url: '請輸入URL地址',
|
||||
please_input_port: '請輸入',
|
||||
please_input_port: '請輸入端口',
|
||||
modify: '編輯數據源',
|
||||
validate_success: '校驗成功',
|
||||
validate: '校驗',
|
||||
search_by_name: '根據名稱搜索',
|
||||
delete_warning: '確認刪除?',
|
||||
delete_warning: '確定要刪除嗎?',
|
||||
input_name: '請輸入名稱',
|
||||
input_limit_2_25: '2-25字符',
|
||||
input_limit_0_50: '0-50字符',
|
||||
@ -1082,20 +1133,21 @@ export default {
|
||||
get_schema: '獲取 Schema',
|
||||
schema: '數據庫 Schema',
|
||||
please_choose_schema: '請選擇數據庫 Schema',
|
||||
edit_datasource_msg: '修改數據源信息,可能會導致改數據源下的數據集不可用,確認修改?',
|
||||
in_valid: '無效數據源',
|
||||
initial_pool_size: '初始連結數',
|
||||
min_pool_size: '最小連結數',
|
||||
max_pool_size: '最大連結數',
|
||||
max_idle_time: '最大空閒(秒)',
|
||||
initial_pool_size: '初始連接數',
|
||||
min_pool_size: '最小連接數',
|
||||
max_pool_size: '最大連接數',
|
||||
max_idle_time: '最大空閑(秒)',
|
||||
acquire_increment: '增長數',
|
||||
connect_timeout: '連接超時(秒)',
|
||||
please_input_initial_pool_size: '請輸入初始連結數',
|
||||
please_input_min_pool_size: '請輸入最小連結數',
|
||||
please_input_max_pool_size: '請輸入最大連結數',
|
||||
please_input_max_idle_time: '請輸入最大空閒(秒)',
|
||||
please_input_initial_pool_size: '請輸入初始連接數',
|
||||
please_input_min_pool_size: '請輸入最小連接數',
|
||||
please_input_max_pool_size: '請輸入最大連接數',
|
||||
please_input_max_idle_time: '請輸入最大空閑(秒)',
|
||||
please_input_acquire_increment: '請輸入增長數',
|
||||
please_input_connect_timeout: '請輸入連接超時(秒)',
|
||||
no_less_then_0: '高級設置中的參數不能小於零',
|
||||
no_less_then_0: '高級設置中的參數不能小于零',
|
||||
priority: '高級設置'
|
||||
},
|
||||
pblink: {
|
||||
@ -1110,14 +1162,14 @@ export default {
|
||||
auth_role: '已分享角色',
|
||||
picture_limit: '只能插入圖片',
|
||||
drag_here: '請將左側字段拖至此處',
|
||||
copy_link_passwd: '複製鏈接及密碼',
|
||||
copy_link: '複製鏈接',
|
||||
copy_short_link: '複製短鏈接',
|
||||
copy_short_link_passwd: '複製短鏈接及密碼',
|
||||
copy_link_passwd: '複制鏈接及密碼',
|
||||
copy_link: '複制鏈接',
|
||||
copy_short_link: '複制短鏈接',
|
||||
copy_short_link_passwd: '複制短鏈接及密碼',
|
||||
passwd_protect: '密碼保護',
|
||||
link: '鏈接',
|
||||
link_share: '鏈接分享',
|
||||
link_share_desc: '開啟鏈接後,任何人可通過此鏈接訪問儀表板。',
|
||||
link_share_desc: '開啓鏈接後,任何人可通過此鏈接訪問儀表板。',
|
||||
share: '分享',
|
||||
datalist: '視圖列表',
|
||||
group: '目錄',
|
||||
@ -1139,7 +1191,7 @@ export default {
|
||||
view: '視圖',
|
||||
module: '組件',
|
||||
filter_module: '過濾組件',
|
||||
select_by_module: '安組件選擇',
|
||||
select_by_module: '按組件選擇',
|
||||
edit: '編輯',
|
||||
sys_template: '系統模板',
|
||||
user_template: '用戶模板',
|
||||
@ -1153,12 +1205,12 @@ export default {
|
||||
photo: '圖片',
|
||||
default_panel: '默認儀表板',
|
||||
create_public_links: '創建公共鏈接',
|
||||
to_default: '另存為默認',
|
||||
to_default_panel: '另存為默認儀表板',
|
||||
to_default: '另存爲默認',
|
||||
to_default_panel: '另存爲默認儀表板',
|
||||
store: '收藏',
|
||||
save_to_panel: '保存為模板',
|
||||
export_to_panel: '導出為模板',
|
||||
export_to_pdf: '導出為PDF',
|
||||
save_to_panel: '保存爲模板',
|
||||
export_to_panel: '導出爲模板',
|
||||
export_to_pdf: '導出爲PDF',
|
||||
preview: '預覽',
|
||||
fullscreen_preview: '全屏預覽',
|
||||
new_tab_preview: '新Tab頁預覽',
|
||||
@ -1169,21 +1221,21 @@ export default {
|
||||
all_org: '所有組織',
|
||||
custom: '自定義',
|
||||
import_template: '導入模板',
|
||||
copy_template: '復用模板',
|
||||
copy_template: '複用模板',
|
||||
upload_template: '上傳模板',
|
||||
belong_to_category: '所屬類別',
|
||||
pls_select_belong_to_category: '請選擇所屬類別',
|
||||
template_name_cannot_be_empty: '模板名稱不能為空',
|
||||
select_by_table: '列表選擇',
|
||||
template_name_cannot_be_empty: '模板名稱不能爲空',
|
||||
select_by_table: '按表選擇',
|
||||
data_list: '數據列表',
|
||||
component_list: '組件列表',
|
||||
custom_scope: '自定義控製範圍',
|
||||
custom_scope: '自定義控制範圍',
|
||||
multiple_choice: '多選',
|
||||
single_choice: '單選',
|
||||
field: '字段',
|
||||
unshared_people: '未分享人員',
|
||||
shared_people: '已分享人員',
|
||||
error_data: '獲取數據出錯,請聯繫管理員',
|
||||
error_data: '獲取數據出錯,請聯系管理員',
|
||||
canvas_size: '畫布大小',
|
||||
canvas_scale: '畫布比例',
|
||||
style: '樣式',
|
||||
@ -1192,7 +1244,7 @@ export default {
|
||||
redo: '重做',
|
||||
undo: '撤銷',
|
||||
panelNull: '這是個空的儀表板,可以通過編輯來豐富內容',
|
||||
copy: '復製',
|
||||
copy: '複制',
|
||||
paste: '粘貼',
|
||||
cut: '剪切',
|
||||
lock: '鎖定',
|
||||
@ -1210,11 +1262,11 @@ export default {
|
||||
top: 'y 坐標',
|
||||
height: '高',
|
||||
width: '寬',
|
||||
color: '顏色',
|
||||
color: '顔色',
|
||||
backgroundColor: '背景色',
|
||||
borderStyle: '邊框風格',
|
||||
borderWidth: '邊框寬度',
|
||||
borderColor: '邊框顏色',
|
||||
borderColor: '邊框顔色',
|
||||
borderRadius: '邊框半徑',
|
||||
fontSize: '字體大小',
|
||||
fontWeight: '字體粗細',
|
||||
@ -1267,12 +1319,21 @@ export default {
|
||||
uninstall_cancel: '取消卸載插件'
|
||||
},
|
||||
display: {
|
||||
logo: '頭部系統 Logo',
|
||||
loginLogo: '登陸頁面頭部 Logo',
|
||||
loginImage: '登陸頁面右側圖片',
|
||||
loginTitle: '登陸頁面標題',
|
||||
logo: '頭部系統logo',
|
||||
loginLogo: '登錄頁面頭部logo',
|
||||
loginImage: '登錄頁面右側圖片',
|
||||
loginTitle: '登錄頁面標題',
|
||||
title: '系統名稱',
|
||||
advice_size: '建議圖片大小'
|
||||
advice_size: '建議圖片大小',
|
||||
theme: '主題顔色',
|
||||
|
||||
topMenuColor: '頭部背景',
|
||||
topMenuActiveColor: '頭部選中背景',
|
||||
|
||||
topMenuTextColor: '頭部字體顔色',
|
||||
|
||||
topMenuTextActiveColor: '頭部字體選中顔色'
|
||||
|
||||
},
|
||||
auth: {
|
||||
authConfig: '權限配置',
|
||||
@ -1292,6 +1353,7 @@ export default {
|
||||
datasetAuthHead: '所有數據集',
|
||||
chartAuthHead: '所有視圖',
|
||||
panelAuthHead: '所有儀表板',
|
||||
menuAuthHead: '所有菜單和操作',
|
||||
view: '查看',
|
||||
use: '使用',
|
||||
export: '導出',
|
||||
@ -1306,13 +1368,13 @@ export default {
|
||||
auth_num: '授權數量',
|
||||
version: '版本',
|
||||
version_num: '版本號',
|
||||
standard: '標準版',
|
||||
standard: '標准版',
|
||||
enterprise: '企業版',
|
||||
suport: '獲取技術支持',
|
||||
update_success: '更新成功'
|
||||
},
|
||||
template: {
|
||||
exit_same_template_check: '當前存在相同名稱模板,是否覆蓋?',
|
||||
exit_same_template_check: '當前分類存在相同名稱模板,是否覆蓋?',
|
||||
override: '覆蓋',
|
||||
cancel: '取消',
|
||||
confirm_upload: '上傳確認'
|
||||
@ -1328,8 +1390,8 @@ export default {
|
||||
month: '月',
|
||||
week: '周',
|
||||
year: '年',
|
||||
d_w_cant_not_set: '日期與星期不可以同時為“不指定”',
|
||||
d_w_must_one_set: '日期與星期必須有一個為“不指定”',
|
||||
d_w_cant_not_set: '日期與星期不可以同時爲“不指定”',
|
||||
d_w_must_one_set: '日期與星期必須有一個爲“不指定”',
|
||||
every_day: '每日',
|
||||
cycle: '周期',
|
||||
not_set: '不指定',
|
||||
@ -1357,15 +1419,15 @@ export default {
|
||||
week_end: '至星期',
|
||||
every_year: '每年',
|
||||
week_tips: '說明:1-7 分別對應 周日-周六',
|
||||
minute_limit: '分鐘不能小於1,大於59',
|
||||
hour_limit: '小時不能小於1,大於523',
|
||||
day_limit: '天不能小於1,大於531'
|
||||
minute_limit: '分鍾不能小于1,大于59',
|
||||
hour_limit: '小時不能小于1,大于23',
|
||||
day_limit: '天不能小于1,大于31'
|
||||
},
|
||||
dept: {
|
||||
can_not_move_change_sort: '不能移動以改變排序',
|
||||
can_not_move_parent_to_children: '父組織不能移動到自己的子節點下',
|
||||
move_success: '移動成功',
|
||||
name_exist_pre: '下已存在名稱為【',
|
||||
name_exist_pre: '下已存在名稱爲【',
|
||||
name_exist_suf: '】的組織',
|
||||
root_org: '頂層組織'
|
||||
},
|
||||
|
@ -433,6 +433,11 @@ export default {
|
||||
fixedHeader: '固定 Header',
|
||||
sidebarLogo: '侧边栏 Logo'
|
||||
},
|
||||
sysParams: {
|
||||
display: '显示设置',
|
||||
ldap: 'LDAP设置',
|
||||
oidc: 'OIDC设置'
|
||||
},
|
||||
license: {
|
||||
i18n_no_license_record: '没有 License 记录',
|
||||
i18n_license_is_empty: 'License 为空',
|
||||
@ -539,6 +544,8 @@ export default {
|
||||
logout_endpoint: '请输入logoutEndpoint',
|
||||
clientId: '请输入ClientId',
|
||||
secret: '请输入Secret',
|
||||
scope: '请输入scope',
|
||||
redirectUrl: '请输入redirectUrl',
|
||||
open: '启用OIDC认证'
|
||||
},
|
||||
role: {
|
||||
@ -1098,11 +1105,14 @@ export default {
|
||||
create: '新建数据源',
|
||||
type: '类型',
|
||||
please_choose_type: '请选择数据源类型',
|
||||
please_choose_data_type: '请选择计算模式',
|
||||
data_base: '数据库名称',
|
||||
user_name: '用户名',
|
||||
password: '密码',
|
||||
host: '主机名/IP地址',
|
||||
port: '端口',
|
||||
datasource_url: '地址',
|
||||
please_input_datasource_url: '请输入 Elasticsearch 地址,如: http://es_host:es_port',
|
||||
please_input_data_base: '请输入数据库名称',
|
||||
please_select_oracle_type: '选择连接类型',
|
||||
please_input_user_name: '请输入用户名',
|
||||
@ -1139,7 +1149,11 @@ export default {
|
||||
please_input_acquire_increment: '请输入增长数',
|
||||
please_input_connect_timeout: '请输入连接超时(秒)',
|
||||
no_less_then_0: '高级设置中的参数不能小于零',
|
||||
priority: '高级设置'
|
||||
priority: '高级设置',
|
||||
data_mode: '数据模式',
|
||||
direct: '直连模式',
|
||||
extract: '抽取模式',
|
||||
all_compute_mode: '直连、抽取模式'
|
||||
},
|
||||
pblink: {
|
||||
key_pwd: '请输入密码打开链接',
|
||||
|
@ -3,6 +3,9 @@ module.exports = {
|
||||
RefreshTokenKey: 'refreshauthorization',
|
||||
LinkTokenKey: 'LINK-PWD-TOKEN',
|
||||
title: 'DataEase',
|
||||
/* for sso */
|
||||
IdTokenKey: 'IdToken',
|
||||
AccessTokenKey: 'AccessToken',
|
||||
|
||||
/**
|
||||
* @type {boolean} true | false
|
||||
|
@ -58,7 +58,9 @@ const data = {
|
||||
// 和当前组件联动的目标组件
|
||||
targetLinkageInfo: [],
|
||||
// 当前仪表板联动 下钻 上卷等信息
|
||||
nowPanelTrackInfo: {}
|
||||
nowPanelTrackInfo: {},
|
||||
// 拖拽的组件信息
|
||||
dragComponentInfo: null
|
||||
},
|
||||
mutations: {
|
||||
...animation.mutations,
|
||||
@ -79,10 +81,20 @@ const data = {
|
||||
},
|
||||
|
||||
setCanvasStyle(state, style) {
|
||||
if (style) {
|
||||
style['selfAdaption'] = true
|
||||
}
|
||||
state.canvasStyleData = style
|
||||
},
|
||||
|
||||
setCurComponent(state, { component, index }) {
|
||||
// 当前视图操作状态置空
|
||||
if (component) {
|
||||
component['optStatus'] = {
|
||||
dragging: false,
|
||||
resizing: false
|
||||
}
|
||||
}
|
||||
state.styleChangeTimes = 0
|
||||
state.curComponent = component
|
||||
state.curComponentIndex = index
|
||||
@ -244,6 +256,12 @@ const data = {
|
||||
}
|
||||
})
|
||||
// state.styleChangeTimes++
|
||||
},
|
||||
setDragComponentInfo(state, dragComponentInfo) {
|
||||
state.dragComponentInfo = dragComponentInfo
|
||||
},
|
||||
clearDragComponentInfo(state) {
|
||||
state.dragComponentInfo = null
|
||||
}
|
||||
},
|
||||
modules: {
|
||||
|
@ -3,8 +3,16 @@ import Config from '@/settings'
|
||||
|
||||
const TokenKey = Config.TokenKey
|
||||
|
||||
const IdTokenKey = Config.IdTokenKey
|
||||
|
||||
const AccessTokenKey = Config.AccessTokenKey
|
||||
|
||||
const linkTokenKey = Config.LinkTokenKey
|
||||
|
||||
export function getIdToken() {
|
||||
return Cookies.get(IdTokenKey)
|
||||
}
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(TokenKey)
|
||||
}
|
||||
@ -14,6 +22,8 @@ export function setToken(token) {
|
||||
}
|
||||
|
||||
export function removeToken() {
|
||||
Cookies.remove(IdTokenKey)
|
||||
Cookies.remove(AccessTokenKey)
|
||||
return Cookies.remove(TokenKey)
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@ import axios from 'axios'
|
||||
// import { MessageBox, Message } from 'element-ui'
|
||||
import store from '@/store'
|
||||
import { $alert, $error } from './message'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { getToken, getIdToken } from '@/utils/auth'
|
||||
import Config from '@/settings'
|
||||
import i18n from '@/lang'
|
||||
import { tryShowLoading, tryHideLoading } from './loading'
|
||||
@ -23,6 +23,10 @@ const service = axios.create({
|
||||
service.interceptors.request.use(
|
||||
config => {
|
||||
// do something before request is sent
|
||||
const idToken = getIdToken()
|
||||
if (idToken) {
|
||||
config.headers[Config.IdTokenKey] = idToken
|
||||
}
|
||||
|
||||
if (store.getters.token) {
|
||||
// let each request carry token
|
||||
|
@ -49,7 +49,45 @@
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-show="conf && conf.includes('sort')">
|
||||
|
||||
<el-dropdown-item v-show="item.deType === 1">
|
||||
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="dateStyle">
|
||||
<span class="el-dropdown-link inner-dropdown-menu">
|
||||
<span>
|
||||
<i class="el-icon-c-scale-to-original" />
|
||||
<span>{{ $t('chart.dateStyle') }}</span>
|
||||
<span class="summary-span-item">({{ $t('chart.'+item.dateStyle) }})</span>
|
||||
</span>
|
||||
<i class="el-icon-arrow-right el-icon--right" />
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="beforeDateStyle('y')">{{ $t('chart.y') }}</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDateStyle('y_M')">{{ $t('chart.y_M') }}</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDateStyle('y_M_d')">{{ $t('chart.y_M_d') }}</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDateStyle('H_m_s')">{{ $t('chart.H_m_s') }}</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDateStyle('y_M_d_H_m')">{{ $t('chart.y_M_d_H_m') }}</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDateStyle('y_M_d_H_m_s')">{{ $t('chart.y_M_d_H_m_s') }}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-show="item.deType === 1">
|
||||
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="datePattern">
|
||||
<span class="el-dropdown-link inner-dropdown-menu">
|
||||
<span>
|
||||
<i class="el-icon-timer" />
|
||||
<span>{{ $t('chart.datePattern') }}</span>
|
||||
<span class="summary-span-item">({{ $t('chart.'+item.datePattern) }})</span>
|
||||
</span>
|
||||
<i class="el-icon-arrow-right el-icon--right" />
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="beforeDatePattern('date_sub')">{{ $t('chart.date_sub') }}(1990-01-01)</el-dropdown-item>
|
||||
<el-dropdown-item :command="beforeDatePattern('date_split')">{{ $t('chart.date_split') }}(1990/01/01)</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item v-show="conf && conf.includes('sort')" :divided="item.deType === 1">
|
||||
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="sort">
|
||||
<span class="el-dropdown-link inner-dropdown-menu">
|
||||
<span>
|
||||
@ -143,6 +181,27 @@ export default {
|
||||
removeItem() {
|
||||
this.item.index = this.index
|
||||
this.$emit('onItemRemove', this.item)
|
||||
},
|
||||
|
||||
dateStyle(param) {
|
||||
// console.log(param)
|
||||
this.item.dateStyle = param.type
|
||||
this.$emit('onItemChange', this.item)
|
||||
},
|
||||
beforeDateStyle(type) {
|
||||
return {
|
||||
type: type
|
||||
}
|
||||
},
|
||||
datePattern(param) {
|
||||
// console.log(param)
|
||||
this.item.datePattern = param.type
|
||||
this.$emit('onItemChange', this.item)
|
||||
},
|
||||
beforeDatePattern(type) {
|
||||
return {
|
||||
type: type
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -949,6 +949,12 @@ export default {
|
||||
})
|
||||
}
|
||||
view.extStack.forEach(function(ele) {
|
||||
if (!ele.dateStyle || ele.dateStyle === '') {
|
||||
ele.dateStyle = 'y_M_d'
|
||||
}
|
||||
if (!ele.datePattern || ele.datePattern === '') {
|
||||
ele.datePattern = 'date_sub'
|
||||
}
|
||||
if (!ele.sort || ele.sort === '') {
|
||||
ele.sort = 'none'
|
||||
}
|
||||
@ -1058,6 +1064,8 @@ export default {
|
||||
}
|
||||
if (!response.data.drill) {
|
||||
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
|
||||
|
||||
this.resetDrill()
|
||||
}
|
||||
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters ? response.data.drillFilters : []))
|
||||
}).catch(err => {
|
||||
|
@ -28,8 +28,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item class="form-item">
|
||||
<el-select v-model="mode" filterable :placeholder="$t('dataset.connect_mode')" size="mini">
|
||||
<el-option :label="$t('dataset.direct_connect')" value="0" />
|
||||
<el-option :label="$t('dataset.sync_data')" value="1" :disabled="!kettleRunning" />
|
||||
<el-option :label="$t('dataset.direct_connect')" value="0" :disabled="selectedDatasource.computeType==='EXTRACT'"/>
|
||||
<el-option :label="$t('dataset.sync_data')" value="1" :disabled="!kettleRunning || selectedDatasource.computeType==='DIRECT'" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@ -86,7 +86,8 @@ export default {
|
||||
mode: '0',
|
||||
syncType: 'sync_now',
|
||||
tableData: [],
|
||||
kettleRunning: false
|
||||
kettleRunning: false,
|
||||
selectedDatasource: {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -96,6 +97,11 @@ export default {
|
||||
this.tables = response.data
|
||||
this.tableData = JSON.parse(JSON.stringify(this.tables))
|
||||
})
|
||||
for (let i = 0; i < this.options.length; i++) {
|
||||
if (this.options[i].id === val) {
|
||||
this.selectedDatasource = this.options[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
searchTable(val) {
|
||||
|
@ -18,7 +18,7 @@
|
||||
<el-row>
|
||||
<el-form :inline="true">
|
||||
<el-form-item class="form-item">
|
||||
<el-select v-model="dataSource" filterable :placeholder="$t('dataset.pls_slc_data_source')" size="mini">
|
||||
<el-select v-model="dataSource" filterable :placeholder="$t('dataset.pls_slc_data_source')" size="mini" @change="changeDatasource()">
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.id"
|
||||
@ -32,8 +32,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item v-if="!param.tableId" class="form-item">
|
||||
<el-select v-model="mode" filterable :placeholder="$t('dataset.connect_mode')" size="mini">
|
||||
<el-option :label="$t('dataset.direct_connect')" value="0" />
|
||||
<el-option :label="$t('dataset.sync_data')" value="1" :disabled="!kettleRunning" />
|
||||
<el-option :label="$t('dataset.direct_connect')" value="0" :disabled="selectedDatasource.computeType==='EXTRACT'"/>
|
||||
<el-option :label="$t('dataset.sync_data')" value="1" :disabled="!kettleRunning || selectedDatasource.computeType==='DIRECT'" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@ -145,14 +145,15 @@ export default {
|
||||
theme: 'solarized',
|
||||
hintOptions: { // 自定义提示选项
|
||||
completeSingle: false // 当匹配只有一项的时候是否自动补全
|
||||
}
|
||||
},
|
||||
},
|
||||
data: [],
|
||||
fields: [],
|
||||
mode: '0',
|
||||
syncType: 'sync_now',
|
||||
height: 500,
|
||||
kettleRunning: false
|
||||
kettleRunning: false,
|
||||
selectedDatasource: {}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -189,6 +190,13 @@ export default {
|
||||
this.kettleRunning = res.data
|
||||
})
|
||||
},
|
||||
changeDatasource() {
|
||||
for (let i = 0; i < this.options.length; i++) {
|
||||
if (this.options[i].id === this.form.dataSource) {
|
||||
this.selectedDatasource = this.options[i]
|
||||
}
|
||||
}
|
||||
},
|
||||
calHeight() {
|
||||
const that = this
|
||||
setTimeout(function() {
|
||||
|
@ -57,7 +57,7 @@ export default {
|
||||
watch: {
|
||||
'table': function() {
|
||||
fieldList(this.table.id).then(response => {
|
||||
this.fields = response.data
|
||||
this.fields = JSON.parse(JSON.stringify(response.data)).filter(ele => ele.extField === 0)
|
||||
|
||||
this.checkedFields = []
|
||||
this.checkedList.forEach(ele => {
|
||||
@ -78,7 +78,7 @@ export default {
|
||||
initField() {
|
||||
if (this.table.id) {
|
||||
fieldList(this.table.id).then(response => {
|
||||
this.fields = response.data
|
||||
this.fields = JSON.parse(JSON.stringify(response.data)).filter(ele => ele.extField === 0)
|
||||
})
|
||||
}
|
||||
},
|
||||
|
@ -222,7 +222,7 @@ export default {
|
||||
// if (response.data) {
|
||||
this.union.sourceTableId = this.table.id
|
||||
fieldList(this.table.id).then(response => {
|
||||
this.sourceFieldOption = response.data
|
||||
this.sourceFieldOption = JSON.parse(JSON.stringify(response.data)).filter(ele => ele.extField === 0)
|
||||
})
|
||||
this.editUnion = true
|
||||
// } else {
|
||||
@ -320,7 +320,7 @@ export default {
|
||||
this.union.targetTableId = param.id
|
||||
this.union.targetTableFieldId = ''
|
||||
fieldList(param.id).then(response => {
|
||||
this.targetFieldOption = response.data
|
||||
this.targetFieldOption = JSON.parse(JSON.stringify(response.data)).filter(ele => ele.extField === 0)
|
||||
})
|
||||
this.$refs['targetTable'].doClose()
|
||||
}
|
||||
|
@ -105,11 +105,13 @@ export default {
|
||||
})
|
||||
},
|
||||
handleDragStart(node, ev) {
|
||||
this.$store.commit('setDragComponentInfo', node)
|
||||
ev.dataTransfer.effectAllowed = 'copy'
|
||||
const dataTrans = {
|
||||
type: 'view',
|
||||
id: node.data.id
|
||||
}
|
||||
|
||||
ev.dataTransfer.setData('componentInfo', JSON.stringify(dataTrans))
|
||||
},
|
||||
|
||||
|
@ -96,7 +96,6 @@
|
||||
|
||||
<div
|
||||
id="canvasInfo"
|
||||
:class="{'style-hidden':canvasStyleData.selfAdaption}"
|
||||
class="content this_canvas"
|
||||
@drop="handleDrop"
|
||||
@dragover="handleDragOver"
|
||||
@ -441,6 +440,7 @@ export default {
|
||||
return data
|
||||
},
|
||||
handleDrop(e) {
|
||||
this.$store.commit('clearDragComponentInfo')
|
||||
this.currentDropElement = e
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
@ -510,6 +510,7 @@ export default {
|
||||
},
|
||||
|
||||
handleDragOver(e) {
|
||||
console.log('handleDragOver=>x:' + this.getPositionX(e.layerX) + ';y=' + this.getPositionY(e.layerY) + e.dataTransfer.getData('componentInfo'))
|
||||
e.preventDefault()
|
||||
e.dataTransfer.dropEffect = 'copy'
|
||||
},
|
||||
@ -839,7 +840,7 @@ export default {
|
||||
}
|
||||
}
|
||||
.style-hidden{
|
||||
overflow: hidden;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@ -56,7 +56,7 @@
|
||||
<el-row class="panel-design-preview">
|
||||
<div id="imageWrapper" ref="imageWrapper" style="width: 100%;height: 100%">
|
||||
<fullscreen style="height: 100%;background: #f7f8fa;overflow-y: auto" :fullscreen.sync="fullscreen">
|
||||
<Preview v-if="showMain" :in-screen="!fullscreen" :show-type="canvasStyleData.selfAdaption?'full':'width'" />
|
||||
<Preview v-if="showMain" :in-screen="!fullscreen" :show-type="'width'" />
|
||||
</fullscreen>
|
||||
</div>
|
||||
</el-row>
|
||||
|
@ -154,6 +154,10 @@ export default {
|
||||
return 'Oracle'
|
||||
} else if (type === 'pg') {
|
||||
return 'PostgreSQL'
|
||||
} else if (type === 'es') {
|
||||
return 'Elasticsearch'
|
||||
} else if (type === 'ch') {
|
||||
return 'ClickHouse'
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -24,11 +24,22 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="$t('datasource.data_mode')" prop="type">
|
||||
<el-select v-model="form.computeType" :placeholder="$t('datasource.please_choose_data_type')" class="select-width" :disabled="formType=='modify' || (formType==='add' && params && !!params.computeMode)">
|
||||
<el-option
|
||||
v-for="item in compute_mode"
|
||||
:key="item.type"
|
||||
:label="item.label"
|
||||
:value="item.type"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.host')" prop="configuration.host">
|
||||
<el-input v-model="form.configuration.host" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.configuration.dataSourceType=='es'" :label="$t('datasource.url')" prop="configuration.url">
|
||||
<el-input v-model="form.configuration.url" placeholder="请输入 Elasticsearch 地址,如: http://es_host:es_port" autocomplete="off" />
|
||||
<el-form-item v-if="form.configuration.dataSourceType=='es'" :label="$t('datasource.datasource_url')" prop="configuration.url">
|
||||
<el-input v-model="form.configuration.url" :placeholder="$t('datasource.please_input_datasource_url')" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.data_base')" prop="configuration.dataBase">
|
||||
<el-input v-model="form.configuration.dataBase" autocomplete="off" />
|
||||
@ -147,12 +158,20 @@ export default {
|
||||
'configuration.acquireIncrement': [{ required: true, message: this.$t('datasource.please_input_acquire_increment'), trigger: 'change' }],
|
||||
'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }]
|
||||
},
|
||||
allTypes: [{ name: 'mysql', label: 'MySQL', type: 'jdbc' },
|
||||
allTypes: [
|
||||
{ name: 'mysql', label: 'MySQL', type: 'jdbc'},
|
||||
{ name: 'oracle', label: 'Oracle', type: 'jdbc' },
|
||||
{ name: 'sqlServer', label: 'SQL Server', type: 'jdbc' },
|
||||
{ name: 'pg', label: 'PostgreSQL', type: 'jdbc' },
|
||||
{ name: 'es', label: 'Elasticsearch', type: 'es' }],
|
||||
{ name: 'es', label: 'Elasticsearch', type: 'es' },
|
||||
{ name: 'ch', label: 'ClickHouse', type: 'jdbc' }
|
||||
],
|
||||
schemas: [],
|
||||
compute_mode: [
|
||||
{type: "DIRECT", label: this.$t('datasource.direct')},
|
||||
{type: "EXTRACT", label: this.$t('datasource.extract')},
|
||||
{type: "ALL", label: this.$t('datasource.all_compute_mode')}
|
||||
],
|
||||
canEdit: false,
|
||||
originConfiguration: {}
|
||||
}
|
||||
@ -293,6 +312,15 @@ export default {
|
||||
this.form.configuration.dataSourceType = this.allTypes[i].type
|
||||
}
|
||||
}
|
||||
if(this.form.type === 'es'){
|
||||
this.compute_mode = [{type: "DIRECT", label: this.$t('datasource.direct')}];
|
||||
}else {
|
||||
this.compute_mode = [
|
||||
{type: "DIRECT", label: this.$t('datasource.direct')},
|
||||
{type: "EXTRACT", label: this.$t('datasource.extract')},
|
||||
{type: "ALL", label: this.$t('datasource.all_compute_mode')}
|
||||
];
|
||||
}
|
||||
},
|
||||
backToList() {
|
||||
this.$emit('switch-component', { })
|
||||
|
Loading…
Reference in New Issue
Block a user