mirror of
https://gitee.com/devlive-community/datacap.git
synced 2024-12-02 12:07:37 +08:00
Merge branch 'refs/heads/merge-i18n' into qianmoq-dev
This commit is contained in:
commit
2bd4639c4f
@ -232,7 +232,7 @@ Open the DingTalk (left) or WeChat(right) software and scan the following QR cod
|
||||
|
||||
---
|
||||
|
||||
[Extended documentation for DataCap](https://datacap.edurt.io)
|
||||
[Extended documentation for DataCap](https://datacap.devlive.org)
|
||||
|
||||
## Contributors
|
||||
|
||||
|
@ -232,7 +232,7 @@ DataCap может запрашивать данные из любого хра
|
||||
|
||||
---
|
||||
|
||||
[Расширенная документация по DataCap](https://datacap.edurt.io)
|
||||
[Расширенная документация по DataCap](https://datacap.devlive.org)
|
||||
|
||||
## Участников
|
||||
|
||||
|
@ -232,7 +232,7 @@ DataCap 可以从任何使用 SQL 的数据存储或数据引擎(ClickHouse、
|
||||
|
||||
---
|
||||
|
||||
[DataCap 的扩展文档](https://datacap.edurt.io)
|
||||
[DataCap 的扩展文档](https://datacap.devlive.org)
|
||||
|
||||
## 贡献者
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
<code_scheme name="DataCapStyleScheme" version="173">
|
||||
<option name="RIGHT_MARGIN" value="180" />
|
||||
<option name="ENABLE_SECOND_REFORMAT" value="true" />
|
||||
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
|
||||
<option name="CLASS_BRACE_STYLE" value="2" />
|
||||
|
@ -175,3 +175,9 @@ WHERE `code` IS NULL;
|
||||
|
||||
ALTER TABLE `datacap_source_query`
|
||||
ADD COLUMN `home` VARCHAR(500);
|
||||
|
||||
ALTER TABLE `datacap_report`
|
||||
ADD COLUMN `description` VARCHAR(2000);
|
||||
|
||||
ALTER TABLE `datacap_dashboard`
|
||||
CHANGE `version` `description` VARCHAR(1000) DEFAULT NULL COMMENT 'Description';
|
||||
|
@ -44,4 +44,24 @@ public class ReflectionUtils
|
||||
log.warn("Set field value exception", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the value of a specified field from an object using reflection.
|
||||
*
|
||||
* @param obj the object from which to retrieve the field value
|
||||
* @param fieldName the name of the field to retrieve
|
||||
* @return the value of the specified field
|
||||
*/
|
||||
public static Object getFieldValue(Object obj, String fieldName)
|
||||
{
|
||||
try {
|
||||
Field field = obj.getClass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field.get(obj);
|
||||
}
|
||||
catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
log.warn("Get field value exception", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,13 +45,6 @@ public class DataSetController
|
||||
return service.rebuild(id);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@GetMapping(value = "getColumns/{id}")
|
||||
public CommonResponse<Set<DataSetColumnEntity>> getColumns(@PathVariable Long id)
|
||||
{
|
||||
return service.getColumns(id);
|
||||
}
|
||||
|
||||
@GetMapping(value = "columns/{code}")
|
||||
public CommonResponse<Set<DataSetColumnEntity>> getColumnsByCode(@PathVariable String code)
|
||||
{
|
||||
|
@ -9,8 +9,6 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController()
|
||||
@RequestMapping(value = "/api/v1/database")
|
||||
public class DatabaseController
|
||||
@ -26,9 +24,9 @@ public class DatabaseController
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
@PostMapping(value = "source/{id}")
|
||||
public CommonResponse<List<DatabaseEntity>> fetchBySource(@PathVariable Long id)
|
||||
@PostMapping(value = "source/{code}")
|
||||
public CommonResponse<Object> fetchBySource(@PathVariable String code)
|
||||
{
|
||||
return this.service.getAllBySource(id);
|
||||
return this.service.getAllBySource(code);
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ import io.edurt.datacap.service.service.SourceService;
|
||||
import io.edurt.datacap.service.validation.ValidationGroup;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
@ -52,12 +51,6 @@ public class SourceController
|
||||
return this.service.saveOrUpdateV2(configure);
|
||||
}
|
||||
|
||||
@GetMapping(value = "code/{code}")
|
||||
public CommonResponse<SourceEntity> getByCode(@PathVariable(value = "code") String code)
|
||||
{
|
||||
return this.service.getByCode(code);
|
||||
}
|
||||
|
||||
@PostMapping(value = "getHistory/{id}")
|
||||
public CommonResponse<PageEntity<ScheduledHistoryEntity>> getHistory(@PathVariable(value = "id") Long id, @RequestBody FilterBody filter)
|
||||
{
|
||||
|
@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.exc.InvalidFormatException;
|
||||
import io.edurt.datacap.common.enums.ServiceState;
|
||||
import io.edurt.datacap.common.response.CommonResponse;
|
||||
import io.edurt.datacap.server.authorize.UserNotEqualsException;
|
||||
import io.edurt.datacap.service.SelfException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hibernate.exception.ConstraintViolationException;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -79,6 +80,14 @@ public class HandlerRestful
|
||||
return CommonResponse.failure(ServiceState.REQUEST_EXCEPTION, ex.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler({SelfException.class})
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ResponseBody
|
||||
public CommonResponse<Object> handlerSelfException(SelfException ex)
|
||||
{
|
||||
return CommonResponse.failure(ServiceState.USER_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
@ExceptionHandler({Exception.class})
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ResponseBody
|
||||
|
@ -0,0 +1,15 @@
|
||||
package io.edurt.datacap.service;
|
||||
|
||||
public class SelfException
|
||||
extends RuntimeException
|
||||
{
|
||||
public SelfException()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public SelfException(String message)
|
||||
{
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -37,8 +37,8 @@ public class DashboardEntity
|
||||
@Column(name = "configure")
|
||||
private String configure;
|
||||
|
||||
@Column(name = "version")
|
||||
private String version;
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@ManyToOne
|
||||
@JoinTable(name = "datacap_dashboard_user_relation",
|
||||
|
@ -47,6 +47,9 @@ public class ReportEntity
|
||||
@Column(name = "query")
|
||||
private String query;
|
||||
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@ManyToOne
|
||||
@JoinTable(name = "datacap_report_user_relation",
|
||||
joinColumns = @JoinColumn(name = "report_id"),
|
||||
@ -65,6 +68,6 @@ public class ReportEntity
|
||||
@JoinTable(name = "datacap_report_dataset_relation",
|
||||
joinColumns = @JoinColumn(name = "report_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "dataset_id"))
|
||||
@JsonIgnoreProperties(value = {"user"})
|
||||
@JsonIgnoreProperties(value = {"user", "columns"})
|
||||
private DataSetEntity dataset;
|
||||
}
|
||||
|
@ -1,12 +1,15 @@
|
||||
package io.edurt.datacap.service.service;
|
||||
|
||||
import io.edurt.datacap.common.enums.ServiceState;
|
||||
import io.edurt.datacap.common.response.CommonResponse;
|
||||
import io.edurt.datacap.common.utils.NullAwareBeanUtils;
|
||||
import io.edurt.datacap.common.utils.ReflectionUtils;
|
||||
import io.edurt.datacap.service.SelfException;
|
||||
import io.edurt.datacap.service.adapter.PageRequestAdapter;
|
||||
import io.edurt.datacap.service.body.FilterBody;
|
||||
import io.edurt.datacap.service.entity.BaseEntity;
|
||||
import io.edurt.datacap.service.entity.PageEntity;
|
||||
import io.edurt.datacap.service.entity.UserEntity;
|
||||
import io.edurt.datacap.service.repository.BaseRepository;
|
||||
import io.edurt.datacap.service.security.UserDetailsService;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@ -45,7 +48,30 @@ public interface BaseService<T extends BaseEntity>
|
||||
default CommonResponse<T> getByCode(BaseRepository repository, String code)
|
||||
{
|
||||
return (CommonResponse<T>) repository.findByCode(code)
|
||||
.map(CommonResponse::success)
|
||||
.map(value -> validatorUser(value))
|
||||
.orElseGet(() -> CommonResponse.failure(String.format("Resource [ %s ] not found", code)));
|
||||
}
|
||||
|
||||
default CommonResponse<T> validatorUser(Object value)
|
||||
{
|
||||
if (ReflectionUtils.hasField(value, "user")) {
|
||||
UserEntity originalUser = (UserEntity) ReflectionUtils.getFieldValue(value, "user");
|
||||
UserEntity loginUser = UserDetailsService.getUser();
|
||||
if (!originalUser.getId().equals(loginUser.getId())) {
|
||||
return CommonResponse.failure(ServiceState.USER_UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
return CommonResponse.success(value);
|
||||
}
|
||||
|
||||
default void isSelf(Object value)
|
||||
{
|
||||
if (ReflectionUtils.hasField(value, "user")) {
|
||||
UserEntity originalUser = (UserEntity) ReflectionUtils.getFieldValue(value, "user");
|
||||
UserEntity loginUser = UserDetailsService.getUser();
|
||||
if (!originalUser.getId().equals(loginUser.getId())) {
|
||||
throw new SelfException(String.format("Resource [ %s ] not found", value.getClass().getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,6 @@ public interface DataSetService
|
||||
|
||||
CommonResponse<DataSetEntity> rebuild(Long id);
|
||||
|
||||
CommonResponse<Set<DataSetColumnEntity>> getColumns(Long id);
|
||||
|
||||
CommonResponse<Set<DataSetColumnEntity>> getColumnsByCode(String code);
|
||||
|
||||
CommonResponse<Boolean> syncData(Long id);
|
||||
|
@ -3,16 +3,14 @@ package io.edurt.datacap.service.service;
|
||||
import io.edurt.datacap.common.response.CommonResponse;
|
||||
import io.edurt.datacap.service.entity.DatabaseEntity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DatabaseService
|
||||
extends BaseService<DatabaseEntity>
|
||||
{
|
||||
/**
|
||||
* Retrieves a list of DatabaseEntity objects based on the provided id.
|
||||
*
|
||||
* @param id the id used to filter the results
|
||||
* @param code the code used to filter the results
|
||||
* @return a list of DatabaseEntity objects that match the id
|
||||
*/
|
||||
CommonResponse<List<DatabaseEntity>> getAllBySource(Long id);
|
||||
CommonResponse<Object> getAllBySource(String code);
|
||||
}
|
||||
|
@ -139,19 +139,14 @@ public class DataSetServiceImpl
|
||||
return CommonResponse.success(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Set<DataSetColumnEntity>> getColumns(Long id)
|
||||
{
|
||||
Optional<DataSetEntity> entity = repository.findById(id);
|
||||
return entity.map(dataSet -> CommonResponse.success(columnRepository.findAllByDatasetOrderByPositionAsc(dataSet)))
|
||||
.orElseGet(() -> CommonResponse.failure(String.format("DataSet [ %s ] not found", id)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Set<DataSetColumnEntity>> getColumnsByCode(String code)
|
||||
{
|
||||
Optional<DataSetEntity> entity = repository.findByCode(code);
|
||||
return entity.map(item -> CommonResponse.success(columnRepository.findAllByDatasetOrderByPositionAsc(item)))
|
||||
return entity.map(item -> {
|
||||
isSelf(item);
|
||||
return CommonResponse.success(columnRepository.findAllByDatasetOrderByPositionAsc(item));
|
||||
})
|
||||
.orElseGet(() -> CommonResponse.failure(String.format("DataSet [ %s ] not found", code)));
|
||||
}
|
||||
|
||||
|
@ -1,31 +1,29 @@
|
||||
package io.edurt.datacap.service.service.impl;
|
||||
|
||||
import io.edurt.datacap.common.response.CommonResponse;
|
||||
import io.edurt.datacap.service.entity.DatabaseEntity;
|
||||
import io.edurt.datacap.service.entity.SourceEntity;
|
||||
import io.edurt.datacap.service.repository.SourceRepository;
|
||||
import io.edurt.datacap.service.repository.metadata.DatabaseRepository;
|
||||
import io.edurt.datacap.service.service.DatabaseService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class DatabaseServiceImpl
|
||||
implements DatabaseService
|
||||
{
|
||||
private final DatabaseRepository repository;
|
||||
private final SourceRepository sourceRepository;
|
||||
|
||||
public DatabaseServiceImpl(DatabaseRepository repository)
|
||||
public DatabaseServiceImpl(DatabaseRepository repository, SourceRepository sourceRepository)
|
||||
{
|
||||
this.repository = repository;
|
||||
this.sourceRepository = sourceRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<List<DatabaseEntity>> getAllBySource(Long id)
|
||||
public CommonResponse<Object> getAllBySource(String code)
|
||||
{
|
||||
SourceEntity source = SourceEntity.builder()
|
||||
.id(id)
|
||||
.build();
|
||||
return CommonResponse.success(this.repository.findAllBySource(source));
|
||||
return sourceRepository.findByCode(code)
|
||||
.map(value -> CommonResponse.success(this.repository.findAllBySource(value)))
|
||||
.orElse(CommonResponse.failure(String.format("Source [ %s ] not found", code)));
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,6 @@
|
||||
"axios": "^1.6.7",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.0",
|
||||
"echarts": "^5.5.0",
|
||||
"embla-carousel": "^8.0.2",
|
||||
"embla-carousel-autoplay": "^8.0.2",
|
||||
"embla-carousel-vue": "^8.0.2",
|
||||
@ -38,7 +37,6 @@
|
||||
"lodash": "^4.17.21",
|
||||
"lucide-vue-next": "^0.356.0",
|
||||
"md-editor-v3": "^4.12.1",
|
||||
"naive-ui": "^2.38.1",
|
||||
"radix-vue": "^1.5.2",
|
||||
"tailwind-merge": "^2.2.1",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
|
BIN
core/datacap-ui/public/static/images/dashboard.png
Normal file
BIN
core/datacap-ui/public/static/images/dashboard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
import { AspectRatio, type AspectRatioProps } from 'radix-vue'
|
||||
|
||||
const props = defineProps<AspectRatioProps>()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AspectRatio v-bind="props">
|
||||
<slot />
|
||||
</AspectRatio>
|
||||
</template>
|
1
core/datacap-ui/src/components/ui/aspect-ratio/index.ts
Normal file
1
core/datacap-ui/src/components/ui/aspect-ratio/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export { default as AspectRatio } from './AspectRatio.vue'
|
@ -1,100 +0,0 @@
|
||||
export default {
|
||||
pageNotFound: 'Oops! Page Not Found!',
|
||||
pageNotFoundTip: 'It seems like the page you\'re looking for, does not exist or might have been removed.',
|
||||
pageNotAuthorized: 'Oops! Page Not Authorized!',
|
||||
pageNotAuthorizedTip: 'Sorry, you don\'t have permission to access this page.',
|
||||
backToHome: 'Back to Home',
|
||||
backToSignin: 'Back to Sign In',
|
||||
profile: 'Profile',
|
||||
home: 'Home',
|
||||
dashboard: 'Dashboard',
|
||||
query: 'Query',
|
||||
dataset: 'Dataset',
|
||||
admin: 'Admin',
|
||||
system: 'System Settings',
|
||||
source: 'Source',
|
||||
snippet: 'Snippet',
|
||||
history: 'Query History',
|
||||
pipeline: 'Pipeline',
|
||||
report: 'Report',
|
||||
function: 'Function',
|
||||
template: 'Template',
|
||||
menu: 'Menu',
|
||||
schedule: 'Schedule',
|
||||
authority: 'Authority',
|
||||
user: 'User',
|
||||
id: 'Id',
|
||||
username: 'Username',
|
||||
createTime: 'Create Time',
|
||||
updateTime: 'Update Time',
|
||||
action: 'Action',
|
||||
column: 'Column',
|
||||
description: 'Description',
|
||||
name: 'Name',
|
||||
code: 'Code',
|
||||
editData: 'Edit Data',
|
||||
successfully: 'Successfully',
|
||||
expression: 'Expression',
|
||||
active: 'Active Status',
|
||||
type: 'Type',
|
||||
elapsed: 'Elapsed Time',
|
||||
state: 'State',
|
||||
result: 'Result',
|
||||
noData: 'No Data to display',
|
||||
invalidParam: 'If the parameter is invalid, check whether the parameter is correct',
|
||||
role: 'Role',
|
||||
cancel: 'Cancel',
|
||||
scheduler: 'Scheduler',
|
||||
executor: 'Executor',
|
||||
configure: 'Configure',
|
||||
remove: 'Remove',
|
||||
publish: 'Publish',
|
||||
save: 'Save',
|
||||
value: 'Value',
|
||||
alias: 'Alias',
|
||||
sort: 'Sort',
|
||||
count: 'Count',
|
||||
content: 'Content',
|
||||
feedback: 'Feedback',
|
||||
createEditor: 'Create Editor',
|
||||
device: 'Device',
|
||||
client: 'Client',
|
||||
ip: 'IP Address',
|
||||
ua: 'User Agent',
|
||||
loginTime: 'Login Time',
|
||||
submit: 'Submit',
|
||||
create: 'Create',
|
||||
plugin: 'Plugin',
|
||||
group: 'Group',
|
||||
sorted: 'Sorted',
|
||||
url: 'Url',
|
||||
pageNotNetwork: 'Oops! Not Network!',
|
||||
protocol: 'Protocol',
|
||||
host: 'Host',
|
||||
port: 'Port',
|
||||
public: 'Public',
|
||||
version: 'Version',
|
||||
available: 'Available',
|
||||
test: 'Test',
|
||||
field: 'Field',
|
||||
upload: 'Upload',
|
||||
deleteData: 'Delete Data',
|
||||
apply: 'Apply',
|
||||
length: 'Length',
|
||||
preview: 'Preview',
|
||||
refresh: 'Refresh',
|
||||
endTime: 'End Time',
|
||||
from: 'From',
|
||||
adhoc: 'Adhoc Query',
|
||||
error: 'Error',
|
||||
realtime: 'Realtime',
|
||||
to: 'To',
|
||||
work: 'Work Home',
|
||||
chat: 'Chat',
|
||||
avatar: 'Avatar',
|
||||
file: 'File',
|
||||
backTo: 'Back',
|
||||
tip: {
|
||||
pageNotNetwork: 'Oops! Unable to connect to the network, please check if the network is normal!'
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Dashboard List',
|
||||
delete: 'Delete Dashboard',
|
||||
create: 'Create Dashboard',
|
||||
modify: 'Modify Dashboard',
|
||||
modifyInfo: 'Modify Dashboard [ $VALUE ]',
|
||||
addReport: 'Add Report',
|
||||
},
|
||||
tip: {
|
||||
deleteTip1: 'You are deleting a dashboard. This action permanently deletes the dashboard. Please be sure to confirm your actions before proceeding. ',
|
||||
deleteTip2: 'Warning: This cannot be undone. ',
|
||||
deleteTip3: 'To confirm, type [ $NAME ] in the box below',
|
||||
publishSuccess: 'Dashboard [ $VALUE ] published successfully',
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Dataset List',
|
||||
adhoc: 'Adhoc Query',
|
||||
showPageSize: 'Show Page Size',
|
||||
totalRows: 'Total Rows',
|
||||
totalSize: 'Total Size',
|
||||
dataPreview: 'Data Preview',
|
||||
dataColumn: 'Data Columns',
|
||||
dataConfigure: 'Data Configure',
|
||||
dataLifeCycle: 'Data Life Cycle',
|
||||
onlyPreviewCreate: 'Only preview data can be used to create datasets',
|
||||
returnQuery: 'Return Query',
|
||||
columnName: 'Column Name',
|
||||
columnAlias: 'Column Alias',
|
||||
columnType: 'Column Type',
|
||||
columnTypeString: 'String',
|
||||
columnTypeNumber: 'Number',
|
||||
columnTypeNumberSigned: 'Number (Signed)',
|
||||
columnTypeBoolean: 'Boolean',
|
||||
columnTypeDateTime: 'DateTime',
|
||||
columnDescription: 'Column Description',
|
||||
columnComment: 'Column Comment',
|
||||
columnDefaultValue: 'Default Value',
|
||||
columnIsNullable: 'Is Nullable',
|
||||
columnLength: 'Length',
|
||||
columnIsOrderByKey: 'Sort key',
|
||||
columnIsPartitionKey: 'Partition key',
|
||||
columnIsPrimaryKey: 'Primary key',
|
||||
columnIsSampling: 'Is Sampling',
|
||||
columnExpression: 'Expression',
|
||||
columnMode: 'Column Mode',
|
||||
columnModeMetric: 'Metric',
|
||||
columnModeDimension: 'Dimension',
|
||||
columnModeGroup: 'Group',
|
||||
columnModeFilter: 'Filter',
|
||||
columnSortNone: 'None',
|
||||
columnOrderAsc: 'Ascending',
|
||||
columnOrderDesc: 'Descending',
|
||||
create: 'Create Dataset',
|
||||
modify: 'Modify Dateset',
|
||||
actuator: 'Actuator',
|
||||
syncMode: 'Sync Mode',
|
||||
syncModeManual: 'Manual',
|
||||
syncModeTiming: 'Timing synchronization',
|
||||
syncModeOutSync: 'Out Sync',
|
||||
rebuild: 'Rebuild',
|
||||
complete: 'Complete',
|
||||
failed: 'Failed',
|
||||
stateOfStart: 'Start',
|
||||
stateOfMetadata: 'Metadata State',
|
||||
stateOfMetadataStarted: 'Metadata Started',
|
||||
stateOfCreateTable: 'Create Table State',
|
||||
syncData: 'Sync Data',
|
||||
visualType: 'Visual Type',
|
||||
visualTypeTable: 'Table',
|
||||
visualTypeLine: 'Line',
|
||||
visualTypeBar: 'Bar',
|
||||
visualTypeArea: 'Area',
|
||||
visualTypePie: 'Pie',
|
||||
visualTypeHistogram: 'Histogram',
|
||||
visualTypeWordCloud: 'Word Cloud',
|
||||
visualConfigure: 'Visual Configure',
|
||||
visualConfigureNotSpecified: 'No configuration items are available',
|
||||
visualConfigureXAxis: 'X Axis',
|
||||
visualConfigureYAxis: 'Y Axis',
|
||||
visualConfigureCategoryField: 'Category',
|
||||
visualConfigureCategoryLeftField: 'Left Category',
|
||||
visualConfigureCategoryRightField: 'Right Category',
|
||||
visualConfigureValueField: 'Value',
|
||||
visualConfigureSeriesField: 'Series',
|
||||
visualConfigureOuterRadius: 'Outer Radius',
|
||||
visualConfigureDataBreakpoint: 'Data Breakpoint',
|
||||
visualConfigureDataBreakpointBreak: 'Break',
|
||||
visualConfigureDataBreakpointContinuous: 'Continuous',
|
||||
visualConfigureDataBreakpointZero: 'Zero',
|
||||
visualConfigureDataBreakpointIgnore: 'Ignore',
|
||||
columnExpressionMax: 'Maximum',
|
||||
columnExpressionMin: 'Minimum',
|
||||
columnExpressionSum: 'Sum',
|
||||
columnExpressionAvg: 'Average',
|
||||
columnExpressionCount: 'Count',
|
||||
columnExpressionEquals: 'Equals',
|
||||
columnExpressionNotEquals: 'Not Equals',
|
||||
columnExpressionIsNull: 'Is Null',
|
||||
columnExpressionIsNotNull: 'Is Not Null',
|
||||
columnExpressionIsIn: 'Is In',
|
||||
columnExpressionIsNotIn: 'Is Not In',
|
||||
columnExpressionIsLike: 'Is Like',
|
||||
columnExpressionIsNotLike: 'Is Not Like',
|
||||
columnExpressionIsContains: 'Is Contains',
|
||||
columnExpressionGreaterThan: 'Greater Than',
|
||||
columnExpressionGreaterThanOrEquals: 'Greater Than Or Equals',
|
||||
columnExpressionLessThan: 'Less Than',
|
||||
columnExpressionLessThanOrEquals: 'Less Than Or Equals',
|
||||
columnExpressionIsNotContains: 'Is Not Contains',
|
||||
customFunction: 'Custom Function',
|
||||
lifeCycleMonth: 'Month',
|
||||
lifeCycleWeek: 'Week',
|
||||
lifeCycleDay: 'Day',
|
||||
lifeCycleHour: 'Hour',
|
||||
notSpecifiedTitle: 'Not Specified',
|
||||
history: 'Sync History',
|
||||
clearData: 'Clear Data',
|
||||
error: 'View Error',
|
||||
info: 'View Info',
|
||||
lifeCycleColumn: 'Lifecycle columns',
|
||||
lifeCycleNumber: 'Lifecycle number',
|
||||
continuousBuild: 'Continuous Build',
|
||||
},
|
||||
validator: {
|
||||
duplicateColumn: 'Column name [ $VALUE ] already exists',
|
||||
specifiedColumn: 'Sort key or primary key must be specified',
|
||||
specifiedName: 'Name must be specified',
|
||||
},
|
||||
tip: {
|
||||
selectExpression: 'Please select the expression',
|
||||
syncData: 'The data synchronization schedule will run in the background, see the logs for the specific synchronization results',
|
||||
clearData: 'Clear data will not be able to rollback, clear operation will run in the background, please be patient',
|
||||
lifeCycle: 'Data set life cycle will be calculated according to the specified list expression',
|
||||
validatorSampling: 'The order by key must contain a sampling key',
|
||||
adhocDnd: 'Drag the indicator dimension on the left to the corresponding position to query and render the data',
|
||||
rebuildProgress: 'Rebuilding will only progress unfinished',
|
||||
lifeCycleMustDateColumn: 'The lifecycle must contain a date column',
|
||||
modifyNotSupportDataPreview: 'Data preview is not supported to modify',
|
||||
publishSuccess: 'Dataset [ $VALUE ] published successfully',
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Function List',
|
||||
keyword: 'Keyword',
|
||||
operator: 'Operator',
|
||||
function: 'Function',
|
||||
example: 'Example',
|
||||
import: 'Import Data',
|
||||
importFromUrl: 'Import from URL',
|
||||
create: 'Create Function',
|
||||
modify: 'Modify Function [ $NAME ]',
|
||||
},
|
||||
tip: {
|
||||
selectPluginHolder: 'Please select a plugin',
|
||||
selectTypeHolder: 'Please select a type'
|
||||
}
|
||||
}
|
@ -1,275 +0,0 @@
|
||||
export default {
|
||||
selectAll: '(Select All)',
|
||||
selectAllSearchResults: '(Select All Search Results)',
|
||||
searchOoo: 'Search...',
|
||||
blanks: '(Blanks)',
|
||||
noMatches: 'No matches',
|
||||
filterOoo: 'Filter...',
|
||||
equals: 'Equals',
|
||||
notEqual: 'Not equal',
|
||||
blank: 'Blank',
|
||||
notBlank: 'Not blank',
|
||||
empty: 'Choose One',
|
||||
lessThan: 'Less than',
|
||||
greaterThan: 'Greater than',
|
||||
lessThanOrEqual: 'Less than or equal',
|
||||
greaterThanOrEqual: 'Greater than or equal',
|
||||
inRange: 'In range',
|
||||
inRangeStart: 'from',
|
||||
inRangeEnd: 'to',
|
||||
contains: 'Contains',
|
||||
notContains: 'Not contains',
|
||||
startsWith: 'Starts with',
|
||||
endsWith: 'Ends with',
|
||||
dateFormatOoo: 'yyyy-mm-dd',
|
||||
andCondition: 'AND',
|
||||
orCondition: 'OR',
|
||||
applyFilter: 'Apply',
|
||||
resetFilter: 'Reset',
|
||||
clearFilter: 'Clear',
|
||||
cancelFilter: 'Cancel',
|
||||
textFilter: 'Text Filter',
|
||||
numberFilter: 'Number Filter',
|
||||
dateFilter: 'Date Filter',
|
||||
setFilter: 'Set Filter',
|
||||
columns: 'Columns',
|
||||
filters: 'Filters',
|
||||
pivotMode: 'Pivot Mode',
|
||||
groups: 'Row Groups',
|
||||
rowGroupColumnsEmptyMessage: 'Drag here to set row groups',
|
||||
values: 'Values',
|
||||
valueColumnsEmptyMessage: 'Drag here to aggregate',
|
||||
pivots: 'Column Labels',
|
||||
pivotColumnsEmptyMessage: 'Drag here to set column labels',
|
||||
group: 'Group',
|
||||
rowDragRow: 'row',
|
||||
rowDragRows: 'rows',
|
||||
loadingOoo: 'Loading...',
|
||||
loadingError: 'ERR',
|
||||
noRowsToShow: 'No Rows To Show',
|
||||
enabled: 'Enabled',
|
||||
pinColumn: 'Pin Column',
|
||||
pinLeft: 'Pin Left',
|
||||
pinRight: 'Pin Right',
|
||||
noPin: 'No Pin',
|
||||
valueAggregation: 'Value Aggregation',
|
||||
autosizeThiscolumn: 'Autosize This Column',
|
||||
autosizeAllColumns: 'Autosize All Columns',
|
||||
groupBy: 'Group by',
|
||||
ungroupBy: 'Un-Group by',
|
||||
addToValues: 'Add ${variable} to values',
|
||||
removeFromValues: 'Remove ${variable} from values',
|
||||
addToLabels: 'Add ${variable} to labels',
|
||||
removeFromLabels: 'Remove ${variable} from labels',
|
||||
resetColumns: 'Reset Columns',
|
||||
expandAll: 'Expand All',
|
||||
collapseAll: 'Close All',
|
||||
copy: 'Copy',
|
||||
ctrlC: 'Ctrl+C',
|
||||
copyWithHeaders: 'Copy With Headers',
|
||||
copyWithGroupHeaders: 'Copy with Group Headers',
|
||||
paste: 'Paste',
|
||||
ctrlV: 'Ctrl+V',
|
||||
export: 'Export',
|
||||
csvExport: 'CSV Export',
|
||||
excelExport: 'Excel Export',
|
||||
sum: 'Sum',
|
||||
min: 'Min',
|
||||
max: 'Max',
|
||||
none: 'None',
|
||||
count: 'Count',
|
||||
avg: 'Average',
|
||||
filteredRows: 'Filtered',
|
||||
selectedRows: 'Selected',
|
||||
totalRows: 'Total Rows',
|
||||
totalAndFilteredRows: 'Rows',
|
||||
more: 'More',
|
||||
to: 'to',
|
||||
of: 'of',
|
||||
page: 'Page',
|
||||
nextPage: 'Next Page',
|
||||
lastPage: 'Last Page',
|
||||
firstPage: 'First Page',
|
||||
previousPage: 'Previous Page',
|
||||
pivotColumnGroupTotals: 'Total',
|
||||
pivotChartAndPivotMode: 'Pivot Chart & Pivot Mode',
|
||||
pivotChart: 'Pivot Chart',
|
||||
chartRange: 'Chart Range',
|
||||
columnChart: 'Column',
|
||||
groupedColumn: 'Grouped',
|
||||
stackedColumn: 'Stacked',
|
||||
normalizedColumn: '100% Stacked',
|
||||
barChart: 'Bar',
|
||||
groupedBar: 'Grouped',
|
||||
stackedBar: 'Stacked',
|
||||
normalizedBar: '100% Stacked',
|
||||
pieChart: 'Pie',
|
||||
pie: 'Pie',
|
||||
doughnut: 'Doughnut',
|
||||
line: 'Line',
|
||||
xyChart: 'X Y (Scatter)',
|
||||
scatter: 'Scatter',
|
||||
bubble: 'Bubble',
|
||||
areaChart: 'Area',
|
||||
area: 'Area',
|
||||
stackedArea: 'Stacked',
|
||||
normalizedArea: '100% Stacked',
|
||||
histogramChart: 'Histogram',
|
||||
histogramFrequency: "Frequency",
|
||||
combinationChart: 'Combination',
|
||||
columnLineCombo: 'Column & Line',
|
||||
AreaColumnCombo: 'Area & Column',
|
||||
pivotChartTitle: 'Pivot Chart',
|
||||
rangeChartTitle: 'Range Chart',
|
||||
settings: 'Settings',
|
||||
data: 'Data',
|
||||
format: 'Format',
|
||||
categories: 'Categories',
|
||||
defaultCategory: '(None)',
|
||||
series: 'Series',
|
||||
xyValues: 'X Y Values',
|
||||
paired: 'Paired Mode',
|
||||
axis: 'Axis',
|
||||
navigator: 'Navigator',
|
||||
color: 'Color',
|
||||
thickness: 'Thickness',
|
||||
xType: 'X Type',
|
||||
automatic: 'Automatic',
|
||||
category: 'Category',
|
||||
number: 'Number',
|
||||
time: 'Time',
|
||||
autoRotate: 'Auto Rotate',
|
||||
xRotation: 'X Rotation',
|
||||
yRotation: 'Y Rotation',
|
||||
ticks: 'Ticks',
|
||||
width: 'Width',
|
||||
height: 'Height',
|
||||
length: 'Length',
|
||||
padding: 'Padding',
|
||||
spacing: 'Spacing',
|
||||
chart: 'Chart',
|
||||
title: 'Title',
|
||||
titlePlaceholder: 'Chart title - double click to edit',
|
||||
background: 'Background',
|
||||
font: 'Font',
|
||||
top: 'Top',
|
||||
right: 'Right',
|
||||
bottom: 'Bottom',
|
||||
left: 'Left',
|
||||
labels: 'Labels',
|
||||
size: 'Size',
|
||||
minSize: 'Minimum Size',
|
||||
maxSize: 'Maximum Size',
|
||||
legend: 'Legend',
|
||||
position: 'Position',
|
||||
markerSize: 'Marker Size',
|
||||
markerStroke: 'Marker Stroke',
|
||||
markerPadding: 'Marker Padding',
|
||||
itemSpacing: 'Item Spacing',
|
||||
itemPaddingX: 'Item Padding X',
|
||||
itemPaddingY: 'Item Padding Y',
|
||||
layoutHorizontalSpacing: 'Horizontal Spacing',
|
||||
layoutVerticalSpacing: 'Vertical Spacing',
|
||||
strokeWidth: 'Stroke Width',
|
||||
lineDash: 'Line Dash',
|
||||
offset: 'Offset',
|
||||
offsets: 'Offsets',
|
||||
tooltips: 'Tooltips',
|
||||
callout: 'Callout',
|
||||
markers: 'Markers',
|
||||
shadow: 'Shadow',
|
||||
blur: 'Blur',
|
||||
xOffset: 'X Offset',
|
||||
yOffset: 'Y Offset',
|
||||
lineWidth: 'Line Width',
|
||||
normal: 'Normal',
|
||||
bold: 'Bold',
|
||||
italic: 'Italic',
|
||||
boldItalic: 'Bold Italic',
|
||||
predefined: 'Predefined',
|
||||
fillOpacity: 'Fill Opacity',
|
||||
strokeOpacity: 'Line Opacity',
|
||||
histogramBinCount: 'Bin count',
|
||||
columnGroup: 'Column',
|
||||
barGroup: 'Bar',
|
||||
pieGroup: 'Pie',
|
||||
lineGroup: 'Line',
|
||||
scatterGroup: 'X Y (Scatter)',
|
||||
areaGroup: 'Area',
|
||||
histogramGroup: 'Histogram',
|
||||
combinationGroup: 'Combination',
|
||||
groupedColumnTooltip: 'Grouped',
|
||||
stackedColumnTooltip: 'Stacked',
|
||||
normalizedColumnTooltip: '100% Stacked',
|
||||
groupedBarTooltip: 'Grouped',
|
||||
stackedBarTooltip: 'Stacked',
|
||||
normalizedBarTooltip: '100% Stacked',
|
||||
pieTooltip: 'Pie',
|
||||
doughnutTooltip: 'Doughnut',
|
||||
lineTooltip: 'Line',
|
||||
groupedAreaTooltip: 'Area',
|
||||
stackedAreaTooltip: 'Stacked',
|
||||
normalizedAreaTooltip: '100% Stacked',
|
||||
scatterTooltip: 'Scatter',
|
||||
bubbleTooltip: 'Bubble',
|
||||
histogramTooltip: 'Histogram',
|
||||
columnLineComboTooltip: 'Column & Line',
|
||||
areaColumnComboTooltip: 'Area & Column',
|
||||
customComboTooltip: 'Custom Combination',
|
||||
noDataToChart: 'No data available to be charted.',
|
||||
pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',
|
||||
chartSettingsToolbarTooltip: 'Menu',
|
||||
chartLinkToolbarTooltip: 'Linked to Grid',
|
||||
chartUnlinkToolbarTooltip: 'Unlinked from Grid',
|
||||
chartDownloadToolbarTooltip: 'Download Chart',
|
||||
seriesChartType: 'Series Chart Type',
|
||||
seriesType: 'Series Type',
|
||||
secondaryAxis: 'Secondary Axis',
|
||||
ariaChecked: 'checked',
|
||||
ariaColumn: 'Column',
|
||||
ariaColumnGroup: 'Column Group',
|
||||
ariaColumnList: 'Column List',
|
||||
ariaColumnSelectAll: 'Toggle Select All Columns',
|
||||
ariaDateFilterInput: 'Date Filter Input',
|
||||
ariaDefaultListName: 'List',
|
||||
ariaFilterColumnsInput: 'Filter Columns Input',
|
||||
ariaFilterFromValue: 'Filter from value',
|
||||
ariaFilterInput: 'Filter Input',
|
||||
ariaFilterList: 'Filter List',
|
||||
ariaFilterToValue: 'Filter to value',
|
||||
ariaFilterValue: 'Filter Value',
|
||||
ariaFilteringOperator: 'Filtering Operator',
|
||||
ariaHidden: 'hidden',
|
||||
ariaIndeterminate: 'indeterminate',
|
||||
ariaInputEditor: 'Input Editor',
|
||||
ariaMenuColumn: 'Press CTRL ENTER to open column menu.',
|
||||
ariaRowDeselect: 'Press SPACE to deselect this row',
|
||||
ariaRowSelectAll: 'Press Space to toggle all rows selection',
|
||||
ariaRowToggleSelection: 'Press Space to toggle row selection',
|
||||
ariaRowSelect: 'Press SPACE to select this row',
|
||||
ariaSearch: 'Search',
|
||||
ariaSortableColumn: 'Press ENTER to sort',
|
||||
ariaToggleVisibility: 'Press SPACE to toggle visibility',
|
||||
ariaUnchecked: 'unchecked',
|
||||
ariaVisible: 'visible',
|
||||
ariaSearchFilterValues: 'Search filter values',
|
||||
ariaRowGroupDropZonePanelLabel: 'Row Groups',
|
||||
ariaValuesDropZonePanelLabel: 'Values',
|
||||
ariaPivotDropZonePanelLabel: 'Column Labels',
|
||||
ariaDropZoneColumnComponentDescription: 'Press DELETE to remove',
|
||||
ariaDropZoneColumnValueItemDescription: 'Press ENTER to change the aggregation type',
|
||||
ariaDropZoneColumnGroupItemDescription: 'Press ENTER to sort',
|
||||
ariaDropZoneColumnComponentAggFuncSeperator: ' of ',
|
||||
ariaDropZoneColumnComponentSortAscending: 'ascending',
|
||||
ariaDropZoneColumnComponentSortDescending: 'descending',
|
||||
ariaLabelColumnMenu: 'Column Menu',
|
||||
ariaLabelCellEditor: 'Cell Editor',
|
||||
ariaLabelDialog: 'Dialog',
|
||||
ariaLabelSelectField: 'Select Field',
|
||||
ariaLabelTooltip: 'Tooltip',
|
||||
ariaLabelContextMenu: 'Context Menu',
|
||||
ariaLabelSubMenu: 'SubMenu',
|
||||
ariaLabelAggregationFunction: 'Aggregation Function',
|
||||
thousandSeparator: ',',
|
||||
decimalSeparator: '.'
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
jan: 'Jan',
|
||||
feb: 'Feb',
|
||||
mar: 'Mär',
|
||||
apr: 'Apr',
|
||||
mai: 'Mai',
|
||||
jun: 'Jun',
|
||||
jul: 'Jul',
|
||||
aug: 'Aug',
|
||||
sep: 'Sep',
|
||||
okt: 'Okt',
|
||||
nov: 'Nov',
|
||||
dez: 'Dez',
|
||||
so: 'So',
|
||||
mo: 'Mo',
|
||||
di: 'Di',
|
||||
mi: 'Mi',
|
||||
do: 'Do',
|
||||
fr: 'Fr',
|
||||
sa: 'Sa',
|
||||
am: 'am',
|
||||
less: 'Less',
|
||||
more: 'More',
|
||||
query: 'Query'
|
||||
}
|
||||
}
|
@ -1,39 +1,960 @@
|
||||
import user from '@/i18n/langs/en/user'
|
||||
import common from '@/i18n/langs/en/common'
|
||||
import role from '@/i18n/langs/zhCn/role'
|
||||
import schedule from '@/i18n/langs/en/schedule'
|
||||
import dashboard from '@/i18n/langs/en/dashboard'
|
||||
import dataset from '@/i18n/langs/en/dataset'
|
||||
import state from '@/i18n/langs/en/state'
|
||||
import query from '@/i18n/langs/en/query'
|
||||
import source from '@/i18n/langs/en/source'
|
||||
import grid from '@/i18n/langs/en/grid'
|
||||
import heatmap from '@/i18n/langs/en/heatmap'
|
||||
import region from '@/i18n/langs/en/region'
|
||||
import function1 from '@/i18n/langs/en/function'
|
||||
import template from '@/i18n/langs/en/template'
|
||||
import menu from '@/i18n/langs/en/menu'
|
||||
import snippet from '@/i18n/langs/en/snippet'
|
||||
import report from '@/i18n/langs/en/report'
|
||||
import pipeline from '@/i18n/langs/en/pipeline'
|
||||
|
||||
export default {
|
||||
common: common,
|
||||
user: user,
|
||||
role: role,
|
||||
schedule: schedule,
|
||||
dashboard: dashboard,
|
||||
dataset: dataset,
|
||||
state: state,
|
||||
query: query,
|
||||
source: source,
|
||||
grid: grid,
|
||||
heatmap: heatmap,
|
||||
region: region,
|
||||
function: function1,
|
||||
template: template,
|
||||
menu: menu,
|
||||
snippet: snippet,
|
||||
report: report,
|
||||
pipeline: pipeline
|
||||
state: {
|
||||
common: {
|
||||
create: 'Created',
|
||||
running: 'Running',
|
||||
success: 'Success',
|
||||
failure: 'Failure',
|
||||
stop: 'Stopped',
|
||||
timeout: 'Timeout',
|
||||
queue: 'Queue'
|
||||
}
|
||||
},
|
||||
query: {
|
||||
common: {
|
||||
execute: 'Execute',
|
||||
executeSelection: 'Execute (Selection)',
|
||||
connectionTime: 'Connection Time',
|
||||
executionTime: 'Execution Time',
|
||||
format: 'Format',
|
||||
help: 'Help',
|
||||
showSql: 'Show SQL',
|
||||
quoteRecord: 'Quote Record',
|
||||
historyData: 'History Data',
|
||||
historyDataInfo: '[ $VALUE ] History Data'
|
||||
},
|
||||
tip: {
|
||||
pageShow: 'Open / Close the page',
|
||||
smallTips: 'Tip: hold down the keyboard Shift and select the number of data rows with the mouse to automatically copy the contents of the selected row',
|
||||
notPresetToken: 'There is no token available, please go to your personal center to configure a token',
|
||||
}
|
||||
},
|
||||
source: {
|
||||
common: {
|
||||
list: 'Source List',
|
||||
modify: 'Modify Source [ $NAME ]',
|
||||
source: 'Source',
|
||||
configure: 'Configure',
|
||||
authorization: 'Authorization',
|
||||
advanced: 'Advanced',
|
||||
custom: 'Custom',
|
||||
host: 'Host Address',
|
||||
port: 'Port',
|
||||
name: 'Name',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
database: 'Database',
|
||||
ssl: 'SSL',
|
||||
file: 'File',
|
||||
create: 'Create Source',
|
||||
delete: 'Delete Source [ $NAME ]',
|
||||
syncMetadata: 'Sync Metadata',
|
||||
syncHistory: 'Sync History',
|
||||
manager: 'Data Manager',
|
||||
info: 'Basic Information',
|
||||
notSpecified: 'Not Specified',
|
||||
notUpdated: 'Not Updated',
|
||||
engine: 'Engine',
|
||||
notSpecifiedEngine: 'Not Specified Engine',
|
||||
collation: 'Collation',
|
||||
notSpecifiedCollation: 'Not Specified Collation',
|
||||
dataInfo: 'Data Information',
|
||||
totalRows: 'Total Rows',
|
||||
format: 'Format',
|
||||
notSpecifiedFormat: 'Not Specified Format',
|
||||
avgRowLength: 'Average Row Length',
|
||||
dataSize: 'Data Size',
|
||||
indexSize: 'Index Size',
|
||||
notSpecifiedIndex: 'Not Specified Index',
|
||||
autoIncrement: 'Auto Increment',
|
||||
notSpecifiedPrimaryKey: 'Not Specified Primary Key',
|
||||
resetAutoIncrement: 'Reset Auto Increment',
|
||||
resetTo: 'Reset to',
|
||||
comment: 'Table Comment',
|
||||
menuNew: 'New',
|
||||
menuNewTable: 'New Table',
|
||||
tableName: 'Table Name',
|
||||
columnName: 'Column Name',
|
||||
columnType: 'Column Type',
|
||||
columnLength: 'Column Length',
|
||||
columnDefaultValue: 'Default Value',
|
||||
columnPrimaryKey: 'Primary Key',
|
||||
columnAutoIncrement: 'Auto Increment',
|
||||
columnIsNullable: 'Is Nullable',
|
||||
columnComment: 'Column Comment',
|
||||
newColumn: 'New Column',
|
||||
menuExport: 'Export',
|
||||
exportData: 'Export Data',
|
||||
exportDataTable: 'Export [ $VALUE ] Table Data',
|
||||
exportDataFormat: 'Export Data Format',
|
||||
exportDataCount: 'Export Data Count',
|
||||
downloadPath: 'Download Path',
|
||||
downloadFile: 'Download File',
|
||||
truncateTable: 'Truncate Table',
|
||||
truncateTableInfo: 'Truncate [ $VALUE ] Table',
|
||||
dropTable: 'Drop Table',
|
||||
dropTableInfo: 'Drop [ $VALUE ] Table',
|
||||
structure: 'Structure',
|
||||
isNullable: 'Is Nullable',
|
||||
defaultValue: 'Default Value',
|
||||
extra: 'Extra',
|
||||
changeColumn: 'Change Column',
|
||||
changeColumnInfo: 'Change [ $VALUE ] Column',
|
||||
dropColumn: 'Drop Column',
|
||||
dropColumnInfo: 'Drop [ $VALUE ] Column',
|
||||
tableData: 'Table Data',
|
||||
firstPage: 'First Page',
|
||||
previousPage: 'Previous Page',
|
||||
nextPage: 'Next Page',
|
||||
lastPage: 'Last Page',
|
||||
jumpPage: 'Jump to Page',
|
||||
showPageSize: 'Show Page Size',
|
||||
records: 'Records',
|
||||
addRows: 'Add Rows',
|
||||
previewPendingChanges: 'Preview Pending Changes',
|
||||
previewDML: 'Preview DML',
|
||||
copyRows: 'Copy Rows',
|
||||
deleteRows: 'Delete Rows',
|
||||
visibleColumn: 'Visible Column',
|
||||
filterData: 'Filter Data',
|
||||
filterCondition: 'Filter Condition',
|
||||
addFilter: 'Add Filter',
|
||||
statement: 'Statement',
|
||||
erDiagram: 'ER Diagram',
|
||||
},
|
||||
tip: {
|
||||
selectSource: 'Please select a source',
|
||||
deleteSourceSuccess: 'Delete source [ $NAME ] success',
|
||||
deleteAlert1: 'You are deleting a data source. This action permanently deletes all data and configurations associated with that data source. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: Doing this will not be undone. All data and configurations associated with that data source will be permanently deleted.',
|
||||
deleteAlert3: 'To confirm, type [ $NAME ] in the box below',
|
||||
syncMetadata1: 'Sync metadata will run in the background',
|
||||
syncMetadata2: 'Synchronizing metadata will overwrite the current metadata, which may result in data loss.',
|
||||
syncMetadata3: 'To confirm, type [ $NAME ] in the box below',
|
||||
syncMetadata4: 'Task [ $NAME ] has started',
|
||||
selectDatabase: 'Please select a database',
|
||||
notSelectedNode: 'Please select the node on the left to display the results',
|
||||
resetAutoIncrementSuccess: 'Reset auto increment to [ $VALUE ] success',
|
||||
createTableSuccess: 'Create table [ $VALUE ] success',
|
||||
createColumnSuccess: 'Create column [ $VALUE ] success',
|
||||
truncateTableSuccess: 'Truncate table [ $VALUE ] success',
|
||||
truncateTable1: 'You are about to truncate the table. This will delete all data in the table. Are you sure you want to continue? ',
|
||||
truncateTable2: 'Please note that the truncation table operation is irreversible. Doing this will permanently delete all data in the table. Please make sure you have backed up important data. ',
|
||||
truncateTable3: 'Performing a truncate table operation will immediately delete all data in the table, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
truncateTable4: 'We recommend that you first test the truncate table operation in a non-production environment to ensure that it does not have unexpected effects on your production data. ',
|
||||
truncateTable5: 'If you have any questions or need assistance performing a truncate table operation, please contact your database administrator or technical support team. ',
|
||||
dropTableSuccess: 'Drop table [ $VALUE ] success',
|
||||
dropTable1: 'You are about to delete a table. This operation will permanently delete the table and all its data. Are you sure you want to continue? ',
|
||||
dropTable2: 'Please note that dropping a table is irreversible. Doing this will permanently delete the table and all its data. Please make sure you have backed up important data. ',
|
||||
dropTable3: 'Performing a drop table operation will immediately delete the table and all its data, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
dropTable4: 'We recommend that you first test the drop table operation in a non-production environment to ensure that it does not have unintended effects on your production data. ',
|
||||
dropTable5: 'If you have any questions or need assistance performing a drop table operation, please contact your database administrator or technical support team. ',
|
||||
changeColumnSuccess: 'Change column [ $VALUE ] success',
|
||||
dropColumnSuccess: 'Drop column [ $VALUE ] success',
|
||||
dropColumn1: 'You are about to delete a column. This operation will permanently delete the column and all its data. Are you sure you want to continue? ',
|
||||
dropColumn2: 'Please note that deleting a column is irreversible. Doing this will permanently delete the column and all its data. Please make sure you have backed up important data. ',
|
||||
dropColumn3: 'Performing a drop column operation will immediately delete the column and all its data, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
dropColumn4: 'We recommend that you first test the drop column operation in a non-production environment to ensure that it does not have unintended effects on your production data. ',
|
||||
dropColumn5: 'If you have any questions or need assistance performing a drop column operation, please contact your database administrator or technical support team. ',
|
||||
updateSuccess: 'Update success',
|
||||
deleteSuccess: 'Delete success'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
selectAll: '(Select All)',
|
||||
selectAllSearchResults: '(Select All Search Results)',
|
||||
searchOoo: 'Search...',
|
||||
blanks: '(Blanks)',
|
||||
noMatches: 'No matches',
|
||||
filterOoo: 'Filter...',
|
||||
equals: 'Equals',
|
||||
notEqual: 'Not equal',
|
||||
blank: 'Blank',
|
||||
notBlank: 'Not blank',
|
||||
empty: 'Choose One',
|
||||
lessThan: 'Less than',
|
||||
greaterThan: 'Greater than',
|
||||
lessThanOrEqual: 'Less than or equal',
|
||||
greaterThanOrEqual: 'Greater than or equal',
|
||||
inRange: 'In range',
|
||||
inRangeStart: 'from',
|
||||
inRangeEnd: 'to',
|
||||
contains: 'Contains',
|
||||
notContains: 'Not contains',
|
||||
startsWith: 'Starts with',
|
||||
endsWith: 'Ends with',
|
||||
dateFormatOoo: 'yyyy-mm-dd',
|
||||
andCondition: 'AND',
|
||||
orCondition: 'OR',
|
||||
applyFilter: 'Apply',
|
||||
resetFilter: 'Reset',
|
||||
clearFilter: 'Clear',
|
||||
cancelFilter: 'Cancel',
|
||||
textFilter: 'Text Filter',
|
||||
numberFilter: 'Number Filter',
|
||||
dateFilter: 'Date Filter',
|
||||
setFilter: 'Set Filter',
|
||||
columns: 'Columns',
|
||||
filters: 'Filters',
|
||||
pivotMode: 'Pivot Mode',
|
||||
groups: 'Row Groups',
|
||||
rowGroupColumnsEmptyMessage: 'Drag here to set row groups',
|
||||
values: 'Values',
|
||||
valueColumnsEmptyMessage: 'Drag here to aggregate',
|
||||
pivots: 'Column Labels',
|
||||
pivotColumnsEmptyMessage: 'Drag here to set column labels',
|
||||
group: 'Group',
|
||||
rowDragRow: 'row',
|
||||
rowDragRows: 'rows',
|
||||
loadingOoo: 'Loading...',
|
||||
loadingError: 'ERR',
|
||||
noRowsToShow: 'No Rows To Show',
|
||||
enabled: 'Enabled',
|
||||
pinColumn: 'Pin Column',
|
||||
pinLeft: 'Pin Left',
|
||||
pinRight: 'Pin Right',
|
||||
noPin: 'No Pin',
|
||||
valueAggregation: 'Value Aggregation',
|
||||
autosizeThiscolumn: 'Autosize This Column',
|
||||
autosizeAllColumns: 'Autosize All Columns',
|
||||
groupBy: 'Group by',
|
||||
ungroupBy: 'Un-Group by',
|
||||
addToValues: 'Add ${variable} to values',
|
||||
removeFromValues: 'Remove ${variable} from values',
|
||||
addToLabels: 'Add ${variable} to labels',
|
||||
removeFromLabels: 'Remove ${variable} from labels',
|
||||
resetColumns: 'Reset Columns',
|
||||
expandAll: 'Expand All',
|
||||
collapseAll: 'Close All',
|
||||
copy: 'Copy',
|
||||
ctrlC: 'Ctrl+C',
|
||||
copyWithHeaders: 'Copy With Headers',
|
||||
copyWithGroupHeaders: 'Copy with Group Headers',
|
||||
paste: 'Paste',
|
||||
ctrlV: 'Ctrl+V',
|
||||
export: 'Export',
|
||||
csvExport: 'CSV Export',
|
||||
excelExport: 'Excel Export',
|
||||
sum: 'Sum',
|
||||
min: 'Min',
|
||||
max: 'Max',
|
||||
none: 'None',
|
||||
count: 'Count',
|
||||
avg: 'Average',
|
||||
filteredRows: 'Filtered',
|
||||
selectedRows: 'Selected',
|
||||
totalRows: 'Total Rows',
|
||||
totalAndFilteredRows: 'Rows',
|
||||
more: 'More',
|
||||
to: 'to',
|
||||
of: 'of',
|
||||
page: 'Page',
|
||||
nextPage: 'Next Page',
|
||||
lastPage: 'Last Page',
|
||||
firstPage: 'First Page',
|
||||
previousPage: 'Previous Page',
|
||||
pivotColumnGroupTotals: 'Total',
|
||||
pivotChartAndPivotMode: 'Pivot Chart & Pivot Mode',
|
||||
pivotChart: 'Pivot Chart',
|
||||
chartRange: 'Chart Range',
|
||||
columnChart: 'Column',
|
||||
groupedColumn: 'Grouped',
|
||||
stackedColumn: 'Stacked',
|
||||
normalizedColumn: '100% Stacked',
|
||||
barChart: 'Bar',
|
||||
groupedBar: 'Grouped',
|
||||
stackedBar: 'Stacked',
|
||||
normalizedBar: '100% Stacked',
|
||||
pieChart: 'Pie',
|
||||
pie: 'Pie',
|
||||
doughnut: 'Doughnut',
|
||||
line: 'Line',
|
||||
xyChart: 'X Y (Scatter)',
|
||||
scatter: 'Scatter',
|
||||
bubble: 'Bubble',
|
||||
areaChart: 'Area',
|
||||
area: 'Area',
|
||||
stackedArea: 'Stacked',
|
||||
normalizedArea: '100% Stacked',
|
||||
histogramChart: 'Histogram',
|
||||
histogramFrequency: 'Frequency',
|
||||
combinationChart: 'Combination',
|
||||
columnLineCombo: 'Column & Line',
|
||||
AreaColumnCombo: 'Area & Column',
|
||||
pivotChartTitle: 'Pivot Chart',
|
||||
rangeChartTitle: 'Range Chart',
|
||||
settings: 'Settings',
|
||||
data: 'Data',
|
||||
format: 'Format',
|
||||
categories: 'Categories',
|
||||
defaultCategory: '(None)',
|
||||
series: 'Series',
|
||||
xyValues: 'X Y Values',
|
||||
paired: 'Paired Mode',
|
||||
axis: 'Axis',
|
||||
navigator: 'Navigator',
|
||||
color: 'Color',
|
||||
thickness: 'Thickness',
|
||||
xType: 'X Type',
|
||||
automatic: 'Automatic',
|
||||
category: 'Category',
|
||||
number: 'Number',
|
||||
time: 'Time',
|
||||
autoRotate: 'Auto Rotate',
|
||||
xRotation: 'X Rotation',
|
||||
yRotation: 'Y Rotation',
|
||||
ticks: 'Ticks',
|
||||
width: 'Width',
|
||||
height: 'Height',
|
||||
length: 'Length',
|
||||
padding: 'Padding',
|
||||
spacing: 'Spacing',
|
||||
chart: 'Chart',
|
||||
title: 'Title',
|
||||
titlePlaceholder: 'Chart title - double click to edit',
|
||||
background: 'Background',
|
||||
font: 'Font',
|
||||
top: 'Top',
|
||||
right: 'Right',
|
||||
bottom: 'Bottom',
|
||||
left: 'Left',
|
||||
labels: 'Labels',
|
||||
size: 'Size',
|
||||
minSize: 'Minimum Size',
|
||||
maxSize: 'Maximum Size',
|
||||
legend: 'Legend',
|
||||
position: 'Position',
|
||||
markerSize: 'Marker Size',
|
||||
markerStroke: 'Marker Stroke',
|
||||
markerPadding: 'Marker Padding',
|
||||
itemSpacing: 'Item Spacing',
|
||||
itemPaddingX: 'Item Padding X',
|
||||
itemPaddingY: 'Item Padding Y',
|
||||
layoutHorizontalSpacing: 'Horizontal Spacing',
|
||||
layoutVerticalSpacing: 'Vertical Spacing',
|
||||
strokeWidth: 'Stroke Width',
|
||||
lineDash: 'Line Dash',
|
||||
offset: 'Offset',
|
||||
offsets: 'Offsets',
|
||||
tooltips: 'Tooltips',
|
||||
callout: 'Callout',
|
||||
markers: 'Markers',
|
||||
shadow: 'Shadow',
|
||||
blur: 'Blur',
|
||||
xOffset: 'X Offset',
|
||||
yOffset: 'Y Offset',
|
||||
lineWidth: 'Line Width',
|
||||
normal: 'Normal',
|
||||
bold: 'Bold',
|
||||
italic: 'Italic',
|
||||
boldItalic: 'Bold Italic',
|
||||
predefined: 'Predefined',
|
||||
fillOpacity: 'Fill Opacity',
|
||||
strokeOpacity: 'Line Opacity',
|
||||
histogramBinCount: 'Bin count',
|
||||
columnGroup: 'Column',
|
||||
barGroup: 'Bar',
|
||||
pieGroup: 'Pie',
|
||||
lineGroup: 'Line',
|
||||
scatterGroup: 'X Y (Scatter)',
|
||||
areaGroup: 'Area',
|
||||
histogramGroup: 'Histogram',
|
||||
combinationGroup: 'Combination',
|
||||
groupedColumnTooltip: 'Grouped',
|
||||
stackedColumnTooltip: 'Stacked',
|
||||
normalizedColumnTooltip: '100% Stacked',
|
||||
groupedBarTooltip: 'Grouped',
|
||||
stackedBarTooltip: 'Stacked',
|
||||
normalizedBarTooltip: '100% Stacked',
|
||||
pieTooltip: 'Pie',
|
||||
doughnutTooltip: 'Doughnut',
|
||||
lineTooltip: 'Line',
|
||||
groupedAreaTooltip: 'Area',
|
||||
stackedAreaTooltip: 'Stacked',
|
||||
normalizedAreaTooltip: '100% Stacked',
|
||||
scatterTooltip: 'Scatter',
|
||||
bubbleTooltip: 'Bubble',
|
||||
histogramTooltip: 'Histogram',
|
||||
columnLineComboTooltip: 'Column & Line',
|
||||
areaColumnComboTooltip: 'Area & Column',
|
||||
customComboTooltip: 'Custom Combination',
|
||||
noDataToChart: 'No data available to be charted.',
|
||||
pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',
|
||||
chartSettingsToolbarTooltip: 'Menu',
|
||||
chartLinkToolbarTooltip: 'Linked to Grid',
|
||||
chartUnlinkToolbarTooltip: 'Unlinked from Grid',
|
||||
chartDownloadToolbarTooltip: 'Download Chart',
|
||||
seriesChartType: 'Series Chart Type',
|
||||
seriesType: 'Series Type',
|
||||
secondaryAxis: 'Secondary Axis',
|
||||
ariaChecked: 'checked',
|
||||
ariaColumn: 'Column',
|
||||
ariaColumnGroup: 'Column Group',
|
||||
ariaColumnList: 'Column List',
|
||||
ariaColumnSelectAll: 'Toggle Select All Columns',
|
||||
ariaDateFilterInput: 'Date Filter Input',
|
||||
ariaDefaultListName: 'List',
|
||||
ariaFilterColumnsInput: 'Filter Columns Input',
|
||||
ariaFilterFromValue: 'Filter from value',
|
||||
ariaFilterInput: 'Filter Input',
|
||||
ariaFilterList: 'Filter List',
|
||||
ariaFilterToValue: 'Filter to value',
|
||||
ariaFilterValue: 'Filter Value',
|
||||
ariaFilteringOperator: 'Filtering Operator',
|
||||
ariaHidden: 'hidden',
|
||||
ariaIndeterminate: 'indeterminate',
|
||||
ariaInputEditor: 'Input Editor',
|
||||
ariaMenuColumn: 'Press CTRL ENTER to open column menu.',
|
||||
ariaRowDeselect: 'Press SPACE to deselect this row',
|
||||
ariaRowSelectAll: 'Press Space to toggle all rows selection',
|
||||
ariaRowToggleSelection: 'Press Space to toggle row selection',
|
||||
ariaRowSelect: 'Press SPACE to select this row',
|
||||
ariaSearch: 'Search',
|
||||
ariaSortableColumn: 'Press ENTER to sort',
|
||||
ariaToggleVisibility: 'Press SPACE to toggle visibility',
|
||||
ariaUnchecked: 'unchecked',
|
||||
ariaVisible: 'visible',
|
||||
ariaSearchFilterValues: 'Search filter values',
|
||||
ariaRowGroupDropZonePanelLabel: 'Row Groups',
|
||||
ariaValuesDropZonePanelLabel: 'Values',
|
||||
ariaPivotDropZonePanelLabel: 'Column Labels',
|
||||
ariaDropZoneColumnComponentDescription: 'Press DELETE to remove',
|
||||
ariaDropZoneColumnValueItemDescription: 'Press ENTER to change the aggregation type',
|
||||
ariaDropZoneColumnGroupItemDescription: 'Press ENTER to sort',
|
||||
ariaDropZoneColumnComponentAggFuncSeperator: ' of ',
|
||||
ariaDropZoneColumnComponentSortAscending: 'ascending',
|
||||
ariaDropZoneColumnComponentSortDescending: 'descending',
|
||||
ariaLabelColumnMenu: 'Column Menu',
|
||||
ariaLabelCellEditor: 'Cell Editor',
|
||||
ariaLabelDialog: 'Dialog',
|
||||
ariaLabelSelectField: 'Select Field',
|
||||
ariaLabelTooltip: 'Tooltip',
|
||||
ariaLabelContextMenu: 'Context Menu',
|
||||
ariaLabelSubMenu: 'SubMenu',
|
||||
ariaLabelAggregationFunction: 'Aggregation Function',
|
||||
thousandSeparator: ',',
|
||||
decimalSeparator: '.'
|
||||
},
|
||||
heatmap: {
|
||||
common: {
|
||||
jan: 'Jan',
|
||||
feb: 'Feb',
|
||||
mar: 'Mär',
|
||||
apr: 'Apr',
|
||||
mai: 'Mai',
|
||||
jun: 'Jun',
|
||||
jul: 'Jul',
|
||||
aug: 'Aug',
|
||||
sep: 'Sep',
|
||||
okt: 'Okt',
|
||||
nov: 'Nov',
|
||||
dez: 'Dez',
|
||||
so: 'So',
|
||||
mo: 'Mo',
|
||||
di: 'Di',
|
||||
mi: 'Mi',
|
||||
do: 'Do',
|
||||
fr: 'Fr',
|
||||
sa: 'Sa',
|
||||
am: 'am',
|
||||
less: 'Less',
|
||||
more: 'More',
|
||||
query: 'Query'
|
||||
}
|
||||
},
|
||||
region: {
|
||||
common: {
|
||||
selectLanguage: 'Select Language',
|
||||
asia: {
|
||||
default: 'Asia',
|
||||
chineseSimple: 'Simple Chinese'
|
||||
},
|
||||
northAmerica: {
|
||||
default: 'North America',
|
||||
english: 'English'
|
||||
}
|
||||
}
|
||||
},
|
||||
template: {
|
||||
common: {
|
||||
list: 'Template List',
|
||||
create: 'Create Template',
|
||||
modify: 'Modify Template [ $NAME ]',
|
||||
}
|
||||
},
|
||||
menu: {
|
||||
common: {
|
||||
list: 'Menu List',
|
||||
create: 'Create Menu',
|
||||
modify: 'Modify Menu [ $NAME ]',
|
||||
parent: 'Parent Menu',
|
||||
redirect: 'Redirect Menu',
|
||||
new: 'New Menu',
|
||||
i18nKey: 'I18N Key',
|
||||
icon: 'Icon',
|
||||
},
|
||||
tip: {
|
||||
selectType: 'Please select a type',
|
||||
selectParent: 'Please select a parent',
|
||||
selectRedirect: 'Please select a redirect'
|
||||
}
|
||||
},
|
||||
snippet: {
|
||||
common: {
|
||||
list: 'Snippet List',
|
||||
create: 'Create Snippet',
|
||||
modify: 'Modify Snippet [ $VALUE ]',
|
||||
delete: 'Delete Snippet',
|
||||
deleteInfo: 'Delete Snippet [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
createSuccess: 'Snippet [ $VALUE ] created successfully',
|
||||
deleteSuccess: 'Snippet [ $VALUE ] deleted successfully',
|
||||
deleteAlert1: 'Are you sure you want to delete this code snippet? This action cannot be undone. ',
|
||||
deleteAlert2: 'After deleting the code fragment, the data related to it will be permanently deleted. ',
|
||||
deleteAlert3: 'After a code fragment is deleted, it cannot be restored. ',
|
||||
deleteAlert4: 'To confirm, type [ $VALUE ] in the box below'
|
||||
}
|
||||
},
|
||||
report: {
|
||||
common: {
|
||||
list: 'Report List',
|
||||
view: 'View Report [ $VALUE ]',
|
||||
modify: 'Modify Report',
|
||||
delete: 'Delete Report',
|
||||
deleteInfo: 'Delete Report [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: 'Delete report [ $VALUE ] successfully',
|
||||
deleteAlert1: 'You are deleting a report. This action permanently deletes the report. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: This cannot be undone.',
|
||||
deleteAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
publishSuccess: 'Report [ $VALUE ] published successfully',
|
||||
}
|
||||
},
|
||||
pipeline: {
|
||||
common: {
|
||||
list: 'Pipeline List',
|
||||
logger: 'Pipeline Logger',
|
||||
loggerInfo: 'Pipeline [ $VALUE ] Logger',
|
||||
delete: 'Delete Pipeline',
|
||||
deleteInfo: 'Delete Pipeline [ $VALUE ]',
|
||||
stop: 'Stop Pipeline',
|
||||
stopInfo: 'Stop Pipeline [ $VALUE ]',
|
||||
flow: 'Pipeline Flow',
|
||||
flowInfo: 'Pipeline [ $VALUE ] Flow',
|
||||
create: 'Create Pipeline',
|
||||
input: 'Input Source',
|
||||
output: 'Output Source',
|
||||
resetTransform: 'Reset Transform',
|
||||
},
|
||||
validator: {
|
||||
from: 'Please configure the input source information',
|
||||
to: 'Please configure the output source information',
|
||||
edge: 'Please connect the input and output source'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: 'Delete pipeline [ $VALUE ] successfully',
|
||||
deleteAlert1: 'You are deleting a pipeline. This action permanently deletes the pipeline. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: This cannot be undone.',
|
||||
deleteAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
stopAlert1: 'You are stopping a pipeline. This action permanently stops the pipeline. Please be sure to confirm your actions before proceeding.',
|
||||
stopAlert2: 'Warning: This cannot be undone.',
|
||||
stopAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
stopSuccess: 'Pipeline [ $VALUE ] stopped successfully',
|
||||
publishSuccess: 'Pipeline [ $VALUE ] published successfully',
|
||||
}
|
||||
},
|
||||
common: {
|
||||
home: 'Home',
|
||||
dashboard: 'Dashboard',
|
||||
query: 'Query',
|
||||
dataset: 'Dataset',
|
||||
admin: 'Admin',
|
||||
system: 'System Settings',
|
||||
source: 'Source',
|
||||
snippet: 'Snippet',
|
||||
history: 'Query History',
|
||||
pipeline: 'Pipeline',
|
||||
report: 'Report',
|
||||
function: 'Function',
|
||||
template: 'Template',
|
||||
menu: 'Menu',
|
||||
schedule: 'Schedule',
|
||||
authority: 'Authority',
|
||||
user: 'User',
|
||||
pageNotFound: 'Oops! Page Not Found!',
|
||||
pageNotFoundTip: 'It seems like the page you\'re looking for, does not exist or might have been removed.',
|
||||
pageNotAuthorized: 'Oops! Page Not Authorized!',
|
||||
pageNotAuthorizedTip: 'Sorry, you don\'t have permission to access this page.',
|
||||
backToHome: 'Back to Home',
|
||||
backToSignin: 'Back to Sign In',
|
||||
profile: 'Profile',
|
||||
id: 'Id',
|
||||
username: 'Username',
|
||||
createTime: 'Create Time',
|
||||
updateTime: 'Update Time',
|
||||
action: 'Action',
|
||||
column: 'Column',
|
||||
description: 'Description',
|
||||
name: 'Name',
|
||||
code: 'Code',
|
||||
editData: 'Edit Data',
|
||||
successfully: 'Successfully',
|
||||
expression: 'Expression',
|
||||
active: 'Active Status',
|
||||
type: 'Type',
|
||||
elapsed: 'Elapsed Time',
|
||||
state: 'State',
|
||||
result: 'Result',
|
||||
noData: 'No Data to display',
|
||||
invalidParam: 'If the parameter is invalid, check whether the parameter is correct',
|
||||
role: 'Role',
|
||||
cancel: 'Cancel',
|
||||
scheduler: 'Scheduler',
|
||||
executor: 'Executor',
|
||||
configure: 'Configure',
|
||||
remove: 'Remove',
|
||||
publish: 'Publish',
|
||||
save: 'Save',
|
||||
value: 'Value',
|
||||
alias: 'Alias',
|
||||
sort: 'Sort',
|
||||
count: 'Count',
|
||||
content: 'Content',
|
||||
feedback: 'Feedback',
|
||||
createEditor: 'Create Editor',
|
||||
device: 'Device',
|
||||
client: 'Client',
|
||||
ip: 'IP Address',
|
||||
ua: 'User Agent',
|
||||
loginTime: 'Login Time',
|
||||
submit: 'Submit',
|
||||
create: 'Create',
|
||||
plugin: 'Plugin',
|
||||
group: 'Group',
|
||||
sorted: 'Sorted',
|
||||
url: 'Url',
|
||||
pageNotNetwork: 'Oops! Not Network!',
|
||||
protocol: 'Protocol',
|
||||
host: 'Host',
|
||||
port: 'Port',
|
||||
public: 'Public',
|
||||
version: 'Version',
|
||||
available: 'Available',
|
||||
test: 'Test',
|
||||
field: 'Field',
|
||||
upload: 'Upload',
|
||||
deleteData: 'Delete Data',
|
||||
apply: 'Apply',
|
||||
length: 'Length',
|
||||
preview: 'Preview',
|
||||
refresh: 'Refresh',
|
||||
endTime: 'End Time',
|
||||
from: 'From',
|
||||
adhoc: 'Adhoc Query',
|
||||
error: 'Error',
|
||||
realtime: 'Realtime',
|
||||
to: 'To',
|
||||
work: 'Work Home',
|
||||
chat: 'Chat',
|
||||
avatar: 'Avatar',
|
||||
file: 'File',
|
||||
backTo: 'Back',
|
||||
tip: {
|
||||
pageNotNetwork: 'Oops! Unable to connect to the network, please check if the network is normal!'
|
||||
}
|
||||
},
|
||||
user: {
|
||||
common: {
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
confirmPassword: 'Confirm Password',
|
||||
signin: 'Sign in',
|
||||
signup: 'Sign up',
|
||||
captcha: 'Captcha',
|
||||
sourceCount: 'Sources',
|
||||
queryCount: 'Queries',
|
||||
signout: 'Sign out',
|
||||
list: 'User List',
|
||||
assignAuthority: 'Assign Authority',
|
||||
assignRole: 'Assign Role',
|
||||
setting: 'Settings',
|
||||
info: 'Contribution Info',
|
||||
profile: 'User profile',
|
||||
contribution: 'Contribution',
|
||||
radar7Days: 'Radar chart of the data source within 7 days',
|
||||
createTime: 'Create Time',
|
||||
avatar: 'Avatar',
|
||||
log: 'Login Log',
|
||||
editor: 'Editor',
|
||||
fontSize: 'Font Size',
|
||||
theme: 'Theme',
|
||||
assistant: 'Ai Assistant',
|
||||
host: 'Host Address',
|
||||
token: 'Token',
|
||||
timeout: 'Timeout',
|
||||
contentCount: 'Content Count',
|
||||
modifyUsername: 'Modify Username',
|
||||
oldUsername: 'Old Username',
|
||||
newUsername: 'New Username',
|
||||
modifyPassword: 'Modify Password',
|
||||
oldPassword: 'Old Password',
|
||||
newPassword: 'New Password'
|
||||
},
|
||||
auth: {
|
||||
signinTip: 'Enter your username and password to login',
|
||||
signupTip: 'Enter your username and password to sign up',
|
||||
usernameTip: 'Please enter your username',
|
||||
passwordTip: 'Please enter your password',
|
||||
confirmPasswordTip: 'Please confirm your password',
|
||||
captchaTip: 'Please enter the captcha',
|
||||
notUserTip: 'Don\'t have an account?',
|
||||
hasUserTip: 'Already have an account?',
|
||||
passwordNotMatchTip: 'Password does not match',
|
||||
usernameSizeTip: 'Username must be between 3 and 20 characters',
|
||||
passwordSizeTip: 'Password must be between 6 and 20 characters',
|
||||
captchaSizeTip: 'Captcha must be between 1 and 6 characters'
|
||||
},
|
||||
tip: {
|
||||
sourceCountTip: 'Statistics on the total number of access data sources',
|
||||
queryCountTip: 'Statistics on the total number of access queries',
|
||||
assignRoleSuccess: 'Role assignment succeeded',
|
||||
info: 'The main information displayed here is some personal contribution information, including some queries, data sources and other information',
|
||||
contribution: 'The contribution degree is calculated based on the number of data source queries, the larger the number of queries, the higher the contribution degree.',
|
||||
radar7Days: 'The data here refers to the number of times the data source was used in a 7-day period',
|
||||
profile: 'The main display here is some basic personal information, including some avatars, nicknames and other information',
|
||||
username: 'The username is unique, currently it is not supported to modify the username',
|
||||
createTime: 'The user\'s creation time is defaulted to the user\'s first registration time, generated by the system',
|
||||
avatar: 'The default is the system avatar, the user can upload their own avatar',
|
||||
log: 'The main display here is some login log information, including the login time, IP address and other information',
|
||||
editor: 'The main display here is some editor information, including the editor\'s configuration information, such as code highlighting, themes and other information',
|
||||
fontSize: 'Here you can modify some text size, the default is 12',
|
||||
theme: 'Here you can modify some themes, including various theme styles',
|
||||
assistant: 'The main display here is some AI assistant configuration information, including the configuration information, such as the operator, proxy and other information',
|
||||
host: 'This is mainly used to configure the host address of the AI assistant',
|
||||
token: 'This is mainly used to configure the token of the AI assistant',
|
||||
timeout: 'This is mainly used to configure the timeout of the AI assistant',
|
||||
contentCount: 'This is mainly used to configure the content count of the AI assistant',
|
||||
modifyUsername: 'This is mainly used to modify the username of the user',
|
||||
oldUsername: 'This is mainly used to modify the old username of the user',
|
||||
newUsername: 'This is mainly used to modify the new username of the user',
|
||||
password: 'The password is the user\'s login password',
|
||||
changeUsernameSuccessfully: 'Username modification succeeded, please log in again',
|
||||
modifyPassword: 'This is mainly used to modify the password of the user',
|
||||
changePasswordSuccessfully: 'Password modification succeeded, please log in again',
|
||||
oldPassword: 'This is mainly used to modify the old password of the user',
|
||||
newPassword: 'This is mainly used to modify the new password of the user',
|
||||
confirmPassword: 'This is mainly used to confirm the new password of the user'
|
||||
}
|
||||
},
|
||||
role: {
|
||||
common: {
|
||||
list: 'Role List',
|
||||
create: 'Create Role',
|
||||
edit: 'Edit Role [ $NAME ]',
|
||||
name: 'Role Name',
|
||||
description: 'Role Description',
|
||||
assignRole: 'Assign Role [ $NAME ]',
|
||||
assignMenu: 'Assign Menu [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
name: 'Please enter the role name',
|
||||
description: 'Please enter the role description'
|
||||
},
|
||||
validate: {
|
||||
nameSize: 'The role name must be between 3 and 20 characters',
|
||||
descriptionSize: 'The role description must be between 3 and 50 characters'
|
||||
}
|
||||
},
|
||||
schedule: {
|
||||
common: {
|
||||
list: 'Schedule List',
|
||||
history: 'Schedule History'
|
||||
}
|
||||
},
|
||||
dashboard: {
|
||||
common: {
|
||||
list: 'Dashboard List',
|
||||
delete: 'Delete Dashboard',
|
||||
create: 'Create Dashboard',
|
||||
modify: 'Modify Dashboard',
|
||||
modifyInfo: 'Modify Dashboard [ $VALUE ]',
|
||||
addReport: 'Add Report'
|
||||
},
|
||||
tip: {
|
||||
deleteTip1: 'You are deleting a dashboard. This action permanently deletes the dashboard. Please be sure to confirm your actions before proceeding. ',
|
||||
deleteTip2: 'Warning: This cannot be undone. ',
|
||||
deleteTip3: 'To confirm, type [ $NAME ] in the box below',
|
||||
publishSuccess: 'Dashboard [ $VALUE ] published successfully',
|
||||
notFound: 'Dashboard [ $VALUE ] not found'
|
||||
}
|
||||
},
|
||||
function: {
|
||||
common: {
|
||||
list: 'Function List',
|
||||
keyword: 'Keyword',
|
||||
operator: 'Operator',
|
||||
function: 'Function',
|
||||
example: 'Example',
|
||||
import: 'Import Data',
|
||||
importFromUrl: 'Import from URL',
|
||||
create: 'Create Function',
|
||||
modify: 'Modify Function [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
selectPluginHolder: 'Please select a plugin',
|
||||
selectTypeHolder: 'Please select a type'
|
||||
}
|
||||
},
|
||||
dataset: {
|
||||
common: {
|
||||
list: 'Dataset List',
|
||||
adhoc: 'Adhoc Query',
|
||||
showPageSize: 'Show Page Size',
|
||||
totalRows: 'Total Rows',
|
||||
totalSize: 'Total Size',
|
||||
dataPreview: 'Data Preview',
|
||||
dataColumn: 'Data Columns',
|
||||
dataConfigure: 'Data Configure',
|
||||
dataLifeCycle: 'Data Life Cycle',
|
||||
onlyPreviewCreate: 'Only preview data can be used to create datasets',
|
||||
returnQuery: 'Return Query',
|
||||
columnName: 'Column Name',
|
||||
columnAlias: 'Column Alias',
|
||||
columnType: 'Column Type',
|
||||
columnTypeString: 'String',
|
||||
columnTypeNumber: 'Number',
|
||||
columnTypeNumberSigned: 'Number (Signed)',
|
||||
columnTypeBoolean: 'Boolean',
|
||||
columnTypeDateTime: 'DateTime',
|
||||
columnDescription: 'Column Description',
|
||||
columnComment: 'Column Comment',
|
||||
columnDefaultValue: 'Default Value',
|
||||
columnIsNullable: 'Is Nullable',
|
||||
columnLength: 'Length',
|
||||
columnIsOrderByKey: 'Sort key',
|
||||
columnIsPartitionKey: 'Partition key',
|
||||
columnIsPrimaryKey: 'Primary key',
|
||||
columnIsSampling: 'Is Sampling',
|
||||
columnExpression: 'Expression',
|
||||
columnMode: 'Column Mode',
|
||||
columnModeMetric: 'Metric',
|
||||
columnModeDimension: 'Dimension',
|
||||
columnModeGroup: 'Group',
|
||||
columnModeFilter: 'Filter',
|
||||
columnSortNone: 'None',
|
||||
columnOrderAsc: 'Ascending',
|
||||
columnOrderDesc: 'Descending',
|
||||
create: 'Create Dataset',
|
||||
modify: 'Modify Dateset',
|
||||
actuator: 'Actuator',
|
||||
syncMode: 'Sync Mode',
|
||||
syncModeManual: 'Manual',
|
||||
syncModeTiming: 'Timing synchronization',
|
||||
syncModeOutSync: 'Out Sync',
|
||||
rebuild: 'Rebuild',
|
||||
complete: 'Complete',
|
||||
failed: 'Failed',
|
||||
stateOfStart: 'Start',
|
||||
stateOfMetadata: 'Metadata State',
|
||||
stateOfMetadataStarted: 'Metadata Started',
|
||||
stateOfCreateTable: 'Create Table State',
|
||||
syncData: 'Sync Data',
|
||||
visualType: 'Visual Type',
|
||||
visualTypeTable: 'Table',
|
||||
visualTypeLine: 'Line',
|
||||
visualTypeBar: 'Bar',
|
||||
visualTypeArea: 'Area',
|
||||
visualTypePie: 'Pie',
|
||||
visualTypeHistogram: 'Histogram',
|
||||
visualTypeWordCloud: 'Word Cloud',
|
||||
visualTypeScatter: 'Scatter',
|
||||
visualTypeRadar: 'Radar',
|
||||
visualTypeFunnel: 'Funnel',
|
||||
visualTypeGauge: 'Gauge',
|
||||
visualConfigure: 'Visual Configure',
|
||||
visualConfigureNotSpecified: 'No configuration items are available',
|
||||
visualConfigureXAxis: 'X Axis',
|
||||
visualConfigureYAxis: 'Y Axis',
|
||||
visualConfigureCategoryField: 'Category',
|
||||
visualConfigureCategoryLeftField: 'Left Category',
|
||||
visualConfigureCategoryRightField: 'Right Category',
|
||||
visualConfigureValueField: 'Value',
|
||||
visualConfigureSeriesField: 'Series',
|
||||
visualConfigureOuterRadius: 'Outer Radius',
|
||||
visualConfigureShowLegend: 'Show Legend',
|
||||
visualConfigureInnerRadius: 'Inner Radius',
|
||||
visualConfigureStartAngle: 'Start Angle',
|
||||
visualConfigureEndAngle: 'End Angle',
|
||||
visualConfigureDataBreakpoint: 'Data Breakpoint',
|
||||
visualConfigureDataBreakpointBreak: 'Break',
|
||||
visualConfigureDataBreakpointContinuous: 'Continuous',
|
||||
visualConfigureDataBreakpointZero: 'Zero',
|
||||
visualConfigureDataBreakpointIgnore: 'Ignore',
|
||||
visualConfigureGeneralGroup: 'General Configure',
|
||||
visualConfigureTitleGroup: 'Title Configure',
|
||||
visualConfigureTitleGroupVisible: 'Visible',
|
||||
visualConfigureTitleGroupText: 'Title',
|
||||
visualConfigureTitleGroupSubText: 'Sub Title',
|
||||
visualConfigureTitleGroupPosition: 'Position',
|
||||
visualConfigureTitleGroupPositionLeft: 'Left',
|
||||
visualConfigureTitleGroupPositionRight: 'Right',
|
||||
visualConfigureTitleGroupPositionTop: 'Top',
|
||||
visualConfigureTitleGroupPositionBottom: 'Bottom',
|
||||
visualConfigureTitleGroupAlign: 'Align',
|
||||
visualConfigureTitleGroupAlignLeft: 'Left',
|
||||
visualConfigureTitleGroupAlignCenter: 'Center',
|
||||
visualConfigureTitleGroupAlignRight: 'Right',
|
||||
columnExpressionMax: 'Maximum',
|
||||
columnExpressionMin: 'Minimum',
|
||||
columnExpressionSum: 'Sum',
|
||||
columnExpressionAvg: 'Average',
|
||||
columnExpressionCount: 'Count',
|
||||
columnExpressionEquals: 'Equals',
|
||||
columnExpressionNotEquals: 'Not Equals',
|
||||
columnExpressionIsNull: 'Is Null',
|
||||
columnExpressionIsNotNull: 'Is Not Null',
|
||||
columnExpressionIsIn: 'Is In',
|
||||
columnExpressionIsNotIn: 'Is Not In',
|
||||
columnExpressionIsLike: 'Is Like',
|
||||
columnExpressionIsNotLike: 'Is Not Like',
|
||||
columnExpressionIsContains: 'Is Contains',
|
||||
columnExpressionGreaterThan: 'Greater Than',
|
||||
columnExpressionGreaterThanOrEquals: 'Greater Than Or Equals',
|
||||
columnExpressionLessThan: 'Less Than',
|
||||
columnExpressionLessThanOrEquals: 'Less Than Or Equals',
|
||||
columnExpressionIsNotContains: 'Is Not Contains',
|
||||
customFunction: 'Custom Function',
|
||||
lifeCycleMonth: 'Month',
|
||||
lifeCycleWeek: 'Week',
|
||||
lifeCycleDay: 'Day',
|
||||
lifeCycleHour: 'Hour',
|
||||
notSpecifiedTitle: 'Not Specified',
|
||||
history: 'Sync History',
|
||||
clearData: 'Clear Data',
|
||||
error: 'View Error',
|
||||
info: 'View Info',
|
||||
lifeCycleColumn: 'Lifecycle columns',
|
||||
lifeCycleNumber: 'Lifecycle number',
|
||||
continuousBuild: 'Continuous Build'
|
||||
},
|
||||
validator: {
|
||||
duplicateColumn: 'Column name [ $VALUE ] already exists',
|
||||
specifiedColumn: 'Sort key or primary key must be specified',
|
||||
specifiedName: 'Name must be specified'
|
||||
},
|
||||
tip: {
|
||||
selectExpression: 'Please select the expression',
|
||||
syncData: 'The data synchronization schedule will run in the background, see the logs for the specific synchronization results',
|
||||
clearData: 'Clear data will not be able to rollback, clear operation will run in the background, please be patient',
|
||||
lifeCycle: 'Data set life cycle will be calculated according to the specified list expression',
|
||||
validatorSampling: 'The order by key must contain a sampling key',
|
||||
adhocDnd: 'Drag the indicator dimension on the left to the corresponding position to query and render the data',
|
||||
rebuildProgress: 'Rebuilding will only progress unfinished',
|
||||
lifeCycleMustDateColumn: 'The lifecycle must contain a date column',
|
||||
modifyNotSupportDataPreview: 'Data preview is not supported to modify',
|
||||
publishSuccess: 'Dataset [ $VALUE ] published successfully'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Menu List',
|
||||
create: 'Create Menu',
|
||||
modify: 'Modify Menu [ $NAME ]',
|
||||
parent: 'Parent Menu',
|
||||
redirect: 'Redirect Menu',
|
||||
new: 'New Menu',
|
||||
i18nKey: 'I18N Key',
|
||||
icon: 'Icon',
|
||||
},
|
||||
tip: {
|
||||
selectType: 'Please select a type',
|
||||
selectParent: 'Please select a parent',
|
||||
selectRedirect: 'Please select a redirect'
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Pipeline List',
|
||||
logger: 'Pipeline Logger',
|
||||
loggerInfo: 'Pipeline [ $VALUE ] Logger',
|
||||
delete: 'Delete Pipeline',
|
||||
deleteInfo: 'Delete Pipeline [ $VALUE ]',
|
||||
stop: 'Stop Pipeline',
|
||||
stopInfo: 'Stop Pipeline [ $VALUE ]',
|
||||
flow: 'Pipeline Flow',
|
||||
flowInfo: 'Pipeline [ $VALUE ] Flow',
|
||||
create: 'Create Pipeline',
|
||||
input: 'Input Source',
|
||||
output: 'Output Source',
|
||||
resetTransform: 'Reset Transform',
|
||||
},
|
||||
validator: {
|
||||
from: 'Please configure the input source information',
|
||||
to: 'Please configure the output source information',
|
||||
edge: 'Please connect the input and output source'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: 'Delete pipeline [ $VALUE ] successfully',
|
||||
deleteAlert1: 'You are deleting a pipeline. This action permanently deletes the pipeline. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: This cannot be undone.',
|
||||
deleteAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
stopAlert1: 'You are stopping a pipeline. This action permanently stops the pipeline. Please be sure to confirm your actions before proceeding.',
|
||||
stopAlert2: 'Warning: This cannot be undone.',
|
||||
stopAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
stopSuccess: 'Pipeline [ $VALUE ] stopped successfully',
|
||||
publishSuccess: 'Pipeline [ $VALUE ] published successfully',
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
execute: 'Execute',
|
||||
executeSelection: 'Execute (Selection)',
|
||||
connectionTime: 'Connection Time',
|
||||
executionTime: 'Execution Time',
|
||||
format: 'Format',
|
||||
help: 'Help',
|
||||
showSql: 'Show SQL',
|
||||
quoteRecord: 'Quote Record',
|
||||
historyData: 'History Data',
|
||||
historyDataInfo: '[ $VALUE ] History Data'
|
||||
},
|
||||
tip: {
|
||||
pageShow: 'Open / Close the page',
|
||||
smallTips: 'Tip: hold down the keyboard Shift and select the number of data rows with the mouse to automatically copy the contents of the selected row',
|
||||
notPresetToken: 'There is no token available, please go to your personal center to configure a token',
|
||||
}
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
selectLanguage: 'Select Language',
|
||||
asia: {
|
||||
default: 'Asia',
|
||||
chineseSimple: 'Simple Chinese'
|
||||
},
|
||||
northAmerica: {
|
||||
default: 'North America',
|
||||
english: 'English'
|
||||
}
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Report List',
|
||||
view: 'View Report [ $VALUE ]',
|
||||
modify: 'Modify Report',
|
||||
delete: 'Delete Report',
|
||||
deleteInfo: 'Delete Report [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: 'Delete report [ $VALUE ] successfully',
|
||||
deleteAlert1: 'You are deleting a report. This action permanently deletes the report. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: This cannot be undone.',
|
||||
deleteAlert3: 'To confirm, type [ $VALUE ] in the box below',
|
||||
publishSuccess: 'Report [ $VALUE ] published successfully',
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Role List',
|
||||
create: 'Create Role',
|
||||
edit: 'Edit Role [ $NAME ]',
|
||||
name: 'Role Name',
|
||||
description: 'Role Description',
|
||||
assignRole: 'Assign Role [ $NAME ]',
|
||||
assignMenu: 'Assign Menu [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
name: 'Please enter the role name',
|
||||
description: 'Please enter the role description'
|
||||
},
|
||||
validate: {
|
||||
nameSize: 'The role name must be between 3 and 20 characters',
|
||||
descriptionSize: 'The role description must be between 3 and 50 characters'
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Schedule List',
|
||||
history: 'Schedule History'
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Snippet List',
|
||||
create: 'Create Snippet',
|
||||
modify: 'Modify Snippet [ $VALUE ]',
|
||||
delete: 'Delete Snippet',
|
||||
deleteInfo: 'Delete Snippet [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
createSuccess: 'Snippet [ $VALUE ] created successfully',
|
||||
deleteSuccess: 'Snippet [ $VALUE ] deleted successfully',
|
||||
deleteAlert1: 'Are you sure you want to delete this code snippet? This action cannot be undone. ',
|
||||
deleteAlert2: 'After deleting the code fragment, the data related to it will be permanently deleted. ',
|
||||
deleteAlert3: 'After a code fragment is deleted, it cannot be restored. ',
|
||||
deleteAlert4: 'To confirm, type [ $VALUE ] in the box below'
|
||||
}
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Source List',
|
||||
modify: 'Modify Source [ $NAME ]',
|
||||
source: 'Source',
|
||||
configure: 'Configure',
|
||||
authorization: 'Authorization',
|
||||
advanced: 'Advanced',
|
||||
custom: 'Custom',
|
||||
host: 'Host Address',
|
||||
port: 'Port',
|
||||
name: 'Name',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
database: 'Database',
|
||||
ssl: 'SSL',
|
||||
file: 'File',
|
||||
create: 'Create Source',
|
||||
delete: 'Delete Source [ $NAME ]',
|
||||
syncMetadata: 'Sync Metadata',
|
||||
syncHistory: 'Sync History',
|
||||
manager: 'Data Manager',
|
||||
info: 'Basic Information',
|
||||
notSpecified: 'Not Specified',
|
||||
notUpdated: 'Not Updated',
|
||||
engine: 'Engine',
|
||||
notSpecifiedEngine: 'Not Specified Engine',
|
||||
collation: 'Collation',
|
||||
notSpecifiedCollation: 'Not Specified Collation',
|
||||
dataInfo: 'Data Information',
|
||||
totalRows: 'Total Rows',
|
||||
format: 'Format',
|
||||
notSpecifiedFormat: 'Not Specified Format',
|
||||
avgRowLength: 'Average Row Length',
|
||||
dataSize: 'Data Size',
|
||||
indexSize: 'Index Size',
|
||||
notSpecifiedIndex: 'Not Specified Index',
|
||||
autoIncrement: 'Auto Increment',
|
||||
notSpecifiedPrimaryKey: 'Not Specified Primary Key',
|
||||
resetAutoIncrement: 'Reset Auto Increment',
|
||||
resetTo: 'Reset to',
|
||||
comment: 'Table Comment',
|
||||
menuNew: 'New',
|
||||
menuNewTable: 'New Table',
|
||||
tableName: 'Table Name',
|
||||
columnName: 'Column Name',
|
||||
columnType: 'Column Type',
|
||||
columnLength: 'Column Length',
|
||||
columnDefaultValue: 'Default Value',
|
||||
columnPrimaryKey: 'Primary Key',
|
||||
columnAutoIncrement: 'Auto Increment',
|
||||
columnIsNullable: 'Is Nullable',
|
||||
columnComment: 'Column Comment',
|
||||
newColumn: 'New Column',
|
||||
menuExport: 'Export',
|
||||
exportData: 'Export Data',
|
||||
exportDataTable: 'Export [ $VALUE ] Table Data',
|
||||
exportDataFormat: 'Export Data Format',
|
||||
exportDataCount: 'Export Data Count',
|
||||
downloadPath: 'Download Path',
|
||||
downloadFile: 'Download File',
|
||||
truncateTable: 'Truncate Table',
|
||||
truncateTableInfo: 'Truncate [ $VALUE ] Table',
|
||||
dropTable: 'Drop Table',
|
||||
dropTableInfo: 'Drop [ $VALUE ] Table',
|
||||
structure: 'Structure',
|
||||
isNullable: 'Is Nullable',
|
||||
defaultValue: 'Default Value',
|
||||
extra: 'Extra',
|
||||
changeColumn: 'Change Column',
|
||||
changeColumnInfo: 'Change [ $VALUE ] Column',
|
||||
dropColumn: 'Drop Column',
|
||||
dropColumnInfo: 'Drop [ $VALUE ] Column',
|
||||
tableData: 'Table Data',
|
||||
firstPage: 'First Page',
|
||||
previousPage: 'Previous Page',
|
||||
nextPage: 'Next Page',
|
||||
lastPage: 'Last Page',
|
||||
jumpPage: 'Jump to Page',
|
||||
showPageSize: 'Show Page Size',
|
||||
records: 'Records',
|
||||
addRows: 'Add Rows',
|
||||
previewPendingChanges: 'Preview Pending Changes',
|
||||
previewDML: 'Preview DML',
|
||||
copyRows: 'Copy Rows',
|
||||
deleteRows: 'Delete Rows',
|
||||
visibleColumn: 'Visible Column',
|
||||
filterData: 'Filter Data',
|
||||
filterCondition: 'Filter Condition',
|
||||
addFilter: 'Add Filter',
|
||||
statement: 'Statement',
|
||||
erDiagram: 'ER Diagram',
|
||||
},
|
||||
tip: {
|
||||
selectSource: 'Please select a source',
|
||||
deleteSourceSuccess: 'Delete source [ $NAME ] success',
|
||||
deleteAlert1: 'You are deleting a data source. This action permanently deletes all data and configurations associated with that data source. Please be sure to confirm your actions before proceeding.',
|
||||
deleteAlert2: 'Warning: Doing this will not be undone. All data and configurations associated with that data source will be permanently deleted.',
|
||||
deleteAlert3: 'To confirm, type [ $NAME ] in the box below',
|
||||
syncMetadata1: 'Sync metadata will run in the background',
|
||||
syncMetadata2: 'Synchronizing metadata will overwrite the current metadata, which may result in data loss.',
|
||||
syncMetadata3: 'To confirm, type [ $NAME ] in the box below',
|
||||
syncMetadata4: 'Task [ $NAME ] has started',
|
||||
selectDatabase: 'Please select a database',
|
||||
notSelectedNode: 'Please select the node on the left to display the results',
|
||||
resetAutoIncrementSuccess: 'Reset auto increment to [ $VALUE ] success',
|
||||
createTableSuccess: 'Create table [ $VALUE ] success',
|
||||
createColumnSuccess: 'Create column [ $VALUE ] success',
|
||||
truncateTableSuccess: 'Truncate table [ $VALUE ] success',
|
||||
truncateTable1: 'You are about to truncate the table. This will delete all data in the table. Are you sure you want to continue? ',
|
||||
truncateTable2: 'Please note that the truncation table operation is irreversible. Doing this will permanently delete all data in the table. Please make sure you have backed up important data. ',
|
||||
truncateTable3: 'Performing a truncate table operation will immediately delete all data in the table, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
truncateTable4: 'We recommend that you first test the truncate table operation in a non-production environment to ensure that it does not have unexpected effects on your production data. ',
|
||||
truncateTable5: 'If you have any questions or need assistance performing a truncate table operation, please contact your database administrator or technical support team. ',
|
||||
dropTableSuccess: 'Drop table [ $VALUE ] success',
|
||||
dropTable1: 'You are about to delete a table. This operation will permanently delete the table and all its data. Are you sure you want to continue? ',
|
||||
dropTable2: 'Please note that dropping a table is irreversible. Doing this will permanently delete the table and all its data. Please make sure you have backed up important data. ',
|
||||
dropTable3: 'Performing a drop table operation will immediately delete the table and all its data, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
dropTable4: 'We recommend that you first test the drop table operation in a non-production environment to ensure that it does not have unintended effects on your production data. ',
|
||||
dropTable5: 'If you have any questions or need assistance performing a drop table operation, please contact your database administrator or technical support team. ',
|
||||
changeColumnSuccess: 'Change column [ $VALUE ] success',
|
||||
dropColumnSuccess: 'Drop column [ $VALUE ] success',
|
||||
dropColumn1: 'You are about to delete a column. This operation will permanently delete the column and all its data. Are you sure you want to continue? ',
|
||||
dropColumn2: 'Please note that deleting a column is irreversible. Doing this will permanently delete the column and all its data. Please make sure you have backed up important data. ',
|
||||
dropColumn3: 'Performing a drop column operation will immediately delete the column and all its data, which may affect ongoing work. Please make sure you have saved the data you need and that other users are not affected. ',
|
||||
dropColumn4: 'We recommend that you first test the drop column operation in a non-production environment to ensure that it does not have unintended effects on your production data. ',
|
||||
dropColumn5: 'If you have any questions or need assistance performing a drop column operation, please contact your database administrator or technical support team. ',
|
||||
updateSuccess: 'Update success',
|
||||
deleteSuccess: 'Delete success'
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
create: 'Created',
|
||||
running: 'Running',
|
||||
success: 'Success',
|
||||
failure: 'Failure',
|
||||
stop: 'Stopped',
|
||||
timeout: 'Timeout',
|
||||
queue: 'Queue'
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: 'Template List',
|
||||
create: 'Create Template',
|
||||
modify: 'Modify Template [ $NAME ]',
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
confirmPassword: 'Confirm Password',
|
||||
signin: 'Sign in',
|
||||
signup: 'Sign up',
|
||||
captcha: 'Captcha',
|
||||
sourceCount: 'Sources',
|
||||
queryCount: 'Queries',
|
||||
signout: 'Sign out',
|
||||
list: 'User List',
|
||||
assignAuthority: 'Assign Authority',
|
||||
assignRole: 'Assign Role',
|
||||
setting: 'Settings',
|
||||
info: 'Contribution Info',
|
||||
profile: 'User profile',
|
||||
contribution: 'Contribution',
|
||||
radar7Days: 'Radar chart of the data source within 7 days',
|
||||
createTime: 'Create Time',
|
||||
avatar: 'Avatar',
|
||||
log: 'Login Log',
|
||||
editor: 'Editor',
|
||||
fontSize: 'Font Size',
|
||||
theme: 'Theme',
|
||||
assistant: 'Ai Assistant',
|
||||
host: 'Host Address',
|
||||
token: 'Token',
|
||||
timeout: 'Timeout',
|
||||
contentCount: 'Content Count',
|
||||
modifyUsername: 'Modify Username',
|
||||
oldUsername: 'Old Username',
|
||||
newUsername: 'New Username',
|
||||
modifyPassword: 'Modify Password',
|
||||
oldPassword: 'Old Password',
|
||||
newPassword: 'New Password'
|
||||
},
|
||||
auth: {
|
||||
signinTip: 'Enter your username and password to login',
|
||||
signupTip: 'Enter your username and password to sign up',
|
||||
usernameTip: 'Please enter your username',
|
||||
passwordTip: 'Please enter your password',
|
||||
confirmPasswordTip: 'Please confirm your password',
|
||||
captchaTip: 'Please enter the captcha',
|
||||
notUserTip: 'Don\'t have an account?',
|
||||
hasUserTip: 'Already have an account?',
|
||||
passwordNotMatchTip: 'Password does not match',
|
||||
usernameSizeTip: 'Username must be between 3 and 20 characters',
|
||||
passwordSizeTip: 'Password must be between 6 and 20 characters',
|
||||
captchaSizeTip: 'Captcha must be between 1 and 6 characters'
|
||||
},
|
||||
tip: {
|
||||
sourceCountTip: 'Statistics on the total number of access data sources',
|
||||
queryCountTip: 'Statistics on the total number of access queries',
|
||||
assignRoleSuccess: 'Role assignment succeeded',
|
||||
info: 'The main information displayed here is some personal contribution information, including some queries, data sources and other information',
|
||||
contribution: 'The contribution degree is calculated based on the number of data source queries, the larger the number of queries, the higher the contribution degree.',
|
||||
radar7Days: 'The data here refers to the number of times the data source was used in a 7-day period',
|
||||
profile: 'The main display here is some basic personal information, including some avatars, nicknames and other information',
|
||||
username: 'The username is unique, currently it is not supported to modify the username',
|
||||
createTime: 'The user\'s creation time is defaulted to the user\'s first registration time, generated by the system',
|
||||
avatar: 'The default is the system avatar, the user can upload their own avatar',
|
||||
log: 'The main display here is some login log information, including the login time, IP address and other information',
|
||||
editor: 'The main display here is some editor information, including the editor\'s configuration information, such as code highlighting, themes and other information',
|
||||
fontSize: 'Here you can modify some text size, the default is 12',
|
||||
theme: 'Here you can modify some themes, including various theme styles',
|
||||
assistant: 'The main display here is some AI assistant configuration information, including the configuration information, such as the operator, proxy and other information',
|
||||
host: 'This is mainly used to configure the host address of the AI assistant',
|
||||
token: 'This is mainly used to configure the token of the AI assistant',
|
||||
timeout: 'This is mainly used to configure the timeout of the AI assistant',
|
||||
contentCount: 'This is mainly used to configure the content count of the AI assistant',
|
||||
modifyUsername: 'This is mainly used to modify the username of the user',
|
||||
oldUsername: 'This is mainly used to modify the old username of the user',
|
||||
newUsername: 'This is mainly used to modify the new username of the user',
|
||||
password: 'The password is the user\'s login password',
|
||||
changeUsernameSuccessfully: 'Username modification succeeded, please log in again',
|
||||
modifyPassword: 'This is mainly used to modify the password of the user',
|
||||
changePasswordSuccessfully: 'Password modification succeeded, please log in again',
|
||||
oldPassword: 'This is mainly used to modify the old password of the user',
|
||||
newPassword: 'This is mainly used to modify the new password of the user',
|
||||
confirmPassword: 'This is mainly used to confirm the new password of the user'
|
||||
}
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
export default {
|
||||
pageNotFound: '哎呀!页面未找到!',
|
||||
pageNotFoundTip: '您要查找的页面,似乎不存在或可能已被删除。',
|
||||
pageNotAuthorized: '哎呀!页面未授权!',
|
||||
pageNotAuthorizedTip: '抱歉,您没有权限访问该页面。',
|
||||
backToHome: '返回首页',
|
||||
backToSignin: '返回登录',
|
||||
profile: '个人中心',
|
||||
home: '首页',
|
||||
dashboard: '仪表盘',
|
||||
query: '查询',
|
||||
dataset: '数据集',
|
||||
admin: '管理员',
|
||||
system: '系统设置',
|
||||
source: '数据源',
|
||||
snippet: '代码片段',
|
||||
history: '查询历史',
|
||||
pipeline: '流水线',
|
||||
report: '数据报表',
|
||||
function: '函数',
|
||||
template: '模板',
|
||||
menu: '菜单',
|
||||
schedule: '调度',
|
||||
authority: '权限',
|
||||
user: '用户',
|
||||
id: 'ID',
|
||||
username: '用户名',
|
||||
createTime: '创建时间',
|
||||
updateTime: '更新时间',
|
||||
action: '操作',
|
||||
column: '列',
|
||||
description: '描述',
|
||||
name: '名称',
|
||||
code: '编码',
|
||||
editData: '编辑数据',
|
||||
successfully: '成功',
|
||||
expression: '表达式',
|
||||
active: '激活状态',
|
||||
type: '类型',
|
||||
elapsed: '执行时间',
|
||||
state: '状态',
|
||||
result: '结果',
|
||||
noData: '没有数据可以展示',
|
||||
invalidParam: '参数无效,请检查参数是否填写正确',
|
||||
role: '权限',
|
||||
cancel: '取消',
|
||||
scheduler: '调度器',
|
||||
executor: '执行器',
|
||||
configure: '配置',
|
||||
remove: '移除',
|
||||
publish: '发布',
|
||||
save: '保存',
|
||||
value: '值',
|
||||
alias: '别名',
|
||||
sort: '排序',
|
||||
count: '总数',
|
||||
content: '内容',
|
||||
feedback: '反馈',
|
||||
createEditor: '创建编辑器',
|
||||
device: '设备',
|
||||
client: '客户端',
|
||||
ip: 'IP 地址',
|
||||
ua: 'User Agent',
|
||||
loginTime: '登录时间',
|
||||
submit: '提交',
|
||||
create: '创建',
|
||||
plugin: '插件',
|
||||
group: '分组',
|
||||
sorted: '排序',
|
||||
url: '地址',
|
||||
pageNotNetwork: '哎呀!网络未连接!',
|
||||
protocol: '协议',
|
||||
host: '主机',
|
||||
port: '端口',
|
||||
public: '公开',
|
||||
version: '版本',
|
||||
available: '可用',
|
||||
test: '测试',
|
||||
field: '属性',
|
||||
upload: '上传',
|
||||
deleteData: '删除数据',
|
||||
apply: '应用',
|
||||
length: '长度',
|
||||
preview: '预览',
|
||||
refresh: '刷新',
|
||||
endTime: '结束时间',
|
||||
from: '来源',
|
||||
adhoc: '即席查询',
|
||||
error: '错误',
|
||||
realtime: '实时',
|
||||
to: '目标',
|
||||
work: '工作目录',
|
||||
chat: '聊天室',
|
||||
avatar: '头像',
|
||||
file: '文件',
|
||||
backTo: '返回',
|
||||
tip: {
|
||||
pageNotNetwork: '哎呀!无法连接到网络,请检查网络是否正常!'
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '仪表盘列表',
|
||||
delete: '删除仪表盘',
|
||||
create: '创建仪表盘',
|
||||
modify: '修改仪表盘',
|
||||
modifyInfo: '修改仪表盘 [ $VALUE ]',
|
||||
addReport: '添加图表',
|
||||
},
|
||||
tip: {
|
||||
deleteTip1: '您正在删除仪表板。此操作将永久删除仪表板。在继续操作之前,请务必确认您的操作。',
|
||||
deleteTip2: '警告:此操作无法撤消。 ',
|
||||
deleteTip3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
publishSuccess: '仪表板 [ $VALUE ] 发布成功',
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '数据集列表',
|
||||
adhoc: '即席查询',
|
||||
showPageSize: '每页显示行数',
|
||||
totalRows: '总行数',
|
||||
totalSize: '总大小',
|
||||
dataPreview: '数据预览',
|
||||
dataColumn: '数据列',
|
||||
dataConfigure: '数据配置',
|
||||
dataLifeCycle: '数据生命周期',
|
||||
onlyPreviewCreate: '仅支持预览数据创建数据集',
|
||||
returnQuery: '返回查询',
|
||||
columnName: '列名',
|
||||
columnAlias: '列别名',
|
||||
columnType: '列类型',
|
||||
columnTypeString: '字符串',
|
||||
columnTypeNumber: '数字',
|
||||
columnTypeNumberSigned: '数字 (符号)',
|
||||
columnTypeBoolean: '布尔',
|
||||
columnTypeDateTime: '日期时间',
|
||||
columnDescription: '列描述',
|
||||
columnComment: '列注释',
|
||||
columnDefaultValue: '列默认值',
|
||||
columnIsNullable: '是否允许为空',
|
||||
columnLength: '列长度',
|
||||
columnIsOrderByKey: '排序键',
|
||||
columnIsPartitionKey: '分区键',
|
||||
columnIsPrimaryKey: '主键',
|
||||
columnIsSampling: '是否抽样',
|
||||
columnExpression: '表达式',
|
||||
columnMode: '列模式',
|
||||
columnModeMetric: '指标',
|
||||
columnModeDimension: '维度',
|
||||
columnModeGroup: '分组',
|
||||
columnModeFilter: '筛选器',
|
||||
columnSortNone: '无',
|
||||
columnOrderAsc: '升序',
|
||||
columnOrderDesc: '降序',
|
||||
create: '创建数据集',
|
||||
modify: '修改数据集',
|
||||
actuator: '执行器',
|
||||
syncMode: '同步模式',
|
||||
syncModeManual: '手动',
|
||||
syncModeTiming: '定时同步',
|
||||
syncModeOutSync: '不同步',
|
||||
rebuild: '重新构建',
|
||||
complete: '完成',
|
||||
failed: '失败',
|
||||
stateOfStarted: '已启动',
|
||||
stateOfMetadata: '元数据状态',
|
||||
stateOfMetadataStarted: '元数据已启动',
|
||||
stateOfCreateTable: '创建表状态',
|
||||
syncData: '同步数据',
|
||||
visualType: '可视化类型',
|
||||
visualTypeTable: '表格',
|
||||
visualTypeLine: '折线图',
|
||||
visualTypeBar: '柱状图',
|
||||
visualTypeArea: '面积图',
|
||||
visualTypePie: '饼图',
|
||||
visualTypeHistogram: '直方图',
|
||||
visualTypeWordCloud: '词云图',
|
||||
visualConfigure: '可视化配置',
|
||||
visualConfigureNotSpecified: '暂无可用配置项',
|
||||
visualConfigureXAxis: 'X轴',
|
||||
visualConfigureYAxis: 'Y轴',
|
||||
visualConfigureCategoryField: '类别',
|
||||
visualConfigureCategoryLeftField: '左类别',
|
||||
visualConfigureCategoryRightField: '右类别',
|
||||
visualConfigureValueField: '值',
|
||||
visualConfigureSeriesField: '系列',
|
||||
visualConfigureOuterRadius: '外半径',
|
||||
visualConfigureDataBreakpoint: '数据断点',
|
||||
visualConfigureDataBreakpointBreak: '断开',
|
||||
visualConfigureDataBreakpointContinuous: '连续',
|
||||
visualConfigureDataBreakpointZero: '补 0',
|
||||
visualConfigureDataBreakpointIgnore: '忽略',
|
||||
columnExpressionMax: '最大值',
|
||||
columnExpressionMin: '最小值',
|
||||
columnExpressionSum: '总和',
|
||||
columnExpressionAvg: '平均值',
|
||||
columnExpressionCount: '计数',
|
||||
columnExpressionEquals: '等于',
|
||||
columnExpressionNotEquals: '不等于',
|
||||
columnExpressionIsNull: '为空',
|
||||
columnExpressionIsNotNull: '不为空',
|
||||
columnExpressionIsIn: '在 ... 中',
|
||||
columnExpressionIsNotIn: '不在 ... 中',
|
||||
columnExpressionIsLike: '像',
|
||||
columnExpressionIsNotLike: '不像',
|
||||
columnExpressionIsContains: '包含',
|
||||
columnExpressionIsNotContains: '不包含',
|
||||
columnExpressionGreaterThan: '大于',
|
||||
columnExpressionGreaterThanOrEquals: '大于等于',
|
||||
columnExpressionLessThan: '小于',
|
||||
columnExpressionLessThanOrEquals: '小于等于',
|
||||
customFunction: '自定义函数',
|
||||
lifeCycleMonth: '月',
|
||||
lifeCycleWeek: '周',
|
||||
lifeCycleDay: '天',
|
||||
lifeCycleHour: '小时',
|
||||
notSpecifiedTitle: '未指定',
|
||||
history: '同步历史',
|
||||
clearData: '清除数据',
|
||||
error: '查看错误',
|
||||
info: '查看详情',
|
||||
lifeCycleColumn: '生命周期列',
|
||||
lifeCycleNumber: '生命周期数',
|
||||
continuousBuild: '连续构建',
|
||||
},
|
||||
validator: {
|
||||
duplicateColumn: '列名 [ $VALUE ] 已存在',
|
||||
specifiedColumn: '排序键或主键必须指定',
|
||||
specifiedName: '数据集名必须指定',
|
||||
},
|
||||
tip: {
|
||||
selectExpression: '请选择表达式',
|
||||
syncData: '数据同步计划将在后台运行,具体同步结果请参考日志',
|
||||
clearData: '清除数据后无法进行回滚,清除操作将在后台运行,请耐心等待',
|
||||
lifeCycle: '数据集生命周期会根据指定列表达式进行计算',
|
||||
validatorSampling: '排序键中必须包含抽样键',
|
||||
adhocDnd: '拖拽左侧指标|维度到相应位置即可查询并渲染数据',
|
||||
rebuildProgress: '重建只会进行未完成进度',
|
||||
lifeCycleMustDateColumn: '生命周期必须包含一个日期列',
|
||||
modifyNotSupportDataPreview: '修改暂不支持数据预览',
|
||||
publishSuccess: '数据集 [ $VALUE ] 发布成功',
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '函数列表',
|
||||
keyword: '关键字',
|
||||
operator: '运算符',
|
||||
function: '函数',
|
||||
example: '示例',
|
||||
import: '导入数据',
|
||||
importFromUrl: '从 URL 导入',
|
||||
create: '创建函数',
|
||||
modify: '修改函数 [ $NAME ]',
|
||||
},
|
||||
tip: {
|
||||
selectPluginHolder: '请选择插件',
|
||||
selectTypeHolder: '请选择类型'
|
||||
}
|
||||
}
|
@ -1,275 +0,0 @@
|
||||
export default {
|
||||
selectAll: '(选择全部)',
|
||||
selectAllSearchResults: '(选择全部查询结果)',
|
||||
searchOoo: '搜索...',
|
||||
blanks: '(Blanks)',
|
||||
noMatches: '未找到',
|
||||
filterOoo: '过滤...',
|
||||
equals: '等于',
|
||||
notEqual: '不等于',
|
||||
blank: 'Blank',
|
||||
notBlank: 'Not blank',
|
||||
empty: 'Choose One',
|
||||
lessThan: '小于',
|
||||
greaterThan: '大于',
|
||||
lessThanOrEqual: '小于或等于',
|
||||
greaterThanOrEqual: '大于或等于',
|
||||
inRange: 'In range',
|
||||
inRangeStart: 'from',
|
||||
inRangeEnd: 'to',
|
||||
contains: '包含',
|
||||
notContains: '不包含',
|
||||
startsWith: '以 ... 开始',
|
||||
endsWith: '以 ... 结束',
|
||||
dateFormatOoo: 'yyyy-mm-dd',
|
||||
andCondition: 'AND',
|
||||
orCondition: 'OR',
|
||||
applyFilter: '应用',
|
||||
resetFilter: '重置',
|
||||
clearFilter: '清空',
|
||||
cancelFilter: '取消',
|
||||
textFilter: 'Text Filter',
|
||||
numberFilter: 'Number Filter',
|
||||
dateFilter: 'Date Filter',
|
||||
setFilter: 'Set Filter',
|
||||
columns: 'Columns',
|
||||
filters: 'Filters',
|
||||
pivotMode: 'Pivot Mode',
|
||||
groups: 'Row Groups',
|
||||
rowGroupColumnsEmptyMessage: 'Drag here to set row groups',
|
||||
values: 'Values',
|
||||
valueColumnsEmptyMessage: 'Drag here to aggregate',
|
||||
pivots: 'Column Labels',
|
||||
pivotColumnsEmptyMessage: 'Drag here to set column labels',
|
||||
group: 'Group',
|
||||
rowDragRow: 'row',
|
||||
rowDragRows: 'rows',
|
||||
loadingOoo: 'Loading...',
|
||||
loadingError: 'ERR',
|
||||
noRowsToShow: 'No Rows To Show',
|
||||
enabled: 'Enabled',
|
||||
pinColumn: 'Pin Column',
|
||||
pinLeft: 'Pin Left',
|
||||
pinRight: 'Pin Right',
|
||||
noPin: 'No Pin',
|
||||
valueAggregation: 'Value Aggregation',
|
||||
autosizeThiscolumn: 'Autosize This Column',
|
||||
autosizeAllColumns: 'Autosize All Columns',
|
||||
groupBy: 'Group by',
|
||||
ungroupBy: 'Un-Group by',
|
||||
addToValues: 'Add ${variable} to values',
|
||||
removeFromValues: 'Remove ${variable} from values',
|
||||
addToLabels: 'Add ${variable} to labels',
|
||||
removeFromLabels: 'Remove ${variable} from labels',
|
||||
resetColumns: 'Reset Columns',
|
||||
expandAll: 'Expand All',
|
||||
collapseAll: 'Close All',
|
||||
copy: 'Copy',
|
||||
ctrlC: 'Ctrl+C',
|
||||
copyWithHeaders: 'Copy With Headers',
|
||||
copyWithGroupHeaders: 'Copy with Group Headers',
|
||||
paste: 'Paste',
|
||||
ctrlV: 'Ctrl+V',
|
||||
export: 'Export',
|
||||
csvExport: 'CSV Export',
|
||||
excelExport: 'Excel Export',
|
||||
sum: 'Sum',
|
||||
min: 'Min',
|
||||
max: 'Max',
|
||||
none: 'None',
|
||||
count: 'Count',
|
||||
avg: 'Average',
|
||||
filteredRows: 'Filtered',
|
||||
selectedRows: 'Selected',
|
||||
totalRows: '总行数',
|
||||
totalAndFilteredRows: 'Rows',
|
||||
more: '更多',
|
||||
to: '-',
|
||||
of: '至',
|
||||
page: '当前页',
|
||||
nextPage: '下一页',
|
||||
lastPage: '最后一页',
|
||||
firstPage: '第一页',
|
||||
previousPage: '上一页',
|
||||
pivotColumnGroupTotals: '总数',
|
||||
pivotChartAndPivotMode: 'Pivot Chart & Pivot Mode',
|
||||
pivotChart: 'Pivot Chart',
|
||||
chartRange: 'Chart Range',
|
||||
columnChart: 'Column',
|
||||
groupedColumn: 'Grouped',
|
||||
stackedColumn: 'Stacked',
|
||||
normalizedColumn: '100% Stacked',
|
||||
barChart: 'Bar',
|
||||
groupedBar: 'Grouped',
|
||||
stackedBar: 'Stacked',
|
||||
normalizedBar: '100% Stacked',
|
||||
pieChart: 'Pie',
|
||||
pie: 'Pie',
|
||||
doughnut: 'Doughnut',
|
||||
line: 'Line',
|
||||
xyChart: 'X Y (Scatter)',
|
||||
scatter: 'Scatter',
|
||||
bubble: 'Bubble',
|
||||
areaChart: 'Area',
|
||||
area: 'Area',
|
||||
stackedArea: 'Stacked',
|
||||
normalizedArea: '100% Stacked',
|
||||
histogramChart: 'Histogram',
|
||||
histogramFrequency: "Frequency",
|
||||
combinationChart: 'Combination',
|
||||
columnLineCombo: 'Column & Line',
|
||||
AreaColumnCombo: 'Area & Column',
|
||||
pivotChartTitle: 'Pivot Chart',
|
||||
rangeChartTitle: 'Range Chart',
|
||||
settings: 'Settings',
|
||||
data: 'Data',
|
||||
format: 'Format',
|
||||
categories: 'Categories',
|
||||
defaultCategory: '(None)',
|
||||
series: 'Series',
|
||||
xyValues: 'X Y Values',
|
||||
paired: 'Paired Mode',
|
||||
axis: 'Axis',
|
||||
navigator: 'Navigator',
|
||||
color: 'Color',
|
||||
thickness: 'Thickness',
|
||||
xType: 'X Type',
|
||||
automatic: 'Automatic',
|
||||
category: 'Category',
|
||||
number: 'Number',
|
||||
time: 'Time',
|
||||
autoRotate: 'Auto Rotate',
|
||||
xRotation: 'X Rotation',
|
||||
yRotation: 'Y Rotation',
|
||||
ticks: 'Ticks',
|
||||
width: 'Width',
|
||||
height: 'Height',
|
||||
length: 'Length',
|
||||
padding: 'Padding',
|
||||
spacing: 'Spacing',
|
||||
chart: 'Chart',
|
||||
title: 'Title',
|
||||
titlePlaceholder: 'Chart title - double click to edit',
|
||||
background: 'Background',
|
||||
font: 'Font',
|
||||
top: 'Top',
|
||||
right: 'Right',
|
||||
bottom: 'Bottom',
|
||||
left: 'Left',
|
||||
labels: 'Labels',
|
||||
size: 'Size',
|
||||
minSize: 'Minimum Size',
|
||||
maxSize: 'Maximum Size',
|
||||
legend: 'Legend',
|
||||
position: 'Position',
|
||||
markerSize: 'Marker Size',
|
||||
markerStroke: 'Marker Stroke',
|
||||
markerPadding: 'Marker Padding',
|
||||
itemSpacing: 'Item Spacing',
|
||||
itemPaddingX: 'Item Padding X',
|
||||
itemPaddingY: 'Item Padding Y',
|
||||
layoutHorizontalSpacing: 'Horizontal Spacing',
|
||||
layoutVerticalSpacing: 'Vertical Spacing',
|
||||
strokeWidth: 'Stroke Width',
|
||||
lineDash: 'Line Dash',
|
||||
offset: 'Offset',
|
||||
offsets: 'Offsets',
|
||||
tooltips: 'Tooltips',
|
||||
callout: 'Callout',
|
||||
markers: 'Markers',
|
||||
shadow: 'Shadow',
|
||||
blur: 'Blur',
|
||||
xOffset: 'X Offset',
|
||||
yOffset: 'Y Offset',
|
||||
lineWidth: 'Line Width',
|
||||
normal: 'Normal',
|
||||
bold: 'Bold',
|
||||
italic: 'Italic',
|
||||
boldItalic: 'Bold Italic',
|
||||
predefined: 'Predefined',
|
||||
fillOpacity: 'Fill Opacity',
|
||||
strokeOpacity: 'Line Opacity',
|
||||
histogramBinCount: 'Bin count',
|
||||
columnGroup: 'Column',
|
||||
barGroup: 'Bar',
|
||||
pieGroup: 'Pie',
|
||||
lineGroup: 'Line',
|
||||
scatterGroup: 'X Y (Scatter)',
|
||||
areaGroup: 'Area',
|
||||
histogramGroup: 'Histogram',
|
||||
combinationGroup: 'Combination',
|
||||
groupedColumnTooltip: 'Grouped',
|
||||
stackedColumnTooltip: 'Stacked',
|
||||
normalizedColumnTooltip: '100% Stacked',
|
||||
groupedBarTooltip: 'Grouped',
|
||||
stackedBarTooltip: 'Stacked',
|
||||
normalizedBarTooltip: '100% Stacked',
|
||||
pieTooltip: 'Pie',
|
||||
doughnutTooltip: 'Doughnut',
|
||||
lineTooltip: 'Line',
|
||||
groupedAreaTooltip: 'Area',
|
||||
stackedAreaTooltip: 'Stacked',
|
||||
normalizedAreaTooltip: '100% Stacked',
|
||||
scatterTooltip: 'Scatter',
|
||||
bubbleTooltip: 'Bubble',
|
||||
histogramTooltip: 'Histogram',
|
||||
columnLineComboTooltip: 'Column & Line',
|
||||
areaColumnComboTooltip: 'Area & Column',
|
||||
customComboTooltip: 'Custom Combination',
|
||||
noDataToChart: 'No data available to be charted.',
|
||||
pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',
|
||||
chartSettingsToolbarTooltip: 'Menu',
|
||||
chartLinkToolbarTooltip: 'Linked to Grid',
|
||||
chartUnlinkToolbarTooltip: 'Unlinked from Grid',
|
||||
chartDownloadToolbarTooltip: 'Download Chart',
|
||||
seriesChartType: 'Series Chart Type',
|
||||
seriesType: 'Series Type',
|
||||
secondaryAxis: 'Secondary Axis',
|
||||
ariaChecked: 'checked',
|
||||
ariaColumn: 'Column',
|
||||
ariaColumnGroup: 'Column Group',
|
||||
ariaColumnList: 'Column List',
|
||||
ariaColumnSelectAll: 'Toggle Select All Columns',
|
||||
ariaDateFilterInput: 'Date Filter Input',
|
||||
ariaDefaultListName: 'List',
|
||||
ariaFilterColumnsInput: 'Filter Columns Input',
|
||||
ariaFilterFromValue: 'Filter from value',
|
||||
ariaFilterInput: 'Filter Input',
|
||||
ariaFilterList: 'Filter List',
|
||||
ariaFilterToValue: 'Filter to value',
|
||||
ariaFilterValue: 'Filter Value',
|
||||
ariaFilteringOperator: 'Filtering Operator',
|
||||
ariaHidden: 'hidden',
|
||||
ariaIndeterminate: 'indeterminate',
|
||||
ariaInputEditor: 'Input Editor',
|
||||
ariaMenuColumn: 'Press CTRL ENTER to open column menu.',
|
||||
ariaRowDeselect: 'Press SPACE to deselect this row',
|
||||
ariaRowSelectAll: 'Press Space to toggle all rows selection',
|
||||
ariaRowToggleSelection: 'Press Space to toggle row selection',
|
||||
ariaRowSelect: 'Press SPACE to select this row',
|
||||
ariaSearch: 'Search',
|
||||
ariaSortableColumn: 'Press ENTER to sort',
|
||||
ariaToggleVisibility: 'Press SPACE to toggle visibility',
|
||||
ariaUnchecked: 'unchecked',
|
||||
ariaVisible: 'visible',
|
||||
ariaSearchFilterValues: 'Search filter values',
|
||||
ariaRowGroupDropZonePanelLabel: 'Row Groups',
|
||||
ariaValuesDropZonePanelLabel: 'Values',
|
||||
ariaPivotDropZonePanelLabel: 'Column Labels',
|
||||
ariaDropZoneColumnComponentDescription: 'Press DELETE to remove',
|
||||
ariaDropZoneColumnValueItemDescription: 'Press ENTER to change the aggregation type',
|
||||
ariaDropZoneColumnGroupItemDescription: 'Press ENTER to sort',
|
||||
ariaDropZoneColumnComponentAggFuncSeperator: ' of ',
|
||||
ariaDropZoneColumnComponentSortAscending: 'ascending',
|
||||
ariaDropZoneColumnComponentSortDescending: 'descending',
|
||||
ariaLabelColumnMenu: 'Column Menu',
|
||||
ariaLabelCellEditor: 'Cell Editor',
|
||||
ariaLabelDialog: 'Dialog',
|
||||
ariaLabelSelectField: 'Select Field',
|
||||
ariaLabelTooltip: 'Tooltip',
|
||||
ariaLabelContextMenu: 'Context Menu',
|
||||
ariaLabelSubMenu: 'SubMenu',
|
||||
ariaLabelAggregationFunction: 'Aggregation Function',
|
||||
thousandSeparator: ',',
|
||||
decimalSeparator: '.'
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
jan: '一月',
|
||||
feb: '二月',
|
||||
mar: '三月',
|
||||
apr: '四月',
|
||||
mai: '五月',
|
||||
jun: '六月',
|
||||
jul: '七月',
|
||||
aug: '八月',
|
||||
sep: '九月',
|
||||
okt: '十月',
|
||||
nov: '十一月',
|
||||
dez: '十二月',
|
||||
so: '周日',
|
||||
mo: '周一',
|
||||
di: '周二',
|
||||
mi: '周三',
|
||||
do: '周四',
|
||||
fr: '周五',
|
||||
sa: '周六',
|
||||
am: '上午',
|
||||
less: '更少',
|
||||
more: '更多',
|
||||
query: '查询'
|
||||
}
|
||||
}
|
||||
|
@ -1,39 +1,960 @@
|
||||
import user from '@/i18n/langs/zhCn/user'
|
||||
import common from '@/i18n/langs/zhCn/common'
|
||||
import role from '@/i18n/langs/zhCn/role'
|
||||
import schedule from '@/i18n/langs/zhCn/schedule'
|
||||
import dashboard from '@/i18n/langs/zhCn/dashboard'
|
||||
import dataset from '@/i18n/langs/zhCn/dataset'
|
||||
import state from '@/i18n/langs/zhCn/state'
|
||||
import query from '@/i18n/langs/zhCn/query'
|
||||
import source from '@/i18n/langs/zhCn/source'
|
||||
import grid from '@/i18n/langs/zhCn/grid'
|
||||
import heatmap from '@/i18n/langs/zhCn/heatmap'
|
||||
import region from '@/i18n/langs/zhCn/region'
|
||||
import function1 from '@/i18n/langs/zhCn/function'
|
||||
import template from '@/i18n/langs/zhCn/template'
|
||||
import menu from '@/i18n/langs/zhCn/menu'
|
||||
import snippet from '@/i18n/langs/zhCn/snippet'
|
||||
import report from '@/i18n/langs/zhCn/report'
|
||||
import pipeline from '@/i18n/langs/zhCn/pipeline.ts'
|
||||
|
||||
export default {
|
||||
common: common,
|
||||
user: user,
|
||||
role: role,
|
||||
schedule: schedule,
|
||||
dashboard: dashboard,
|
||||
dataset: dataset,
|
||||
state: state,
|
||||
query: query,
|
||||
source: source,
|
||||
grid: grid,
|
||||
heatmap: heatmap,
|
||||
region: region,
|
||||
function: function1,
|
||||
template: template,
|
||||
menu: menu,
|
||||
snippet: snippet,
|
||||
report: report,
|
||||
pipeline: pipeline
|
||||
state: {
|
||||
common: {
|
||||
create: '已创建',
|
||||
running: '运行中',
|
||||
success: '运行成功',
|
||||
failure: '运行失败',
|
||||
stop: '已停止',
|
||||
timeout: '运行超时',
|
||||
queue: '排队中'
|
||||
}
|
||||
},
|
||||
query: {
|
||||
common: {
|
||||
execute: '执行',
|
||||
executeSelection: '执行 (选中)',
|
||||
connectionTime: '连接耗时',
|
||||
executionTime: '执行耗时',
|
||||
format: '格式化',
|
||||
help: '帮助',
|
||||
showSql: '显示 SQL',
|
||||
quoteRecord: '引用记录',
|
||||
historyData: '历史数据',
|
||||
historyDataInfo: '[ $VALUE ] 历史数据',
|
||||
},
|
||||
tip: {
|
||||
pageShow: '打开 / 关闭分页',
|
||||
smallTips: '小技巧:按住键盘 Shift 鼠标选择数据行数会自动复制选中行内容',
|
||||
notPresetToken: '暂无可用的 Token,请到个人中心配置 Token',
|
||||
}
|
||||
},
|
||||
source: {
|
||||
common: {
|
||||
list: '数据源列表',
|
||||
modify: '修改数据源 [ $NAME ]',
|
||||
source: '数据源',
|
||||
configure: '配置',
|
||||
authorization: '授权',
|
||||
advanced: '高级',
|
||||
custom: '自定义',
|
||||
host: '主机地址',
|
||||
port: '端口',
|
||||
name: '名称',
|
||||
username: '用户名',
|
||||
password: '密码',
|
||||
database: '数据库',
|
||||
ssl: 'SSL',
|
||||
file: '文件',
|
||||
create: '创建数据源',
|
||||
delete: '删除数据源 [ $NAME ]',
|
||||
syncMetadata: '同步元数据',
|
||||
syncHistory: '同步历史',
|
||||
manager: '数据管理',
|
||||
info: '基本信息',
|
||||
notSpecified: '未指定',
|
||||
notUpdated: '未更新',
|
||||
engine: '引擎',
|
||||
notSpecifiedEngine: '未指定引擎',
|
||||
collation: '排序规则',
|
||||
notSpecifiedCollation: '未指定排序规则',
|
||||
dataInfo: '数据信息',
|
||||
totalRows: '总行数',
|
||||
format: '格式',
|
||||
notSpecifiedFormat: '未指定格式',
|
||||
avgRowLength: '平均行长度',
|
||||
dataSize: '数据大小',
|
||||
indexSize: '索引大小',
|
||||
notSpecifiedIndex: '未指定索引',
|
||||
autoIncrement: '自增列',
|
||||
notSpecifiedPrimaryKey: '未指定主键',
|
||||
resetAutoIncrement: '重置自增列',
|
||||
resetTo: '重置为',
|
||||
comment: '表注释',
|
||||
menuNew: '新建',
|
||||
menuNewTable: '新建表',
|
||||
tableName: '表名',
|
||||
columnName: '列名',
|
||||
columnType: '类型',
|
||||
columnLength: '长度',
|
||||
columnDefaultValue: '默认值',
|
||||
columnPrimaryKey: '主键',
|
||||
columnAutoIncrement: '自增列',
|
||||
columnIsNullable: '允许为空',
|
||||
columnComment: '列注释',
|
||||
newColumn: '新建列',
|
||||
menuExport: '导出',
|
||||
exportData: '导出数据',
|
||||
exportDataTable: '导出 [ $VALUE ] 表数据',
|
||||
exportDataFormat: '导出格式',
|
||||
exportDataCount: '导出条数',
|
||||
downloadPath: '下载路径',
|
||||
downloadFile: '下载文件',
|
||||
truncateTable: '截断表',
|
||||
truncateTableInfo: '截断 [ $VALUE ] 表',
|
||||
dropTable: '删除表',
|
||||
dropTableInfo: '删除 [ $VALUE ] 表',
|
||||
structure: '结构',
|
||||
isNullable: '允许为空',
|
||||
defaultValue: '默认值',
|
||||
extra: '额外信息',
|
||||
changeColumn: '修改列',
|
||||
changeColumnInfo: '修改 [ $VALUE ] 列',
|
||||
dropColumn: '删除列',
|
||||
dropColumnInfo: '删除 [ $VALUE ] 列',
|
||||
tableData: '表数据',
|
||||
firstPage: '首页',
|
||||
previousPage: '上一页',
|
||||
nextPage: '下一页',
|
||||
lastPage: '尾页',
|
||||
jumpPage: '跳转至',
|
||||
showPageSize: '每页显示',
|
||||
records: '条记录',
|
||||
addRows: '添加行',
|
||||
previewPendingChanges: '预览未保存的变更',
|
||||
previewDML: '预览 DML 语句',
|
||||
copyRows: '复制行',
|
||||
deleteRows: '删除行',
|
||||
visibleColumn: '可见列',
|
||||
filterData: '筛选数据',
|
||||
filterCondition: '筛选条件',
|
||||
addFilter: '添加筛选条件',
|
||||
statement: 'SQL 语句',
|
||||
erDiagram: 'ER 图形',
|
||||
},
|
||||
tip: {
|
||||
selectSource: '请选择数据源',
|
||||
deleteSourceSuccess: '删除数据源 [ $NAME ] 成功',
|
||||
deleteAlert1: '您正在删除数据源。此操作将永久删除所有与该数据源相关的数据和配置。请务必在继续操作之前确认您的操作。',
|
||||
deleteAlert2: '警告:执行此操作将不可逆。所有与该数据源相关的数据和配置都会被永久删除。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
syncMetadata1: '同步元数据将在后台运行',
|
||||
syncMetadata2: '同步元数据将会覆盖当前的元数据,可能会导致数据丢失,是否继续?',
|
||||
syncMetadata3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
syncMetadata4: '任务 [ $NAME ] 已开始',
|
||||
selectDatabase: '请选择数据库',
|
||||
notSelectedNode: '请在左侧选择节点方可展示结果',
|
||||
resetAutoIncrementSuccess: '重置自增列为 [ $VALUE ] 成功',
|
||||
createTableSuccess: '创建表 [ $VALUE ] 成功',
|
||||
createColumnSuccess: '创建列 [ $VALUE ] 成功',
|
||||
truncateTableSuccess: '截断表 [ $VALUE ] 成功',
|
||||
truncateTable1: '您即将执行截断表操作。这将会删除表中的所有数据。您确定要继续吗?',
|
||||
truncateTable2: '请注意,截断表操作是不可逆的。执行此操作将永久删除表中的所有数据。请确保您已经备份了重要数据。',
|
||||
truncateTable3: '执行截断表操作将立即删除表中的所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
truncateTable4: '我们建议您首先在非生产环境中测试截断表操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
truncateTable5: '如果您对执行截断表操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
dropTableSuccess: '删除表 [ $VALUE ] 成功',
|
||||
dropTable1: '您即将执行删除表的操作。此操作将永久删除表及其所有数据。您确定要继续吗?',
|
||||
dropTable2: '请注意,删除表操作是不可逆的。执行此操作将永久删除表及其所有数据。请确保您已经备份了重要数据。',
|
||||
dropTable3: '执行删除表操作将立即删除表及其所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
dropTable4: '我们建议您首先在非生产环境中测试删除表操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
dropTable5: '如果您对执行删除表操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
changeColumnSuccess: '修改列 [ $VALUE ] 成功',
|
||||
dropColumnSuccess: '删除列 [ $VALUE ] 成功',
|
||||
dropColumn1: '您即将执行删除列的操作。此操作将永久删除列及其所有数据。您确定要继续吗?',
|
||||
dropColumn2: '请注意,删除列操作是不可逆的。执行此操作将永久删除列及其所有数据。请确保您已经备份了重要数据。',
|
||||
dropColumn3: '执行删除列操作将立即删除列及其所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
dropColumn4: '我们建议您首先在非生产环境中测试删除列操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
dropColumn5: '如果您对执行删除列操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
updateSuccess: '更新成功',
|
||||
deleteSuccess: '删除成功'
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
selectAll: '(选择全部)',
|
||||
selectAllSearchResults: '(选择全部查询结果)',
|
||||
searchOoo: '搜索...',
|
||||
blanks: '(Blanks)',
|
||||
noMatches: '未找到',
|
||||
filterOoo: '过滤...',
|
||||
equals: '等于',
|
||||
notEqual: '不等于',
|
||||
blank: 'Blank',
|
||||
notBlank: 'Not blank',
|
||||
empty: 'Choose One',
|
||||
lessThan: '小于',
|
||||
greaterThan: '大于',
|
||||
lessThanOrEqual: '小于或等于',
|
||||
greaterThanOrEqual: '大于或等于',
|
||||
inRange: 'In range',
|
||||
inRangeStart: 'from',
|
||||
inRangeEnd: 'to',
|
||||
contains: '包含',
|
||||
notContains: '不包含',
|
||||
startsWith: '以 ... 开始',
|
||||
endsWith: '以 ... 结束',
|
||||
dateFormatOoo: 'yyyy-mm-dd',
|
||||
andCondition: 'AND',
|
||||
orCondition: 'OR',
|
||||
applyFilter: '应用',
|
||||
resetFilter: '重置',
|
||||
clearFilter: '清空',
|
||||
cancelFilter: '取消',
|
||||
textFilter: 'Text Filter',
|
||||
numberFilter: 'Number Filter',
|
||||
dateFilter: 'Date Filter',
|
||||
setFilter: 'Set Filter',
|
||||
columns: 'Columns',
|
||||
filters: 'Filters',
|
||||
pivotMode: 'Pivot Mode',
|
||||
groups: 'Row Groups',
|
||||
rowGroupColumnsEmptyMessage: 'Drag here to set row groups',
|
||||
values: 'Values',
|
||||
valueColumnsEmptyMessage: 'Drag here to aggregate',
|
||||
pivots: 'Column Labels',
|
||||
pivotColumnsEmptyMessage: 'Drag here to set column labels',
|
||||
group: 'Group',
|
||||
rowDragRow: 'row',
|
||||
rowDragRows: 'rows',
|
||||
loadingOoo: 'Loading...',
|
||||
loadingError: 'ERR',
|
||||
noRowsToShow: 'No Rows To Show',
|
||||
enabled: 'Enabled',
|
||||
pinColumn: 'Pin Column',
|
||||
pinLeft: 'Pin Left',
|
||||
pinRight: 'Pin Right',
|
||||
noPin: 'No Pin',
|
||||
valueAggregation: 'Value Aggregation',
|
||||
autosizeThiscolumn: 'Autosize This Column',
|
||||
autosizeAllColumns: 'Autosize All Columns',
|
||||
groupBy: 'Group by',
|
||||
ungroupBy: 'Un-Group by',
|
||||
addToValues: 'Add ${variable} to values',
|
||||
removeFromValues: 'Remove ${variable} from values',
|
||||
addToLabels: 'Add ${variable} to labels',
|
||||
removeFromLabels: 'Remove ${variable} from labels',
|
||||
resetColumns: 'Reset Columns',
|
||||
expandAll: 'Expand All',
|
||||
collapseAll: 'Close All',
|
||||
copy: 'Copy',
|
||||
ctrlC: 'Ctrl+C',
|
||||
copyWithHeaders: 'Copy With Headers',
|
||||
copyWithGroupHeaders: 'Copy with Group Headers',
|
||||
paste: 'Paste',
|
||||
ctrlV: 'Ctrl+V',
|
||||
export: 'Export',
|
||||
csvExport: 'CSV Export',
|
||||
excelExport: 'Excel Export',
|
||||
sum: 'Sum',
|
||||
min: 'Min',
|
||||
max: 'Max',
|
||||
none: 'None',
|
||||
count: 'Count',
|
||||
avg: 'Average',
|
||||
filteredRows: 'Filtered',
|
||||
selectedRows: 'Selected',
|
||||
totalRows: '总行数',
|
||||
totalAndFilteredRows: 'Rows',
|
||||
more: '更多',
|
||||
to: '-',
|
||||
of: '至',
|
||||
page: '当前页',
|
||||
nextPage: '下一页',
|
||||
lastPage: '最后一页',
|
||||
firstPage: '第一页',
|
||||
previousPage: '上一页',
|
||||
pivotColumnGroupTotals: '总数',
|
||||
pivotChartAndPivotMode: 'Pivot Chart & Pivot Mode',
|
||||
pivotChart: 'Pivot Chart',
|
||||
chartRange: 'Chart Range',
|
||||
columnChart: 'Column',
|
||||
groupedColumn: 'Grouped',
|
||||
stackedColumn: 'Stacked',
|
||||
normalizedColumn: '100% Stacked',
|
||||
barChart: 'Bar',
|
||||
groupedBar: 'Grouped',
|
||||
stackedBar: 'Stacked',
|
||||
normalizedBar: '100% Stacked',
|
||||
pieChart: 'Pie',
|
||||
pie: 'Pie',
|
||||
doughnut: 'Doughnut',
|
||||
line: 'Line',
|
||||
xyChart: 'X Y (Scatter)',
|
||||
scatter: 'Scatter',
|
||||
bubble: 'Bubble',
|
||||
areaChart: 'Area',
|
||||
area: 'Area',
|
||||
stackedArea: 'Stacked',
|
||||
normalizedArea: '100% Stacked',
|
||||
histogramChart: 'Histogram',
|
||||
histogramFrequency: 'Frequency',
|
||||
combinationChart: 'Combination',
|
||||
columnLineCombo: 'Column & Line',
|
||||
AreaColumnCombo: 'Area & Column',
|
||||
pivotChartTitle: 'Pivot Chart',
|
||||
rangeChartTitle: 'Range Chart',
|
||||
settings: 'Settings',
|
||||
data: 'Data',
|
||||
format: 'Format',
|
||||
categories: 'Categories',
|
||||
defaultCategory: '(None)',
|
||||
series: 'Series',
|
||||
xyValues: 'X Y Values',
|
||||
paired: 'Paired Mode',
|
||||
axis: 'Axis',
|
||||
navigator: 'Navigator',
|
||||
color: 'Color',
|
||||
thickness: 'Thickness',
|
||||
xType: 'X Type',
|
||||
automatic: 'Automatic',
|
||||
category: 'Category',
|
||||
number: 'Number',
|
||||
time: 'Time',
|
||||
autoRotate: 'Auto Rotate',
|
||||
xRotation: 'X Rotation',
|
||||
yRotation: 'Y Rotation',
|
||||
ticks: 'Ticks',
|
||||
width: 'Width',
|
||||
height: 'Height',
|
||||
length: 'Length',
|
||||
padding: 'Padding',
|
||||
spacing: 'Spacing',
|
||||
chart: 'Chart',
|
||||
title: 'Title',
|
||||
titlePlaceholder: 'Chart title - double click to edit',
|
||||
background: 'Background',
|
||||
font: 'Font',
|
||||
top: 'Top',
|
||||
right: 'Right',
|
||||
bottom: 'Bottom',
|
||||
left: 'Left',
|
||||
labels: 'Labels',
|
||||
size: 'Size',
|
||||
minSize: 'Minimum Size',
|
||||
maxSize: 'Maximum Size',
|
||||
legend: 'Legend',
|
||||
position: 'Position',
|
||||
markerSize: 'Marker Size',
|
||||
markerStroke: 'Marker Stroke',
|
||||
markerPadding: 'Marker Padding',
|
||||
itemSpacing: 'Item Spacing',
|
||||
itemPaddingX: 'Item Padding X',
|
||||
itemPaddingY: 'Item Padding Y',
|
||||
layoutHorizontalSpacing: 'Horizontal Spacing',
|
||||
layoutVerticalSpacing: 'Vertical Spacing',
|
||||
strokeWidth: 'Stroke Width',
|
||||
lineDash: 'Line Dash',
|
||||
offset: 'Offset',
|
||||
offsets: 'Offsets',
|
||||
tooltips: 'Tooltips',
|
||||
callout: 'Callout',
|
||||
markers: 'Markers',
|
||||
shadow: 'Shadow',
|
||||
blur: 'Blur',
|
||||
xOffset: 'X Offset',
|
||||
yOffset: 'Y Offset',
|
||||
lineWidth: 'Line Width',
|
||||
normal: 'Normal',
|
||||
bold: 'Bold',
|
||||
italic: 'Italic',
|
||||
boldItalic: 'Bold Italic',
|
||||
predefined: 'Predefined',
|
||||
fillOpacity: 'Fill Opacity',
|
||||
strokeOpacity: 'Line Opacity',
|
||||
histogramBinCount: 'Bin count',
|
||||
columnGroup: 'Column',
|
||||
barGroup: 'Bar',
|
||||
pieGroup: 'Pie',
|
||||
lineGroup: 'Line',
|
||||
scatterGroup: 'X Y (Scatter)',
|
||||
areaGroup: 'Area',
|
||||
histogramGroup: 'Histogram',
|
||||
combinationGroup: 'Combination',
|
||||
groupedColumnTooltip: 'Grouped',
|
||||
stackedColumnTooltip: 'Stacked',
|
||||
normalizedColumnTooltip: '100% Stacked',
|
||||
groupedBarTooltip: 'Grouped',
|
||||
stackedBarTooltip: 'Stacked',
|
||||
normalizedBarTooltip: '100% Stacked',
|
||||
pieTooltip: 'Pie',
|
||||
doughnutTooltip: 'Doughnut',
|
||||
lineTooltip: 'Line',
|
||||
groupedAreaTooltip: 'Area',
|
||||
stackedAreaTooltip: 'Stacked',
|
||||
normalizedAreaTooltip: '100% Stacked',
|
||||
scatterTooltip: 'Scatter',
|
||||
bubbleTooltip: 'Bubble',
|
||||
histogramTooltip: 'Histogram',
|
||||
columnLineComboTooltip: 'Column & Line',
|
||||
areaColumnComboTooltip: 'Area & Column',
|
||||
customComboTooltip: 'Custom Combination',
|
||||
noDataToChart: 'No data available to be charted.',
|
||||
pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',
|
||||
chartSettingsToolbarTooltip: 'Menu',
|
||||
chartLinkToolbarTooltip: 'Linked to Grid',
|
||||
chartUnlinkToolbarTooltip: 'Unlinked from Grid',
|
||||
chartDownloadToolbarTooltip: 'Download Chart',
|
||||
seriesChartType: 'Series Chart Type',
|
||||
seriesType: 'Series Type',
|
||||
secondaryAxis: 'Secondary Axis',
|
||||
ariaChecked: 'checked',
|
||||
ariaColumn: 'Column',
|
||||
ariaColumnGroup: 'Column Group',
|
||||
ariaColumnList: 'Column List',
|
||||
ariaColumnSelectAll: 'Toggle Select All Columns',
|
||||
ariaDateFilterInput: 'Date Filter Input',
|
||||
ariaDefaultListName: 'List',
|
||||
ariaFilterColumnsInput: 'Filter Columns Input',
|
||||
ariaFilterFromValue: 'Filter from value',
|
||||
ariaFilterInput: 'Filter Input',
|
||||
ariaFilterList: 'Filter List',
|
||||
ariaFilterToValue: 'Filter to value',
|
||||
ariaFilterValue: 'Filter Value',
|
||||
ariaFilteringOperator: 'Filtering Operator',
|
||||
ariaHidden: 'hidden',
|
||||
ariaIndeterminate: 'indeterminate',
|
||||
ariaInputEditor: 'Input Editor',
|
||||
ariaMenuColumn: 'Press CTRL ENTER to open column menu.',
|
||||
ariaRowDeselect: 'Press SPACE to deselect this row',
|
||||
ariaRowSelectAll: 'Press Space to toggle all rows selection',
|
||||
ariaRowToggleSelection: 'Press Space to toggle row selection',
|
||||
ariaRowSelect: 'Press SPACE to select this row',
|
||||
ariaSearch: 'Search',
|
||||
ariaSortableColumn: 'Press ENTER to sort',
|
||||
ariaToggleVisibility: 'Press SPACE to toggle visibility',
|
||||
ariaUnchecked: 'unchecked',
|
||||
ariaVisible: 'visible',
|
||||
ariaSearchFilterValues: 'Search filter values',
|
||||
ariaRowGroupDropZonePanelLabel: 'Row Groups',
|
||||
ariaValuesDropZonePanelLabel: 'Values',
|
||||
ariaPivotDropZonePanelLabel: 'Column Labels',
|
||||
ariaDropZoneColumnComponentDescription: 'Press DELETE to remove',
|
||||
ariaDropZoneColumnValueItemDescription: 'Press ENTER to change the aggregation type',
|
||||
ariaDropZoneColumnGroupItemDescription: 'Press ENTER to sort',
|
||||
ariaDropZoneColumnComponentAggFuncSeperator: ' of ',
|
||||
ariaDropZoneColumnComponentSortAscending: 'ascending',
|
||||
ariaDropZoneColumnComponentSortDescending: 'descending',
|
||||
ariaLabelColumnMenu: 'Column Menu',
|
||||
ariaLabelCellEditor: 'Cell Editor',
|
||||
ariaLabelDialog: 'Dialog',
|
||||
ariaLabelSelectField: 'Select Field',
|
||||
ariaLabelTooltip: 'Tooltip',
|
||||
ariaLabelContextMenu: 'Context Menu',
|
||||
ariaLabelSubMenu: 'SubMenu',
|
||||
ariaLabelAggregationFunction: 'Aggregation Function',
|
||||
thousandSeparator: ',',
|
||||
decimalSeparator: '.'
|
||||
},
|
||||
heatmap: {
|
||||
common: {
|
||||
jan: '一月',
|
||||
feb: '二月',
|
||||
mar: '三月',
|
||||
apr: '四月',
|
||||
mai: '五月',
|
||||
jun: '六月',
|
||||
jul: '七月',
|
||||
aug: '八月',
|
||||
sep: '九月',
|
||||
okt: '十月',
|
||||
nov: '十一月',
|
||||
dez: '十二月',
|
||||
so: '周日',
|
||||
mo: '周一',
|
||||
di: '周二',
|
||||
mi: '周三',
|
||||
do: '周四',
|
||||
fr: '周五',
|
||||
sa: '周六',
|
||||
am: '上午',
|
||||
less: '更少',
|
||||
more: '更多',
|
||||
query: '查询'
|
||||
}
|
||||
},
|
||||
region: {
|
||||
common: {
|
||||
selectLanguage: '选择语言',
|
||||
asia: {
|
||||
default: '亚洲',
|
||||
chineseSimple: '简体中文'
|
||||
},
|
||||
northAmerica: {
|
||||
default: '北美洲',
|
||||
english: '英语'
|
||||
}
|
||||
}
|
||||
},
|
||||
template: {
|
||||
common: {
|
||||
list: '模板列表',
|
||||
create: '创建模板',
|
||||
modify: '修改模板 [ $NAME ]',
|
||||
}
|
||||
},
|
||||
menu: {
|
||||
common: {
|
||||
list: '菜单列表',
|
||||
create: '创建菜单',
|
||||
modify: '修改菜单 [ $NAME ]',
|
||||
parent: '父菜单',
|
||||
redirect: '重定向菜单',
|
||||
new: '新菜单',
|
||||
i18nKey: '国际化标识',
|
||||
icon: '图标'
|
||||
},
|
||||
tip: {
|
||||
selectType: '请选择类型',
|
||||
selectParent: '请选择父菜单',
|
||||
selectRedirect: '请选择重定向菜单'
|
||||
}
|
||||
},
|
||||
snippet: {
|
||||
common: {
|
||||
list: '片段列表',
|
||||
create: '创建片段',
|
||||
modify: '修改片段 [ $VALUE ]',
|
||||
delete: '删除片段',
|
||||
deleteInfo: '删除片段 [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
createSuccess: '片段 [ $VALUE ] 创建成功',
|
||||
deleteSuccess: '片段 [ $VALUE ] 删除成功',
|
||||
deleteAlert1: '您确定要删除此代码片段吗?此操作无法撤销。',
|
||||
deleteAlert2: '删除代码片段后,与之相关的数据将被永久删除。',
|
||||
deleteAlert3: '删除代码片段后,它将无法恢复。',
|
||||
deleteAlert4: '要确认,请在下面的框中键入 [ $VALUE ]'
|
||||
}
|
||||
},
|
||||
report: {
|
||||
common: {
|
||||
list: '报表列表',
|
||||
view: '查看报表 [ $VALUE ]',
|
||||
modify: '修改报表',
|
||||
delete: '删除报表',
|
||||
deleteInfo: '删除报表 [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: '删除报表 [ $VALUE ] 成功',
|
||||
deleteAlert1: '您正在删除报表。此操作将永久删除报表。在继续操作之前,请务必确认您的操作。',
|
||||
deleteAlert2: '警告:此操作无法撤销。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
publishSuccess: '报表 [ $VALUE ] 发布成功',
|
||||
}
|
||||
},
|
||||
pipeline: {
|
||||
common: {
|
||||
list: '流水线列表',
|
||||
logger: '流水线日志',
|
||||
loggerInfo: '流水线 [ $VALUE ] 日志',
|
||||
delete: '删除流水线',
|
||||
deleteInfo: '删除流水线 [ $VALUE ]',
|
||||
stop: '停止流水线',
|
||||
stopInfo: '停止流水线 [ $VALUE ]',
|
||||
flow: '流水线视图',
|
||||
flowInfo: '流水线 [ $VALUE ] 视图',
|
||||
create: '创建流水线',
|
||||
input: '输入源',
|
||||
output: '输出源',
|
||||
resetTransform: '重置变换',
|
||||
},
|
||||
validator: {
|
||||
from: '请配置输入源信息',
|
||||
to: '请配置输出源信息',
|
||||
edge: '请连接输入和输出源'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: '删除流水线 [ $VALUE ] 成功',
|
||||
deleteAlert1: '您正在删除流水线。此操作将永久删除流水线。在继续操作之前,请务必确认您的操作。',
|
||||
deleteAlert2: '警告:此操作无法撤销。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
stopAlert1: '您正在停止流水线。此操作将永久停止流水线。在继续操作之前,请务必确认您的操作。',
|
||||
stopAlert2: '警告:此操作无法撤销。',
|
||||
stopAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
stopSuccess: '流水线 [ $VALUE ] 停止成功',
|
||||
publishSuccess: '流水线 [ $VALUE ] 发布成功',
|
||||
}
|
||||
},
|
||||
common: {
|
||||
home: '首页',
|
||||
dashboard: '仪表盘',
|
||||
query: '查询',
|
||||
dataset: '数据集',
|
||||
admin: '管理员',
|
||||
system: '系统设置',
|
||||
source: '数据源',
|
||||
snippet: '代码片段',
|
||||
history: '查询历史',
|
||||
pipeline: '流水线',
|
||||
report: '数据报表',
|
||||
function: '函数',
|
||||
template: '模板',
|
||||
menu: '菜单',
|
||||
schedule: '调度',
|
||||
authority: '权限',
|
||||
user: '用户',
|
||||
pageNotFound: '哎呀!页面未找到!',
|
||||
pageNotFoundTip: '您要查找的页面,似乎不存在或可能已被删除。',
|
||||
pageNotAuthorized: '哎呀!页面未授权!',
|
||||
pageNotAuthorizedTip: '抱歉,您没有权限访问该页面。',
|
||||
backToHome: '返回首页',
|
||||
backToSignin: '返回登录',
|
||||
profile: '个人中心',
|
||||
id: 'ID',
|
||||
username: '用户名',
|
||||
createTime: '创建时间',
|
||||
updateTime: '更新时间',
|
||||
action: '操作',
|
||||
column: '列',
|
||||
description: '描述',
|
||||
name: '名称',
|
||||
code: '编码',
|
||||
editData: '编辑数据',
|
||||
successfully: '成功',
|
||||
expression: '表达式',
|
||||
active: '激活状态',
|
||||
type: '类型',
|
||||
elapsed: '执行时间',
|
||||
state: '状态',
|
||||
result: '结果',
|
||||
noData: '没有数据可以展示',
|
||||
invalidParam: '参数无效,请检查参数是否填写正确',
|
||||
role: '权限',
|
||||
cancel: '取消',
|
||||
scheduler: '调度器',
|
||||
executor: '执行器',
|
||||
configure: '配置',
|
||||
remove: '移除',
|
||||
publish: '发布',
|
||||
save: '保存',
|
||||
value: '值',
|
||||
alias: '别名',
|
||||
sort: '排序',
|
||||
count: '总数',
|
||||
content: '内容',
|
||||
feedback: '反馈',
|
||||
createEditor: '创建编辑器',
|
||||
device: '设备',
|
||||
client: '客户端',
|
||||
ip: 'IP 地址',
|
||||
ua: 'User Agent',
|
||||
loginTime: '登录时间',
|
||||
submit: '提交',
|
||||
create: '创建',
|
||||
plugin: '插件',
|
||||
group: '分组',
|
||||
sorted: '排序',
|
||||
url: '地址',
|
||||
pageNotNetwork: '哎呀!网络未连接!',
|
||||
protocol: '协议',
|
||||
host: '主机',
|
||||
port: '端口',
|
||||
public: '公开',
|
||||
version: '版本',
|
||||
available: '可用',
|
||||
test: '测试',
|
||||
field: '属性',
|
||||
upload: '上传',
|
||||
deleteData: '删除数据',
|
||||
apply: '应用',
|
||||
length: '长度',
|
||||
preview: '预览',
|
||||
refresh: '刷新',
|
||||
endTime: '结束时间',
|
||||
from: '来源',
|
||||
adhoc: '即席查询',
|
||||
error: '错误',
|
||||
realtime: '实时',
|
||||
to: '目标',
|
||||
work: '工作目录',
|
||||
chat: '聊天室',
|
||||
avatar: '头像',
|
||||
file: '文件',
|
||||
backTo: '返回',
|
||||
tip: {
|
||||
pageNotNetwork: '哎呀!无法连接到网络,请检查网络是否正常!'
|
||||
}
|
||||
},
|
||||
user: {
|
||||
common: {
|
||||
username: '用户名',
|
||||
password: '密码',
|
||||
confirmPassword: '确认密码',
|
||||
signin: '登录',
|
||||
signup: '注册',
|
||||
captcha: '验证码',
|
||||
sourceCount: '数据源',
|
||||
queryCount: '查询',
|
||||
signout: '退出登录',
|
||||
list: '用户列表',
|
||||
assignAuthority: '分配权限',
|
||||
assignRole: '分配路由',
|
||||
setting: '设置',
|
||||
info: '贡献信息',
|
||||
profile: '用户资料',
|
||||
contribution: '贡献',
|
||||
radar7Days: '7天内数据源雷达图',
|
||||
createTime: '创建时间',
|
||||
avatar: '头像',
|
||||
log: '登录日志',
|
||||
editor: '编辑器',
|
||||
fontSize: '字体大小',
|
||||
theme: '主题',
|
||||
assistant: 'AI 助手',
|
||||
host: '主机地址',
|
||||
token: '令牌',
|
||||
timeout: '超时时间',
|
||||
contentCount: '上下文数量',
|
||||
modifyUsername: '修改用户名',
|
||||
oldUsername: '旧用户名',
|
||||
newUsername: '新用户名',
|
||||
modifyPassword: '修改密码',
|
||||
oldPassword: '旧密码',
|
||||
newPassword: '新密码'
|
||||
},
|
||||
auth: {
|
||||
signinTip: '请输入用户名和密码登录',
|
||||
signupTip: '请输入用户名和密码注册',
|
||||
usernameTip: '请输入用户名',
|
||||
passwordTip: '请输入密码',
|
||||
confirmPasswordTip: '请输入确认密码',
|
||||
captchaTip: '请输入验证码',
|
||||
notUserTip: '没有账号?',
|
||||
hasUserTip: '已有账号?',
|
||||
passwordNotMatchTip: '密码不匹配',
|
||||
usernameSizeTip: '用户名必须在3-20个字符之间',
|
||||
passwordSizeTip: '密码必须在6-20个字符之间',
|
||||
captchaSizeTip: '验证码必须在1-6个字符之间'
|
||||
},
|
||||
tip: {
|
||||
sourceCountTip: '创建数据源总数统计',
|
||||
queryCountTip: '访问查询总数统计',
|
||||
assignRoleSuccess: '分配路由成功',
|
||||
info: '这里主要展示的是一些个人的贡献信息,包含了一些查询,数据源等信息',
|
||||
contribution: '这里的贡献度是根据数据源的查询次数进行计算,数据源的查询次数越多,贡献度越高。',
|
||||
radar7Days: '这里的数据是指 7 天内的数据源使用次数情况',
|
||||
profile: '这里主要展示的是一些个人的基本信息,包含了一些头像,昵称等信息',
|
||||
username: '用户名是唯一的,当前不支持修改用户名',
|
||||
createTime: '用户的创建时间,默认为用户的首次注册时间,由系统生成',
|
||||
avatar: '默认为系统头像,用户可以自定义上传自己的头像',
|
||||
log: '这里主要展示的是一些登录日志信息,包含了登录时间、IP地址等信息',
|
||||
editor: '这里主要展示的是一些编辑器信息,包含了编辑器的一些配置信息,如代码高亮、主题等信息',
|
||||
fontSize: '这里可以修改一些文字的大小,默认为 12',
|
||||
theme: '这里可以修改一些主题,包含各种主题样式',
|
||||
assistant: '这里主要展示的是一些 AI 助手配置信息,包含了一些配置信息,如运营商,代理等信息',
|
||||
host: '这里主要用于配置 AI 助手的主机地址',
|
||||
token: '这里主要用于配置 AI 助手的令牌',
|
||||
timeout: '这里主要用于配置 AI 助手的超时时间',
|
||||
contentCount: '这里主要用于配置 AI 助手的上下文数量',
|
||||
modifyUsername: '这里主要用于修改用户的用户名',
|
||||
oldUsername: '这主要用于修改用户的旧用户名',
|
||||
newUsername: '这主要用于修改用户的新用户名',
|
||||
password: '密码是用户登录的密码',
|
||||
changeUsernameSuccessfully: '修改用户名成功,请重新登录',
|
||||
modifyPassword: '这里主要用于修改用户的密码',
|
||||
changePasswordSuccessfully: '修改密码成功,请重新登录',
|
||||
oldPassword: '这里主要用于修改用户的旧密码',
|
||||
newPassword: '这里主要用于修改用户的新密码',
|
||||
confirmPassword: '这里主要用于确认用户的新密码'
|
||||
}
|
||||
},
|
||||
role: {
|
||||
common: {
|
||||
list: '权限列表',
|
||||
create: '创建路由',
|
||||
edit: '编辑路由 [ $NAME ]',
|
||||
name: '路由名称',
|
||||
description: '路由描述',
|
||||
assignRole: '分配路由 [ $NAME ]',
|
||||
assignMenu: '分配菜单 [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
name: '请输入路由名称',
|
||||
description: '请输入路由描述'
|
||||
},
|
||||
validate: {
|
||||
nameSize: '路由名称必须在3-20个字符之间',
|
||||
descriptionSize: '路由描述必须在3-50个字符之间'
|
||||
}
|
||||
},
|
||||
schedule: {
|
||||
common: {
|
||||
list: '调度列表',
|
||||
history: '调度历史'
|
||||
}
|
||||
},
|
||||
dashboard: {
|
||||
common: {
|
||||
list: '仪表盘列表',
|
||||
delete: '删除仪表盘',
|
||||
create: '创建仪表盘',
|
||||
modify: '修改仪表盘',
|
||||
modifyInfo: '修改仪表盘 [ $VALUE ]',
|
||||
addReport: '添加图表'
|
||||
},
|
||||
tip: {
|
||||
deleteTip1: '您正在删除仪表板。此操作将永久删除仪表板。在继续操作之前,请务必确认您的操作。',
|
||||
deleteTip2: '警告:此操作无法撤消。 ',
|
||||
deleteTip3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
publishSuccess: '仪表板 [ $VALUE ] 发布成功',
|
||||
notFound: '仪表板 [ $VALUE ] 不存在'
|
||||
}
|
||||
},
|
||||
function: {
|
||||
common: {
|
||||
list: '函数列表',
|
||||
keyword: '关键字',
|
||||
operator: '运算符',
|
||||
function: '函数',
|
||||
example: '示例',
|
||||
import: '导入数据',
|
||||
importFromUrl: '从 URL 导入',
|
||||
create: '创建函数',
|
||||
modify: '修改函数 [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
selectPluginHolder: '请选择插件',
|
||||
selectTypeHolder: '请选择类型'
|
||||
}
|
||||
},
|
||||
dataset: {
|
||||
common: {
|
||||
list: '数据集列表',
|
||||
adhoc: '即席查询',
|
||||
showPageSize: '每页显示行数',
|
||||
totalRows: '总行数',
|
||||
totalSize: '总大小',
|
||||
dataPreview: '数据预览',
|
||||
dataColumn: '数据列',
|
||||
dataConfigure: '数据配置',
|
||||
dataLifeCycle: '数据生命周期',
|
||||
onlyPreviewCreate: '仅支持预览数据创建数据集',
|
||||
returnQuery: '返回查询',
|
||||
columnName: '列名',
|
||||
columnAlias: '列别名',
|
||||
columnType: '列类型',
|
||||
columnTypeString: '字符串',
|
||||
columnTypeNumber: '数字',
|
||||
columnTypeNumberSigned: '数字 (符号)',
|
||||
columnTypeBoolean: '布尔',
|
||||
columnTypeDateTime: '日期时间',
|
||||
columnDescription: '列描述',
|
||||
columnComment: '列注释',
|
||||
columnDefaultValue: '列默认值',
|
||||
columnIsNullable: '是否允许为空',
|
||||
columnLength: '列长度',
|
||||
columnIsOrderByKey: '排序键',
|
||||
columnIsPartitionKey: '分区键',
|
||||
columnIsPrimaryKey: '主键',
|
||||
columnIsSampling: '是否抽样',
|
||||
columnExpression: '表达式',
|
||||
columnMode: '列模式',
|
||||
columnModeMetric: '指标',
|
||||
columnModeDimension: '维度',
|
||||
columnModeGroup: '分组',
|
||||
columnModeFilter: '筛选器',
|
||||
columnSortNone: '无',
|
||||
columnOrderAsc: '升序',
|
||||
columnOrderDesc: '降序',
|
||||
create: '创建数据集',
|
||||
modify: '修改数据集',
|
||||
actuator: '执行器',
|
||||
syncMode: '同步模式',
|
||||
syncModeManual: '手动',
|
||||
syncModeTiming: '定时同步',
|
||||
syncModeOutSync: '不同步',
|
||||
rebuild: '重新构建',
|
||||
complete: '完成',
|
||||
failed: '失败',
|
||||
stateOfStarted: '已启动',
|
||||
stateOfMetadata: '元数据状态',
|
||||
stateOfMetadataStarted: '元数据已启动',
|
||||
stateOfCreateTable: '创建表状态',
|
||||
syncData: '同步数据',
|
||||
visualType: '可视化类型',
|
||||
visualTypeTable: '表格',
|
||||
visualTypeLine: '折线图',
|
||||
visualTypeBar: '柱状图',
|
||||
visualTypeArea: '面积图',
|
||||
visualTypePie: '饼图',
|
||||
visualTypeHistogram: '直方图',
|
||||
visualTypeWordCloud: '词云图',
|
||||
visualTypeScatter: '散点图',
|
||||
visualTypeRadar: '雷达图',
|
||||
visualTypeFunnel: '漏斗图',
|
||||
visualTypeGauge: '仪表盘图',
|
||||
visualConfigure: '可视化配置',
|
||||
visualConfigureNotSpecified: '暂无可用配置项',
|
||||
visualConfigureXAxis: 'X轴',
|
||||
visualConfigureYAxis: 'Y轴',
|
||||
visualConfigureCategoryField: '类别',
|
||||
visualConfigureCategoryLeftField: '左类别',
|
||||
visualConfigureCategoryRightField: '右类别',
|
||||
visualConfigureValueField: '值',
|
||||
visualConfigureSeriesField: '系列',
|
||||
visualConfigureOuterRadius: '外半径',
|
||||
visualConfigureShowLegend: '显示图例',
|
||||
visualConfigureInnerRadius: '内半径',
|
||||
visualConfigureStartAngle: '起始角度',
|
||||
visualConfigureEndAngle: '结束角度',
|
||||
visualConfigureDataBreakpoint: '数据断点',
|
||||
visualConfigureDataBreakpointBreak: '断开',
|
||||
visualConfigureDataBreakpointContinuous: '连续',
|
||||
visualConfigureDataBreakpointZero: '补 0',
|
||||
visualConfigureDataBreakpointIgnore: '忽略',
|
||||
visualConfigureGeneralGroup: '通用配置',
|
||||
visualConfigureTitleGroup: '标题配置',
|
||||
visualConfigureTitleGroupVisible: '是否展示',
|
||||
visualConfigureTitleGroupText: '标题',
|
||||
visualConfigureTitleGroupSubText: '子标题',
|
||||
visualConfigureTitleGroupPosition: '位置',
|
||||
visualConfigureTitleGroupPositionLeft: '左',
|
||||
visualConfigureTitleGroupPositionRight: '右',
|
||||
visualConfigureTitleGroupPositionTop: '顶部',
|
||||
visualConfigureTitleGroupPositionBottom: '底部',
|
||||
visualConfigureTitleGroupAlign: '对齐方式',
|
||||
visualConfigureTitleGroupAlignLeft: '左对齐',
|
||||
visualConfigureTitleGroupAlignCenter: '居中对齐',
|
||||
visualConfigureTitleGroupAlignRight: '右对齐',
|
||||
columnExpressionMax: '最大值',
|
||||
columnExpressionMin: '最小值',
|
||||
columnExpressionSum: '总和',
|
||||
columnExpressionAvg: '平均值',
|
||||
columnExpressionCount: '计数',
|
||||
columnExpressionEquals: '等于',
|
||||
columnExpressionNotEquals: '不等于',
|
||||
columnExpressionIsNull: '为空',
|
||||
columnExpressionIsNotNull: '不为空',
|
||||
columnExpressionIsIn: '在 ... 中',
|
||||
columnExpressionIsNotIn: '不在 ... 中',
|
||||
columnExpressionIsLike: '像',
|
||||
columnExpressionIsNotLike: '不像',
|
||||
columnExpressionIsContains: '包含',
|
||||
columnExpressionIsNotContains: '不包含',
|
||||
columnExpressionGreaterThan: '大于',
|
||||
columnExpressionGreaterThanOrEquals: '大于等于',
|
||||
columnExpressionLessThan: '小于',
|
||||
columnExpressionLessThanOrEquals: '小于等于',
|
||||
customFunction: '自定义函数',
|
||||
lifeCycleMonth: '月',
|
||||
lifeCycleWeek: '周',
|
||||
lifeCycleDay: '天',
|
||||
lifeCycleHour: '小时',
|
||||
notSpecifiedTitle: '未指定',
|
||||
history: '同步历史',
|
||||
clearData: '清除数据',
|
||||
error: '查看错误',
|
||||
info: '查看详情',
|
||||
lifeCycleColumn: '生命周期列',
|
||||
lifeCycleNumber: '生命周期数',
|
||||
continuousBuild: '连续构建'
|
||||
},
|
||||
validator: {
|
||||
duplicateColumn: '列名 [ $VALUE ] 已存在',
|
||||
specifiedColumn: '排序键或主键必须指定',
|
||||
specifiedName: '数据集名必须指定'
|
||||
},
|
||||
tip: {
|
||||
selectExpression: '请选择表达式',
|
||||
syncData: '数据同步计划将在后台运行,具体同步结果请参考日志',
|
||||
clearData: '清除数据后无法进行回滚,清除操作将在后台运行,请耐心等待',
|
||||
lifeCycle: '数据集生命周期会根据指定列表达式进行计算',
|
||||
validatorSampling: '排序键中必须包含抽样键',
|
||||
adhocDnd: '拖拽左侧指标|维度到相应位置即可查询并渲染数据',
|
||||
rebuildProgress: '重建只会进行未完成进度',
|
||||
lifeCycleMustDateColumn: '生命周期必须包含一个日期列',
|
||||
modifyNotSupportDataPreview: '修改暂不支持数据预览',
|
||||
publishSuccess: '数据集 [ $VALUE ] 发布成功'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '菜单列表',
|
||||
create: '创建菜单',
|
||||
modify: '修改菜单 [ $NAME ]',
|
||||
parent: '父菜单',
|
||||
redirect: '重定向菜单',
|
||||
new: '新菜单',
|
||||
i18nKey: '国际化标识',
|
||||
icon: '图标'
|
||||
},
|
||||
tip: {
|
||||
selectType: '请选择类型',
|
||||
selectParent: '请选择父菜单',
|
||||
selectRedirect: '请选择重定向菜单'
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '流水线列表',
|
||||
logger: '流水线日志',
|
||||
loggerInfo: '流水线 [ $VALUE ] 日志',
|
||||
delete: '删除流水线',
|
||||
deleteInfo: '删除流水线 [ $VALUE ]',
|
||||
stop: '停止流水线',
|
||||
stopInfo: '停止流水线 [ $VALUE ]',
|
||||
flow: '流水线视图',
|
||||
flowInfo: '流水线 [ $VALUE ] 视图',
|
||||
create: '创建流水线',
|
||||
input: '输入源',
|
||||
output: '输出源',
|
||||
resetTransform: '重置变换',
|
||||
},
|
||||
validator: {
|
||||
from: '请配置输入源信息',
|
||||
to: '请配置输出源信息',
|
||||
edge: '请连接输入和输出源'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: '删除流水线 [ $VALUE ] 成功',
|
||||
deleteAlert1: '您正在删除流水线。此操作将永久删除流水线。在继续操作之前,请务必确认您的操作。',
|
||||
deleteAlert2: '警告:此操作无法撤销。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
stopAlert1: '您正在停止流水线。此操作将永久停止流水线。在继续操作之前,请务必确认您的操作。',
|
||||
stopAlert2: '警告:此操作无法撤销。',
|
||||
stopAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
stopSuccess: '流水线 [ $VALUE ] 停止成功',
|
||||
publishSuccess: '流水线 [ $VALUE ] 发布成功',
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
execute: '执行',
|
||||
executeSelection: '执行 (选中)',
|
||||
connectionTime: '连接耗时',
|
||||
executionTime: '执行耗时',
|
||||
format: '格式化',
|
||||
help: '帮助',
|
||||
showSql: '显示 SQL',
|
||||
quoteRecord: '引用记录',
|
||||
historyData: '历史数据',
|
||||
historyDataInfo: '[ $VALUE ] 历史数据',
|
||||
},
|
||||
tip: {
|
||||
pageShow: '打开 / 关闭分页',
|
||||
smallTips: '小技巧:按住键盘 Shift 鼠标选择数据行数会自动复制选中行内容',
|
||||
notPresetToken: '暂无可用的 Token,请到个人中心配置 Token',
|
||||
}
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
selectLanguage: '选择语言',
|
||||
asia: {
|
||||
default: '亚洲',
|
||||
chineseSimple: '简体中文'
|
||||
},
|
||||
northAmerica: {
|
||||
default: '北美洲',
|
||||
english: '英语'
|
||||
}
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '报表列表',
|
||||
view: '查看报表 [ $VALUE ]',
|
||||
modify: '修改报表',
|
||||
delete: '删除报表',
|
||||
deleteInfo: '删除报表 [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
deleteSuccess: '删除报表 [ $VALUE ] 成功',
|
||||
deleteAlert1: '您正在删除报表。此操作将永久删除报表。在继续操作之前,请务必确认您的操作。',
|
||||
deleteAlert2: '警告:此操作无法撤销。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $VALUE ]',
|
||||
publishSuccess: '报表 [ $VALUE ] 发布成功',
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '权限列表',
|
||||
create: '创建路由',
|
||||
edit: '编辑路由 [ $NAME ]',
|
||||
name: '路由名称',
|
||||
description: '路由描述',
|
||||
assignRole: '分配路由 [ $NAME ]',
|
||||
assignMenu: '分配菜单 [ $NAME ]'
|
||||
},
|
||||
tip: {
|
||||
name: '请输入路由名称',
|
||||
description: '请输入路由描述'
|
||||
},
|
||||
validate: {
|
||||
nameSize: '路由名称必须在3-20个字符之间',
|
||||
descriptionSize: '路由描述必须在3-50个字符之间'
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '调度列表',
|
||||
history: '调度历史'
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '片段列表',
|
||||
create: '创建片段',
|
||||
modify: '修改片段 [ $VALUE ]',
|
||||
delete: '删除片段',
|
||||
deleteInfo: '删除片段 [ $VALUE ]'
|
||||
},
|
||||
tip: {
|
||||
createSuccess: '片段 [ $VALUE ] 创建成功',
|
||||
deleteSuccess: '片段 [ $VALUE ] 删除成功',
|
||||
deleteAlert1: '您确定要删除此代码片段吗?此操作无法撤销。',
|
||||
deleteAlert2: '删除代码片段后,与之相关的数据将被永久删除。',
|
||||
deleteAlert3: '删除代码片段后,它将无法恢复。',
|
||||
deleteAlert4: '要确认,请在下面的框中键入 [ $VALUE ]'
|
||||
}
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '数据源列表',
|
||||
modify: '修改数据源 [ $NAME ]',
|
||||
source: '数据源',
|
||||
configure: '配置',
|
||||
authorization: '授权',
|
||||
advanced: '高级',
|
||||
custom: '自定义',
|
||||
host: '主机地址',
|
||||
port: '端口',
|
||||
name: '名称',
|
||||
username: '用户名',
|
||||
password: '密码',
|
||||
database: '数据库',
|
||||
ssl: 'SSL',
|
||||
file: '文件',
|
||||
create: '创建数据源',
|
||||
delete: '删除数据源 [ $NAME ]',
|
||||
syncMetadata: '同步元数据',
|
||||
syncHistory: '同步历史',
|
||||
manager: '数据管理',
|
||||
info: '基本信息',
|
||||
notSpecified: '未指定',
|
||||
notUpdated: '未更新',
|
||||
engine: '引擎',
|
||||
notSpecifiedEngine: '未指定引擎',
|
||||
collation: '排序规则',
|
||||
notSpecifiedCollation: '未指定排序规则',
|
||||
dataInfo: '数据信息',
|
||||
totalRows: '总行数',
|
||||
format: '格式',
|
||||
notSpecifiedFormat: '未指定格式',
|
||||
avgRowLength: '平均行长度',
|
||||
dataSize: '数据大小',
|
||||
indexSize: '索引大小',
|
||||
notSpecifiedIndex: '未指定索引',
|
||||
autoIncrement: '自增列',
|
||||
notSpecifiedPrimaryKey: '未指定主键',
|
||||
resetAutoIncrement: '重置自增列',
|
||||
resetTo: '重置为',
|
||||
comment: '表注释',
|
||||
menuNew: '新建',
|
||||
menuNewTable: '新建表',
|
||||
tableName: '表名',
|
||||
columnName: '列名',
|
||||
columnType: '类型',
|
||||
columnLength: '长度',
|
||||
columnDefaultValue: '默认值',
|
||||
columnPrimaryKey: '主键',
|
||||
columnAutoIncrement: '自增列',
|
||||
columnIsNullable: '允许为空',
|
||||
columnComment: '列注释',
|
||||
newColumn: '新建列',
|
||||
menuExport: '导出',
|
||||
exportData: '导出数据',
|
||||
exportDataTable: '导出 [ $VALUE ] 表数据',
|
||||
exportDataFormat: '导出格式',
|
||||
exportDataCount: '导出条数',
|
||||
downloadPath: '下载路径',
|
||||
downloadFile: '下载文件',
|
||||
truncateTable: '截断表',
|
||||
truncateTableInfo: '截断 [ $VALUE ] 表',
|
||||
dropTable: '删除表',
|
||||
dropTableInfo: '删除 [ $VALUE ] 表',
|
||||
structure: '结构',
|
||||
isNullable: '允许为空',
|
||||
defaultValue: '默认值',
|
||||
extra: '额外信息',
|
||||
changeColumn: '修改列',
|
||||
changeColumnInfo: '修改 [ $VALUE ] 列',
|
||||
dropColumn: '删除列',
|
||||
dropColumnInfo: '删除 [ $VALUE ] 列',
|
||||
tableData: '表数据',
|
||||
firstPage: '首页',
|
||||
previousPage: '上一页',
|
||||
nextPage: '下一页',
|
||||
lastPage: '尾页',
|
||||
jumpPage: '跳转至',
|
||||
showPageSize: '每页显示',
|
||||
records: '条记录',
|
||||
addRows: '添加行',
|
||||
previewPendingChanges: '预览未保存的变更',
|
||||
previewDML: '预览 DML 语句',
|
||||
copyRows: '复制行',
|
||||
deleteRows: '删除行',
|
||||
visibleColumn: '可见列',
|
||||
filterData: '筛选数据',
|
||||
filterCondition: '筛选条件',
|
||||
addFilter: '添加筛选条件',
|
||||
statement: 'SQL 语句',
|
||||
erDiagram: 'ER 图形',
|
||||
},
|
||||
tip: {
|
||||
selectSource: '请选择数据源',
|
||||
deleteSourceSuccess: '删除数据源 [ $NAME ] 成功',
|
||||
deleteAlert1: '您正在删除数据源。此操作将永久删除所有与该数据源相关的数据和配置。请务必在继续操作之前确认您的操作。',
|
||||
deleteAlert2: '警告:执行此操作将不可逆。所有与该数据源相关的数据和配置都会被永久删除。',
|
||||
deleteAlert3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
syncMetadata1: '同步元数据将在后台运行',
|
||||
syncMetadata2: '同步元数据将会覆盖当前的元数据,可能会导致数据丢失,是否继续?',
|
||||
syncMetadata3: '要确认,请在下面的框中键入 [ $NAME ]',
|
||||
syncMetadata4: '任务 [ $NAME ] 已开始',
|
||||
selectDatabase: '请选择数据库',
|
||||
notSelectedNode: '请在左侧选择节点方可展示结果',
|
||||
resetAutoIncrementSuccess: '重置自增列为 [ $VALUE ] 成功',
|
||||
createTableSuccess: '创建表 [ $VALUE ] 成功',
|
||||
createColumnSuccess: '创建列 [ $VALUE ] 成功',
|
||||
truncateTableSuccess: '截断表 [ $VALUE ] 成功',
|
||||
truncateTable1: '您即将执行截断表操作。这将会删除表中的所有数据。您确定要继续吗?',
|
||||
truncateTable2: '请注意,截断表操作是不可逆的。执行此操作将永久删除表中的所有数据。请确保您已经备份了重要数据。',
|
||||
truncateTable3: '执行截断表操作将立即删除表中的所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
truncateTable4: '我们建议您首先在非生产环境中测试截断表操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
truncateTable5: '如果您对执行截断表操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
dropTableSuccess: '删除表 [ $VALUE ] 成功',
|
||||
dropTable1: '您即将执行删除表的操作。此操作将永久删除表及其所有数据。您确定要继续吗?',
|
||||
dropTable2: '请注意,删除表操作是不可逆的。执行此操作将永久删除表及其所有数据。请确保您已经备份了重要数据。',
|
||||
dropTable3: '执行删除表操作将立即删除表及其所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
dropTable4: '我们建议您首先在非生产环境中测试删除表操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
dropTable5: '如果您对执行删除表操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
changeColumnSuccess: '修改列 [ $VALUE ] 成功',
|
||||
dropColumnSuccess: '删除列 [ $VALUE ] 成功',
|
||||
dropColumn1: '您即将执行删除列的操作。此操作将永久删除列及其所有数据。您确定要继续吗?',
|
||||
dropColumn2: '请注意,删除列操作是不可逆的。执行此操作将永久删除列及其所有数据。请确保您已经备份了重要数据。',
|
||||
dropColumn3: '执行删除列操作将立即删除列及其所有数据,这可能会对正在进行的工作造成影响。请确保您已经保存了需要的数据,并且其他用户不会受到影响。',
|
||||
dropColumn4: '我们建议您首先在非生产环境中测试删除列操作,以确保它不会对您的生产数据造成意外的影响。',
|
||||
dropColumn5: '如果您对执行删除列操作有任何疑问或需要帮助,请联系您的数据库管理员或技术支持团队。',
|
||||
updateSuccess: '更新成功',
|
||||
deleteSuccess: '删除成功'
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
create: '已创建',
|
||||
running: '运行中',
|
||||
success: '运行成功',
|
||||
failure: '运行失败',
|
||||
stop: '已停止',
|
||||
timeout: '运行超时',
|
||||
queue: '排队中'
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
list: '模板列表',
|
||||
create: '创建模板',
|
||||
modify: '修改模板 [ $NAME ]',
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
export default {
|
||||
common: {
|
||||
username: '用户名',
|
||||
password: '密码',
|
||||
confirmPassword: '确认密码',
|
||||
signin: '登录',
|
||||
signup: '注册',
|
||||
captcha: '验证码',
|
||||
sourceCount: '数据源',
|
||||
queryCount: '查询',
|
||||
signout: '退出登录',
|
||||
list: '用户列表',
|
||||
assignAuthority: '分配权限',
|
||||
assignRole: '分配路由',
|
||||
setting: '设置',
|
||||
info: '贡献信息',
|
||||
profile: '用户资料',
|
||||
contribution: '贡献',
|
||||
radar7Days: '7天内数据源雷达图',
|
||||
createTime: '创建时间',
|
||||
avatar: '头像',
|
||||
log: '登录日志',
|
||||
editor: '编辑器',
|
||||
fontSize: '字体大小',
|
||||
theme: '主题',
|
||||
assistant: 'AI 助手',
|
||||
host: '主机地址',
|
||||
token: '令牌',
|
||||
timeout: '超时时间',
|
||||
contentCount: '上下文数量',
|
||||
modifyUsername: '修改用户名',
|
||||
oldUsername: '旧用户名',
|
||||
newUsername: '新用户名',
|
||||
modifyPassword: '修改密码',
|
||||
oldPassword: '旧密码',
|
||||
newPassword: '新密码'
|
||||
},
|
||||
auth: {
|
||||
signinTip: '请输入用户名和密码登录',
|
||||
signupTip: '请输入用户名和密码注册',
|
||||
usernameTip: '请输入用户名',
|
||||
passwordTip: '请输入密码',
|
||||
confirmPasswordTip: '请输入确认密码',
|
||||
captchaTip: '请输入验证码',
|
||||
notUserTip: '没有账号?',
|
||||
hasUserTip: '已有账号?',
|
||||
passwordNotMatchTip: '密码不匹配',
|
||||
usernameSizeTip: '用户名必须在3-20个字符之间',
|
||||
passwordSizeTip: '密码必须在6-20个字符之间',
|
||||
captchaSizeTip: '验证码必须在1-6个字符之间'
|
||||
},
|
||||
tip: {
|
||||
sourceCountTip: '创建数据源总数统计',
|
||||
queryCountTip: '访问查询总数统计',
|
||||
assignRoleSuccess: '分配路由成功',
|
||||
info: '这里主要展示的是一些个人的贡献信息,包含了一些查询,数据源等信息',
|
||||
contribution: '这里的贡献度是根据数据源的查询次数进行计算,数据源的查询次数越多,贡献度越高。',
|
||||
radar7Days: '这里的数据是指 7 天内的数据源使用次数情况',
|
||||
profile: '这里主要展示的是一些个人的基本信息,包含了一些头像,昵称等信息',
|
||||
username: '用户名是唯一的,当前不支持修改用户名',
|
||||
createTime: '用户的创建时间,默认为用户的首次注册时间,由系统生成',
|
||||
avatar: '默认为系统头像,用户可以自定义上传自己的头像',
|
||||
log: '这里主要展示的是一些登录日志信息,包含了登录时间、IP地址等信息',
|
||||
editor: '这里主要展示的是一些编辑器信息,包含了编辑器的一些配置信息,如代码高亮、主题等信息',
|
||||
fontSize: '这里可以修改一些文字的大小,默认为 12',
|
||||
theme: '这里可以修改一些主题,包含各种主题样式',
|
||||
assistant: '这里主要展示的是一些 AI 助手配置信息,包含了一些配置信息,如运营商,代理等信息',
|
||||
host: '这里主要用于配置 AI 助手的主机地址',
|
||||
token: '这里主要用于配置 AI 助手的令牌',
|
||||
timeout: '这里主要用于配置 AI 助手的超时时间',
|
||||
contentCount: '这里主要用于配置 AI 助手的上下文数量',
|
||||
modifyUsername: '这里主要用于修改用户的用户名',
|
||||
oldUsername: '这主要用于修改用户的旧用户名',
|
||||
newUsername: '这主要用于修改用户的新用户名',
|
||||
password: '密码是用户登录的密码',
|
||||
changeUsernameSuccessfully: '修改用户名成功,请重新登录',
|
||||
modifyPassword: '这里主要用于修改用户的密码',
|
||||
changePasswordSuccessfully: '修改密码成功,请重新登录',
|
||||
oldPassword: '这里主要用于修改用户的旧密码',
|
||||
newPassword: '这里主要用于修改用户的新密码',
|
||||
confirmPassword: '这里主要用于确认用户的新密码',
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@ export interface DashboardModel
|
||||
updateTime?: string
|
||||
user?: UserModel
|
||||
reports?: ReportModel[]
|
||||
code?: string
|
||||
}
|
||||
|
||||
export class DashboardRequest
|
||||
|
@ -129,7 +129,7 @@ const createAdminRouter = (router: any) => {
|
||||
component: () => import('@/views/pages/admin/dashboard/DashboardHome.vue')
|
||||
},
|
||||
{
|
||||
path: 'dashboard/info/:id/preview',
|
||||
path: 'dashboard/preview/:code',
|
||||
meta: {
|
||||
title: 'common.dashboard',
|
||||
isRoot: false
|
||||
@ -137,7 +137,7 @@ const createAdminRouter = (router: any) => {
|
||||
component: () => import('@/views/pages/admin/dashboard/DashboardPreview.vue')
|
||||
},
|
||||
{
|
||||
path: 'dashboard/info/:id?',
|
||||
path: 'dashboard/info/:code?',
|
||||
meta: {
|
||||
title: 'common.dashboard',
|
||||
isRoot: false
|
||||
@ -215,7 +215,7 @@ const createAdminRouter = (router: any) => {
|
||||
component: () => import('@/views/pages/admin/source/SourceHome.vue')
|
||||
},
|
||||
{
|
||||
path: 'source/:id/manager',
|
||||
path: 'source/manager/:code',
|
||||
meta: {
|
||||
title: 'common.source',
|
||||
isRoot: false
|
||||
|
@ -15,12 +15,12 @@ class DatabaseService
|
||||
/**
|
||||
* Retrieves all items by source ID.
|
||||
*
|
||||
* @param {number} id - The ID of the source.
|
||||
* @param {number} code - The ID of the source.
|
||||
* @return {Promise<ResponseModel>} A promise that resolves to the response model.
|
||||
*/
|
||||
getAllBySource(id: string): Promise<ResponseModel>
|
||||
getAllBySource(code: string): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().post(`${DEFAULT_PATH}/source/${id}`)
|
||||
return new HttpUtils().post(`${DEFAULT_PATH}/source/${code}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ export class DatasetService
|
||||
|
||||
saveOrUpdate(configure: DatasetModel): Promise<ResponseModel>
|
||||
{
|
||||
const url = `${DEFAULT_PATH}/create`
|
||||
const url = `${ DEFAULT_PATH }/create`
|
||||
// @ts-ignore
|
||||
if (configure['id'] > 0) {
|
||||
return new HttpUtils().put(url, configure)
|
||||
@ -35,7 +35,7 @@ export class DatasetService
|
||||
*/
|
||||
adhoc(code: string, configure: any): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().post(`${DEFAULT_PATH}/adhoc/${code}`, configure)
|
||||
return new HttpUtils().post(`${ DEFAULT_PATH }/adhoc/${ code }`, configure)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -46,7 +46,7 @@ export class DatasetService
|
||||
*/
|
||||
getColumnsByCode(code: string): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().get(`${DEFAULT_PATH}/columns/${code}`)
|
||||
return new HttpUtils().get(`${ DEFAULT_PATH }/columns/${ code }`)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -57,7 +57,7 @@ export class DatasetService
|
||||
*/
|
||||
rebuild(id: number): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().put(`${DEFAULT_PATH}/rebuild/${id}`)
|
||||
return new HttpUtils().put(`${ DEFAULT_PATH }/rebuild/${ id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -69,7 +69,7 @@ export class DatasetService
|
||||
*/
|
||||
getHistory(code: string, configure: FilterModel): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().post(`${DEFAULT_PATH}/history/${code}`, configure)
|
||||
return new HttpUtils().post(`${ DEFAULT_PATH }/history/${ code }`, configure)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,7 +80,7 @@ export class DatasetService
|
||||
*/
|
||||
syncData(id: number): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().put(`${DEFAULT_PATH}/syncData/${id}`)
|
||||
return new HttpUtils().put(`${ DEFAULT_PATH }/syncData/${ id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -91,12 +91,7 @@ export class DatasetService
|
||||
*/
|
||||
clearData(code: string): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().put(`${DEFAULT_PATH}/clearData/${code}`)
|
||||
}
|
||||
|
||||
getByCode(code: string): Promise<ResponseModel>
|
||||
{
|
||||
return new HttpUtils().get(`${DEFAULT_PATH}/info/${code}`)
|
||||
return new HttpUtils().put(`${ DEFAULT_PATH }/clearData/${ code }`)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ const { toast } = useToast()
|
||||
|
||||
export class HttpUtils
|
||||
{
|
||||
private configure
|
||||
private readonly configure
|
||||
|
||||
constructor()
|
||||
{
|
||||
@ -53,8 +53,7 @@ export class HttpUtils
|
||||
|
||||
// If the authorization key does not match, clear the local token reload page
|
||||
if (response.code === 4003) {
|
||||
this.handlerMessage(response.message)
|
||||
router.push('/common/403')
|
||||
router.push(`/common/403?redirect=${ router.currentRoute.value.fullPath }`)
|
||||
}
|
||||
if (response.code === 5000) {
|
||||
this.handlerMessage(response.message)
|
||||
@ -70,7 +69,7 @@ export class HttpUtils
|
||||
status: false
|
||||
}
|
||||
if (error.code === 'ERR_NETWORK') {
|
||||
router.push('/common/not_network')
|
||||
router.push('/common/not_network?redirect=' + router.currentRoute.value.fullPath)
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
<template>
|
||||
<div class='h-svh'>
|
||||
<div class='m-auto flex h-full w-full flex-col items-center justify-center gap-2'>
|
||||
<h1 class='text-[7rem] font-bold leading-tight'>503</h1>
|
||||
<h1 class='text-[7rem] font-bold leading-tight'>403</h1>
|
||||
<span class='font-medium'>{{ $t('common.pageNotAuthorized') }}</span>
|
||||
<p class='text-center text-muted-foreground mt-6'>{{ $t('common.pageNotAuthorizedTip') }}</p>
|
||||
<div class='mt-6 flex gap-4'>
|
||||
<DcLink :link="redirect as string" target="_self">
|
||||
<Button variant='outline'>{{ $t('common.backTo') }}</Button>
|
||||
</DcLink>
|
||||
<RouterLink to="/">
|
||||
<Button variant='outline'>{{ $t('common.backToHome') }}</Button>
|
||||
</RouterLink>
|
||||
@ -19,9 +22,22 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import DcLink from '@/views/components/link/DcLink.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'NotAuthorized',
|
||||
components: {Button}
|
||||
components: { DcLink, Button },
|
||||
data()
|
||||
{
|
||||
return {
|
||||
redirect: null as string | null
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
if (this.$route.query) {
|
||||
this.redirect = this.$route.query.redirect as string
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
@ -5,6 +5,9 @@
|
||||
<span class='font-medium'>{{ $t('common.pageNotNetwork') }}</span>
|
||||
<p class='text-center text-muted-foreground mt-6'>{{ $t('common.tip.pageNotNetwork') }}</p>
|
||||
<div class='mt-6 flex gap-4'>
|
||||
<DcLink :link="redirect as string" target="_self">
|
||||
<Button variant='outline'>{{ $t('common.backTo') }}</Button>
|
||||
</DcLink>
|
||||
<RouterLink to="/">
|
||||
<Button variant='outline'>{{ $t('common.backToHome') }}</Button>
|
||||
</RouterLink>
|
||||
@ -16,9 +19,22 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import DcLink from '@/views/components/link/DcLink.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'NotNetwork',
|
||||
components: { Button }
|
||||
components: { DcLink, Button },
|
||||
data()
|
||||
{
|
||||
return {
|
||||
redirect: null as string | null
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
if (this.$route.query) {
|
||||
this.redirect = this.$route.query.redirect as string
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
@ -1,17 +0,0 @@
|
||||
/**
|
||||
* Returns an array of unique values extracted from the specified key in each object within the provided array.
|
||||
*
|
||||
* @param {string} key - The key to extract values from each object in the array.
|
||||
* @param {any[]} columns - The array of objects to extract values from.
|
||||
* @return {any[]} An array containing unique values extracted from the specified key in each object.
|
||||
*/
|
||||
export function getValueByKey(key: string, columns: never[]): any[]
|
||||
{
|
||||
const container: any[] = []
|
||||
columns.forEach(column => {
|
||||
if (container.indexOf(column[key]) === -1) {
|
||||
container.push(column[key])
|
||||
}
|
||||
});
|
||||
return container
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import { EchartsType } from '@/views/components/echarts/EchartsType'
|
||||
|
||||
export class EchartsConfigure
|
||||
{
|
||||
headers: [] | undefined
|
||||
types: [] | undefined
|
||||
columns: [] | undefined
|
||||
type: EchartsType = EchartsType.LINE
|
||||
}
|
@ -1,264 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<Modal v-model="visible"
|
||||
placement="right"
|
||||
:title="$t('common.visualization')"
|
||||
:mask-closable="false"
|
||||
:width="'90%'"
|
||||
:transfer="false">
|
||||
<Form :inline="true">
|
||||
<FormItem :label="$t('common.name')"
|
||||
:label-width="80">
|
||||
<Input v-model="formState.name"/>
|
||||
</FormItem>
|
||||
<FormItem :label="$t('common.realtime')"
|
||||
:label-width="80">
|
||||
<Switch v-model="formState.realtime"/>
|
||||
</FormItem>
|
||||
</Form>
|
||||
<Layout v-if="configure">
|
||||
<Layout>
|
||||
<Content>
|
||||
<EchartsPreview :key="referKey" :height="'500px'" :configure="chartOptions"/>
|
||||
</Content>
|
||||
<Sider style="background-color: #FFFFFF;"
|
||||
hide-trigger>
|
||||
<Form label-position="left"
|
||||
:label-width="50">
|
||||
<Card padding="0"
|
||||
dis-hover
|
||||
:bordered="false">
|
||||
<template #title>
|
||||
<RadioGroup v-model="chartType"
|
||||
type="button"
|
||||
@on-change="handlerChangeValue('Type')">
|
||||
<Space>
|
||||
<Radio label="line">
|
||||
<FontAwesomeIcon icon="chart-line">
|
||||
</FontAwesomeIcon>
|
||||
</Radio>
|
||||
<Radio label="bar">
|
||||
<FontAwesomeIcon icon="chart-bar">
|
||||
</FontAwesomeIcon>
|
||||
</Radio>
|
||||
</Space>
|
||||
</RadioGroup>
|
||||
</template>
|
||||
<Collapse v-if="chartType"
|
||||
v-model="collapseValue"
|
||||
accordion>
|
||||
<div v-if="chartOptions">
|
||||
<Panel name="xAxis">
|
||||
{{ $t('common.xAxis') }}
|
||||
<template #content>
|
||||
<FormItem :label="$t('common.column')">
|
||||
<Select v-model="defaultConfigure.xAxis" @on-change="handlerChangeValue('xAxis')">
|
||||
<Option v-for="value of configure.headers" :value="value" v-bind:key="value">{{ value }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem v-if="chartOptions.xAxis" :label="$t('common.type')">
|
||||
<RadioGroup v-model="chartOptions.xAxis.type" type="button" size="small" @on-change="handlerChangeValue">
|
||||
<Radio label="value">{{ $t('common.column') }}</Radio>
|
||||
<Radio label="category">{{ $t('common.tag') }}</Radio>
|
||||
</RadioGroup>
|
||||
</FormItem>
|
||||
</template>
|
||||
</Panel>
|
||||
<Panel v-if="chartOptions.xAxis && chartOptions.yAxis && !chartOptions.yAxis.disabled" disabled name="yAxis">
|
||||
{{ $t('common.yAxis') }}
|
||||
<template #content>
|
||||
<FormItem label="Value">
|
||||
<Select v-model="defaultConfigure.yAxis">
|
||||
<Option v-for="value of configure.headers" :value="value" v-bind:key="value">{{ value }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
<FormItem label="Type">
|
||||
<RadioGroup v-model="chartOptions.yAxis.type" @on-change="handlerChangeValue">
|
||||
<Radio label="value"></Radio>
|
||||
<Radio label="category"></Radio>
|
||||
</RadioGroup>
|
||||
</FormItem>
|
||||
</template>
|
||||
</Panel>
|
||||
</div>
|
||||
<div v-if="chartOptions">
|
||||
<Panel v-if="chartOptions.xAxis" name="Series">
|
||||
{{ $t('common.data') }}
|
||||
<template #content>
|
||||
<FormItem :label="$t('common.column')">
|
||||
<Select v-model="defaultConfigure.series" @on-change="handlerChangeValue('Series')">
|
||||
<Option v-for="value of configure.headers" :value="value" v-bind:key="value">{{ value }}</Option>
|
||||
</Select>
|
||||
</FormItem>
|
||||
</template>
|
||||
</Panel>
|
||||
</div>
|
||||
</Collapse>
|
||||
</Card>
|
||||
</Form>
|
||||
</Sider>
|
||||
</Layout>
|
||||
</Layout>
|
||||
<Result v-else
|
||||
type="warning">
|
||||
<template #desc>
|
||||
</template>
|
||||
<template #actions>
|
||||
</template>
|
||||
</Result>
|
||||
<template #footer>
|
||||
<Button type="primary"
|
||||
:loading="loading"
|
||||
@click="handlerPublish">
|
||||
{{ $t('common.publish') }}
|
||||
</Button>
|
||||
</template>
|
||||
</Modal>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
import { ChartConfigure } from '@/views/components/echarts/configure/ChartConfigure'
|
||||
import { getValueByKey } from './DataUtils'
|
||||
import { SeriesConfigure } from '@/views/components/echarts/configure/SeriesConfigure'
|
||||
import { isEmpty } from 'lodash'
|
||||
import { EchartsConfigure } from '@/views/components/echarts/EchartsConfigure'
|
||||
import EchartsPreview from '@/views/components/echarts/EchartsPreview.vue'
|
||||
import { AxisConfigure } from '@/views/components/echarts/configure/AxisConfigure'
|
||||
import ReportService from '@/services/report'
|
||||
import { ObjectUtils } from '@/utils/object'
|
||||
import { ToastUtils } from '@/utils/toast'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'EchartsEditor',
|
||||
components: {EchartsPreview},
|
||||
props: {
|
||||
isVisible: {
|
||||
type: Boolean,
|
||||
default: () => false
|
||||
},
|
||||
configure: {
|
||||
type: Object as () => EchartsConfigure,
|
||||
default: () => null
|
||||
},
|
||||
sourceId: {
|
||||
type: Number
|
||||
},
|
||||
query: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
collapseValue: 'xAxis',
|
||||
referKey: 0,
|
||||
defaultConfigure: {
|
||||
xAxis: '',
|
||||
yAxis: '',
|
||||
series: ''
|
||||
},
|
||||
chartOptions: null as ChartConfigure | null,
|
||||
chartType: null,
|
||||
formState: {
|
||||
name: null as string | null,
|
||||
realtime: null,
|
||||
type: 'QUERY',
|
||||
configure: null as string | null,
|
||||
source: {id: null as number | null},
|
||||
query: null as string | null
|
||||
},
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize()
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize()
|
||||
{
|
||||
this.chartOptions = new ChartConfigure()
|
||||
},
|
||||
handlerChangeValue(type: string)
|
||||
{
|
||||
this.referKey = ObjectUtils.getTimestamp()
|
||||
|
||||
switch (type) {
|
||||
case 'xAxis':
|
||||
if (this.chartOptions && this.configure) {
|
||||
this.chartOptions.xAxis = new AxisConfigure()
|
||||
this.chartOptions.xAxis.data = getValueByKey(this.defaultConfigure.xAxis, this.configure.columns as never[]) as never[]
|
||||
this.chartOptions.xAxis.meta.column = this.defaultConfigure.xAxis
|
||||
this.chartOptions.yAxis = new AxisConfigure()
|
||||
this.chartOptions.yAxis.type = 'value'
|
||||
this.chartOptions.yAxis.data = getValueByKey(this.defaultConfigure.yAxis, this.configure.columns as never[]) as never[]
|
||||
this.chartOptions.yAxis.disabled = true
|
||||
this.chartOptions.yAxis.meta.column = this.defaultConfigure.yAxis
|
||||
}
|
||||
break
|
||||
case 'Series': {
|
||||
if (this.chartOptions && this.configure) {
|
||||
const series: SeriesConfigure = new SeriesConfigure()
|
||||
series.data = getValueByKey(this.defaultConfigure.series, this.configure.columns as never[])
|
||||
series.type = this.chartType as any
|
||||
series.meta.column = this.defaultConfigure.series
|
||||
this.chartOptions.series = []
|
||||
this.chartOptions.series.push(series)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'Type': {
|
||||
if (this.chartOptions) {
|
||||
const array = this.chartOptions.series as never[]
|
||||
if (array.length > 0) {
|
||||
(array as any[])[0].type = this.chartType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.handlerSetDefaultValue();
|
||||
},
|
||||
handlerSetDefaultValue()
|
||||
{
|
||||
if (this.chartOptions) {
|
||||
if (isEmpty(this.defaultConfigure.xAxis)) {
|
||||
this.chartOptions.xAxis = new AxisConfigure()
|
||||
}
|
||||
if (isEmpty(this.defaultConfigure.yAxis)) {
|
||||
this.chartOptions.yAxis = new AxisConfigure()
|
||||
}
|
||||
}
|
||||
},
|
||||
handlerPublish()
|
||||
{
|
||||
if (this.formState) {
|
||||
this.loading = true
|
||||
this.formState.configure = JSON.stringify(this.chartOptions)
|
||||
this.formState.source.id = this.sourceId as number
|
||||
this.formState.query = this.query as string
|
||||
ReportService.saveOrUpdate(this.formState)
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
ToastUtils.success(this.$t('report.publishSuccess').replace('REPLACE_NAME', this.formState.name as string))
|
||||
this.visible = false
|
||||
}
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get(): boolean
|
||||
{
|
||||
return this.isVisible;
|
||||
},
|
||||
set(value: boolean)
|
||||
{
|
||||
this.$emit('close', value);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
@ -1,107 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<CircularLoading v-if="loading" :show="loading"/>
|
||||
<div v-else :style="{width: width, height: height, padding: '0'}" :id="key"/>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue'
|
||||
import * as echarts from 'echarts'
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
import CircularLoading from '@/views/components/loading/CircularLoading.vue'
|
||||
import { ChartConfigure } from './configure/ChartConfigure'
|
||||
import ReportService from '@/services/report'
|
||||
import { getValueByKey } from './DataUtils'
|
||||
import { SeriesConfigure } from './configure/SeriesConfigure'
|
||||
import { ExecuteModel } from '@/model/execute'
|
||||
import ExecuteService from '@/services/execute'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'EchartsPreview',
|
||||
components: {CircularLoading},
|
||||
props: {
|
||||
width: {
|
||||
type: String,
|
||||
default: () => '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: () => '300px'
|
||||
},
|
||||
configure: {
|
||||
type: Object as () => ChartConfigure | null
|
||||
},
|
||||
id: {
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
width: 'handlerInitialize',
|
||||
height: 'handlerInitialize'
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize()
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
loading: false,
|
||||
key: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize()
|
||||
{
|
||||
this.key = uuidv4()
|
||||
setTimeout(() => {
|
||||
try {
|
||||
if (this.key) {
|
||||
const echartsContainer = document.getElementById(this.key)
|
||||
const echartsChart = echarts.init(echartsContainer)
|
||||
echartsChart.resize()
|
||||
if (this.id) {
|
||||
this.loading = true
|
||||
ReportService.getById(this.id)
|
||||
.then(response => {
|
||||
if (response.status && response.data.realtime) {
|
||||
if (response.data.source) {
|
||||
const queryConfigure: ExecuteModel = {
|
||||
name: response.data.source.id,
|
||||
content: response.data.query,
|
||||
format: 'JSON',
|
||||
mode: 'REPORT'
|
||||
}
|
||||
ExecuteService.execute(queryConfigure, null)
|
||||
.then(response => {
|
||||
const configure: any = this.configure as ChartConfigure;
|
||||
configure.xAxis.data = getValueByKey(configure.xAxis.meta.column, response.data.columns)
|
||||
configure.yAxis.data = getValueByKey(configure.yAxis.meta.column, response.data.columns)
|
||||
configure.series.forEach((item: SeriesConfigure) => {
|
||||
const series: SeriesConfigure = item as SeriesConfigure
|
||||
series.data = getValueByKey(series.meta.column as string, response.data.columns)
|
||||
})
|
||||
echartsChart.setOption(configure)
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
}
|
||||
}
|
||||
else {
|
||||
echartsChart.setOption(this.configure as any)
|
||||
}
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
}
|
||||
else {
|
||||
echartsChart.setOption(this.configure as any)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
@ -1,5 +0,0 @@
|
||||
export enum EchartsType
|
||||
{
|
||||
LINE = ('line'),
|
||||
BAR = ('bar')
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
export class AxisConfigure
|
||||
{
|
||||
type = 'category'
|
||||
data: never[] = []
|
||||
disabled = false
|
||||
meta = {
|
||||
column: null as string | null
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
import { SeriesConfigure } from '@/views/components/echarts/configure/SeriesConfigure'
|
||||
import { AxisConfigure } from '@/views/components/echarts/configure/AxisConfigure'
|
||||
import { TooltipConfigure } from '@/views/components/echarts/configure/TooltipConfigure'
|
||||
|
||||
export class ChartConfigure
|
||||
{
|
||||
xAxis: AxisConfigure | undefined
|
||||
yAxis: AxisConfigure | undefined
|
||||
series: Array<SeriesConfigure> | undefined
|
||||
tooltip: TooltipConfigure = new TooltipConfigure()
|
||||
}
|
||||
|
||||
export default function toOptions(options: ChartConfigure): any {
|
||||
return JSON.stringify(options)
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
import { EchartsType } from '@/views/components/echarts/EchartsType'
|
||||
|
||||
export class SeriesConfigure
|
||||
{
|
||||
data: any[] = []
|
||||
type: EchartsType = EchartsType.LINE
|
||||
smooth = true
|
||||
meta = {
|
||||
column: null as string | null
|
||||
}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
export class TooltipConfigure {
|
||||
trigger = 'axis'
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
class CommonUtils
|
||||
{
|
||||
getXAxis(type = 'value', items: any[])
|
||||
{
|
||||
return {
|
||||
type: type,
|
||||
data: items
|
||||
}
|
||||
}
|
||||
|
||||
userEditorConfigure = 'DataCapUserEditorConfigure'
|
||||
}
|
||||
|
||||
export default new CommonUtils()
|
@ -4,8 +4,7 @@
|
||||
<AlertDialogHeader>
|
||||
<AlertDialogTitle class="border-b -mt-4 pb-2">SQL</AlertDialogTitle>
|
||||
</AlertDialogHeader>
|
||||
<VAceEditor v-if="configure" lang="mysql" :theme="configure.theme" :style="{height: '200px', fontSize: configure.fontSize + 'px'}" :value="localContent"
|
||||
:options="editorOptions"/>
|
||||
<AceEditor :value="content as string" read-only/>
|
||||
<AlertDialogFooter class="-mb-4 border-t pt-2">
|
||||
<Button @click="handlerCancel">{{ $t('common.cancel') }}</Button>
|
||||
</AlertDialogFooter>
|
||||
@ -26,18 +25,15 @@ import {
|
||||
AlertDialogTitle,
|
||||
AlertDialogTrigger
|
||||
} from '@/components/ui/alert-dialog'
|
||||
import CommonUtils from '@/views/components/echarts/utils/CommonUtils'
|
||||
import { UserEditor } from '@/model/user'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { VAceEditor } from 'vue3-ace-editor'
|
||||
import '@/ace-editor-theme'
|
||||
import AceEditor from '@/views/components/editor/AceEditor.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SqlInfo',
|
||||
components: {
|
||||
AceEditor,
|
||||
Button,
|
||||
AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger,
|
||||
VAceEditor
|
||||
AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger
|
||||
},
|
||||
props: {
|
||||
isVisible: {
|
||||
@ -48,25 +44,7 @@ export default defineComponent({
|
||||
type: String as PropType<string | null>
|
||||
}
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
localContent: this.content as string,
|
||||
configure: null as UserEditor | null,
|
||||
editorOptions: {readOnly: true}
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize()
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize()
|
||||
{
|
||||
const localEditorConfigure = localStorage.getItem(CommonUtils.userEditorConfigure)
|
||||
const defaultEditorConfigure: UserEditor = {fontSize: 12, theme: 'chrome'}
|
||||
this.configure = localEditorConfigure ? JSON.parse(localEditorConfigure) : defaultEditorConfigure
|
||||
},
|
||||
handlerCancel()
|
||||
{
|
||||
this.visible = false
|
||||
|
@ -24,10 +24,45 @@ export class ConfigurationRequest
|
||||
|
||||
export interface IChart
|
||||
{
|
||||
xAxis?: null | string
|
||||
x2Axis?: null | string
|
||||
yAxis?: null | string
|
||||
series?: null | string
|
||||
xAxis?: string
|
||||
x2Axis?: string
|
||||
yAxis?: string
|
||||
series?: string
|
||||
outerRadius?: number[]
|
||||
invalidType?: null | string
|
||||
innerRadius?: number[]
|
||||
invalidType?: string
|
||||
showLegend?: boolean
|
||||
startAngle?: number[]
|
||||
endAngle?: number[],
|
||||
titleVisible?: boolean
|
||||
titleText?: string
|
||||
titleSubText?: string
|
||||
titlePosition?: string
|
||||
titleAlign?: string
|
||||
}
|
||||
|
||||
export interface ChartFieldGroup
|
||||
{
|
||||
label?: string
|
||||
fields?: ChartField[]
|
||||
}
|
||||
|
||||
export interface ChartField
|
||||
{
|
||||
label?: string
|
||||
field?: string
|
||||
type?: string
|
||||
values?: any[]
|
||||
value?: any
|
||||
min?: number
|
||||
max?: number
|
||||
step?: number
|
||||
disabled?: ChartFieldItem
|
||||
}
|
||||
|
||||
export interface ChartFieldItem
|
||||
{
|
||||
field?: string
|
||||
value?: any
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,14 @@
|
||||
export enum Type
|
||||
{
|
||||
TABLE = ('TABLE'),
|
||||
LINE = ('LINE'),
|
||||
BAR = ('BAR'),
|
||||
AREA = ('AREA'),
|
||||
PIE = ('PIE'),
|
||||
HISTOGRAM = ('HISTOGRAM'),
|
||||
WORDCLOUD= ('WORDCLOUD'),
|
||||
TABLE = ('TABLE'),
|
||||
LINE = ('LINE'),
|
||||
BAR = ('BAR'),
|
||||
AREA = ('AREA'),
|
||||
PIE = ('PIE'),
|
||||
HISTOGRAM = ('HISTOGRAM'),
|
||||
WORDCLOUD = ('WORDCLOUD'),
|
||||
SCATTER = ('SCATTER'),
|
||||
RADAR = ('RADAR'),
|
||||
FUNNEL = ('FUNNEL'),
|
||||
GAUGE = ('GAUGE'),
|
||||
}
|
||||
|
@ -1,3 +1,6 @@
|
||||
import { Type } from '@/views/components/visual/Type.ts'
|
||||
import { ChartField, ChartFieldGroup } from '@/views/components/visual/Configuration.ts'
|
||||
|
||||
/**
|
||||
* Generates a table header based on the given data array.
|
||||
*
|
||||
@ -14,6 +17,108 @@ const createdTableHeader = (data: never[]): object[] => {
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
createdTableHeader
|
||||
const createdConfigure = (type: Type, i18n: any): Array<ChartFieldGroup> => {
|
||||
const fieldGroups: Array<ChartFieldGroup> = new Array<ChartFieldGroup>()
|
||||
const categoryField: ChartField = { label: i18n.t('dataset.common.visualConfigureCategoryField'), field: 'xAxis' }
|
||||
const valueField: ChartField = { label: i18n.t('dataset.common.visualConfigureValueField'), field: 'yAxis' }
|
||||
const seriesField: ChartField = { label: i18n.t('dataset.common.visualConfigureSeriesField'), field: 'series' }
|
||||
const showLegend: ChartField = { label: i18n.t('dataset.common.visualConfigureShowLegend'), field: 'showLegend', type: 'SWITCH' }
|
||||
const outerRadius: ChartField = { label: i18n.t('dataset.common.visualConfigureOuterRadius'), field: 'outerRadius', type: 'SLIDER', value: 0.8, min: 0.1, max: 1, step: 0.1 }
|
||||
const innerRadius: ChartField = { label: i18n.t('dataset.common.visualConfigureInnerRadius'), field: 'innerRadius', type: 'SLIDER', value: 0.5, min: 0.1, max: 1, step: 0.1 }
|
||||
const startAngle: ChartField = { label: i18n.t('dataset.common.visualConfigureStartAngle'), field: 'startAngle', type: 'SLIDER', value: -180, min: -360, max: 360, step: 1 }
|
||||
const endAngle: ChartField = { label: i18n.t('dataset.common.visualConfigureEndAngle'), field: 'endAngle', type: 'SLIDER', value: 0, min: -360, max: 360, step: 1 }
|
||||
const dataBreakpoint: ChartField = {
|
||||
label: i18n.t('dataset.common.visualConfigureDataBreakpoint'),
|
||||
field: 'dataBreakpoint',
|
||||
values: [
|
||||
{ label: i18n.t('dataset.common.visualConfigureDataBreakpointBreak'), value: 'break' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureDataBreakpointContinuous'), value: 'link' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureDataBreakpointZero'), value: 'zero' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureDataBreakpointIgnore'), value: 'ignore' }
|
||||
]
|
||||
}
|
||||
const leftField: ChartField = { label: i18n.t('dataset.common.visualConfigureCategoryLeftField'), field: 'leftField' }
|
||||
const rightField: ChartField = { label: i18n.t('dataset.common.visualConfigureCategoryRightField'), field: 'rightField' }
|
||||
|
||||
const titleVisible: ChartField = { label: i18n.t('dataset.common.visualConfigureTitleGroupVisible'), field: 'titleVisible', type: 'SWITCH', value: true }
|
||||
const titleText: ChartField = {
|
||||
label: i18n.t('dataset.common.visualConfigureTitleGroupText'),
|
||||
field: 'titleText',
|
||||
type: 'TEXT',
|
||||
disabled: { field: 'titleVisible', value: false }
|
||||
}
|
||||
const titleSubText: ChartField = {
|
||||
label: i18n.t('dataset.common.visualConfigureTitleGroupSubText'),
|
||||
field: 'titleSubText',
|
||||
type: 'TEXT',
|
||||
disabled: { field: 'titleVisible', value: false }
|
||||
}
|
||||
const titlePosition: ChartField = {
|
||||
label: i18n.t('dataset.common.visualConfigureTitleGroupPosition'), field: 'titlePosition',
|
||||
values: [
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupPositionLeft'), value: 'left' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupPositionTop'), value: 'top' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupPositionRight'), value: 'right' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupPositionBottom'), value: 'bottom' }
|
||||
],
|
||||
value: 'top',
|
||||
disabled: { field: 'titleVisible', value: false }
|
||||
}
|
||||
const titleAlign: ChartField = {
|
||||
label: i18n.t('dataset.common.visualConfigureTitleGroupAlign'), field: 'titleAlign',
|
||||
values: [
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupAlignLeft'), value: 'left' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupAlignCenter'), value: 'center' },
|
||||
{ label: i18n.t('dataset.common.visualConfigureTitleGroupAlignRight'), value: 'right' }
|
||||
],
|
||||
value: 'left',
|
||||
disabled: { field: 'titleVisible', value: false }
|
||||
}
|
||||
|
||||
if (type === Type.LINE) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField, seriesField, dataBreakpoint]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
|
||||
const titleGroup: ChartFieldGroup = {
|
||||
label: i18n.t('dataset.common.visualConfigureTitleGroup'),
|
||||
fields: [titleVisible, titleText, titleSubText, titlePosition, titleAlign]
|
||||
}
|
||||
fieldGroups.push(generalField, titleGroup)
|
||||
}
|
||||
else if (type === Type.AREA || type === Type.BAR || type === Type.RADAR || type === Type.SCATTER) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalField)
|
||||
}
|
||||
else if (type === Type.FUNNEL) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField, showLegend]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalField)
|
||||
}
|
||||
else if (type === Type.GAUGE) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField, outerRadius, innerRadius, startAngle, endAngle]
|
||||
const generalGroup: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalGroup)
|
||||
}
|
||||
else if (type === Type.PIE) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField, outerRadius]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalField)
|
||||
}
|
||||
else if (type === Type.HISTOGRAM) {
|
||||
const fields: Array<ChartField> = [leftField, rightField, valueField]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalField)
|
||||
}
|
||||
else if (type === Type.WORDCLOUD) {
|
||||
const fields: Array<ChartField> = [categoryField, valueField, seriesField]
|
||||
const generalField: ChartFieldGroup = { label: i18n.t('dataset.common.visualConfigureGeneralGroup'), fields: fields }
|
||||
fieldGroups.push(generalField)
|
||||
}
|
||||
return fieldGroups
|
||||
}
|
||||
|
||||
export {
|
||||
createdTableHeader,
|
||||
createdConfigure
|
||||
}
|
||||
|
@ -1,25 +1,183 @@
|
||||
<template>
|
||||
<div>
|
||||
<Alert v-if="configuration?.headers.length === 0 && !configuration?.message" class="mt-20">
|
||||
<AlertDescription>
|
||||
{{ $t('dataset.tip.adhocDnd') }}
|
||||
</AlertDescription>
|
||||
</Alert>
|
||||
<Alert v-else-if="configuration?.message" variant="destructive" class="mt-20">
|
||||
<AlertDescription>
|
||||
{{ configuration.message }}
|
||||
</AlertDescription>
|
||||
</Alert>
|
||||
<div v-else>
|
||||
<VisualTable v-if="configuration?.type === Type.TABLE" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualLine v-else-if="configuration?.type === Type.LINE" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualBar v-else-if="configuration?.type === Type.BAR" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualArea v-else-if="configuration?.type === Type.AREA" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualPie v-else-if="configuration?.type === Type.PIE" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualHistogram v-else-if="configuration?.type === Type.HISTOGRAM" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<VisualWordCloud v-else-if="configuration?.type === Type.WORDCLOUD" :configuration="configuration" @commitOptions="handlerCommit"/>
|
||||
<div class="flex h-full space-x-1 mt-2">
|
||||
<div class="left flex-1 justify-center">
|
||||
<CircularLoading v-if="loading" :show="loading"/>
|
||||
<div v-else>
|
||||
<Alert v-if="configuration?.headers.length === 0 && !configuration?.message" class="mt-20" :title="$t('dataset.tip.adhocDnd')"/>
|
||||
<Alert v-else-if="configuration?.message" class="mt-20" :title="configuration.message" type="error"/>
|
||||
<div v-else>
|
||||
<VisualTable v-if="configuration?.type === Type.TABLE" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualLine v-else-if="configuration?.type === Type.LINE" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualBar v-else-if="configuration?.type === Type.BAR" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualArea v-else-if="configuration?.type === Type.AREA" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualPie v-else-if="configuration?.type === Type.PIE" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualHistogram v-else-if="configuration?.type === Type.HISTOGRAM" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualWordCloud v-else-if="configuration?.type === Type.WORDCLOUD" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualScatter v-else-if="configuration?.type === Type.SCATTER" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualRadar v-else-if="configuration?.type === Type.RADAR" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualFunnel v-else-if="configuration?.type === Type.FUNNEL" :configuration="configuration" @change="handlerCommit"/>
|
||||
<VisualGauge v-else-if="configuration?.type === Type.GAUGE" :configuration="configuration" @change="handlerCommit"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right w-[210px] space-y-2">
|
||||
<Card body-class="p-2">
|
||||
<template #title>{{ $t('dataset.common.visualType') }}</template>
|
||||
<CircularLoading v-if="loading" :show="loading"/>
|
||||
<div v-else-if="configuration">
|
||||
<ToggleGroup v-model="configuration.type" type="single">
|
||||
<div class="grid grid-cols-4 items-center space-x-1 space-y-1">
|
||||
<ToggleGroupItem class="mt-1" :disabled="configuration.headers.length === 0" :value="Type.TABLE">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeTable')">
|
||||
<Table :size="20"/>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.LINE">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeLine')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="lineChart"
|
||||
style="width: 24px;">
|
||||
<path d="M4 4.5V18.5C4 19.0523 4.44772 19.5 5 19.5H20" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<path d="M8 14.5L12.4982 9.91029C12.5716 9.83537 12.6889 9.82567 12.7737 9.88752L15.812 12.1051C15.8933 12.1644 16.0051 12.1582 16.0793 12.0903L20 8.5"
|
||||
stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.BAR">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeBar')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="barChart"
|
||||
style="width: 24px;">
|
||||
<path d="M4 4.5V18.5C4 19.0523 4.44772 19.5 5 19.5H20" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<path d="M13 7V16" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<path d="M8.5 10V16" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<path d="M17.5 12V16" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.AREA">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeArea')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="areaChart"
|
||||
style="width: 24px;">
|
||||
<path
|
||||
d="M18 20H6C4.89543 20 4 19.1046 4 18V9L8.71327 5.70071C8.88543 5.5802 9.11457 5.5802 9.28673 5.70071L13.7201 8.8041C13.8889 8.92223 14.1128 8.92478 14.2842 8.81051L19.2226 5.51823C19.5549 5.29672 20 5.53491 20 5.93426V18C20 19.1046 19.1046 20 18 20Z"
|
||||
stroke="#21252C" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M20 11L14 14.5L9 11L4 14.5" stroke="#21252C" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.PIE">
|
||||
<Tooltip :content="$t('dataset.common.visualTypePie')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="vchart-dropdown-content-item-icon" id="pieChart"
|
||||
style="width: 24px;">
|
||||
<path d="M6.26599 3.38867C3.46047 4.60563 1.5 7.38359 1.5 10.6159C1.5 14.97 5.0576 18.4998 9.44612 18.4998C12.6024 18.4998 15.3288 16.674 16.6111 14.0288"
|
||||
stroke="#21252C" stroke-opacity="0.9" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<path
|
||||
d="M18.4993 9.88932C18.4405 5.28275 14.7173 1.55949 10.1107 1.50071C10.0498 1.49993 10 1.54934 10 1.61021V9.44897C10 9.7533 10.2467 10 10.551 10H18.3898C18.4507 10 18.5001 9.95018 18.4993 9.88932Z"
|
||||
stroke="#21252C" stroke-opacity="0.9" stroke-width="1.8"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.HISTOGRAM">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeHistogram')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
|
||||
<g clip-path="url(#clip0_1700_69225)">
|
||||
<path
|
||||
d="M11.1663 3.33331H9.83301C9.28072 3.33331 8.83301 3.78103 8.83301 4.33331V15.6666C8.83301 16.2189 9.28072 16.6666 9.83301 16.6666H11.1663C11.7186 16.6666 12.1663 16.2189 12.1663 15.6666V4.33331C12.1663 3.78103 11.7186 3.33331 11.1663 3.33331Z"
|
||||
stroke="#21252C" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path
|
||||
d="M5.33333 7.5H4C3.44772 7.5 3 7.94772 3 8.5V15.6667C3 16.219 3.44771 16.6667 4 16.6667H5.33333C5.88562 16.6667 6.33333 16.2189 6.33333 15.6667V8.5C6.33333 7.94772 5.88562 7.5 5.33333 7.5Z"
|
||||
stroke="#21252C" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path
|
||||
d="M17.0003 9.16669H15.667C15.1147 9.16669 14.667 9.6144 14.667 10.1667V15.6667C14.667 16.219 15.1147 16.6667 15.667 16.6667H17.0003C17.5526 16.6667 18.0003 16.219 18.0003 15.6667V10.1667C18.0003 9.6144 17.5526 9.16669 17.0003 9.16669Z"
|
||||
stroke="#21252C" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1700_69225">
|
||||
<rect width="20" height="20" fill="white" transform="translate(0.5)"></rect>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.WORDCLOUD">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeWordCloud')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="wordCloud"
|
||||
style="width: 24px;">
|
||||
<path d="M5.81563 7V8.77143H3.92339V15H2.39681V8.77143H0.5V7H5.81563Z" fill="#21252C"></path>
|
||||
<path d="M11.4096 13.28V15H6.50986V7H11.3913V8.72H8.03645V10.1029H11.1947V11.8171H8.03645V13.28H11.4096Z" fill="#21252C"></path>
|
||||
<path d="M17.972 7L15.9015 10.96L17.9948 15H16.2443L14.9645 12.4L13.6847 15H11.9525L14.0458 10.96L11.9799 7H13.7304L14.9828 9.54857L16.2351 7H17.972Z"
|
||||
fill="#21252C"></path>
|
||||
<path d="M23.5 7V8.77143H21.6078V15H20.0812V8.77143H18.1844V7H23.5Z" fill="#21252C"></path>
|
||||
<path
|
||||
d="M4.94095 17.8V18.73H3.69895V22H2.69695V18.73H1.45195V17.8H4.94095ZM8.61263 21.097V22H5.39663V17.8H8.60063V18.703H6.39863V19.429H8.47163V20.329H6.39863V21.097H8.61263ZM12.92 17.8L11.561 19.879L12.935 22H11.786L10.946 20.635L10.106 22H8.96897L10.343 19.879L8.98697 17.8H10.136L10.958 19.138L11.78 17.8H12.92ZM16.5484 17.8V18.73H15.3064V22H14.3044V18.73H13.0594V17.8H16.5484Z"
|
||||
fill="#21252C"></path>
|
||||
<path
|
||||
d="M13.6175 1.5V2.275H12.5825V5H11.7475V2.275H10.71V1.5H13.6175ZM16.6772 4.2475V5H13.9972V1.5H16.6672V2.2525H14.8322V2.8575H16.5597V3.6075H14.8322V4.2475H16.6772ZM20.2666 1.5L19.1341 3.2325L20.2791 5H19.3216L18.6216 3.8625L17.9216 5H16.9741L18.1191 3.2325L16.9891 1.5H17.9466L18.6316 2.615L19.3166 1.5H20.2666ZM23.2903 1.5V2.275H22.2553V5H21.4203V2.275H20.3828V1.5H23.2903Z"
|
||||
fill="#21252C"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.SCATTER">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeScatter')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="scatterChart"
|
||||
style="width: 24px;">
|
||||
<path d="M4 4.5V18.5C4 19.0523 4.44772 19.5 5 19.5H20" stroke="#21252C" stroke-width="1.8" stroke-linecap="round"></path>
|
||||
<circle cx="8.5" cy="15.5" r="1.5" fill="#21252C"></circle>
|
||||
<circle cx="16" cy="7" r="2" fill="#21252C"></circle>
|
||||
<circle cx="18" cy="15" r="2" fill="#21252C"></circle>
|
||||
<circle cx="12.75" cy="12.25" r="2.25" fill="#21252C"></circle>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.RADAR">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeRadar')">
|
||||
<svg width="22" height="21" viewBox="0 0 22 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M1.57045 8.16646L10.3949 1.45986C10.7525 1.18808 11.2475 1.18808 11.6051 1.45986L20.4296 8.16646C20.7706 8.42565 20.9087 8.87328 20.7729 9.27956L17.4187 19.3169C17.2824 19.7249 16.9004 20 16.4703 20H5.52971C5.09956 20 4.7176 19.7249 4.58127 19.3169L1.22709 9.27956C1.09132 8.87328 1.2294 8.42565 1.57045 8.16646Z"
|
||||
stroke="#21252C" stroke-width="1.7" stroke-linecap="round"></path>
|
||||
<path
|
||||
d="M6.11243 9.82863L10.8826 6.2478C10.951 6.19642 11.0446 6.19428 11.1153 6.24249L16.3379 9.80252C16.4279 9.8639 16.4522 9.98606 16.3926 10.0773L13.5468 14.4281C13.5169 14.4739 13.4696 14.5054 13.4158 14.5153L7.91428 15.5328C7.81444 15.5513 7.71661 15.492 7.68675 15.395L6.04134 10.0474C6.01654 9.96678 6.04498 9.87927 6.11243 9.82863Z"
|
||||
stroke="#21252C" stroke-width="1.7" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.FUNNEL">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeFunnel')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="funnelChart"
|
||||
style="width: 24px;">
|
||||
<path
|
||||
d="M10.7172 18.1334C11.3011 19.0968 12.6989 19.0968 13.2828 18.1334L20.6197 6.02745C21.2256 5.0278 20.5058 3.75 19.3369 3.75H4.66307C3.49415 3.75 2.77442 5.02779 3.38027 6.02745L10.7172 18.1334Z"
|
||||
stroke="#21252C" stroke-width="1.8"></path>
|
||||
<path d="M4.52637 8.25H19.5264" stroke="#21252C" stroke-width="1.8"></path>
|
||||
<path d="M7.52637 12.25H16.5264" stroke="#21252C" stroke-width="1.8"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
<ToggleGroupItem :disabled="configuration.headers.length === 0" :value="Type.GAUGE">
|
||||
<Tooltip :content="$t('dataset.common.visualTypeGauge')">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="vchart-dropdown-content-item-icon" id="gauge"
|
||||
style="width: 24px;">
|
||||
<circle cx="12" cy="12" r="9.5" stroke="#21252C" stroke-width="1.8"></circle>
|
||||
<circle cx="12" cy="16" r="2" stroke="#21252C" stroke-width="1.8"></circle>
|
||||
<path d="M12.9 7C12.9 6.50294 12.4971 6.1 12 6.1C11.5029 6.1 11.1 6.50294 11.1 7H12.9ZM11.1 7V14H12.9V7H11.1Z" fill="#21252C"></path>
|
||||
</svg>
|
||||
</Tooltip>
|
||||
</ToggleGroupItem>
|
||||
</div>
|
||||
</ToggleGroup>
|
||||
</div>
|
||||
</Card>
|
||||
<Card body-class="p-2">
|
||||
<template #title>{{ $t('dataset.common.visualConfigure') }}</template>
|
||||
<CircularLoading v-if="loading" :show="loading"/>
|
||||
<div v-else-if="configuration" class="flex items-center justify-center">
|
||||
<Alert v-if="configuration.type === Type.TABLE" :title="$t('dataset.common.visualConfigureNotSpecified')"/>
|
||||
<Button v-else size="sm" class="w-[80%]" @click="configureVisible = true">{{ $t('common.configure') }}</Button>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
<VisualConfigure v-if="configureVisible && configuration" :is-visible="configureVisible" :configuration="configuration" :field-group="forwardFiled(configuration.type)"
|
||||
@close="configureVisible = $event" @change="configuration.chartConfigure = $event"/>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { Type } from '@/views/components/visual/Type'
|
||||
@ -27,34 +185,78 @@ import VisualWordCloud from '@/views/components/visual/components/VisualWordClou
|
||||
import VisualHistogram from '@/views/components/visual/components/VisualHistogram.vue'
|
||||
import VisualPie from '@/views/components/visual/components/VisualPie.vue'
|
||||
import VisualArea from '@/views/components/visual/components/VisualArea.vue'
|
||||
import { Configuration } from './Configuration'
|
||||
import { ChartFieldGroup, Configuration } from './Configuration'
|
||||
import VisualBar from '@/views/components/visual/components/VisualBar.vue'
|
||||
import VisualLine from '@/views/components/visual/components/VisualLine.vue'
|
||||
import VisualTable from '@/views/components/visual/components/VisualTable.vue'
|
||||
import { defineComponent, PropType } from 'vue'
|
||||
import { Alert, AlertDescription } from '@/components/ui/alert'
|
||||
import CircularLoading from '@/views/components/loading/CircularLoading.vue'
|
||||
import { Table } from 'lucide-vue-next'
|
||||
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'
|
||||
import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'
|
||||
import Card from '@/views/ui/card'
|
||||
import Tooltip from '@/views/ui/tooltip'
|
||||
import Alert from '@/views/ui/alert'
|
||||
import VisualScatter from '@/views/components/visual/components/VisualScatter.vue'
|
||||
import VisualConfigure from '@/views/components/visual/components/VisualConfigure.vue'
|
||||
import VisualRadar from '@/views/components/visual/components/VisualRadar.vue'
|
||||
import VisualFunnel from '@/views/components/visual/components/VisualFunnel.vue'
|
||||
import VisualGauge from '@/views/components/visual/components/VisualGauge.vue'
|
||||
import Button from '@/views/ui/button'
|
||||
import { createdConfigure } from '@/views/components/visual/Utils.ts'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualEditor',
|
||||
components: {
|
||||
VisualGauge, VisualFunnel, VisualRadar, VisualConfigure, VisualScatter,
|
||||
Card,
|
||||
Tooltip,
|
||||
RadioGroup, RadioGroupItem,
|
||||
ToggleGroup, ToggleGroupItem,
|
||||
Table,
|
||||
CircularLoading,
|
||||
Alert,
|
||||
Button,
|
||||
VisualWordCloud, VisualHistogram, VisualPie, VisualArea, VisualBar, VisualLine, VisualTable
|
||||
},
|
||||
computed: {
|
||||
Type()
|
||||
{
|
||||
return Type
|
||||
}
|
||||
},
|
||||
components: {
|
||||
AlertDescription, Alert,
|
||||
VisualWordCloud, VisualHistogram, VisualPie, VisualArea, VisualBar, VisualLine, VisualTable
|
||||
},
|
||||
props: {
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
configuration: {
|
||||
type: Object as PropType<Configuration | null>
|
||||
}
|
||||
},
|
||||
setup()
|
||||
{
|
||||
const i18n = useI18n()
|
||||
|
||||
return {
|
||||
i18n
|
||||
}
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
configureVisible: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handlerCommit(value: any)
|
||||
{
|
||||
this.$emit('commitOptions', value)
|
||||
},
|
||||
forwardFiled(type: Type): ChartFieldGroup[]
|
||||
{
|
||||
return createdConfigure(type, this.i18n)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -3,49 +3,18 @@
|
||||
<CircularLoading v-if="loading"
|
||||
:show="loading">
|
||||
</CircularLoading>
|
||||
<div v-else>
|
||||
<VisualTable v-if="localConfiguration && configuration?.type === Type.TABLE"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualTable>
|
||||
<VisualLine v-else-if="localConfiguration && configuration?.type === Type.LINE"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualLine>
|
||||
<VisualBar v-else-if="localConfiguration && configuration?.type === Type.BAR"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualBar>
|
||||
<VisualArea v-else-if="localConfiguration && configuration?.type === Type.AREA"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualArea>
|
||||
<VisualPie v-else-if="localConfiguration && configuration?.type === Type.PIE"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualPie>
|
||||
<VisualHistogram v-else-if="localConfiguration && configuration?.type === Type.HISTOGRAM"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualHistogram>
|
||||
<VisualWordCloud v-else-if="localConfiguration && configuration?.type === Type.WORDCLOUD"
|
||||
:configuration="localConfiguration"
|
||||
:submitted="false"
|
||||
:width="width"
|
||||
:height="height">
|
||||
</VisualWordCloud>
|
||||
<div v-else-if="localConfiguration">
|
||||
<VisualTable v-if="configuration?.type === Type.TABLE" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualLine v-else-if="configuration?.type === Type.LINE" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualBar v-else-if="configuration?.type === Type.BAR" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualArea v-else-if="configuration?.type === Type.AREA" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualPie v-else-if="configuration?.type === Type.PIE" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualHistogram v-else-if="configuration?.type === Type.HISTOGRAM" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualWordCloud v-else-if="configuration?.type === Type.WORDCLOUD" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualScatter v-else-if="configuration?.type === Type.SCATTER" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualRadar v-else-if="configuration?.type === Type.RADAR" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualFunnel v-else-if="configuration?.type === Type.FUNNEL" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
<VisualGauge v-else-if="configuration?.type === Type.GAUGE" :configuration="localConfiguration" :submitted="false" :width="width" :height="height"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -64,6 +33,10 @@ import { ToastUtils } from '@/utils/toast'
|
||||
import DatasetService from '@/services/dataset'
|
||||
import CircularLoading from '@/views/components/loading/CircularLoading.vue'
|
||||
import { defineComponent } from 'vue'
|
||||
import VisualRadar from '@/views/components/visual/components/VisualRadar.vue'
|
||||
import VisualScatter from '@/views/components/visual/components/VisualScatter.vue'
|
||||
import VisualFunnel from '@/views/components/visual/components/VisualFunnel.vue'
|
||||
import VisualGauge from '@/views/components/visual/components/VisualGauge.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualView',
|
||||
@ -74,6 +47,10 @@ export default defineComponent({
|
||||
}
|
||||
},
|
||||
components: {
|
||||
VisualGauge,
|
||||
VisualFunnel,
|
||||
VisualScatter,
|
||||
VisualRadar,
|
||||
CircularLoading,
|
||||
VisualWordCloud, VisualHistogram, VisualPie, VisualArea, VisualBar, VisualLine, VisualTable
|
||||
},
|
||||
@ -114,26 +91,26 @@ export default defineComponent({
|
||||
setTimeout(() => {
|
||||
this.loading = true
|
||||
DatasetService.adhoc(this.code!, this.query)
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
if (this.localConfiguration) {
|
||||
if (response.data.isSuccessful) {
|
||||
this.localConfiguration.headers = response.data.headers
|
||||
this.localConfiguration.columns = response.data.columns
|
||||
this.localConfiguration.message = null
|
||||
}
|
||||
else {
|
||||
this.localConfiguration.headers = []
|
||||
this.localConfiguration.columns = []
|
||||
this.localConfiguration.message = response.data.message
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
ToastUtils.error(response.message)
|
||||
}
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
if (this.localConfiguration) {
|
||||
if (response.data.isSuccessful) {
|
||||
this.localConfiguration.headers = response.data.headers
|
||||
this.localConfiguration.columns = response.data.columns
|
||||
this.localConfiguration.message = null
|
||||
}
|
||||
else {
|
||||
this.localConfiguration.headers = []
|
||||
this.localConfiguration.columns = []
|
||||
this.localConfiguration.message = response.data.message
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
ToastUtils.error(response.message)
|
||||
}
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="content" :style="{width: width, height: height}" />
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
@ -48,12 +48,12 @@ export default defineComponent({
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'area',
|
||||
data: {values: this.configuration.columns},
|
||||
data: { values: this.configuration.columns },
|
||||
xField: this.configuration.chartConfigure?.xAxis!,
|
||||
yField: this.configuration.chartConfigure?.yAxis!
|
||||
}
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -63,7 +63,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="content" :style="{width: width, height: height}" />
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
@ -48,12 +48,12 @@ export default defineComponent({
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'bar',
|
||||
data: {values: this.configuration.columns},
|
||||
data: { values: this.configuration.columns },
|
||||
xField: this.configuration.chartConfigure?.xAxis!,
|
||||
yField: this.configuration.chartConfigure?.yAxis!
|
||||
}
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -63,7 +63,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,140 @@
|
||||
<template>
|
||||
<Dialog :is-visible="visible" :title="$t('common.configure')" width="40%" @close="handlerCancel">
|
||||
<div v-if="configuration && formState" class="space-y-2 pl-3 pr-3">
|
||||
<Tabs v-model="activeGroup">
|
||||
<TabsList class="grid w-full grid-cols-2">
|
||||
<TabsTrigger v-for="group in fieldGroup" :key="group.label" :value="group.label as string">{{ group.label }}</TabsTrigger>
|
||||
</TabsList>
|
||||
<TabsContent :value="activeGroup as any" class="grid grid-cols-4 gap-4">
|
||||
<FormField v-for="item in fieldGroup.find(value => value.label === activeGroup)?.fields" :name="item.field as string">
|
||||
<FormItem>
|
||||
<FormLabel>{{ item.label }}</FormLabel>
|
||||
<FormControl>
|
||||
<div v-if="item.type === 'SWITCH'">
|
||||
<Switch class="mt-2" :value="item.value" :default-checked="formState[item.field as keyof IChart] ? formState[item.field as keyof IChart] as boolean : item.value"
|
||||
@update:checked="formState[item.field as keyof IChart] = $event as any"/>
|
||||
</div>
|
||||
<Tooltip v-else-if="item.type === 'SLIDER'" :content="formState[item.field as keyof IChart] ? formState[item.field as keyof IChart] : [item.value] as any">
|
||||
<Slider v-model="formState[item.field as keyof IChart] as any" class="pt-3" :default-value="[item.value]" :min="item.min" :max="item.max"
|
||||
:step="item.step"
|
||||
@update:modelValue="formState[item.field as keyof IChart] = $event as any"/>
|
||||
</Tooltip>
|
||||
<Input v-else-if="item.type === 'TEXT'" v-model="formState[item.field as keyof IChart] as string" :placeholder="item.label"
|
||||
:disabled="item.disabled?.field ? formState[item.disabled?.field as keyof IChart] === item.disabled?.value : false"/>
|
||||
<Select v-else v-model="formState[item.field as keyof IChart] as string" :default-value="item.value"
|
||||
:disabled="item.disabled?.field ? formState[item.disabled?.field as keyof IChart] === item.disabled?.value : false">
|
||||
<SelectTrigger class="w-full">
|
||||
<SelectValue :placeholder="`Select ${item.label}`"/>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem v-if="item.values" class="cursor-pointer" v-for="data in item.values" :value="data.value as string">{{ data.label }}</SelectItem>
|
||||
<SelectItem v-else v-for="item in configuration.headers" class="cursor-pointer" :value="item as string">{{ item }}</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</FormControl>
|
||||
</FormItem>
|
||||
</FormField>
|
||||
</TabsContent>
|
||||
</Tabs>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="space-x-5">
|
||||
<Button variant="outline" size="sm" @click="handlerCancel">
|
||||
{{ $t('common.cancel') }}
|
||||
</Button>
|
||||
<Button size="sm" @click="handlerSubmit">
|
||||
{{ $t('common.apply') }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue'
|
||||
import { FormControl, FormDescription, FormField, FormItem, FormLabel } from '@/components/ui/form'
|
||||
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue } from '@/components/ui/select'
|
||||
import { ChartFieldGroup, Configuration, IChart } from '@/views/components/visual/Configuration.ts'
|
||||
import { cloneDeep, keys } from 'lodash'
|
||||
import { Switch } from '@/components/ui/switch'
|
||||
import { Slider } from '@/components/ui/slider'
|
||||
import Tooltip from '@/views/ui/tooltip'
|
||||
import Dialog from '@/views/ui/dialog'
|
||||
import Button from '@/views/ui/button'
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
|
||||
import { Input } from '@/components/ui/input'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualConfigure',
|
||||
components: {
|
||||
Input,
|
||||
Tabs, TabsTrigger, TabsList, TabsContent,
|
||||
Button,
|
||||
Dialog,
|
||||
Slider,
|
||||
Switch,
|
||||
SelectGroup, SelectTrigger, SelectContent, SelectItem, Select, SelectLabel, SelectValue,
|
||||
FormDescription, FormControl, FormLabel, FormField, FormItem,
|
||||
Tooltip
|
||||
},
|
||||
computed: {
|
||||
visible: {
|
||||
get(): boolean
|
||||
{
|
||||
return this.isVisible
|
||||
},
|
||||
set(value: boolean)
|
||||
{
|
||||
this.$emit('close', value)
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
configuration: {
|
||||
type: Object as () => Configuration
|
||||
},
|
||||
fieldGroup: {
|
||||
type: Array as () => ChartFieldGroup[],
|
||||
default: []
|
||||
},
|
||||
isVisible: {
|
||||
type: Boolean
|
||||
}
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
activeGroup: this.fieldGroup[0]?.label,
|
||||
formState: null as IChart | null
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
if (this.configuration && keys(this.configuration.chartConfigure).length > 0) {
|
||||
this.formState = cloneDeep(this.configuration.chartConfigure) as IChart
|
||||
}
|
||||
else {
|
||||
const obj = {} as any
|
||||
this.fieldGroup.forEach(group => {
|
||||
group?.fields?.forEach(field => {
|
||||
if (field.field) {
|
||||
obj[field.field] = undefined
|
||||
}
|
||||
})
|
||||
})
|
||||
this.formState = obj
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handlerCancel()
|
||||
{
|
||||
this.visible = false
|
||||
},
|
||||
handlerSubmit()
|
||||
{
|
||||
this.$emit('change', this.formState)
|
||||
this.handlerCancel()
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
@ -0,0 +1,80 @@
|
||||
<template>
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import VChart from '@visactor/vchart'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { Configuration } from '../Configuration'
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
let instance: VChart
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualFunnel',
|
||||
props: {
|
||||
configuration: {
|
||||
type: Object as () => Configuration
|
||||
},
|
||||
submitted: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: () => '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: () => '400px'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
configuration: {
|
||||
handler: 'handlerReset',
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize(false)
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize(reset: boolean)
|
||||
{
|
||||
setTimeout(() => {
|
||||
try {
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'funnel',
|
||||
data: { values: this.configuration.columns },
|
||||
categoryField: this.configuration.chartConfigure?.xAxis,
|
||||
valueField: this.configuration.chartConfigure?.yAxis,
|
||||
legends: { visible: this.configuration.chartConfigure?.showLegend }
|
||||
} as any
|
||||
if (!reset) {
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
instance.updateSpec(options, true)
|
||||
}
|
||||
if (this.submitted) {
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.warn(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
handlerReset()
|
||||
{
|
||||
this.handlerInitialize(true)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
@ -0,0 +1,83 @@
|
||||
<template>
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import VChart from '@visactor/vchart'
|
||||
import { cloneDeep, head } from 'lodash'
|
||||
import { Configuration } from '../Configuration'
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
let instance: VChart
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualGauge',
|
||||
props: {
|
||||
configuration: {
|
||||
type: Object as () => Configuration
|
||||
},
|
||||
submitted: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: () => '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: () => '400px'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
configuration: {
|
||||
handler: 'handlerReset',
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize(false)
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize(reset: boolean)
|
||||
{
|
||||
setTimeout(() => {
|
||||
try {
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'gauge',
|
||||
data: [{ values: this.configuration.columns }],
|
||||
categoryField: this.configuration.chartConfigure?.xAxis,
|
||||
valueField: this.configuration.chartConfigure?.yAxis,
|
||||
outerRadius: head(this.configuration.chartConfigure?.outerRadius),
|
||||
innerRadius: head(this.configuration.chartConfigure?.innerRadius),
|
||||
startAngle: head(this.configuration.chartConfigure?.startAngle),
|
||||
endAngle: head(this.configuration.chartConfigure?.endAngle)
|
||||
} as any
|
||||
if (!reset) {
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
instance.updateSpec(options, true)
|
||||
}
|
||||
if (this.submitted) {
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.warn(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
handlerReset()
|
||||
{
|
||||
this.handlerInitialize(true)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
@ -48,14 +48,13 @@ export default defineComponent({
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'histogram',
|
||||
data: [{values: this.configuration.columns}],
|
||||
data: [{ values: this.configuration.columns }],
|
||||
xField: this.configuration.chartConfigure?.xAxis,
|
||||
x2Field: this.configuration.chartConfigure?.x2Axis,
|
||||
yField: this.configuration.chartConfigure?.yAxis
|
||||
}
|
||||
console.log(options)
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -65,7 +64,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,14 +48,25 @@ export default defineComponent({
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'line',
|
||||
data: {values: this.configuration.columns},
|
||||
data: { values: this.configuration.columns },
|
||||
xField: this.configuration.chartConfigure?.xAxis,
|
||||
yField: this.configuration.chartConfigure?.yAxis,
|
||||
seriesField: this.configuration.chartConfigure?.series,
|
||||
invalidType: this.configuration.chartConfigure?.invalidType
|
||||
} as any
|
||||
|
||||
if (this.configuration.chartConfigure) {
|
||||
options.title = {
|
||||
visible: this.configuration.chartConfigure?.titleVisible,
|
||||
text: this.configuration.chartConfigure?.titleText,
|
||||
subtext: this.configuration.chartConfigure?.titleSubText,
|
||||
orient: this.configuration.chartConfigure?.titlePosition,
|
||||
align: this.configuration.chartConfigure?.titleAlign
|
||||
}
|
||||
}
|
||||
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -65,7 +76,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,13 +51,13 @@ export default defineComponent({
|
||||
}
|
||||
const options = {
|
||||
type: 'pie',
|
||||
data: [{values: this.configuration.columns}],
|
||||
data: [{ values: this.configuration.columns }],
|
||||
categoryField: this.configuration.chartConfigure?.xAxis,
|
||||
valueField: this.configuration.chartConfigure?.yAxis,
|
||||
outerRadius: outerRadius
|
||||
}
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -67,7 +67,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,79 @@
|
||||
<template>
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import VChart from '@visactor/vchart'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { Configuration } from '../Configuration'
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
let instance: VChart
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualRadar',
|
||||
props: {
|
||||
configuration: {
|
||||
type: Object as () => Configuration
|
||||
},
|
||||
submitted: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: () => '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: () => '400px'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
configuration: {
|
||||
handler: 'handlerReset',
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize(false)
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize(reset: boolean)
|
||||
{
|
||||
setTimeout(() => {
|
||||
try {
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'radar',
|
||||
data: { values: this.configuration.columns },
|
||||
categoryField: this.configuration.chartConfigure?.xAxis,
|
||||
valueField: this.configuration.chartConfigure?.yAxis
|
||||
} as any
|
||||
if (!reset) {
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
instance.updateSpec(options, true)
|
||||
}
|
||||
if (this.submitted) {
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.warn(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
handlerReset()
|
||||
{
|
||||
this.handlerInitialize(true)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
@ -0,0 +1,102 @@
|
||||
<template>
|
||||
<div ref="content" :style="{width: width, height: height}"/>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import VChart from '@visactor/vchart'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { Configuration } from '../Configuration'
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
let instance: VChart
|
||||
|
||||
export default defineComponent({
|
||||
name: 'VisualScatter',
|
||||
props: {
|
||||
configuration: {
|
||||
type: Object as () => Configuration
|
||||
},
|
||||
submitted: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: () => '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: () => '400px'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
configuration: {
|
||||
handler: 'handlerReset',
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.handlerInitialize(false)
|
||||
},
|
||||
methods: {
|
||||
handlerInitialize(reset: boolean)
|
||||
{
|
||||
setTimeout(() => {
|
||||
try {
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'common',
|
||||
series: [
|
||||
{
|
||||
type: 'scatter',
|
||||
xField: this.configuration.chartConfigure?.xAxis,
|
||||
yField: this.configuration.chartConfigure?.yAxis
|
||||
}
|
||||
],
|
||||
axes: [
|
||||
{
|
||||
title: {
|
||||
visible: true
|
||||
},
|
||||
orient: 'left',
|
||||
range: { min: 0 },
|
||||
type: 'linear'
|
||||
},
|
||||
{
|
||||
title: {
|
||||
visible: true
|
||||
},
|
||||
orient: 'bottom',
|
||||
label: { visible: true },
|
||||
type: 'linear'
|
||||
}
|
||||
],
|
||||
data: { values: this.configuration.columns }
|
||||
} as any
|
||||
if (!reset) {
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
instance.updateSpec(options, true)
|
||||
}
|
||||
if (this.submitted) {
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.warn(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
handlerReset()
|
||||
{
|
||||
this.handlerInitialize(true)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
@ -47,20 +47,20 @@ export default defineComponent({
|
||||
const tableInstance = new VTable.ListTable(this.$refs.content as HTMLElement, options as any)
|
||||
// Add cell tooltip
|
||||
tableInstance.on('mouseenter_cell', (args) => {
|
||||
const {col, row} = args
|
||||
const rect = tableInstance.getVisibleCellRangeRelativeRect({col, row});
|
||||
const { col, row } = args
|
||||
const rect = tableInstance.getVisibleCellRangeRelativeRect({ col, row })
|
||||
tableInstance.showTooltip(col, row, {
|
||||
content: `${tableInstance.getHeaderField(col, row)} : ${tableInstance.getCellValue(col, row)}`,
|
||||
referencePosition: {rect, placement: VTable.TYPES.Placement.right},
|
||||
content: `${ tableInstance.getHeaderField(col, row) } : ${ tableInstance.getCellValue(col, row) }`,
|
||||
referencePosition: { rect, placement: VTable.TYPES.Placement.right },
|
||||
className: 'defineTooltip',
|
||||
style: {bgColor: 'black', color: 'white', arrowMark: true}
|
||||
style: { bgColor: 'black', color: 'white', arrowMark: true }
|
||||
})
|
||||
})
|
||||
if (this.submitted) {
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,13 +46,13 @@ export default defineComponent({
|
||||
if (this.configuration) {
|
||||
const options = {
|
||||
type: 'wordCloud',
|
||||
data: {values: this.configuration.columns},
|
||||
data: { values: this.configuration.columns },
|
||||
nameField: this.configuration.chartConfigure?.xAxis,
|
||||
valueField: this.configuration.chartConfigure?.yAxis,
|
||||
seriesField: this.configuration.chartConfigure?.series
|
||||
}
|
||||
if (!reset) {
|
||||
instance = new VChart(options, {dom: this.$refs.content as HTMLElement})
|
||||
instance = new VChart(options, { dom: this.$refs.content as HTMLElement })
|
||||
instance.renderAsync()
|
||||
}
|
||||
else {
|
||||
@ -62,7 +62,7 @@ export default defineComponent({
|
||||
const cloneOptions = cloneDeep(this.configuration)
|
||||
cloneOptions.headers = []
|
||||
cloneOptions.columns = []
|
||||
this.$emit('commitOptions', cloneOptions)
|
||||
this.$emit('change', cloneOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,9 +11,18 @@
|
||||
<div v-else class="hidden flex-col md:flex">
|
||||
<div class="flex-1 space-y-4 pt-6">
|
||||
<div class="grid gap-4 md:grid-cols-2 lg:grid-cols-6">
|
||||
<Card title-class="p-2 pl-4 pr-4" v-for="item in data">
|
||||
<Card title-class="p-2 pl-4 pr-4" footer-class="p-2 pl-2 pr-4" body-class="p-4" v-for="item in data">
|
||||
<template #title>
|
||||
<RouterLink :to="`/admin/dashboard/info/${item.id}/preview`" target="_blank">{{ item.name }}</RouterLink>
|
||||
<div class="flex space-x-1">
|
||||
<div>
|
||||
<RouterLink :to="`/admin/dashboard/preview/${item.code}`" target="_blank">{{ item.name }}</RouterLink>
|
||||
</div>
|
||||
<div>
|
||||
<Tooltip :content="item.description">
|
||||
<Info :size="18" class="cursor-pointer"/>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #extra>
|
||||
<DropdownMenu class="justify-items-end">
|
||||
@ -22,7 +31,7 @@
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent>
|
||||
<DropdownMenuItem class="cursor-pointer">
|
||||
<RouterLink :to="`/admin/dashboard/info/${item.id}`" target="_blank" class="flex items-center">
|
||||
<RouterLink :to="`/admin/dashboard/info/${item.code}`" target="_blank" class="flex items-center">
|
||||
<Pencil :size="15" class="mr-1"/>
|
||||
{{ $t('dashboard.common.modify') }}
|
||||
</RouterLink>
|
||||
@ -34,8 +43,14 @@
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</template>
|
||||
<div class="text-2xl font-bold"></div>
|
||||
<p class="text-xs text-muted-foreground mt-2">{{ item.createTime }}</p>
|
||||
<div class="shadow-blackA7 w-full overflow-hidden rounded-md">
|
||||
<AspectRatio :ratio="16 / 11">
|
||||
<img class="h-full w-full object-cover" src="/static/images/dashboard.png" :alt="item.name"/>
|
||||
</AspectRatio>
|
||||
</div>
|
||||
<template #footer>
|
||||
<p class="text-xs text-muted-foreground text-right">{{ item.createTime }}</p>
|
||||
</template>
|
||||
</Card>
|
||||
</div>
|
||||
<div v-if="data.length === 0" class="text-center">
|
||||
@ -53,7 +68,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue'
|
||||
import { Cog, Loader2, Pencil, Trash } from 'lucide-vue-next'
|
||||
import { Cog, Info, Loader2, Pencil, Trash } from 'lucide-vue-next'
|
||||
import DashboardService from '@/services/dashboard'
|
||||
import { FilterModel } from '@/model/filter'
|
||||
import { PaginationModel, PaginationRequest } from '@/model/pagination'
|
||||
@ -64,15 +79,19 @@ import Card from '@/views/ui/card'
|
||||
import Pagination from '@/views/ui/pagination'
|
||||
import Button from '@/views/ui/button'
|
||||
import { TableCaption } from '@/components/ui/table'
|
||||
import Tooltip from '@/views/ui/tooltip'
|
||||
import { AspectRatio } from 'radix-vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DashboardHome',
|
||||
components: {
|
||||
AspectRatio,
|
||||
Tooltip,
|
||||
TableCaption,
|
||||
Pagination,
|
||||
DashboardDelete,
|
||||
DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, DropdownMenuContent, DropdownMenuTrigger, DropdownMenu,
|
||||
Loader2, Cog, Trash, Pencil,
|
||||
Loader2, Cog, Trash, Pencil, Info,
|
||||
Card,
|
||||
Button
|
||||
},
|
||||
|
@ -15,7 +15,6 @@ import { ToastUtils } from '@/utils/toast'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { DashboardModel } from '@/model/dashboard'
|
||||
import DashboardEditor from '@/views/pages/admin/dashboard/components/DashboardEditor.vue'
|
||||
import { toNumber } from 'lodash'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DashboardInfo',
|
||||
@ -37,10 +36,10 @@ export default defineComponent({
|
||||
{
|
||||
const router = useRouter()
|
||||
const params = router.currentRoute.value.params
|
||||
const id = params['id']
|
||||
if (id) {
|
||||
const code = params['code'] as string
|
||||
if (code) {
|
||||
this.loading = true
|
||||
DashboardService.getById(toNumber(id))
|
||||
DashboardService.getByCode(code)
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
this.dataInfo = response.data
|
||||
|
@ -2,6 +2,7 @@
|
||||
<div class="w-full">
|
||||
<Loader2 v-if="loading" class="w-full justify-center animate-spin mt-10"/>
|
||||
<DashboardView v-else-if="data" :layouts="JSON.parse(data.configure as string)"/>
|
||||
<Alert v-else type="error" :title="$t('dashboard.tip.notFound').replace('$VALUE', $router.currentRoute?.value?.params['code'] as string)"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -12,10 +13,12 @@ import DashboardService from '@/services/dashboard'
|
||||
import { useRouter } from 'vue-router'
|
||||
import DashboardView from '@/views/pages/admin/dashboard/components/DashboardView.vue'
|
||||
import { DashboardModel } from '@/model/dashboard'
|
||||
import Alert from '@/views/ui/alert'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DashboardPreview',
|
||||
components: {
|
||||
Alert,
|
||||
DashboardView,
|
||||
Loader2
|
||||
},
|
||||
@ -36,7 +39,7 @@ export default defineComponent({
|
||||
this.loading = true
|
||||
const router = useRouter()
|
||||
const params = router.currentRoute.value.params
|
||||
DashboardService.getById(params['id'] as unknown as number)
|
||||
DashboardService.getByCode(params['code'] as string)
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
this.data = response.data
|
||||
|
@ -1,71 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<CircularLoading v-if="loading" :show="loading"/>
|
||||
<Card v-else class="mt-3" v-for="node in data">
|
||||
<CardHeader>
|
||||
<CardTitle>{{ node.name }}</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<div :draggable="true" @dragstart="onDragStart($event, node)">
|
||||
<EchartsPreview :key="node.id" :height="'200px'" :id="node.id" :configure="JSON.parse(node.configure)"/>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import '../style.css'
|
||||
import { defineComponent } from 'vue'
|
||||
import ReportService from '@/services/report'
|
||||
import CircularLoading from '@/views/components/loading/CircularLoading.vue'
|
||||
import { FilterModel } from '@/model/filter'
|
||||
import EchartsPreview from '@/views/components/echarts/EchartsPreview.vue'
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
|
||||
|
||||
interface Node {
|
||||
id: number
|
||||
name: string
|
||||
configure: string
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DashboardChart',
|
||||
components: {
|
||||
CardContent, CardHeader, CardTitle, Card,
|
||||
EchartsPreview,
|
||||
CircularLoading
|
||||
},
|
||||
setup()
|
||||
{
|
||||
const onDragStart = (event: any, node: any) => {
|
||||
if (event.dataTransfer) {
|
||||
event.dataTransfer.setData('application/vueflow', JSON.stringify(node))
|
||||
event.dataTransfer.effectAllowed = 'move'
|
||||
}
|
||||
}
|
||||
return {
|
||||
onDragStart
|
||||
}
|
||||
},
|
||||
data()
|
||||
{
|
||||
return {
|
||||
loading: false,
|
||||
data: [] as Node[]
|
||||
}
|
||||
},
|
||||
created()
|
||||
{
|
||||
this.loading = true
|
||||
const filter: FilterModel = new FilterModel()
|
||||
ReportService.getAll(filter)
|
||||
.then((response) => {
|
||||
if (response.status) {
|
||||
this.data = response.data.content
|
||||
}
|
||||
})
|
||||
.finally(() => this.loading = false)
|
||||
}
|
||||
});
|
||||
</script>
|
@ -32,21 +32,28 @@
|
||||
</div>
|
||||
</Card>
|
||||
<Dialog :is-visible="configureVisible" :title="$t('common.configure')">
|
||||
<div v-if="formState" class="p-6">
|
||||
<div v-if="formState" class="pl-3 pr-4">
|
||||
<FormField name="name">
|
||||
<FormItem class="space-y-1">
|
||||
<FormItem class="space-y-2">
|
||||
<FormLabel>{{ $t('common.name') }}</FormLabel>
|
||||
<FormMessage/>
|
||||
<Input v-model="formState.name"/>
|
||||
</FormItem>
|
||||
</FormField>
|
||||
<FormField name="description">
|
||||
<FormItem class="space-y-2">
|
||||
<FormLabel>{{ $t('common.description') }}</FormLabel>
|
||||
<FormMessage/>
|
||||
<Textarea v-model="formState.description"/>
|
||||
</FormItem>
|
||||
</FormField>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="space-x-5">
|
||||
<Button variant="outline" size="sm" @click="configureVisible = false">
|
||||
{{ $t('common.cancel') }}
|
||||
</Button>
|
||||
<Button :loading="loading" size="sm" @click="handlerSave">
|
||||
<Button :loading="loading" :disabled="loading" size="sm" @click="handlerSave">
|
||||
{{ $t('common.save') }}
|
||||
</Button>
|
||||
</div>
|
||||
@ -72,10 +79,12 @@ import Button from '@/views/ui/button'
|
||||
import { Input } from '@/components/ui/input'
|
||||
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { Textarea } from '@/components/ui/textarea'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DashboardEditor',
|
||||
components: {
|
||||
Textarea,
|
||||
Input,
|
||||
ChartContainer,
|
||||
VisualView,
|
||||
@ -149,8 +158,8 @@ export default defineComponent({
|
||||
.then(response => {
|
||||
if (response.status) {
|
||||
ToastUtils.success(this.$t('dashboard.tip.publishSuccess').replace('$VALUE', <string>this.formState?.name))
|
||||
if (response.data?.id) {
|
||||
this.$router.push(`/admin/dashboard/info/${ response.data.id }/preview`)
|
||||
if (response.data) {
|
||||
this.$router.push(`/admin/dashboard/preview/${ response.data?.code }`)
|
||||
}
|
||||
else {
|
||||
this.$router.push('/console/dashboard')
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user