diff --git a/core/backend/src/main/java/io/dataease/controller/ai/AiComponentController.java b/core/backend/src/main/java/io/dataease/controller/ai/AiComponentController.java new file mode 100644 index 0000000000..cb4ca0f23c --- /dev/null +++ b/core/backend/src/main/java/io/dataease/controller/ai/AiComponentController.java @@ -0,0 +1,26 @@ +package io.dataease.controller.ai; + +import io.dataease.service.ai.AiBaseService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @author : WangJiaHao + * @date : 2024/3/27 09:44 + */ + +@RestController +@RequestMapping("aiBase") +public class AiComponentController { + @Resource + private AiBaseService aiBaseService; + + @GetMapping("findTargetUrl") + Map findTargetUrl(){ + return aiBaseService.findTargetUrl(); + } +} diff --git a/core/backend/src/main/java/io/dataease/service/ai/AiBaseService.java b/core/backend/src/main/java/io/dataease/service/ai/AiBaseService.java new file mode 100644 index 0000000000..e6b02a8cf7 --- /dev/null +++ b/core/backend/src/main/java/io/dataease/service/ai/AiBaseService.java @@ -0,0 +1,32 @@ +package io.dataease.service.ai; + +import io.dataease.service.system.SystemParameterService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @author : WangJiaHao + * @date : 2024/3/27 09:47 + */ +@Service +public class AiBaseService { + @Resource + private SystemParameterService parameterService; + + public Map findTargetUrl() { + String baseUrl = parameterService.getValue("ai.baseUrl"); + Map result = new HashMap<>(); + + if(StringUtils.isNotEmpty(baseUrl)){ + result.put("ai.baseUrl",baseUrl); + + } + return result; + } +} diff --git a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 27d0fe943e..165a674a7a 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -1039,6 +1039,18 @@ public class ChartViewService { || StringUtils.containsIgnoreCase(view.getType(), "table-pivot")) { // 动态阈值 dynamicAssistFields = getDynamicThresholdFields(view); + // 明细表非数据列字段要加进来 + if (StringUtils.containsIgnoreCase(view.getType(), "table-info")) { + Set fieldIds = xAxis.stream().map(ChartViewFieldDTO::getId).collect(Collectors.toSet()); + List finalXAxis = xAxis; + dynamicAssistFields.forEach(i -> { + if (!fieldIds.contains(i.getFieldId())) { + ChartViewFieldDTO fieldDTO = new ChartViewFieldDTO(); + BeanUtils.copyBean(fieldDTO, i.getCurField()); + finalXAxis.add(fieldDTO); + } + }); + } assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis); } @@ -1289,6 +1301,9 @@ public class ChartViewService { } if (CollectionUtils.isNotEmpty(assistFields)) { + if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { + datasourceRequest.setQuery(querySql); + } datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields, ds)); logger.info(datasourceAssistRequest.getQuery()); assistData = datasourceProvider.getData(datasourceAssistRequest); @@ -2407,7 +2422,7 @@ public class ChartViewService { List conditions = gson.fromJson(itemConditions.toJSONString(), new TypeToken>() { }.getType()); for (ChartSeniorThresholdDTO condition : conditions) { - if (StringUtils.equalsIgnoreCase(condition.getField(), "0")) { + if (StringUtils.equalsAnyIgnoreCase(condition.getField(), "0", "2")) { continue; } diff --git a/core/backend/src/main/resources/db/migration/V62__1.18.18.sql b/core/backend/src/main/resources/db/migration/V62__1.18.18.sql index 0deb306377..30befd3d02 100644 --- a/core/backend/src/main/resources/db/migration/V62__1.18.18.sql +++ b/core/backend/src/main/resources/db/migration/V62__1.18.18.sql @@ -15,4 +15,6 @@ CREATE TABLE `panel_link_ticket` AUTO_INCREMENT = 1; ALTER TABLE `panel_link_mapping` - ADD COLUMN `require_ticket` tinyint(1) NOT NULL DEFAULT 0 AFTER `uuid`; \ No newline at end of file + ADD COLUMN `require_ticket` tinyint(1) NOT NULL DEFAULT 0 AFTER `uuid`; + +INSERT INTO `system_parameter` (`param_key`, `param_value`, `type`, `sort`) VALUES ('ai.baseUrl', 'https://maxkb.fit2cloud.com/ui/chat/5baa787163381fa2', 'text', 100); \ No newline at end of file diff --git a/core/frontend/src/api/ai/aiComponent.js b/core/frontend/src/api/ai/aiComponent.js new file mode 100644 index 0000000000..9c39155b8f --- /dev/null +++ b/core/frontend/src/api/ai/aiComponent.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +export async function findBaseParams() { + return request({ + url: '/aiBase/findTargetUrl', + method: 'get', + loading: false + }) +} + diff --git a/core/frontend/src/components/canvas/customComponent/UserView.vue b/core/frontend/src/components/canvas/customComponent/UserView.vue index 904fe21254..a577b81a8d 100644 --- a/core/frontend/src/components/canvas/customComponent/UserView.vue +++ b/core/frontend/src/components/canvas/customComponent/UserView.vue @@ -354,6 +354,7 @@ export default { }, data() { return { + unReadyList: [], dialogLoading: false, imageDownloading: false, innerRefreshTimer: null, @@ -653,6 +654,7 @@ export default { }, mounted() { bus.$on('tab-canvas-change', this.tabSwitch) + bus.$on('resolve-wait-condition', this.resolveWaitCondition) this.bindPluginEvent() }, @@ -674,15 +676,16 @@ export default { bus.$off('onThemeAttrChange', this.optFromBatchSingleProp) bus.$off('clear_panel_linkage', this.clearPanelLinkage) bus.$off('tab-canvas-change', this.tabSwitch) + bus.$off('resolve-wait-condition', this.resolveWaitCondition) }, created() { this.refId = uuid.v1 if (this.element && this.element.propValue && this.element.propValue.viewId) { const group = this.groupFilter(this.filters) - const unReadyList = group.unReady + this.unReadyList = group.unReady const readyList = group.ready - if (unReadyList.length) { - Promise.all(this.filters.filter(f => f instanceof Promise)).then(fList => { + if (this.unReadyList.length) { + Promise.all(this.unReadyList.filter(f => f instanceof Promise)).then(fList => { this.filter.filter = readyList.concat(fList) this.getData(this.element.propValue.viewId, false) }) @@ -692,6 +695,11 @@ export default { } }, methods: { + resolveWaitCondition(p) { + this.unReadyList.filter(f => f instanceof Promise && f.componentId === p.componentId).map(f => { + f.cacheObj.cb(p) + }) + }, groupFilter(filters) { const result = { ready: [], diff --git a/core/frontend/src/components/widget/deWidget/DeDate.vue b/core/frontend/src/components/widget/deWidget/DeDate.vue index 483daba105..aed842e12e 100644 --- a/core/frontend/src/components/widget/deWidget/DeDate.vue +++ b/core/frontend/src/components/widget/deWidget/DeDate.vue @@ -67,8 +67,8 @@ +