refactor(工作台): 智能助手增加对话框放大功能

This commit is contained in:
wangjiahao 2024-04-01 18:11:16 +08:00
parent 8c28825b89
commit db4af7c393
5 changed files with 87 additions and 7 deletions

View File

@ -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<>();
}
}
}

View File

@ -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;
}
}
}

View 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

View 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

View File

@ -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>