From 52f71875ab77f49c2295ddd06b42bbf16410e9a6 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Wed, 7 Aug 2024 11:14:06 +0800 Subject: [PATCH 01/15] =?UTF-8?q?feat(=E6=9F=A5=E8=AF=A2=E7=BB=84=E4=BB=B6?= =?UTF-8?q?):=20=E6=97=A5=E6=9C=9F=E8=8C=83=E5=9B=B4=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=80=BC=E6=B2=A1=E6=9C=89=E6=9C=AC?= =?UTF-8?q?=E6=9C=88=E3=80=81=E6=9C=AC=E5=B9=B4=E7=AD=89=20#11283?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v-query/DynamicTimeRangeFiltering.vue | 14 +- .../v-query/QueryConditionConfiguration.vue | 15 +- .../v-query/RangeFilterTime.vue | 197 +++++++++++++----- .../src/custom-component/v-query/Time.vue | 12 +- .../custom-component/v-query/time-format.ts | 1 + core/core-frontend/src/hooks/web/useFilter.ts | 10 +- 6 files changed, 191 insertions(+), 58 deletions(-) diff --git a/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue b/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue index 4a8630f3e7..971f86f52f 100644 --- a/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue +++ b/core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue @@ -3,11 +3,12 @@ import { toRefs, PropType, onBeforeMount, watch, computed } from 'vue' import { Calendar } from '@element-plus/icons-vue' import { type DatePickType } from 'element-plus-secondary' import type { ManipulateType } from 'dayjs' -import { getAround } from './time-format-dayjs' +import { getAround, getCustomRange } from './time-format-dayjs' interface SelectConfig { regularOrTrends: string regularOrTrendsValue: [Date, Date] intervalType: string + relativeToCurrentRange: string timeNum: number relativeToCurrentType: ManipulateType around: string @@ -27,6 +28,7 @@ const props = defineProps({ regularOrTrends: 'fixed', timeNum: 0, intervalType: 'none', + relativeToCurrentRange: 'custom', relativeToCurrentType: 'year', around: 'f', timeGranularity: 'date', @@ -50,6 +52,7 @@ const timeConfig = computed(() => { timeNum, relativeToCurrentType, around, + relativeToCurrentRange, intervalType, regularOrTrends, timeGranularity, @@ -62,6 +65,7 @@ const timeConfig = computed(() => { relativeToCurrentType, around, intervalType, + relativeToCurrentRange, regularOrTrends, timeGranularity, timeNumRange, @@ -87,10 +91,13 @@ watch( ) const init = () => { + console.log('relativeToCurrentRange') + const { timeNum, relativeToCurrentType, around, + relativeToCurrentRange, regularOrTrends, timeNumRange, relativeToCurrentTypeRange, @@ -117,6 +124,11 @@ const init = () => { timeNumRange ) + if (!!relativeToCurrentRange && relativeToCurrentRange !== 'custom') { + config.value.regularOrTrendsValue = getCustomRange(relativeToCurrentRange) + return + } + config.value.regularOrTrendsValue = [startTime, endTime] } diff --git a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue index e012f070c5..b5ab99edc2 100644 --- a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue @@ -576,16 +576,21 @@ const isInRange = (ele, startWindowTime, timeStamp) => { if (intervalType === 'timeInterval') { const startTime = regularOrTrends === 'fixed' - ? regularOrTrendsValue[0] + ? new Date( + dayjs(new Date(regularOrTrendsValue[0])).startOf(noTime).format('YYYY/MM/DD HH:mm:ss') + ) : getAround(relativeToCurrentType, around === 'f' ? 'subtract' : 'add', timeNum) const endTime = regularOrTrends === 'fixed' - ? regularOrTrendsValue[1] + ? new Date( + dayjs(new Date(regularOrTrendsValue[1])).endOf(noTime).format('YYYY/MM/DD HH:mm:ss') + ) : getAround( relativeToCurrentTypeRange, aroundRange === 'f' ? 'subtract' : 'add', timeNumRange ) + return ( startWindowTime < +new Date(startTime) - 1000 || timeStamp > +new Date(endTime) || @@ -760,7 +765,7 @@ const validate = () => { 'end-config' ) : new Date(ele.defaultValue[1]) - if (!relativeToCurrentRange || relativeToCurrentRange === 'custom') { + if (!!relativeToCurrentRange && relativeToCurrentRange !== 'custom') { ;[startTime, endTime] = getCustomRange(relativeToCurrentRange) } if (+startTime > +endTime) { @@ -1032,6 +1037,10 @@ const parameterCompletion = () => { Object.entries(attributes).forEach(([key, val]) => { !curComponent.value[key] && (curComponent.value[key] = val) }) + + if (!curComponent.value.timeRange.relativeToCurrentRange) { + curComponent.value.timeRange.relativeToCurrentRange = 'custom' + } } const handleCondition = item => { diff --git a/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue b/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue index b1ed8a2cc0..b1d08522aa 100644 --- a/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue +++ b/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue @@ -11,6 +11,7 @@ const props = defineProps({ dynamicWindow: false, maximumSingleQuery: 0, regularOrTrends: 'fixed', + relativeToCurrentRange: 'custom', regularOrTrendsValue: '', relativeToCurrent: 'custom', timeNum: 0, @@ -173,6 +174,85 @@ const relativeToCurrentList = computed(() => { } ] }) + +const relativeToCurrentListRange = computed(() => { + let list = [] + if (!timeRange.value) return list + switch (props.timeGranularityMultiple) { + case 'yearrange': + list = [ + { + label: '今年', + value: 'thisYear' + }, + { + label: '去年', + value: 'lastYear' + } + ] + break + case 'monthrange': + list = [ + { + label: '本月', + value: 'thisMonth' + }, + { + label: '上月', + value: 'lastMonth' + }, + { + label: '最近 3 个 月', + value: 'LastThreeMonths' + }, + { + label: '最近 6 个 月', + value: 'LastSixMonths' + }, + { + label: '最近 12 个 月', + value: 'LastTwelveMonths' + } + ] + break + case 'daterange': + case 'datetimerange': + list = [ + { + label: '今天', + value: 'today' + }, + { + label: '昨天', + value: 'yesterday' + }, + { + label: '最近 3 天', + value: 'LastThreeDays' + }, + { + label: '月初至今', + value: 'monthBeginning' + }, + { + label: '年初至今', + value: 'yearBeginning' + } + ] + break + + default: + break + } + + return [ + ...list, + { + label: '自定义', + value: 'custom' + } + ] +}) + + + { return } else if (currentDsType.value === 'API') { - for (var i = 0; i < request.apiConfiguration.length; i++) { + for (let i = 0; i < request.apiConfiguration.length; i++) { if ( request.apiConfiguration[i].deTableName === '' || request.apiConfiguration[i].deTableName === undefined || @@ -445,7 +445,7 @@ const saveDS = () => { uuid.v1().replaceAll('-', '').substring(0, 10) } request.apiConfiguration[i].jsonFields = [] - for (var j = 0; j < request.apiConfiguration[i].fields.length; j++) { + for (let j = 0; j < request.apiConfiguration[i].fields.length; j++) { request.apiConfiguration[i].fields[j].value = [] } } diff --git a/core/core-frontend/src/views/visualized/data/datasource/index.vue b/core/core-frontend/src/views/visualized/data/datasource/index.vue index 111f822778..97082ce1a2 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/index.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/index.vue @@ -366,7 +366,8 @@ const defaultInfo = { configuration: null, syncSetting: null, apiConfiguration: [], - weight: 0 + weight: 0, + enableDataFill: false } const nodeInfo = reactive(cloneDeep(defaultInfo)) const infoList = computed(() => { @@ -504,7 +505,8 @@ const handleNodeClick = data => { fileName, size, description, - lastSyncTime + lastSyncTime, + enableDataFill } = res.data if (configuration) { configuration = JSON.parse(Base64.decode(configuration)) @@ -531,7 +533,8 @@ const handleNodeClick = data => { apiConfiguration: apiConfigurationStr, paramsConfiguration: paramsStr, weight: data.weight, - lastSyncTime + lastSyncTime, + enableDataFill }) activeTab.value = '' activeName.value = 'config' @@ -628,7 +631,8 @@ const editDatasource = (editType?: number) => { fileName, size, description, - lastSyncTime + lastSyncTime, + enableDataFill } = res.data if (configuration) { configuration = JSON.parse(Base64.decode(configuration)) @@ -656,6 +660,7 @@ const editDatasource = (editType?: number) => { apiConfiguration: apiConfigurationStr, paramsConfiguration: paramsStr, lastSyncTime, + enableDataFill, isPlugin: arr && arr.length > 0, staticMap: arr[0]?.staticMap }) diff --git a/core/core-frontend/src/views/workbranch/ShortcutTable.vue b/core/core-frontend/src/views/workbranch/ShortcutTable.vue index 8d5ec781a5..f93c122177 100644 --- a/core/core-frontend/src/views/workbranch/ShortcutTable.vue +++ b/core/core-frontend/src/views/workbranch/ShortcutTable.vue @@ -15,6 +15,7 @@ import ShareGrid from '@/views/share/share/ShareGrid.vue' import ShareHandler from '@/views/share/share/ShareHandler.vue' import { useAppStoreWithOut } from '@/store/modules/app' import { useEmbedded } from '@/store/modules/embedded' +import { XpackComponent } from '@/components/plugin' const userStore = useUserStoreWithOut() const { resolve } = useRouter() const { t } = useI18n() @@ -263,6 +264,8 @@ const getEmptyDesc = (): string => { + + @@ -419,6 +422,10 @@ const getEmptyDesc = (): string => { + innerList(List ids) throws DEException; + @DePermit({"#p0+':read'"}) @GetMapping("/hidePw/{datasourceId}") DatasourceDTO hidePw(@PathVariable("datasourceId") Long datasourceId) throws DEException; diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java index 50c7d59ff9..7dcb97e930 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/report/vo/ReportGridVO.java @@ -27,5 +27,7 @@ public class ReportGridVO implements Serializable { private String creator; + private String updater; + private Long createTime; } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/DataFillingApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/DataFillingApi.java new file mode 100644 index 0000000000..d86b7baa59 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/DataFillingApi.java @@ -0,0 +1,111 @@ +package io.dataease.api.xpack.dataFilling; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.api.report.dto.ReportInstanceMsgRequest; +import io.dataease.api.report.vo.ReportGridVO; +import io.dataease.api.xpack.dataFilling.dto.*; +import io.dataease.auth.DeApiPath; +import io.dataease.exception.DEException; +import io.dataease.extensions.datasource.dto.SimpleDatasourceDTO; +import io.dataease.model.BusiNodeRequest; +import io.dataease.model.BusiNodeVO; +import io.swagger.v3.oas.annotations.tags.Tag; +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.RequestBody; + +import java.util.List; +import java.util.Map; + +import static io.dataease.constant.AuthResourceEnum.DATA_FILLING; + +@Tag(name = "数据填报") +@ApiSupport(order = 1000, author = "fit2cloud-someone") +@DeApiPath(value = "/data-filling", rt = DATA_FILLING) +public interface DataFillingApi { + + @PostMapping("tree") + List tree(@RequestBody BusiNodeRequest request) throws DEException; + + @GetMapping("/get/{id}") + DataFillingDTO get(@PathVariable("id") Long id); + + @PostMapping("/move") + DataFillingDTO move(@RequestBody DataFillingDTO dataFillingDTO); + + @PostMapping("/save") + DataFillingDTO save(@RequestBody DataFillingDTO dataFillingDTO) throws Exception; + + @PostMapping("/rename") + DataFillingDTO rename(@RequestBody DataFillingDTO dataFillingDTO); + + @GetMapping("delete/{id}") + void delete(@PathVariable("id") Long id); + + @GetMapping("/datasource/list") + List listDatasourceList(); + + @PostMapping("/form/{optionDatasource}/options") + List listColumnData(@PathVariable("optionDatasource") Long optionDatasource, @RequestBody DatasourceOptionsRequest request) throws Exception; + + @PostMapping("/form/{id}/tableData") + DataFillFormTableDataResponse tableData(@PathVariable Long id, @RequestBody DataFillFormTableDataRequest request) throws Exception; + + @GetMapping("/form/{formId}/delete/{id}") + void deleteRowData(@PathVariable Long formId, @PathVariable Long id) throws Exception; + + @PostMapping("/form/{formId}/batch-delete") + void batchDeleteRowData(@PathVariable Long formId, @RequestBody List ids) throws Exception; + + @PostMapping("/form/{formId}/rowData/save") + DataFillFormTableDataResponse saveRowData(@PathVariable Long formId, @RequestBody Map data) throws Exception; + + + @GetMapping("/task/info/{taskId}") + TaskInfoVO info(@PathVariable("taskId") Long taskId); + + + @PostMapping("/task/save") + Long save(@RequestBody TaskInfoVO task); + + @PostMapping("/task/logMsg") + String logMsg(@RequestBody ReportInstanceMsgRequest request); + + @PostMapping("/task/page/{goPage}/{pageSize}") + IPage taskPager(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody DfTaskInfoRequest request); + + @PostMapping("/sub-task/page/{goPage}/{pageSize}") + IPage subTaskPager(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody DfSubTaskInfoRequest request); + + @PostMapping("/task/delete") + void batchDeleteTask(@RequestBody List ids) throws Exception; + + @GetMapping("/task/{id}/stop") + void stopTask(@PathVariable Long id) throws Exception; + + @GetMapping("/task/{id}/start") + void startTask(@PathVariable Long id) throws Exception; + + @PostMapping("/sub-task/delete") + void batchDeleteSubTask(@RequestBody List ids) throws Exception; + + @GetMapping("/sub-task/{id}/users/list/{type}") + List> listSubTaskUser(@PathVariable Long id, @PathVariable String type) throws Exception; + + @PostMapping("/user-task") + List listUserTask(@RequestBody DfUserTaskRequest request) throws Exception; + + @GetMapping("/user-task/list/{id}") + DfUserTaskData listUserTaskData(@PathVariable Long id) throws Exception; + + @PostMapping("/user-task/saveData/{id}") + DataFillFormTableDataResponse saveFormRowData(@PathVariable Long id, @RequestBody Map data) throws Exception; + + + @PostMapping("/log/page/{goPage}/{pageSize}") + IPage taskPager(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody DfCommitLogRequest request); + + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/ColumnOption.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/ColumnOption.java new file mode 100644 index 0000000000..676eccf783 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/ColumnOption.java @@ -0,0 +1,23 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ColumnOption implements Serializable { + + @Serial + private static final long serialVersionUID = -422787778573500470L; + + private String name; + + private Object value; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataRequest.java new file mode 100644 index 0000000000..a843ddfff8 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataRequest.java @@ -0,0 +1,31 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + + +@Data +@Accessors(chain = true) +public class DataFillFormTableDataRequest implements Serializable { + + @Serial + private static final long serialVersionUID = -314618516232771747L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + private long currentPage; + + private long pageSize; + + private boolean withoutLogs = false; + + private List primaryKeyValueList; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataResponse.java new file mode 100644 index 0000000000..4918a5b904 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillFormTableDataResponse.java @@ -0,0 +1,28 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Accessors(chain = true) +public class DataFillFormTableDataResponse implements Serializable { + + @Serial + private static final long serialVersionUID = -6463885075511811532L; + + private Object data; + + private String fields; + + private long total; + + private long currentPage; + + private long pageSize; + + private String key; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillingDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillingDTO.java new file mode 100644 index 0000000000..e7187cdc61 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DataFillingDTO.java @@ -0,0 +1,91 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +@Data +public class DataFillingDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 父级ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long pid; + + /** + * folder/form 目录或文件夹 + */ + private String nodeType; + + /** + * 表名 + */ + private String tableName; + + /** + * 数据源 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long datasource; + + /** + * 表单内容 + */ + private String forms; + + /** + * 是否创建索引 + */ + private Boolean createIndex; + + /** + * 索引 + */ + private String tableIndexes; + + /** + * 创建人 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long createBy; + + /** + * 创建时间 + */ + private Long createTime; + + /** + * 更新人 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long updateBy; + + /** + * 更新时间 + */ + private Long updateTime; + + private String creator; + private String updater; + + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DatasourceOptionsRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DatasourceOptionsRequest.java new file mode 100644 index 0000000000..c20c24b4c5 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DatasourceOptionsRequest.java @@ -0,0 +1,11 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.Getter; + +@Getter +public class DatasourceOptionsRequest { + + private String optionTable; + private String optionColumn; + private String optionOrder; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLog.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLog.java new file mode 100644 index 0000000000..60962f88a3 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLog.java @@ -0,0 +1,37 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Accessors(chain = true) +public class DfCommitLog implements Serializable { + + @Serial + private static final long serialVersionUID = 3175509273615697110L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long formId; + + @JsonSerialize(using = ToStringSerializer.class) + private Long dataId; + + /** + * 操作 0删除 1插入 2更新 + */ + private Integer operate; + + private Long commitBy; + + private String committer; + + private Long commitTime; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLogRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLogRequest.java new file mode 100644 index 0000000000..f5de44a938 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfCommitLogRequest.java @@ -0,0 +1,17 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class DfCommitLogRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 8186544152722934919L; + + private Long formId; + + private Integer operate; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskInfoRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskInfoRequest.java new file mode 100644 index 0000000000..600a2a1831 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskInfoRequest.java @@ -0,0 +1,18 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class DfSubTaskInfoRequest implements Serializable { + @Serial + private static final long serialVersionUID = 3478936079850972546L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long taskId; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskVo.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskVo.java new file mode 100644 index 0000000000..17c17cc84b --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfSubTaskVo.java @@ -0,0 +1,56 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class DfSubTaskVo implements Serializable { + + @Serial + private static final long serialVersionUID = 7440756474905083085L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long taskId; + + private Long startTime; + + private Long endTime; + + /** + * 任务下发状态 + */ + private Integer execStatus; + + /** + * 任务状态 + * 1:进行中/ 0:已过期 根据endTime判断 + */ + private Integer status; + + /** + * 所有任务项 subInstance 个数 + */ + private int totalCount; + private int unfinishedCount; + + /** + * 完成率 + * (totalCount - unfinishedCount) / totalCount + */ + private BigDecimal finishedRate; + + private int totalUserCount; + private int unfinishedUserCount; + + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfTaskInfoRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfTaskInfoRequest.java new file mode 100644 index 0000000000..955028e675 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfTaskInfoRequest.java @@ -0,0 +1,25 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +public class DfTaskInfoRequest implements Serializable { + @Serial + private static final long serialVersionUID = 3478936079850972546L; + + private List uidList; + + private List lastStatusList; + + private List statusList; + + private List timeList; + + private String keyword; + + private Boolean timeDesc; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskData.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskData.java new file mode 100644 index 0000000000..8bce741982 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskData.java @@ -0,0 +1,56 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.dataease.utils.LongArray2StringSerialize; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +public class DfUserTaskData implements Serializable { + @Serial + private static final long serialVersionUID = -3635512734559897349L; + + @Data + @Accessors(chain = true) + public static class DfSubInstance implements Serializable { + @Serial + private static final long serialVersionUID = 4847820854888692033L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + @JsonSerialize(using = ToStringSerializer.class) + private Long taskId; + @JsonSerialize(using = ToStringSerializer.class) + private Long pid; + @JsonSerialize(using = ToStringSerializer.class) + private Long uid; + @JsonSerialize(using = ToStringSerializer.class) + private Long formId; + @JsonSerialize(using = ToStringSerializer.class) + private Long dataId; + + private Long finishTime; + private Integer status; + + } + + @JsonSerialize(using = ToStringSerializer.class) + private Long formId; + private String formTitle; + @JsonSerialize(using = LongArray2StringSerialize.class) + private List dataIds; + + private List subInstances; + + private String form; + + private String formExtSetting; + + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskRequest.java new file mode 100644 index 0000000000..42a8bcdf2b --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskRequest.java @@ -0,0 +1,19 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Accessors(chain = true) +public class DfUserTaskRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 3930338226463461223L; + + private String type; + + private String taskName; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskVo.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskVo.java new file mode 100644 index 0000000000..0d369925a6 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/DfUserTaskVo.java @@ -0,0 +1,42 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.dataease.utils.LongArray2StringSerialize; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +public class DfUserTaskVo implements Serializable { + + @Serial + private static final long serialVersionUID = 2573431692696582629L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long taskId; + + @JsonSerialize(using = ToStringSerializer.class) + private Long formId; + + private String taskName; + + private Long startTime; + + private Long endTime; + + private Long finishTime; + + @JsonSerialize(using = ToStringSerializer.class) + private Long assignBy; + + private String assigner; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoGridVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoGridVO.java new file mode 100644 index 0000000000..d3c9ce1423 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoGridVO.java @@ -0,0 +1,38 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.dataease.utils.LongArray2StringSerialize; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +public class TaskInfoGridVO implements Serializable { + + @Serial + private static final long serialVersionUID = -5178055146669970633L; + @JsonSerialize(using= ToStringSerializer.class) + private Long id; + + private String name; + + private Long lastExecTime; + + private Integer lastExecStatus; + + private Integer status; + + private Long nextExecTime; + + private String creatBy; + + private String creator; + + private Long createTime; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoVO.java new file mode 100644 index 0000000000..79c934c8cc --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/xpack/dataFilling/dto/TaskInfoVO.java @@ -0,0 +1,73 @@ +package io.dataease.api.xpack.dataFilling.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.dataease.utils.LongArray2StringSerialize; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +public class TaskInfoVO implements Serializable { + + @Serial + private static final long serialVersionUID = 7074759598819246816L; + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long formId; + + private String name; + + private List reciFlagList; + + @JsonSerialize(using = LongArray2StringSerialize.class) + private List uidList; + + @JsonSerialize(using = LongArray2StringSerialize.class) + private List ridList; + + private Integer fillType; + + private Integer fitType; + + private String fitColumn; + + private Integer rateType; + + private String rateVal; + + private Long startTime; + + private Long endTime; + + @JsonSerialize(using = ToStringSerializer.class) + private Long createBy; + private String creator; + private Long createTime; + + @JsonSerialize(using = ToStringSerializer.class) + private Long updateBy; + private String updater; + private Long updateTime; + + private Integer publishRangeTime; + + private Integer publishRangeTimeType; + + private Integer status; + + private Integer lastExecStatus; + private Long lastExecTime; + private Long nextExecTime; + + + private String formExtSetting; + +} diff --git a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java index ab368e28f2..8ffbbdc5c5 100644 --- a/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java +++ b/sdk/api/api-permissions/src/main/java/io/dataease/api/permissions/user/api/UserApi.java @@ -194,4 +194,12 @@ public interface UserApi { @PostMapping("/subOrgUser") List subOrgUser(@RequestBody List oidList); + List getRecipientUserIds(UserReciRequest request); + + List getUserIdByAccount(String account); + + List getUserIdByName(String name); + + List> listUserInfosByIds(List ids); + } diff --git a/sdk/common/src/main/java/io/dataease/constant/AuthResourceEnum.java b/sdk/common/src/main/java/io/dataease/constant/AuthResourceEnum.java index bef3c219ee..40cdd10ff2 100644 --- a/sdk/common/src/main/java/io/dataease/constant/AuthResourceEnum.java +++ b/sdk/common/src/main/java/io/dataease/constant/AuthResourceEnum.java @@ -2,7 +2,7 @@ package io.dataease.constant; public enum AuthResourceEnum { - PANEL(2, 1), SCREEN(3, 2), DATASET(5, 3), DATASOURCE(6, 4), SYSTEM(7, 0), USER(8, 5), ROLE(8, 6), ORG(9, 7), SYNC_DATASOURCE(23, 8), TASK(24, 9), SUMMARY(22, 10); + PANEL(2, 1), SCREEN(3, 2), DATASET(5, 3), DATASOURCE(6, 4), SYSTEM(7, 0), USER(8, 5), ROLE(8, 6), ORG(9, 7), SYNC_DATASOURCE(23, 8), TASK(24, 9), SUMMARY(22, 10), DATA_FILLING(60, 11); private long menuId; diff --git a/sdk/common/src/main/java/io/dataease/constant/BusiResourceEnum.java b/sdk/common/src/main/java/io/dataease/constant/BusiResourceEnum.java index 7d582d0ce8..fcb1143930 100644 --- a/sdk/common/src/main/java/io/dataease/constant/BusiResourceEnum.java +++ b/sdk/common/src/main/java/io/dataease/constant/BusiResourceEnum.java @@ -2,7 +2,7 @@ package io.dataease.constant; public enum BusiResourceEnum { - PANEL(1), SCREEN(2), DATASET(3), DATASOURCE(4); + PANEL(1), SCREEN(2), DATASET(3), DATASOURCE(4), DATA_FILLING(8); private int flag; diff --git a/sdk/common/src/main/java/io/dataease/constant/DadaFillingFinishTaskEnum.java b/sdk/common/src/main/java/io/dataease/constant/DadaFillingFinishTaskEnum.java new file mode 100644 index 0000000000..532e1bf3a4 --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/constant/DadaFillingFinishTaskEnum.java @@ -0,0 +1,29 @@ +package io.dataease.constant; + +import java.util.Arrays; + +public enum DadaFillingFinishTaskEnum { + + OPEN(0), FINISHED(1); + + private Integer flag; + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + + DadaFillingFinishTaskEnum(Integer flag) { + this.flag = flag; + } + + DadaFillingFinishTaskEnum() { + } + + public static DadaFillingFinishTaskEnum fromValue(Integer flag) { + return Arrays.stream(values()).filter(v -> v.flag.equals(flag)).findFirst().get(); + } +} diff --git a/sdk/common/src/main/java/io/dataease/utils/LongArray2StringSerialize.java b/sdk/common/src/main/java/io/dataease/utils/LongArray2StringSerialize.java new file mode 100644 index 0000000000..0858600837 --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/utils/LongArray2StringSerialize.java @@ -0,0 +1,23 @@ +package io.dataease.utils; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class LongArray2StringSerialize extends JsonSerializer> { + + @Override + public void serialize(List longs, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + List list = new ArrayList<>(); + for (Long str : longs) { + if (str != null) { + list.add(str.toString()); + } + } + jsonGenerator.writeObject(list); + } +} diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceDTO.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceDTO.java index 81ee90d0b4..79af9509e6 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceDTO.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceDTO.java @@ -89,4 +89,6 @@ public class DatasourceDTO implements Serializable { * 任务状态 */ private String taskStatus; + + private Boolean enableDataFill; } diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceRequest.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceRequest.java index 1eb97c02a9..e8392f7655 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceRequest.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/DatasourceRequest.java @@ -4,6 +4,7 @@ import lombok.Data; import org.springframework.util.StringUtils; import java.io.Serializable; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -24,6 +25,7 @@ public class DatasourceRequest implements Serializable { private boolean previewData = false; private boolean totalPageFlag; private Map dsList; + private List tableFieldWithValues; public DatasourceRequest() { } diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/SimpleDatasourceDTO.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/SimpleDatasourceDTO.java new file mode 100644 index 0000000000..4c0c938d77 --- /dev/null +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/SimpleDatasourceDTO.java @@ -0,0 +1,24 @@ +package io.dataease.extensions.datasource.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class SimpleDatasourceDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 2255370172449547802L; + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + @JsonSerialize(using = ToStringSerializer.class) + private Long pid; + private String name; + private String type; + private String typeAlias; + private String status; + private Boolean enableDataFill; +} diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java index ba0f94468f..fb2474b6c2 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java @@ -19,7 +19,9 @@ public class TableField { private Integer deExtractType; private int extField; private String jsonPath; + private boolean primary; List value; + private int inCount; } diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableFieldWithValue.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableFieldWithValue.java new file mode 100644 index 0000000000..211d94492e --- /dev/null +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableFieldWithValue.java @@ -0,0 +1,29 @@ +package io.dataease.extensions.datasource.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Getter +@Setter +@Accessors(chain = true) +public class TableFieldWithValue implements Serializable { + @Serial + private static final long serialVersionUID = -8852504196142402103L; + + private Object value; + private String filedName; + private String typeName; + private Integer type; + + public static TableFieldWithValue copy(TableFieldWithValue tableFieldWithValue) { + return new TableFieldWithValue() + .setValue(tableFieldWithValue.getValue()) + .setFiledName(tableFieldWithValue.getFiledName()) + .setTypeName(tableFieldWithValue.getTypeName()) + .setType(tableFieldWithValue.getType()); + } +} diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java index da431d3a75..ab7f5c9251 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java @@ -92,6 +92,11 @@ public abstract class Provider { */ public abstract void hidePW(DatasourceDTO datasourceDTO); + public abstract void exec(DatasourceRequest datasourceRequest) throws DEException; + + public abstract int executeUpdate(DatasourceRequest datasourceRequest) throws DEException; + + @Getter private static final Map lPorts = new HashMap<>(); @Getter From 81bd95147a38b0fd648f9338c0dda67c694e7b2e Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 14:35:09 +0800 Subject: [PATCH 05/15] =?UTF-8?q?feat(X-Pack):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A1=AB=E6=8A=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index c1ebcdfa54..ef84bde1da 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit c1ebcdfa542695abd58790d921c23ed4afaaf65d +Subproject commit ef84bde1da6767e74ab5a38bd7da4a8c4ddced08 From 8d8e205406a60a6e1a6cb7d866cbf9329b04b9e7 Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 14:42:14 +0800 Subject: [PATCH 06/15] =?UTF-8?q?feat(X-Pack):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A1=AB=E6=8A=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index ef84bde1da..72234ce10d 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit ef84bde1da6767e74ab5a38bd7da4a8c4ddced08 +Subproject commit 72234ce10da1176bc866f18024f2821bfbec967c From 4e2a3d020c0ba476334cd1d8061434d697aa7f5f Mon Sep 17 00:00:00 2001 From: wisonic Date: Wed, 7 Aug 2024 14:58:29 +0800 Subject: [PATCH 07/15] =?UTF-8?q?perf(=E5=9B=BE=E8=A1=A8):=20AntV=20?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=8A=A0=E8=BD=BD=E4=BC=98=E5=8C=96=20#11098?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/components/js/panel/charts/bar/bar.ts | 14 ++++++++------ .../js/panel/charts/bar/bidirectional-bar.ts | 15 ++++++++++----- .../js/panel/charts/bar/horizontal-bar.ts | 10 ++++++---- .../js/panel/charts/bar/progress-bar.ts | 5 +++-- .../components/js/panel/charts/bar/range-bar.ts | 7 ++++--- .../components/js/panel/charts/bar/waterfall.ts | 5 +++-- .../chart/components/js/panel/charts/line/area.ts | 8 +++++--- .../chart/components/js/panel/charts/line/line.ts | 10 ++++++---- .../components/js/panel/charts/line/stock-line.ts | 9 +++++---- .../components/js/panel/charts/liquid/liquid.ts | 5 +++-- .../chart/components/js/panel/charts/map/map.ts | 7 ++++--- .../js/panel/charts/others/chart-mix.ts | 13 +++++++------ .../components/js/panel/charts/others/funnel.ts | 5 +++-- .../components/js/panel/charts/others/gauge.ts | 5 +++-- .../components/js/panel/charts/others/quadrant.ts | 5 +++-- .../components/js/panel/charts/others/radar.ts | 10 ++++++---- .../components/js/panel/charts/others/sankey.ts | 6 +++--- .../components/js/panel/charts/others/scatter.ts | 5 +++-- .../components/js/panel/charts/others/treemap.ts | 3 ++- .../js/panel/charts/others/word-cloud.ts | 5 +++-- .../chart/components/js/panel/charts/pie/pie.ts | 8 ++++---- .../chart/components/js/panel/charts/pie/rose.ts | 5 ++--- .../components/js/panel/types/impl/g2plot.ts | 10 ++++------ .../chart/components/js/panel/types/impl/l7.ts | 4 ++-- .../components/js/panel/types/impl/l7plot.ts | 8 ++++---- .../chart/components/js/panel/types/impl/s2.ts | 2 +- .../views/components/ChartComponentG2Plot.vue | 6 +++--- 27 files changed, 110 insertions(+), 85 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts index f013a706ed..f22d360810 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts @@ -1,4 +1,4 @@ -import { Column, ColumnOptions } from '@antv/g2plot/esm/plots/column' +import type { Column, ColumnOptions } from '@antv/g2plot/esm/plots/column' import { cloneDeep, isEmpty } from 'lodash-es' import { G2PlotChartView, @@ -11,7 +11,7 @@ import { setUpGroupSeriesColor, setUpStackSeriesColor } from '@/views/chart/components/js/util' -import { Datum } from '@antv/g2plot' +import type { Datum } from '@antv/g2plot' import { valueFormatter } from '@/views/chart/components/js/formatter' import { BAR_AXIS_TYPE, @@ -22,6 +22,7 @@ import { getPadding, setGradientColor } from '@/views/chart/components/js/panel/ import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' import { clearExtremum, extremumEvt } from '@/views/chart/components/js/extremumUitl' +import { Group } from '@antv/g-canvas' const { t } = useI18n() const DEFAULT_DATA: any[] = [] @@ -93,7 +94,7 @@ export class Bar extends G2PlotChartView { } } - drawChart(drawOptions: G2PlotDrawOptions): Column { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart?.data?.data?.length) { clearExtremum(chart) @@ -106,8 +107,9 @@ export class Bar extends G2PlotChartView { data } const options: ColumnOptions = this.setupOptions(chart, initOptions) - - const newChart = new Column(container, options) + let newChart = null + const { Column: ColumnClass } = await import('@antv/g2plot/esm/plots/column') + newChart = new ColumnClass(container, options) newChart.on('interval:click', action) extremumEvt(newChart, chart, options, container) return newChart @@ -146,7 +148,7 @@ export class Bar extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bidirectional-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bidirectional-bar.ts index 895cbb292f..2aef190e8c 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bidirectional-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bidirectional-bar.ts @@ -9,14 +9,16 @@ import { getYAxisExt, setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' -import { +import type { BidirectionalBar as G2BidirectionalBar, BidirectionalBarOptions } from '@antv/g2plot/esm/plots/bidirectional-bar' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' import { useI18n } from '@/hooks/web/useI18n' import { valueFormatter } from '@/views/chart/components/js/formatter' -import { Options } from '@antv/g2plot/esm' +import type { Options } from '@antv/g2plot/esm' +import { Group } from '@antv/g-canvas' + const { t } = useI18n() /** * 对称柱状图 @@ -101,7 +103,7 @@ export class BidirectionalHorizontalBar extends G2PlotChartView< } } - drawChart(drawOptions: G2PlotDrawOptions): G2BidirectionalBar { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -150,8 +152,11 @@ export class BidirectionalHorizontalBar extends G2PlotChartView< } } } + const { BidirectionalBar: BidirectionalBarClass } = await import( + '@antv/g2plot/esm/plots/bidirectional-bar' + ) // 开始渲染 - const newChart = new G2BidirectionalBar(container, options) + const newChart = new BidirectionalBarClass(container, options) newChart.on('interval:click', action) newChart.on('element:click', ev => { @@ -451,7 +456,7 @@ export class BidirectionalHorizontalBar extends G2PlotChartView< } else { res = valueFormatter(value, l.labelFormatter) } - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) const isValue = param['series-field-key'] === 'value' const textAlign = isValue && layoutHorizontal ? 'end' : 'start' const isMiddle = label.position === 'middle' diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts index 1855afb072..be75cead88 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Bar, BarOptions } from '@antv/g2plot/esm/plots/bar' +import type { Bar, BarOptions } from '@antv/g2plot/esm/plots/bar' import { getPadding, setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' import { cloneDeep } from 'lodash-es' import { @@ -17,9 +17,10 @@ import { BAR_EDITOR_PROPERTY, BAR_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/bar/common' -import { Datum } from '@antv/g2plot/esm/types/common' +import type { Datum } from '@antv/g2plot/esm/types/common' import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' +import { Group } from '@antv/g-canvas' const { t } = useI18n() const DEFAULT_DATA = [] @@ -105,7 +106,7 @@ export class HorizontalBar extends G2PlotChartView { ] } - drawChart(drawOptions: G2PlotDrawOptions): Bar { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -122,6 +123,7 @@ export class HorizontalBar extends G2PlotChartView { const options = this.setupOptions(chart, initOptions) + const { Bar } = await import('@antv/g2plot/esm/plots/bar') // 开始渲染 const newChart = new Bar(container, options) @@ -238,7 +240,7 @@ export class HorizontalBar extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/progress-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/progress-bar.ts index 142acad842..6fef38049f 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/progress-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/progress-bar.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '../../types/impl/g2plot' import { flow, hexColorToRGBA, parseJson } from '../../../util' import { setGradientColor } from '../../common/common_antv' import { useI18n } from '@/hooks/web/useI18n' -import { Bar as G2Progress, BarOptions } from '@antv/g2plot/esm/plots/bar' +import type { Bar as G2Progress, BarOptions } from '@antv/g2plot/esm/plots/bar' import { BAR_AXIS_TYPE, BAR_EDITOR_PROPERTY_INNER @@ -66,7 +66,7 @@ export class ProgressBar extends G2PlotChartView { appendPadding: [0, 0, 10, 0] } - drawChart(drawOptions: G2PlotDrawOptions): G2Progress { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -128,6 +128,7 @@ export class ProgressBar extends G2PlotChartView { } const options = this.setupOptions(chart, initOptions) + const { Bar: G2Progress } = await import('@antv/g2plot/esm/plots/bar') // 开始渲染 const newChart = new G2Progress(container, options) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/range-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/range-bar.ts index a887e7d5eb..c84a2e737a 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/range-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/range-bar.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Bar, BarOptions } from '@antv/g2plot/esm/plots/bar' +import type { Bar, BarOptions } from '@antv/g2plot/esm/plots/bar' import { getPadding, setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' import { cloneDeep, find } from 'lodash-es' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' @@ -107,7 +107,7 @@ export class RangeBar extends G2PlotChartView { ] } - drawChart(drawOptions: G2PlotDrawOptions): Bar { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -163,8 +163,9 @@ export class RangeBar extends G2PlotChartView { const options = this.setupOptions(chart, initOptions) + const { Bar: BarClass } = await import('@antv/g2plot/esm/plots/bar') // 开始渲染 - const newChart = new Bar(container, options) + const newChart = new BarClass(container, options) newChart.on('interval:click', action) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/waterfall.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/waterfall.ts index f327d38041..5357fe6663 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/waterfall.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/waterfall.ts @@ -1,4 +1,4 @@ -import { WaterfallOptions, Waterfall as G2Waterfall } from '@antv/g2plot/esm/plots/waterfall' +import type { WaterfallOptions, Waterfall as G2Waterfall } from '@antv/g2plot/esm/plots/waterfall' import { G2PlotChartView, G2PlotDrawOptions } from '../../types/impl/g2plot' import { flow, hexColorToRGBA, parseJson } from '../../../util' import { valueFormatter } from '../../../formatter' @@ -60,7 +60,7 @@ export class Waterfall extends G2PlotChartView { ] } axis: AxisType[] = ['xAxis', 'yAxis', 'filter', 'drill', 'extLabel', 'extTooltip'] - public drawChart(drawOptions: G2PlotDrawOptions): G2Waterfall { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data) { return @@ -83,6 +83,7 @@ export class Waterfall extends G2PlotChartView { ] } const options = this.setupOptions(chart, baseOptions) + const { Waterfall: G2Waterfall } = await import('@antv/g2plot/esm/plots/waterfall') const newChart = new G2Waterfall(container, options) newChart.on('interval:click', action) return newChart diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts index c7f08f48f3..15a7b793bd 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Area as G2Area, AreaOptions } from '@antv/g2plot/esm/plots/area' +import type { Area as G2Area, AreaOptions } from '@antv/g2plot/esm/plots/area' import { getPadding, setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' import { cloneDeep } from 'lodash-es' import { @@ -22,6 +22,7 @@ import { Datum } from '@antv/g2plot/esm/types/common' import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' import { clearExtremum, extremumEvt } from '@/views/chart/components/js/extremumUitl' +import { Group } from '@antv/g-canvas' const { t } = useI18n() const DEFAULT_DATA = [] @@ -94,7 +95,7 @@ export class Area extends G2PlotChartView { ] } - drawChart(drawOptions: G2PlotDrawOptions): G2Area { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data.data?.length) { clearExtremum(chart) @@ -110,6 +111,7 @@ export class Area extends G2PlotChartView { } // options const options = this.setupOptions(chart, initOptions) + const { Area: G2Area } = await import('@antv/g2plot/esm/plots/area') // 开始渲染 const newChart = new G2Area(container, options) @@ -150,7 +152,7 @@ export class Area extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/line/line.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/line/line.ts index 5d4e4cf216..54ebb74e65 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/line/line.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/line/line.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Line as G2Line, LineOptions } from '@antv/g2plot/esm/plots/line' +import type { Line as G2Line, LineOptions } from '@antv/g2plot/esm/plots/line' import { getPadding } from '../../common/common_antv' import { flow, @@ -17,10 +17,11 @@ import { LINE_EDITOR_PROPERTY, LINE_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/line/common' -import { Datum } from '@antv/g2plot/esm/types/common' +import type { Datum } from '@antv/g2plot/esm/types/common' import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' import { clearExtremum, extremumEvt } from '@/views/chart/components/js/extremumUitl' +import { Group } from '@antv/g-canvas' const { t } = useI18n() const DEFAULT_DATA = [] @@ -46,7 +47,7 @@ export class Line extends G2PlotChartView { type: 'q' } } - drawChart(drawOptions: G2PlotDrawOptions): G2Line { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, action, container } = drawOptions if (!chart.data.data?.length) { clearExtremum(chart) @@ -105,6 +106,7 @@ export class Line extends G2PlotChartView { ] } const options = this.setupOptions(chart, initOptions) + const { Line: G2Line } = await import('@antv/g2plot/esm/plots/line') // 开始渲染 const newChart = new G2Line(container, options) @@ -147,7 +149,7 @@ export class Line extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/line/stock-line.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/line/stock-line.ts index ec8576544c..010545e475 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/line/stock-line.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/line/stock-line.ts @@ -2,12 +2,12 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Mix, MixOptions } from '@antv/g2plot/esm/plots/mix' +import type { Mix, MixOptions } from '@antv/g2plot/esm/plots/mix' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' import { LINE_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/line/common' import { useI18n } from '@/hooks/web/useI18n' import { valueFormatter } from '@/views/chart/components/js/formatter' -import { Options } from '@antv/g2plot/esm' +import type { Options } from '@antv/g2plot/esm' const { t } = useI18n() const DEFAULT_DATA = [] @@ -206,7 +206,7 @@ export class StockLine extends G2PlotChartView { }) } - drawChart(drawOptions: G2PlotDrawOptions): Mix { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, action, container } = drawOptions if (!chart.data.data?.length) { return @@ -341,7 +341,8 @@ export class StockLine extends G2PlotChartView { ...averageLines ] }) - const plot = new Mix(container, option) + const { Mix: MixClass } = await import('@antv/g2plot/esm/plots/mix') + const plot = new MixClass(container, option) this.registerEvent(data, plot, averagesLineData) plot.on('schema:click', evt => { const selectSchema = evt.data.data[xAxisDataeaseName] diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/liquid/liquid.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/liquid/liquid.ts index bdbd824b2d..8f71c29927 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/liquid/liquid.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/liquid/liquid.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Liquid as G2Liquid, LiquidOptions } from '@antv/g2plot/esm/plots/liquid' +import type { Liquid as G2Liquid, LiquidOptions } from '@antv/g2plot/esm/plots/liquid' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' import { DEFAULT_MISC } from '@/views/chart/components/editor/util/chart' import { valueFormatter } from '@/views/chart/components/js/formatter' @@ -50,7 +50,7 @@ export class Liquid extends G2PlotChartView { } } - drawChart(drawOptions: G2PlotDrawOptions): G2Liquid { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container } = drawOptions if (!chart.data?.series) { return @@ -59,6 +59,7 @@ export class Liquid extends G2PlotChartView { percent: 0 } const options = this.setupOptions(chart, initOptions) + const { Liquid: G2Liquid } = await import('@antv/g2plot/esm/plots/liquid') // 开始渲染 return new G2Liquid(container, options) } diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/map/map.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/map/map.ts index 48b99a0bbb..bd13c74e37 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/map/map.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/map/map.ts @@ -2,7 +2,7 @@ import { L7PlotChartView, L7PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/l7plot' -import { Choropleth, ChoroplethOptions } from '@antv/l7plot/dist/esm/plots/choropleth' +import type { Choropleth, ChoroplethOptions } from '@antv/l7plot/dist/esm/plots/choropleth' import { filterChartDataByRange, flow, @@ -17,7 +17,7 @@ import { mapRendered, mapRendering } from '@/views/chart/components/js/panel/common/common_antv' -import { FeatureCollection } from '@antv/l7plot/dist/esm/plots/choropleth/types' +import type { FeatureCollection } from '@antv/l7plot/dist/esm/plots/choropleth/types' import { cloneDeep, defaultsDeep } from 'lodash-es' import { useI18n } from '@/hooks/web/useI18n' import { valueFormatter } from '../../../formatter' @@ -27,7 +27,7 @@ import { MAP_EDITOR_PROPERTY_INNER, MapMouseEvent } from '@/views/chart/components/js/panel/charts/map/common' -import { CategoryLegendListItem } from '@antv/l7plot-component/dist/lib/types/legend' +import type { CategoryLegendListItem } from '@antv/l7plot-component/dist/lib/types/legend' import createDom from '@antv/dom-util/esm/create-dom' import { CONTAINER_TPL, @@ -143,6 +143,7 @@ export class Map extends L7PlotChartView { } const context = { drawOption, geoJson } options = this.setupOptions(chart, options, context) + const { Choropleth } = await import('@antv/l7plot/dist/esm/plots/choropleth') const view = new Choropleth(container, options) this.configZoomButton(chart, view) mapRendering(container) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts index 764cb46edc..cbffc6fee8 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { DualAxes, DualAxesOptions } from '@antv/g2plot/esm/plots/dual-axes' +import type { DualAxes, DualAxesOptions } from '@antv/g2plot/esm/plots/dual-axes' import { getAnalyse, getLabel, @@ -21,10 +21,11 @@ import { CHART_MIX_EDITOR_PROPERTY_INNER, MixChartBasicStyle } from './chart-mix-common' -import { Datum } from '@antv/g2plot/esm/types/common' +import type { Datum } from '@antv/g2plot/esm/types/common' import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' -import { Options } from '@antv/g2plot/esm' +import type { Options } from '@antv/g2plot/esm' +import { Group } from '@antv/g-canvas' const { t } = useI18n() const DEFAULT_DATA = [] @@ -62,7 +63,7 @@ export class ColumnLineMix extends G2PlotChartView { type: 'q' } } - drawChart(drawOptions: G2PlotDrawOptions): DualAxes { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, action, container } = drawOptions if (!chart.data?.left?.data?.length && !chart.data?.right?.data?.length) { return @@ -138,7 +139,7 @@ export class ColumnLineMix extends G2PlotChartView { ] } const options = this.setupOptions(chart, initOptions) - + const { DualAxes } = await import('@antv/g2plot/esm/plots/dual-axes') // 开始渲染 const newChart = new DualAxes(container, options) @@ -190,7 +191,7 @@ export class ColumnLineMix extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/funnel.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/funnel.ts index 1a80a98cfe..0f9aa41d82 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/funnel.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/funnel.ts @@ -1,4 +1,4 @@ -import { FunnelOptions, Funnel as G2Funnel } from '@antv/g2plot/esm/plots/funnel' +import type { FunnelOptions, Funnel as G2Funnel } from '@antv/g2plot/esm/plots/funnel' import { G2PlotChartView, G2PlotDrawOptions } from '../../types/impl/g2plot' import { flow, setUpSingleDimensionSeriesColor } from '@/views/chart/components/js/util' import { getPadding } from '../../common/common_antv' @@ -53,7 +53,7 @@ export class Funnel extends G2PlotChartView { } } - public drawChart(drawOptions: G2PlotDrawOptions): G2Funnel { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data) { return @@ -104,6 +104,7 @@ export class Funnel extends G2PlotChartView { } } const options = this.setupOptions(chart, baseOptions) + const { Funnel: G2Funnel } = await import('@antv/g2plot/esm/plots/funnel') const newChart = new G2Funnel(container, options) newChart.on('interval:click', action) return newChart diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/gauge.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/gauge.ts index 35cd34b235..60e937847a 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/gauge.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/gauge.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Gauge as G2Gauge, GaugeOptions } from '@antv/g2plot/esm/plots/gauge' +import type { Gauge as G2Gauge, GaugeOptions } from '@antv/g2plot/esm/plots/gauge' import { flow, parseJson } from '@/views/chart/components/js/util' import { DEFAULT_LABEL, @@ -64,7 +64,7 @@ export class Gauge extends G2PlotChartView { } } - drawChart(drawOptions: G2PlotDrawOptions): G2Gauge { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, scale } = drawOptions if (!chart.data?.series) { return @@ -96,6 +96,7 @@ export class Gauge extends G2PlotChartView { } } const options = this.setupOptions(chart, initOptions, { scale }) + const { Gauge: G2Gauge } = await import('@antv/g2plot/esm/plots/gauge') return new G2Gauge(container, options) } diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/quadrant.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/quadrant.ts index f727840883..4ddcc8456d 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/quadrant.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/quadrant.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { ScatterOptions, Scatter as G2Scatter } from '@antv/g2plot/esm/plots/scatter' +import type { ScatterOptions, Scatter as G2Scatter } from '@antv/g2plot/esm/plots/scatter' import { flow, parseJson, setUpSingleDimensionSeriesColor } from '../../../util' import { valueFormatter } from '@/views/chart/components/js/formatter' import { useI18n } from '@/hooks/web/useI18n' @@ -121,7 +121,7 @@ export class Quadrant extends G2PlotChartView { return [...new Set(arr.map(JSON.stringify))].map(JSON.parse) as T[] } - public drawChart(drawOptions: G2PlotDrawOptions) { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action, quadrantDefaultBaseline } = drawOptions if (!chart.data?.data) { return @@ -203,6 +203,7 @@ export class Quadrant extends G2PlotChartView { } const options = this.setupOptions(chart, baseOptions) + const { Scatter: G2Scatter } = await import('@antv/g2plot/esm/plots/scatter') const newChart = new G2Scatter(container, options) newChart.on('point:click', action) newChart.on('click', () => quadrantDefaultBaseline(defaultBaselineQuadrant)) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts index 2e61a13be9..db57672dff 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/radar.ts @@ -1,11 +1,12 @@ -import { RadarOptions, Radar as G2Radar } from '@antv/g2plot/esm/plots/radar' +import type { RadarOptions, Radar as G2Radar } from '@antv/g2plot/esm/plots/radar' import { G2PlotChartView, G2PlotDrawOptions } from '../../types/impl/g2plot' import { flow, parseJson } from '../../../util' import { getPadding } from '../../common/common_antv' import { valueFormatter } from '../../../formatter' -import { Datum } from '@antv/g2plot/esm/types/common' +import type { Datum } from '@antv/g2plot/esm/types/common' import { useI18n } from '@/hooks/web/useI18n' import { DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' +import { Group } from '@antv/g-canvas' const { t } = useI18n() @@ -59,7 +60,7 @@ export class Radar extends G2PlotChartView { } } - public drawChart(drawOptions: G2PlotDrawOptions): G2Radar { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data) { return @@ -112,6 +113,7 @@ export class Radar extends G2PlotChartView { ] } const options = this.setupOptions(chart, baseOptions) + const { Radar: G2Radar } = await import('@antv/g2plot/esm/plots/radar') const newChart = new G2Radar(container, options) newChart.on('point:click', action) return newChart @@ -149,7 +151,7 @@ export class Radar extends G2PlotChartView { return } const value = valueFormatter(data.value, labelCfg.formatterCfg) - const group = new G2PlotChartView.engine.Group({}) + const group = new Group({}) group.addShape({ type: 'text', attrs: { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/sankey.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/sankey.ts index e7c0ce11a1..d8facd28c2 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/sankey.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/sankey.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Sankey, SankeyOptions } from '@antv/g2plot/esm/plots/sankey' +import type { Sankey, SankeyOptions } from '@antv/g2plot/esm/plots/sankey' import { getPadding, setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' import { cloneDeep, get } from 'lodash-es' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' @@ -95,7 +95,7 @@ export class RangeBar extends G2PlotChartView { ] } - drawChart(drawOptions: G2PlotDrawOptions): Sankey { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -158,7 +158,7 @@ export class RangeBar extends G2PlotChartView { } const options = this.setupOptions(chart, initOptions) - + const { Sankey } = await import('@antv/g2plot/esm/plots/sankey') // 开始渲染 const newChart = new Sankey(container, options) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/scatter.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/scatter.ts index 4c13ced8f3..bef607ecd4 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/scatter.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/scatter.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { ScatterOptions, Scatter as G2Scatter } from '@antv/g2plot/esm/plots/scatter' +import type { ScatterOptions, Scatter as G2Scatter } from '@antv/g2plot/esm/plots/scatter' import { flow, parseJson } from '../../../util' import { valueFormatter } from '../../../formatter' import { getPadding } from '../../common/common_antv' @@ -85,7 +85,7 @@ export class Scatter extends G2PlotChartView { limit: 1 } } - public drawChart(drawOptions: G2PlotDrawOptions) { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data) { return @@ -131,6 +131,7 @@ export class Scatter extends G2PlotChartView { ] } const options = this.setupOptions(chart, baseOptions) + const { Scatter: G2Scatter } = await import('@antv/g2plot/esm/plots/scatter') const newChart = new G2Scatter(container, options) newChart.on('point:click', action) return newChart diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/treemap.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/treemap.ts index 3c1f8fa864..8a12792044 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/treemap.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/treemap.ts @@ -55,7 +55,7 @@ export class Treemap extends G2PlotChartView { } } - public drawChart(drawOptions: G2PlotDrawOptions): G2Treemap { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -102,6 +102,7 @@ export class Treemap extends G2PlotChartView { ] } const options = this.setupOptions(chart, baseOptions) + const { Treemap: G2Treemap } = await import('@antv/g2plot/esm/plots/treemap') const newChart = new G2Treemap(container, options) newChart.on('polygon:click', action) return newChart diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/word-cloud.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/word-cloud.ts index 44b1563586..13afe0fa93 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/word-cloud.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/word-cloud.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { WordCloud as G2WordCloud, WordCloudOptions } from '@antv/g2plot/esm/plots/word-cloud' +import type { WordCloud as G2WordCloud, WordCloudOptions } from '@antv/g2plot/esm/plots/word-cloud' import { flow, parseJson } from '@/views/chart/components/js/util' import { getPadding } from '@/views/chart/components/js/panel/common/common_antv' import { valueFormatter } from '@/views/chart/components/js/formatter' @@ -56,7 +56,7 @@ export class WordCloud extends G2PlotChartView { limit: 1 } } - drawChart(drawOptions: G2PlotDrawOptions): G2WordCloud { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (chart?.data) { // data @@ -80,6 +80,7 @@ export class WordCloud extends G2PlotChartView { interactions: [] } const options = this.setupOptions(chart, initOptions) + const { WordCloud: G2WordCloud } = await import('@antv/g2plot/esm/plots/word-cloud') const newChart = new G2WordCloud(container, options) newChart.on('point:click', param => { action({ x: param.x, y: param.y, data: { data: param.data.data.datum } }) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts index be12faae9d..9dafb6c8fc 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/pie.ts @@ -2,7 +2,7 @@ import { G2PlotChartView, G2PlotDrawOptions } from '@/views/chart/components/js/panel/types/impl/g2plot' -import { Pie as G2Pie, PieOptions } from '@antv/g2plot/esm/plots/pie' +import type { Pie as G2Pie, PieOptions } from '@antv/g2plot/esm/plots/pie' import { flow, hexColorToRGBA, @@ -20,7 +20,7 @@ import { PIE_EDITOR_PROPERTY, PIE_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/pie/common' -import { Datum } from '@antv/g2plot/esm/types/common' +import type { Datum } from '@antv/g2plot/esm/types/common' import { add } from 'mathjs' import isEmpty from 'lodash-es/isEmpty' import { cloneDeep } from 'lodash-es' @@ -35,7 +35,7 @@ export class Pie extends G2PlotChartView { } axisConfig = PIE_AXIS_CONFIG - drawChart(drawOptions: G2PlotDrawOptions): G2Pie { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart.data?.data?.length) { return @@ -114,7 +114,7 @@ export class Pie extends G2PlotChartView { } } const options = this.setupOptions(chart, initOptions) - + const { Pie: G2Pie } = await import('@antv/g2plot/esm/plots/pie') const newChart = new G2Pie(container, options) newChart.on('interval:click', action) return newChart diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/rose.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/rose.ts index 6388184ca1..288b22626b 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/pie/rose.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/pie/rose.ts @@ -26,7 +26,7 @@ export class Rose extends G2PlotChartView { propertyInner: EditorPropertyInner = PIE_EDITOR_PROPERTY_INNER axisConfig = PIE_AXIS_CONFIG - drawChart(drawOptions: G2PlotDrawOptions): G2Rose { + async drawChart(drawOptions: G2PlotDrawOptions): Promise { const { chart, container, action } = drawOptions if (!chart?.data?.data?.length) { return @@ -79,9 +79,8 @@ export class Rose extends G2PlotChartView { } } const options = this.setupOptions(chart, baseOptions) - // custom color - // options.color = antVCustomColor(chart) + const { Rose: G2Rose } = await import('@antv/g2plot/esm/plots/rose') // 开始渲染 const plot = new G2Rose(container, options) diff --git a/core/core-frontend/src/views/chart/components/js/panel/types/impl/g2plot.ts b/core/core-frontend/src/views/chart/components/js/panel/types/impl/g2plot.ts index 5bc5b91243..93d2ef5934 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/types/impl/g2plot.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/types/impl/g2plot.ts @@ -1,5 +1,5 @@ -import { PickOptions } from '@antv/g2plot/esm/core/plot' -import { Plot } from '@antv/g2plot/esm/core/plot' +import type { PickOptions } from '@antv/g2plot/esm/core/plot' +import type { Plot } from '@antv/g2plot/esm/core/plot' import { getAnalyse, getAnalyseHorizontal, @@ -18,7 +18,7 @@ import { ChartLibraryType, ChartWrapper } from '@/views/chart/components/js/panel/types' -import { getEngine } from '@antv/g2/esm/core' + import { getColor, getGroupColor, @@ -79,14 +79,12 @@ export abstract class G2PlotChartView< O extends PickOptions = PickOptions, P extends Plot = Plot > extends AntVAbstractChartView { - protected static engine = getEngine('canvas') - /** * 根据参数构建图表对象然后返回 * @param drawOptions 图表配置参数 * @return 生成的图表对象,类型为 Plot 的子类 */ - public abstract drawChart(drawOptions: G2PlotDrawOptions

): G2PlotWrapper | P + public abstract drawChart(drawOptions: G2PlotDrawOptions

): G2PlotWrapper | P | Promise

protected configTheme(chart: Chart, options: O): O { const theme = getTheme(chart) diff --git a/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7.ts b/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7.ts index 894fd5bc76..02edfc6728 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7.ts @@ -1,4 +1,4 @@ -import { Scene } from '@antv/l7-scene' +import type { Scene } from '@antv/l7-scene' import { AntVAbstractChartView, AntVDrawOptions, @@ -7,7 +7,7 @@ import { } from '@/views/chart/components/js/panel/types' import { cloneDeep, defaultsDeep } from 'lodash-es' import { parseJson } from '@/views/chart/components/js/util' -import { ILayer } from '@antv/l7plot' +import type { ILayer } from '@antv/l7plot' import { configL7Label, configL7Tooltip, diff --git a/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7plot.ts b/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7plot.ts index aeef5f90e9..8639d8a516 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7plot.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/types/impl/l7plot.ts @@ -1,7 +1,7 @@ -import { ViewLevel } from '@antv/l7plot/dist/esm/plots/choropleth/types' -import { FeatureCollection } from '@antv/l7plot/dist/esm/plots/choropleth/types' -import { PlotOptions } from '@antv/l7plot/dist/esm/types/plot' -import { Plot as L7Plot } from '@antv/l7plot/dist/esm/core/plot' +import type { ViewLevel } from '@antv/l7plot/dist/esm/plots/choropleth/types' +import type { FeatureCollection } from '@antv/l7plot/dist/esm/plots/choropleth/types' +import type { PlotOptions } from '@antv/l7plot/dist/esm/types/plot' +import type { Plot as L7Plot } from '@antv/l7plot/dist/esm/core/plot' import { configL7Label, configL7Legend, diff --git a/core/core-frontend/src/views/chart/components/js/panel/types/impl/s2.ts b/core/core-frontend/src/views/chart/components/js/panel/types/impl/s2.ts index 00fc52bc77..5cdcd1a2ef 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/types/impl/s2.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/types/impl/s2.ts @@ -3,7 +3,7 @@ import { AntVDrawOptions, ChartLibraryType } from '@/views/chart/components/js/panel/types' -import { +import type { S2Theme, SpreadSheet, Style, diff --git a/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue b/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue index aba5f1f1b0..d0c81edb3e 100644 --- a/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue +++ b/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue @@ -225,7 +225,7 @@ const renderChart = async (view, callback?) => { await renderL7(chart, chartView as L7ChartView, callback) break case ChartLibraryType.G2_PLOT: - renderG2Plot(chart, chartView as G2PlotChartView) + await renderG2Plot(chart, chartView as G2PlotChartView) callback?.() break default: @@ -233,9 +233,9 @@ const renderChart = async (view, callback?) => { } } let myChart = null -const renderG2Plot = (chart, chartView: G2PlotChartView) => { +const renderG2Plot = async (chart, chartView: G2PlotChartView) => { myChart?.destroy() - myChart = chartView.drawChart({ + myChart = await chartView.drawChart({ chartObj: myChart, container: containerId, chart: chart, From a6ba306f4041477453a2f216113cd3dd5608afdd Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 15:04:56 +0800 Subject: [PATCH 08/15] =?UTF-8?q?build(X-Pack):=20=E5=BF=BD=E7=95=A5=20xpa?= =?UTF-8?q?ck-frontend-http/components.d.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index 72234ce10d..abbd3056e6 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 72234ce10da1176bc866f18024f2821bfbec967c +Subproject commit abbd3056e646efc0fad54ef02484e9f2c2c3b0b3 From 52d4412d0b7bbcfcbb9d9cd800ecc74a2c364645 Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 15:21:42 +0800 Subject: [PATCH 09/15] =?UTF-8?q?fix(X-Pack):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A1=AB=E6=8A=A5=E7=BC=BA=E5=A4=B1=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/DeDataFillingTaskExecutor.java | 111 ++++++++++++++++++ .../DeXpackDataFillingScheduleJob.java | 27 +++++ 2 files changed, 138 insertions(+) create mode 100644 core/core-backend/src/main/java/io/dataease/job/schedule/DeDataFillingTaskExecutor.java create mode 100644 core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackDataFillingScheduleJob.java diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeDataFillingTaskExecutor.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeDataFillingTaskExecutor.java new file mode 100644 index 0000000000..b2f999244e --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeDataFillingTaskExecutor.java @@ -0,0 +1,111 @@ +package io.dataease.job.schedule; + +import io.dataease.commons.utils.CronUtils; +import io.dataease.license.config.XpackInteract; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.TriggerKey; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +@Component("deDataFillingTaskExecutor") +public class DeDataFillingTaskExecutor { + + protected static final String IS_TEMP_TASK = "isTempTask"; + protected static final String IS_RETRY_TASK = "isRetryTask"; + + private static final String JOB_GROUP = "REPORT_TASK"; + private static final String RETRY_JOB_GROUP = "RETRY_REPORT_TASK"; + private static final String TEMP_JOB_GROUP = "TEMP_REPORT_TASK"; + + @Resource + private ScheduleManager scheduleManager; + + @XpackInteract(value = "dataFillingTaskExecutor", replace = true) + public boolean execute(Map taskData) { + return false; + } + + @XpackInteract(value = "dataFillingTaskExecutor", replace = true) + public void init() { + } + + public void addOrUpdateTask(Long taskId, String cron, Long startTime, Long endTime) { + if (CronUtils.taskExpire(endTime)) { + return; + } + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, JOB_GROUP); + TriggerKey triggerKey = new TriggerKey(key, JOB_GROUP); + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("taskId", taskId); + jobDataMap.put(IS_TEMP_TASK, false); + Date end = null; + if (ObjectUtils.isNotEmpty(endTime)) end = new Date(endTime); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackDataFillingScheduleJob.class, cron, startTime == null ? null : new Date(startTime), end, jobDataMap); + } + + public void addRetryTask(Long taskId, Integer retryLimit, Integer retryInterval) { + long saltTime = 3000L; + long interval = retryInterval == null ? 5L : retryInterval; + long intervalMill = interval * 60000L; + long now = System.currentTimeMillis(); + String cron = "0 */" + interval + " * * * ?"; + long endTime = (retryLimit + 1) * intervalMill + now - saltTime; + String key = taskId.toString(); + if (CronUtils.taskExpire(endTime)) { + return; + } + JobKey jobKey = new JobKey(key, RETRY_JOB_GROUP); + TriggerKey triggerKey = new TriggerKey(key, RETRY_JOB_GROUP); + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("taskId", taskId); + jobDataMap.put(IS_RETRY_TASK, true); + Date end = null; + if (ObjectUtils.isNotEmpty(endTime)) end = new Date(endTime); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackDataFillingScheduleJob.class, cron, new Date(now), end, jobDataMap); + } + + public boolean fireNow(Long taskId) throws Exception { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, JOB_GROUP); + if (scheduleManager.exist(jobKey)) { + scheduleManager.fireNow(jobKey); + return true; + } + return false; + } + + public void addTempTask(Long taskId, Long startTime) { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, TEMP_JOB_GROUP); + TriggerKey triggerKey = new TriggerKey(key, TEMP_JOB_GROUP); + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put(IS_TEMP_TASK, true); + String cron = CronUtils.tempCron(); + jobDataMap.put("taskId", taskId); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, DeXpackDataFillingScheduleJob.class, cron, new Date(startTime), null, jobDataMap); + } + + public void removeTask(Long taskId, boolean isTemp) { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, isTemp ? TEMP_JOB_GROUP : JOB_GROUP); + TriggerKey triggerKey = new TriggerKey(key, isTemp ? TEMP_JOB_GROUP : JOB_GROUP); + scheduleManager.removeJob(jobKey, triggerKey); + } + + public void removeRetryTask(Long taskId) { + String key = taskId.toString(); + JobKey jobKey = new JobKey(key, RETRY_JOB_GROUP); + TriggerKey triggerKey = new TriggerKey(key, RETRY_JOB_GROUP); + scheduleManager.removeJob(jobKey, triggerKey); + } + + public void clearRetryTask() throws Exception { + scheduleManager.clearByGroup(RETRY_JOB_GROUP); + } +} diff --git a/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackDataFillingScheduleJob.java b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackDataFillingScheduleJob.java new file mode 100644 index 0000000000..bc5e69f15b --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/job/schedule/DeXpackDataFillingScheduleJob.java @@ -0,0 +1,27 @@ +package io.dataease.job.schedule; + +import io.dataease.license.utils.LicenseUtil; +import io.dataease.utils.CommonBeanFactory; +import org.quartz.*; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Component +public class DeXpackDataFillingScheduleJob implements Job { + + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + Trigger trigger = jobExecutionContext.getTrigger(); + JobKey jobKey = trigger.getJobKey(); + JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); + DeDataFillingTaskExecutor deTaskExecutor = CommonBeanFactory.getBean(DeDataFillingTaskExecutor.class); + assert deTaskExecutor != null; + LicenseUtil.validate(); + boolean taskLoaded = deTaskExecutor.execute(jobDataMap); + if (!taskLoaded) { + Objects.requireNonNull(CommonBeanFactory.getBean(ScheduleManager.class)).removeJob(jobKey, trigger.getKey()); + } + } +} From 85c3b4c710964d99ab5665ebf9ee7613e7031562 Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 16:15:25 +0800 Subject: [PATCH 10/15] =?UTF-8?q?fix(X-Pack):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A1=AB=E6=8A=A5=E7=BC=BA=E5=A4=B1flyway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql | 3 +++ .../src/main/resources/db/migration/V2.10__ddl.sql | 3 +++ 2 files changed, 6 insertions(+) diff --git a/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql b/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql index e081ee1bb5..e47e7c76d2 100644 --- a/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql +++ b/core/core-backend/src/main/resources/db/desktop/V2.10__ddl.sql @@ -1,3 +1,6 @@ BEGIN; INSERT INTO `core_sys_startup_job` VALUES ('chartFilterDynamic', 'chartFilterDynamic', 'ready'); COMMIT; + +alter table `core_datasource` + add `enable_data_fill` tinyint default 0 null comment '启用数据填报功能'; diff --git a/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql index e081ee1bb5..e47e7c76d2 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.10__ddl.sql @@ -1,3 +1,6 @@ BEGIN; INSERT INTO `core_sys_startup_job` VALUES ('chartFilterDynamic', 'chartFilterDynamic', 'ready'); COMMIT; + +alter table `core_datasource` + add `enable_data_fill` tinyint default 0 null comment '启用数据填报功能'; From 2aa79208142058921238c093f01dd85a2a5e3c1b Mon Sep 17 00:00:00 2001 From: xuwei-fit2cloud Date: Wed, 7 Aug 2024 16:15:37 +0800 Subject: [PATCH 11/15] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E8=84=9A=E6=9C=AC=E5=9C=A8=E6=97=A7=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E4=B8=8A=E7=9A=84=E9=80=BB=E8=BE=91=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/install.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/installer/install.sh b/installer/install.sh index 790b1a46b8..e82402dd8e 100644 --- a/installer/install.sh +++ b/installer/install.sh @@ -32,6 +32,11 @@ function check_and_prepare_env_params() { cd ${CURRENT_DIR} if [ -f /usr/bin/dectl ]; then + v2_version=$(dectl version | head -n 2 | grep "v2.") + if [[ -z $v2_version ]];then + echo "系统当前版本不是 DataEase v2 版本系列,不支持升级到 v2,请检查离线包版本。" + exit 1; + fi # 获取已安装的 DataEase 的运行目录 DE_BASE=$(grep "^DE_BASE=" /usr/bin/dectl | cut -d'=' -f2) DE_BASE_OLD=$DE_BASE @@ -46,12 +51,6 @@ function check_and_prepare_env_params() { fi INSTALL_TYPE='upgrade' - - v2_version=$(dectl version | head -n 2 | grep "v2.") - if [[ -z $v2_version ]];then - echo "系统当前版本不是 DataEase v2 版本系列,不支持升级到 v2,请检查离线包版本。" - exit 1; - fi fi set -a From 692266c5eed9810fc70846fcf9c14f41ddfbfb0f Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 7 Aug 2024 16:21:55 +0800 Subject: [PATCH 12/15] =?UTF-8?q?fix(X-Pack):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E4=B8=8D=E5=B1=95=E7=A4=BA"?= =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A1=AB=E6=8A=A5"tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/workbranch/ShortcutTable.vue | 10 ++++++++-- de-xpack | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/core-frontend/src/views/workbranch/ShortcutTable.vue b/core/core-frontend/src/views/workbranch/ShortcutTable.vue index f93c122177..35ebfa5ed4 100644 --- a/core/core-frontend/src/views/workbranch/ShortcutTable.vue +++ b/core/core-frontend/src/views/workbranch/ShortcutTable.vue @@ -140,6 +140,10 @@ const tablePaneList = ref([ { title: t('visualization.share_out'), name: 'share', disabled: false } ]) +const loadedDataFilling = data => { + tablePaneList.value.push(data) +} + const busiAuthList = getBusiListWithPermission() onMounted(() => { !!busiAuthList.length && @@ -264,8 +268,6 @@ const getEmptyDesc = (): string => { - - @@ -422,6 +424,10 @@ const getEmptyDesc = (): string => { + Date: Wed, 7 Aug 2024 16:43:12 +0800 Subject: [PATCH 13/15] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=20X-Pack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index a8f11c1db8..4d92c0a241 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit a8f11c1db8c0cdac9d04f1ed30c725736660dcd4 +Subproject commit 4d92c0a241e569ff4060545584bd2d7d56c79016 From d75cb483b9254a1122223676a69e9733d6a5f27a Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Wed, 7 Aug 2024 17:04:40 +0800 Subject: [PATCH 14/15] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E9=9B=86):=20?= =?UTF-8?q?=E5=B7=B2=E6=9C=89=E6=96=B0=E5=BB=BA=E8=AE=A1=E7=AE=97=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=85=B3=E8=81=94=EF=BC=8C=E5=AD=97=E6=AE=B5=E5=85=A8=E9=80=89?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=88=B7=E6=96=B0=E6=95=B0=E6=8D=AE=E4=BC=9A?= =?UTF-8?q?=E6=8A=A5=E9=94=99=20#11263?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/dataset/form/DatasetUnion.vue | 90 +++++++++---------- .../visualized/data/dataset/form/index.vue | 54 ++++++----- 2 files changed, 75 insertions(+), 69 deletions(-) diff --git a/core/core-frontend/src/views/visualized/data/dataset/form/DatasetUnion.vue b/core/core-frontend/src/views/visualized/data/dataset/form/DatasetUnion.vue index 2d3858709f..83bf8d4c43 100644 --- a/core/core-frontend/src/views/visualized/data/dataset/form/DatasetUnion.vue +++ b/core/core-frontend/src/views/visualized/data/dataset/form/DatasetUnion.vue @@ -363,34 +363,32 @@ const confirmEditUnion = () => { }, []) if (!!idArr.length) { - ElMessageBox.confirm( - `${t('data_set.field')}${allfields.value + ElMessageBox.confirm('字段选择', { + confirmButtonText: t('dataset.confirm'), + cancelButtonText: t('common.cancel'), + showCancelButton: true, + tip: `${t('data_set.field')}: ${allfields.value .filter(ele => [...new Set(idArr)].includes(ele.id) && ele.extField !== 2) .map(ele => ele.name) - .join(',')}${t('data_set.want_to_continue')}`, - { - confirmButtonText: t('dataset.confirm'), - cancelButtonText: t('common.cancel'), - showCancelButton: true, - confirmButtonType: 'danger', - type: 'warning', - autofocus: false, - showClose: false, - callback: (action: Action) => { - if (action === 'confirm') { - delUpdateDsFields(currentNode.value.id, state.nodeList) - const [fir] = state.nodeList - if (fir.isShadow) { - delete fir.isShadow - } - closeEditUnion() - nextTick(() => { - emits('updateAllfields') - }) + .join(',')}, 未被勾选, 与其相关的计算字段将被删除,确认删除?`, + confirmButtonType: 'danger', + type: 'warning', + autofocus: false, + showClose: false, + callback: (action: Action) => { + if (action === 'confirm') { + delUpdateDsFields(currentNode.value.id, state.nodeList) + const [fir] = state.nodeList + if (fir.isShadow) { + delete fir.isShadow } + closeEditUnion() + nextTick(() => { + emits('updateAllfields') + }) } } - ) + }) return } } @@ -449,32 +447,26 @@ const handleCommand = (ele, command) => { return pre }, []) fakeDelId = [] - if (!!idArr.length) { - ElMessageBox.confirm( - `${t('field.want_to_continue')}${allfields.value - .filter(ele => [...new Set(idArr)].includes(ele.id) && ele.extField !== 2) - .map(ele => ele.name) - .join(',')}${t('data_set.want_to_continue')}`, - { - confirmButtonText: t('dataset.confirm'), - cancelButtonText: t('common.cancel'), - showCancelButton: true, - confirmButtonType: 'danger', - type: 'warning', - autofocus: false, - showClose: false, - callback: (action: Action) => { - if (action === 'confirm') { - delNode(ele.id, state.nodeList) - nextTick(() => { - emits('addComplete') - emits('updateAllfields') - }) - } + ElMessageBox.confirm(`确定要删除 ${ele.tableName} 吗`, { + confirmButtonText: t('dataset.confirm'), + cancelButtonText: t('common.cancel'), + showCancelButton: true, + tip: '删除后,被关联的表或sql片段将被删除,与其相关的计算字段也将被删除。', + confirmButtonType: 'danger', + type: 'warning', + autofocus: false, + showClose: false, + callback: (action: Action) => { + if (action === 'confirm') { + delNode(ele.id, state.nodeList) + nextTick(() => { + emits('addComplete') + emits('updateAllfields') + }) } } - ) + }) return } } @@ -531,6 +523,10 @@ const dfsNodeFieldBack = (list, { originName, datasetTableId }) => { }) } +const dfsNodeFieldBackReal = ele => { + dfsNodeFieldBack(state.nodeList, ele) +} + const menuList = [ { svgName: 'icon_text-box_outlined', @@ -1014,7 +1010,7 @@ defineExpose({ getNodeList, setStateBack, notConfirm, - dfsNodeFieldBack, + dfsNodeFieldBackReal, initState, setChangeStatus, crossDatasources diff --git a/core/core-frontend/src/views/visualized/data/dataset/form/index.vue b/core/core-frontend/src/views/visualized/data/dataset/form/index.vue index b8fea14478..075edd5641 100644 --- a/core/core-frontend/src/views/visualized/data/dataset/form/index.vue +++ b/core/core-frontend/src/views/visualized/data/dataset/form/index.vue @@ -467,8 +467,20 @@ const delFieldByIdFake = (arr, fakeAllfields) => { } const deleteField = item => { - ElMessageBox.confirm(t('dataset.confirm_delete'), { + let tip = '' + const idArr = allfields.value.reduce((pre, next) => { + if (next.extField !== 2) return pre + const idMap = next.originName.match(/\[(.+?)\]/g) || [] + const result = idMap.map(itm => { + return itm.slice(1, -1) + }) + pre = [...result, ...pre] + return pre + }, []) + tip = idArr.includes(item.id) ? `如果该字段被删除,与其相关的计算字段将被删除,确认删除?` : '' + ElMessageBox.confirm(`确认删除字段 ${item.name} 吗`, { confirmButtonText: t('dataset.confirm'), + tip, cancelButtonText: t('common.cancel'), showCancelButton: true, confirmButtonType: 'danger', @@ -478,7 +490,7 @@ const deleteField = item => { callback: (action: Action) => { if (action === 'confirm') { delFieldById([item.id]) - datasetDrag.value.dfsNodeFieldBack(datasetDrag.value.getNodeList(), item) + datasetDrag.value.dfsNodeFieldBackReal(item) ElMessage({ message: t('chart.delete_success'), type: 'success' @@ -855,30 +867,28 @@ const confirmEditUnion = () => { return pre }, []) - ElMessageBox.confirm( - `${t('data_set.field')}${allfields.value + ElMessageBox.confirm('字段选择', { + confirmButtonText: t('dataset.confirm'), + cancelButtonText: t('common.cancel'), + showCancelButton: true, + tip: `${t('data_set.field')}: ${allfields.value .filter(ele => [...new Set(idArr)].includes(ele.id) && ele.extField !== 2) .map(ele => ele.name) - .join(',')}${t('data_set.want_to_continue')}`, - { - confirmButtonText: t('dataset.confirm'), - cancelButtonText: t('common.cancel'), - showCancelButton: true, - confirmButtonType: 'danger', - type: 'warning', - autofocus: false, - showClose: false, - callback: (action: Action) => { - if (action === 'confirm') { - datasetDrag.value.setStateBack(top, bottom) - setFieldAll() - editUnion.value = false - addComplete() - datasetDrag.value.setChangeStatus(to, from) - } + .join(',')}, 未被勾选, 与其相关的计算字段将被删除,确认删除?`, + confirmButtonType: 'danger', + type: 'warning', + autofocus: false, + showClose: false, + callback: (action: Action) => { + if (action === 'confirm') { + datasetDrag.value.setStateBack(top, bottom) + setFieldAll() + editUnion.value = false + addComplete() + datasetDrag.value.setChangeStatus(to, from) } } - ) + }) return } From 2203e8b217732029473860e32e47068917c5bae3 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Wed, 7 Aug 2024 17:16:01 +0800 Subject: [PATCH 15/15] =?UTF-8?q?fix(=E5=B5=8C=E5=85=A5=E5=BC=8F):=20?= =?UTF-8?q?=E5=B5=8C=E5=85=A5=E5=BC=8F=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/src/pages/panel/ViewWrapper.vue | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/core-frontend/src/pages/panel/ViewWrapper.vue b/core/core-frontend/src/pages/panel/ViewWrapper.vue index daf158ae12..e905f83b82 100644 --- a/core/core-frontend/src/pages/panel/ViewWrapper.vue +++ b/core/core-frontend/src/pages/panel/ViewWrapper.vue @@ -113,8 +113,15 @@ onBeforeMount(async () => { } ) }) -const userViewEnlargeOpen = () => { - userViewEnlargeRef.value.dialogInit(state.canvasStylePreview, viewInfo.value, config.value) +const userViewEnlargeOpen = (a, b) => { + console.log(a, b, 'item') + + userViewEnlargeRef.value.dialogInit( + state.canvasStylePreview, + viewInfo.value, + config.value, + 'details' + ) } const onPointClick = param => {