forked from github/dataease
refactor(工作台): 智能助手增加对话框放大功能
This commit is contained in:
parent
8c28825b89
commit
db4af7c393
@ -1,11 +1,14 @@
|
||||
package io.dataease.ai.service;
|
||||
|
||||
import io.dataease.api.ai.AiComponentApi;
|
||||
import io.dataease.commons.utils.UrlTestUtils;
|
||||
import io.dataease.system.manage.SysParameterManage;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -21,6 +24,11 @@ public class AiBaseService implements AiComponentApi {
|
||||
@Override
|
||||
public Map<String, String> findTargetUrl() {
|
||||
Map<String, String> templateParams = sysParameterManage.groupVal("ai.");
|
||||
return templateParams;
|
||||
if (templateParams != null && StringUtils.isNotEmpty(templateParams.get("ai.baseUrl")) && UrlTestUtils.isURLAvailable(templateParams.get("ai.baseUrl"))) {
|
||||
return templateParams;
|
||||
|
||||
} else {
|
||||
return new HashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
package io.dataease.commons.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
public class UrlTestUtils {
|
||||
|
||||
public static boolean testUrlWithTimeOut(String urlString, int timeOutMillSeconds) {
|
||||
try {
|
||||
URL url = new URL(urlString);
|
||||
URLConnection co = url.openConnection();
|
||||
co.setConnectTimeout(timeOutMillSeconds);
|
||||
co.connect();
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isURLAvailable(String urlString) {
|
||||
try {
|
||||
URL url = new URL(urlString);
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("HEAD");
|
||||
int responseCode = connection.getResponseCode();
|
||||
return responseCode == HttpURLConnection.HTTP_OK;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
1
core/core-frontend/src/assets/svg/dv-ai-window-max.svg
Normal file
1
core/core-frontend/src/assets/svg/dv-ai-window-max.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg style="vertical-align: middle;overflow: hidden;" t="1710214539671" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" fill="rgb(100, 106, 115)" width="16" height="16"><path d="M85.333333 384c25.6 0 42.666667-17.066667 42.666667-42.666667V128h213.333333c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666666H85.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666v256c0 25.6 17.066667 42.666667 42.666666 42.666667zM938.666667 640c-25.6 0-42.666667 17.066667-42.666667 42.666667v213.333333h-213.333333c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666666h256c25.6 0 42.666667-17.066667 42.666666-42.666666v-256c0-25.6-17.066667-42.666667-42.666666-42.666667zM601.6 401.066667c4.266667 8.533333 12.8 17.066667 21.333333 21.333333 4.266667 4.266667 12.8 4.266667 17.066667 4.266667h256c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667h-153.6l226.133333-226.133333c17.066667-17.066667 17.066667-42.666667 0-59.733333-8.533333-8.533333-17.066667-12.8-29.866666-12.8s-21.333333 4.266667-29.866667 12.8L682.666667 281.6V128c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v256c0 4.266667 0 12.8 4.266667 17.066667zM115.2 968.533333L341.333333 742.4V896c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-256c0-4.266667 0-12.8-4.266667-17.066667-4.266667-8.533333-12.8-17.066667-21.333333-21.333333-4.266667-4.266667-12.8-4.266667-17.066667-4.266667H128c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h153.6l-226.133333 226.133333c-17.066667 17.066667-17.066667 42.666667 0 59.733333s42.666667 17.066667 59.733333 0z" p-id="10189"></path></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
core/core-frontend/src/assets/svg/dv-ai-window-min.svg
Normal file
1
core/core-frontend/src/assets/svg/dv-ai-window-min.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1710150885892" style="vertical-align: middle;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" fill="rgb(100, 106, 115)" width="16" height="16"><path d="M85.333333 384c25.6 0 42.666667-17.066667 42.666667-42.666667V128h213.333333c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666666H85.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666v256c0 25.6 17.066667 42.666667 42.666666 42.666667zM938.666667 640c-25.6 0-42.666667 17.066667-42.666667 42.666667v213.333333h-213.333333c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666666h256c25.6 0 42.666667-17.066667 42.666666-42.666666v-256c0-25.6-17.066667-42.666667-42.666666-42.666667zM977.066667 68.266667c-4.266667-8.533333-12.8-17.066667-21.333334-21.333334-4.266667-4.266667-12.8-4.266667-17.066666-4.266666h-256c-25.6 0-42.666667 17.066667-42.666667 42.666666s17.066667 42.666667 42.666667 42.666667h153.6l-226.133334 226.133333c-17.066667 17.066667-17.066667 42.666667 0 59.733334 8.533333 8.533333 17.066667 12.8 29.866667 12.8s21.333333-4.266667 29.866667-12.8L896 187.733333V341.333333c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666666-42.666667V85.333333c0-4.266667 0-12.8-4.266666-17.066666zM354.133333 610.133333L128 836.266667V682.666667c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666666 42.666667v256c0 4.266667 0 12.8 4.266666 17.066666 4.266667 8.533333 12.8 17.066667 21.333334 21.333334 4.266667 4.266667 12.8 4.266667 17.066666 4.266666h256c25.6 0 42.666667-17.066667 42.666667-42.666666s-17.066667-42.666667-42.666667-42.666667H187.733333l226.133334-226.133333c17.066667-17.066667 17.066667-42.666667 0-59.733334s-42.666667-17.066667-59.733334 0z" p-id="8645"></path></svg>
|
After Width: | Height: | Size: 1.8 KiB |
@ -12,6 +12,12 @@ defineProps({
|
||||
}
|
||||
})
|
||||
|
||||
const sizeChange = () => {
|
||||
sizeState.value = sizeState.value === 'min' ? 'max' : 'min'
|
||||
}
|
||||
|
||||
const sizeState = ref('min')
|
||||
|
||||
onMounted(() => {
|
||||
useEmitt({
|
||||
name: 'aiComponentChange',
|
||||
@ -22,9 +28,19 @@ onMounted(() => {
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<div class="ai-main" :class="{ 'ai-main-active': aiDialogShow }">
|
||||
<div
|
||||
class="ai-main"
|
||||
:class="{
|
||||
'ai-main-active': aiDialogShow,
|
||||
'ai-main-active-max': aiDialogShow && sizeState === 'max',
|
||||
'ai-main-active-min': aiDialogShow && sizeState === 'min'
|
||||
}"
|
||||
>
|
||||
<div class="ai-content">
|
||||
<el-icon class="close" @click="closeAi"><Close /></el-icon>
|
||||
<el-icon class="size-class" @click="sizeChange"
|
||||
><Icon :name="'dv-ai-window-' + sizeState"></Icon
|
||||
></el-icon>
|
||||
<iframe :src="baseUrl" style="width: 100%; height: 100%" frameborder="0" allow="microphone">
|
||||
</iframe>
|
||||
</div>
|
||||
@ -36,12 +52,9 @@ onMounted(() => {
|
||||
position: fixed;
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
height: 0;
|
||||
bottom: 48px;
|
||||
right: 36px;
|
||||
height: 0;
|
||||
width: 25%;
|
||||
min-width: 350px;
|
||||
max-width: 420px;
|
||||
transition: 0.2s;
|
||||
z-index: 10;
|
||||
.ai-content {
|
||||
@ -53,14 +66,37 @@ onMounted(() => {
|
||||
right: 12px;
|
||||
top: 12px;
|
||||
font-size: 24px;
|
||||
color: #1a1a1a;
|
||||
color: rgb(100, 106, 115);
|
||||
cursor: pointer;
|
||||
}
|
||||
.size-class {
|
||||
position: absolute;
|
||||
right: 48px;
|
||||
font-size: 16px;
|
||||
top: 17px;
|
||||
color: rgb(100, 106, 115);
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ai-main-active {
|
||||
border: 1px solid #d9d9d9;
|
||||
}
|
||||
.ai-main-active-min {
|
||||
min-width: 350px;
|
||||
max-width: 420px;
|
||||
height: 50%;
|
||||
width: 25%;
|
||||
min-height: 450px;
|
||||
max-height: 600px;
|
||||
bottom: 48px;
|
||||
right: 36px;
|
||||
}
|
||||
|
||||
.ai-main-active-max {
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
}
|
||||
</style>
|
||||
|
Loading…
Reference in New Issue
Block a user