Commit 9ee4fd91 by Shucai Chen

智能客服分析界面开发

parent 2a8229c8
...@@ -88,6 +88,8 @@ public interface ErrorCodeConstants { ...@@ -88,6 +88,8 @@ public interface ErrorCodeConstants {
ErrorCode FASTGPT_REF_ERROR = new ErrorCode(1_022_009_005, "未找到知识库引用"); ErrorCode FASTGPT_REF_ERROR = new ErrorCode(1_022_009_005, "未找到知识库引用");
ErrorCode FASTGPT_DETAIL_ERROR = new ErrorCode(1_022_009_005, "未找到知识库详情"); ErrorCode FASTGPT_DETAIL_ERROR = new ErrorCode(1_022_009_005, "未找到知识库详情");
ErrorCode FASTGPT_CONFIG_ERROR = new ErrorCode(1_022_009_006, "FastGPT 知识库配置错误,未找到对应的知识库");
ErrorCode FASTGPT_UPLOAD_FAILED = new ErrorCode(1_022_009_007, "上传至 FastGPT 知识库失败");
ErrorCode AGENT_POLICY_NOTIFY_NOT_EXISTS = new ErrorCode(1_043_001_001, "操作失败,找不到该记录"); ErrorCode AGENT_POLICY_NOTIFY_NOT_EXISTS = new ErrorCode(1_043_001_001, "操作失败,找不到该记录");
} }
...@@ -144,4 +144,27 @@ public class AiChatAnalysisController { ...@@ -144,4 +144,27 @@ public class AiChatAnalysisController {
return success(true); return success(true);
} }
@PostMapping("/upload-to-fastgpt")
@Operation(summary = "上传对话总结至 FastGPT 测试知识库")
public CommonResult<Boolean> uploadToFastGpt(
@Valid @RequestBody AiChatSummaryUploadReqVO reqVO) {
chatAnalysisService.uploadToFastGpt(reqVO);
return success(true);
}
@PostMapping("/upload-to-production-fastgpt")
@Operation(summary = "上传对话总结至 FastGPT 正式知识库(测试通过后调用)")
public CommonResult<Boolean> uploadToProductionFastGpt(
@Valid @RequestBody AiChatSummaryUploadReqVO reqVO) {
chatAnalysisService.uploadToProductionFastGpt(reqVO);
return success(true);
}
@PostMapping("/test-fastgpt")
@Operation(summary = "测试 FastGPT 知识库连接")
public CommonResult<String> testFastGpt(@Valid @RequestBody AiChatTestFastGptReqVO reqVO) {
String result = chatAnalysisService.testFastGpt(reqVO.getQuestion(), reqVO.getCategory());
return success(result);
}
} }
...@@ -4,6 +4,8 @@ import com.fhs.core.trans.vo.VO; ...@@ -4,6 +4,8 @@ import com.fhs.core.trans.vo.VO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 对话分析记录 Response VO") @Schema(description = "管理后台 - 对话分析记录 Response VO")
@Data @Data
public class AiChatSummaryRespVO implements VO { public class AiChatSummaryRespVO implements VO {
...@@ -21,4 +23,16 @@ public class AiChatSummaryRespVO implements VO { ...@@ -21,4 +23,16 @@ public class AiChatSummaryRespVO implements VO {
@Schema(description = "状态", example = "0") @Schema(description = "状态", example = "0")
private Integer status; private Integer status;
@Schema(description = "分析时间")
private LocalDateTime summaryTime;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "修改时间(测试通过时间)")
private LocalDateTime updateTime;
@Schema(description = "处理人昵称")
private String modifierName;
} }
package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.analysis;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 对话分析总结上传至 FastGPT 知识库 Request VO")
@Data
public class AiChatSummaryUploadReqVO {
@Schema(description = "总结记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "总结记录编号不能为空")
private Long id;
@Schema(description = "知识库标题(用户问题)", requiredMode = Schema.RequiredMode.REQUIRED, example = "公租房申请条件是什么")
@NotBlank(message = "知识库标题不能为空")
private String kbTitle;
@Schema(description = "知识库正文内容(AI 回答)", requiredMode = Schema.RequiredMode.REQUIRED, example = "公租房申请需要满足以下条件...")
@NotBlank(message = "知识库正文内容不能为空")
private String kbContent;
@Schema(description = "分类(公租房/长租房)", requiredMode = Schema.RequiredMode.REQUIRED, example = "公租房")
@NotBlank(message = "分类不能为空")
private String category;
}
...@@ -52,4 +52,9 @@ public class AiChatSummaryDO extends BaseDO { ...@@ -52,4 +52,9 @@ public class AiChatSummaryDO extends BaseDO {
private Integer status; private Integer status;
/**
* 处理人昵称(测试通过时的操作人)
*/
private String modifierName;
} }
...@@ -94,7 +94,7 @@ public interface AiKnowledgeDocumentMapper extends BaseMapperX<AiKnowledgeDocume ...@@ -94,7 +94,7 @@ public interface AiKnowledgeDocumentMapper extends BaseMapperX<AiKnowledgeDocume
.in(AiKnowledgeDocumentDO::getId, ids)); .in(AiKnowledgeDocumentDO::getId, ids));
} }
@Select("SELECT COALESCE(SUM(content_length), 0) FROM ai_knowledge_document WHERE creator = #{userId} AND is_dir = 0 AND knowledge_id = 6 AND deleted = 0") @Select("SELECT COALESCE(SUM(content_length), 0) FROM ai_knowledge_document WHERE creator = #{userId} AND is_dir = 0 AND deleted = 0")
Long selectCountKBSize(Long userId); Long selectCountKBSize(Long userId);
default List<AiKnowledgeDocumentDO> selectListByParentId(Long id) { default List<AiKnowledgeDocumentDO> selectListByParentId(Long id) {
......
...@@ -34,4 +34,27 @@ public interface AiChatAnalysisService { ...@@ -34,4 +34,27 @@ public interface AiChatAnalysisService {
PageResult<AiChatSummaryDO> getChatSummaryPage(AiChatSummaryPageReqVO pageReqVO); PageResult<AiChatSummaryDO> getChatSummaryPage(AiChatSummaryPageReqVO pageReqVO);
void updateSummaryStatus(AiSummaryUpdateStatusReqVO reqVO); void updateSummaryStatus(AiSummaryUpdateStatusReqVO reqVO);
/**
* 上传总结至 FastGPT 测试知识库
*
* @param reqVO 上传请求
*/
void uploadToFastGpt(AiChatSummaryUploadReqVO reqVO);
/**
* 上传总结至 FastGPT 正式知识库(测试通过后调用)
*
* @param reqVO 上传请求
*/
void uploadToProductionFastGpt(AiChatSummaryUploadReqVO reqVO);
/**
* 测试 FastGPT 知识库连接
*
* @param question 测试问题
* @param category 分类(公租房/长租房)
* @return FastGPT 的回复内容
*/
String testFastGpt(String question, String category);
} }
...@@ -7,24 +7,25 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatSummaryDO; ...@@ -7,24 +7,25 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatSummaryDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO; import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO;
import cn.iocoder.yudao.module.ai.dal.mysql.chat.AiChatAnalysisMapper; import cn.iocoder.yudao.module.ai.dal.mysql.chat.AiChatAnalysisMapper;
import cn.iocoder.yudao.module.ai.dal.mysql.chat.AiChatSummaryMapper; import cn.iocoder.yudao.module.ai.dal.mysql.chat.AiChatSummaryMapper;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.client.RestTemplate;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.*;
/** /**
...@@ -43,6 +44,43 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService { ...@@ -43,6 +44,43 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService {
@Resource @Resource
private AiChatSummaryMapper chatSummaryMapper; private AiChatSummaryMapper chatSummaryMapper;
@Resource
private RestTemplate restTemplate;
@Resource
private AdminUserApi adminUserApi;
// ==================== FastGPT 知识库配置 ====================
private static final String FASTGPT_BASE_URL = "http://znkf.lgfzgroup.com:18089";
private static final String FASTGPT_OPENAPI_BASE_URL = "http://znkf.lgfzgroup.com:18089/api/v1";
/** 测试智能体 key(测试按钮使用) */
private static final String TEST_AGENT_KEY = "fastgpt-cVpF0oIC2aqU0Xk9kzENXE6JsuykGt6c63pLitJLHHAETWqKLzQavD4QG3WX";
/** 测试知识库 ID(上传时先上传到这里) */
private static final Map<String, String> TEST_KNOWLEDGE_BASE_MAP = Map.of(
"公租房", "6a471965df2c00b51ed97c4e",
"长租房", "6a471957df2c00b51ed97b29"
);
/** 正式知识库 ID(测试通过后上传到这里) */
private static final Map<String, String> PRODUCTION_KNOWLEDGE_BASE_MAP = Map.of(
"公租房", "6a4afb9bdf2c00b51eff4ca1",
"长租房", "6a4afba5df2c00b51eff4dba"
);
/** 上传使用的 API key(测试/正式知识库共用) */
private static final Map<String, String> FASTGPT_API_KEY_MAP = Map.of(
"公租房", "fastgpt-dU1AvlAtczVI95eEzmN7Dkx9O3hXArmUtUFYrbIbwUDpFHFPIPIqKw4m3S1jt2uB",
"长租房", "fastgpt-t5H5QVcn3jb1Jj9mW169VbfZcphuFQrsOeiAIfdQbXD7Bld789QJle2ERt7ex"
);
/** 测试知识库集合 ID 缓存 */
private static final Map<String, String> TEST_COLLECTION_ID_CACHE = new ConcurrentHashMap<>();
/** 正式知识库集合 ID 缓存 */
private static final Map<String, String> PRODUCTION_COLLECTION_ID_CACHE = new ConcurrentHashMap<>();
private static final String COLLECTION_NAME = "对话知识库分析";
public AiChatAnalysisDO validateChatAnalysisExists(Long id) { public AiChatAnalysisDO validateChatAnalysisExists(Long id) {
AiChatAnalysisDO conversation = chatAnalysisMapper.selectById(id); AiChatAnalysisDO conversation = chatAnalysisMapper.selectById(id);
...@@ -185,9 +223,6 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService { ...@@ -185,9 +223,6 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService {
throw exception(CHAT_ANALYSIS_NOT_EXISTS); throw exception(CHAT_ANALYSIS_NOT_EXISTS);
} }
LocalDateTime summaryTime = createReqVO.getSummaryTime(); LocalDateTime summaryTime = createReqVO.getSummaryTime();
if (summaryTime != null) {
summaryTime = summaryTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
}
// 2. 创建 AiChatConversationDO 聊天对话 // 2. 创建 AiChatConversationDO 聊天对话
AiChatSummaryDO conversation = new AiChatSummaryDO().setChatId(createReqVO.getChatId()) AiChatSummaryDO conversation = new AiChatSummaryDO().setChatId(createReqVO.getChatId())
.setSummary(createReqVO.getSummary()) .setSummary(createReqVO.getSummary())
...@@ -211,9 +246,234 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService { ...@@ -211,9 +246,234 @@ public class AiChatAnalysisServiceImpl implements AiChatAnalysisService {
throw exception(CHAT_ANALYSIS_NOT_EXISTS); throw exception(CHAT_ANALYSIS_NOT_EXISTS);
} }
// 2. 更新状态 // 2. 获取当前用户昵称
String modifierName = null;
try {
Long userId = getLoginUserId();
if (userId != null) {
// 优先从安全上下文获取昵称
modifierName = cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname();
// 如果昵称为空,从 AdminUserApi 获取
if (cn.hutool.core.util.StrUtil.isBlank(modifierName)) {
AdminUserRespDTO user = adminUserApi.getUser(userId);
if (user != null) {
modifierName = user.getNickname();
}
}
// 如果仍然为空,使用"管理员"作为默认显示名
if (cn.hutool.core.util.StrUtil.isBlank(modifierName)) {
modifierName = "管理员";
}
}
} catch (Exception e) {
log.warn("[updateSummaryStatus] 获取当前用户信息失败", e);
}
// 3. 更新状态 + 处理人昵称
chatSummaryMapper.updateById(new AiChatSummaryDO() chatSummaryMapper.updateById(new AiChatSummaryDO()
.setId(reqVO.getId()).setStatus(reqVO.getStatus())); .setId(reqVO.getId())
.setStatus(reqVO.getStatus())
.setModifierName(modifierName));
}
@Override
public void uploadToFastGpt(AiChatSummaryUploadReqVO reqVO) {
uploadToKnowledgeBase(reqVO, TEST_KNOWLEDGE_BASE_MAP, TEST_COLLECTION_ID_CACHE, "测试");
}
@Override
public void uploadToProductionFastGpt(AiChatSummaryUploadReqVO reqVO) {
uploadToKnowledgeBase(reqVO, PRODUCTION_KNOWLEDGE_BASE_MAP, PRODUCTION_COLLECTION_ID_CACHE, "正式");
}
private void uploadToKnowledgeBase(AiChatSummaryUploadReqVO reqVO, Map<String, String> knowledgeBaseMap,
Map<String, String> collectionIdCache, String envName) {
String datasetId = knowledgeBaseMap.get(reqVO.getCategory());
if (datasetId == null) {
throw exception(FASTGPT_CONFIG_ERROR);
}
try {
String token = getFastGptToken(reqVO.getCategory());
String collectionId = collectionIdCache.get(datasetId);
if (collectionId == null) {
synchronized (collectionIdCache) {
collectionId = collectionIdCache.get(datasetId);
if (collectionId == null) {
collectionId = createTextCollection(token, datasetId);
collectionIdCache.put(datasetId, collectionId);
log.info("[uploadTo{}KnowledgeBase] 首次创建集合, collectionId={}", envName, collectionId);
}
}
} else {
log.info("[uploadTo{}KnowledgeBase] 复用已有集合, collectionId={}", envName, collectionId);
}
pushQaData(token, collectionId, reqVO.getKbTitle(), reqVO.getKbContent());
log.info("[uploadTo{}KnowledgeBase] QA 数据推送成功", envName);
} catch (Exception e) {
log.error("[uploadTo{}KnowledgeBase] 上传至 FastGPT 失败", envName, e);
throw exception(FASTGPT_UPLOAD_FAILED);
}
}
// ==================== FastGPT API 调用 ====================
/**
* 获取 FastGPT 鉴权 token(按知识库区分)
*/
private String getFastGptToken(String category) {
String apiKey = FASTGPT_API_KEY_MAP.get(category);
if (apiKey == null) {
throw new RuntimeException("未找到分类 " + category + " 对应的 FastGPT API Key");
}
return apiKey;
}
/**
* 创建文本集合,返回 collectionId
* 接口:POST /api/core/dataset/collection/create/text
*/
private String createTextCollection(String token, String datasetId) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(token);
Map<String, Object> body = new HashMap<>();
body.put("datasetId", datasetId);
body.put("name", COLLECTION_NAME);
body.put("text", ""); // 空文本,避免自动生成多余 chunk
body.put("trainingType", "chunk");
body.put("chunkSize", 500);
HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, headers);
ResponseEntity<Map> response = restTemplate.postForEntity(
FASTGPT_BASE_URL + "/api/core/dataset/collection/create/text",
request, Map.class);
if (response.getStatusCode() != HttpStatus.OK || response.getBody() == null) {
throw new RuntimeException("创建文本集合失败, status=" + response.getStatusCode());
}
Map<String, Object> responseBody = response.getBody();
Integer code = (Integer) responseBody.get("code");
if (code == null || code != 200) {
throw new RuntimeException("创建文本集合失败, response=" + responseBody);
}
Map<String, Object> data = (Map<String, Object>) responseBody.get("data");
if (data == null || !data.containsKey("collectionId")) {
throw new RuntimeException("创建文本集合响应中未找到 collectionId");
}
return (String) data.get("collectionId");
}
/**
* 以 QA 模式推送数据到集合(q=用户问题, a=AI回答)
* 接口:POST /api/core/dataset/data/pushData
*/
private void pushQaData(String token, String collectionId, String q, String a) {
// 创建集合后需要短暂等待,确保集合已就绪
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(token);
// 构建单个 QA 数据项
Map<String, Object> qaItem = new HashMap<>();
qaItem.put("q", q);
qaItem.put("a", a);
Map<String, Object> body = new HashMap<>();
body.put("collectionId", collectionId);
body.put("trainingMode", "chunk");
body.put("data", Collections.singletonList(qaItem));
HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, headers);
ResponseEntity<Map> response = restTemplate.postForEntity(
FASTGPT_BASE_URL + "/api/core/dataset/data/pushData",
request, Map.class);
if (response.getStatusCode() != HttpStatus.OK || response.getBody() == null) {
throw new RuntimeException("推送 QA 数据失败, status=" + response.getStatusCode());
}
Map<String, Object> responseBody = response.getBody();
Integer code = (Integer) responseBody.get("code");
if (code == null || code != 200) {
throw new RuntimeException("推送 QA 数据失败, response=" + responseBody);
}
// insertLen 在 responseBody.data 内部
Map<String, Object> data = (Map<String, Object>) responseBody.get("data");
Integer insertLen = data != null ? (Integer) data.get("insertLen") : 0;
if (insertLen == null || insertLen == 0) {
throw new RuntimeException("推送 QA 数据成功但 insertLen=0,数据可能未被索引");
}
}
@Override
public String testFastGpt(String question, String category) {
// 使用测试智能体 key,通过 house_type 变量区分公租房/长租房
String token = TEST_AGENT_KEY;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(token);
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("messages", Collections.singletonList(Map.of("role", "user", "content", question)));
requestBody.put("stream", false);
requestBody.put("variables", Map.of("house_type", category));
HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers);
ResponseEntity<Map> response = restTemplate.postForEntity(
FASTGPT_OPENAPI_BASE_URL + "/chat/completions",
request, Map.class);
if (response.getStatusCode() != HttpStatus.OK || response.getBody() == null) {
throw new RuntimeException("FastGPT 测试连接失败, status=" + response.getStatusCode());
}
Map<String, Object> responseBody = response.getBody();
Integer code = (Integer) responseBody.get("code");
if (code != null && code != 200) {
throw new RuntimeException("FastGPT 测试失败, response=" + responseBody);
}
// 兼容两种响应格式:OpenAI 兼容格式 或 FastGPT 内部格式
// OpenAI: { choices: [{ message: { content: "..." } }] }
// FastGPT: { data: { choices: [{ message: { content: "..." } }] } }
Map<String, Object> data = (Map<String, Object>) responseBody.get("data");
List<Map<String, Object>> choices;
if (data != null && data.containsKey("choices")) {
choices = (List<Map<String, Object>>) data.get("choices");
} else if (responseBody.containsKey("choices")) {
choices = (List<Map<String, Object>>) responseBody.get("choices");
} else {
// 如果 responseBody 本身就有 message/content 字段(部分 FastGPT 版本)
Object directContent = responseBody.get("content");
if (directContent != null) {
return directContent.toString();
}
throw new RuntimeException("FastGPT 响应格式异常,无法解析回复");
}
if (choices == null || choices.isEmpty()) {
throw new RuntimeException("FastGPT 返回空结果");
}
Map<String, Object> message = (Map<String, Object>) choices.get(0).get("message");
if (message == null || !message.containsKey("content")) {
throw new RuntimeException("FastGPT 响应中未找到回复内容");
}
return (String) message.get("content");
} }
private Double calculatePercent(Long current, Long previous) { private Double calculatePercent(Long current, Long previous) {
......
...@@ -476,7 +476,7 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic ...@@ -476,7 +476,7 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic
if(userId == null){ if(userId == null){
throw exception(USER_NOT_EXISTS); throw exception(USER_NOT_EXISTS);
} }
AiKnowledgeDO aiKnowledgeDO = knowledgeService.getKnowledge(pageReqVO.getKnowledgeId()); AiKnowledgeDO aiKnowledgeDO = knowledgeService.validateKnowledgeExists(pageReqVO.getKnowledgeId());
String permission = KnowledgePermissionUtils.checkSeeKBPermission(aiKnowledgeDO.getEmbeddingModel(), userId); String permission = KnowledgePermissionUtils.checkSeeKBPermission(aiKnowledgeDO.getEmbeddingModel(), userId);
PageResult<AiKnowledgeDocumentDO> pageResult; PageResult<AiKnowledgeDocumentDO> pageResult;
...@@ -541,7 +541,7 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic ...@@ -541,7 +541,7 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic
if(userId == null){ if(userId == null){
throw exception(USER_NOT_EXISTS); throw exception(USER_NOT_EXISTS);
} }
AiKnowledgeDO aiKnowledgeDO = knowledgeService.getKnowledge(pageReqVO.getKnowledgeId()); AiKnowledgeDO aiKnowledgeDO = knowledgeService.validateKnowledgeExists(pageReqVO.getKnowledgeId());
PageResult<AiKnowledgeDocumentDO> pageResult; PageResult<AiKnowledgeDocumentDO> pageResult;
......
package cn.iocoder.yudao.server; package cn.iocoder.yudao.server;
import org.springframework.ai.autoconfigure.transformers.TransformersEmbeddingModelAutoConfiguration;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
...@@ -13,13 +14,16 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -13,13 +14,16 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @author 芋道源码 * @author 芋道源码
*/ */
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package}
@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"}) @SpringBootApplication(
scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"},
exclude = {TransformersEmbeddingModelAutoConfiguration.class}
)
public class YudaoServerApplication { public class YudaoServerApplication {
public static void main(String[] args) { public static void main(String[] args) {
// 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 System.out.println("====== 真正有效的密文 ======");
// 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 System.out.println(new org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder().encode("admin123"));
// 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 System.out.println("===========================");
SpringApplication.run(YudaoServerApplication.class, args); SpringApplication.run(YudaoServerApplication.class, args);
// new SpringApplicationBuilder(YudaoServerApplication.class) // new SpringApplicationBuilder(YudaoServerApplication.class)
......
...@@ -104,7 +104,109 @@ const include = [ ...@@ -104,7 +104,109 @@ const include = [
'element-plus/es/components/collapse/style/css', 'element-plus/es/components/collapse/style/css',
'element-plus/es/components/collapse-item/style/css', 'element-plus/es/components/collapse-item/style/css',
'element-plus/es/components/button-group/style/css', 'element-plus/es/components/button-group/style/css',
'element-plus/es/components/text/style/css' 'element-plus/es/components/text/style/css',
'element-plus/es/components/input-tag/style/css',
'element-plus/es/components/transfer/style/css',
'element-plus/es/components/calendar/style/css',
'element-plus/es/components/tabs/style/css',
'element-plus/es/components/tab-pane/style/css',
'element-plus/es/components/result/style/css',
'element-plus/es/components/steps/style/css',
'element-plus/es/components/step/style/css',
'element-plus/es/components/divider/style/css',
'element-plus/es/components/empty/style/css',
'element-plus/es/components/infinite-scroll/style/css',
'element-plus/es/components/page-header/style/css',
'element-plus/es/components/timeline/style/css',
'element-plus/es/components/timeline-item/style/css',
'element-plus/es/components/alert/style/css',
'element-plus/es/components/badge/style/css',
'element-plus/es/components/progress/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/spinner/style/css',
'element-plus/es/components/statistic/style/css',
'element-plus/es/components/avatar-group/style/css',
'element-plus/es/components/date-picker/style/css',
'element-plus/es/components/time-picker/style/css',
'element-plus/es/components/autocomplete/style/css',
'element-plus/es/components/cascader/style/css',
'element-plus/es/components/checkbox/style/css',
'element-plus/es/components/checkbox-group/style/css',
'element-plus/es/components/checkbox-button/style/css',
'element-plus/es/components/color-picker/style/css',
'element-plus/es/components/input/style/css',
'element-plus/es/components/input-number/style/css',
'element-plus/es/components/radio/style/css',
'element-plus/es/components/radio-group/style/css',
'element-plus/es/components/radio-button/style/css',
'element-plus/es/components/rate/style/css',
'element-plus/es/components/select/style/css',
'element-plus/es/components/select-v2/style/css',
'element-plus/es/components/option/style/css',
'element-plus/es/components/option-group/style/css',
'element-plus/es/components/switch/style/css',
'element-plus/es/components/time-select/style/css',
'element-plus/es/components/tree-select/style/css',
'element-plus/es/components/upload/style/css',
'element-plus/es/components/form/style/css',
'element-plus/es/components/form-item/style/css',
'element-plus/es/components/dialog/style/css',
'element-plus/es/components/drawer/style/css',
'element-plus/es/components/message-box/style/css',
'element-plus/es/components/loading/style/css',
'element-plus/es/components/message/style/css',
'element-plus/es/components/notification/style/css',
'element-plus/es/components/breadcrumb/style/css',
'element-plus/es/components/breadcrumb-item/style/css',
'element-plus/es/components/page-header/style/css',
'element-plus/es/components/tabs/style/css',
'element-plus/es/components/tab-pane/style/css',
'element-plus/es/components/tag/style/css',
'element-plus/es/components/tooltip/style/css',
'element-plus/es/components/pagination/style/css',
'element-plus/es/components/table/style/css',
'element-plus/es/components/table-column/style/css',
'element-plus/es/components/table-v2/style/css',
'element-plus/es/components/card/style/css',
'element-plus/es/components/collapse/style/css',
'element-plus/es/components/collapse-item/style/css',
'element-plus/es/components/divider/style/css',
'element-plus/es/components/empty/style/css',
'element-plus/es/components/result/style/css',
'element-plus/es/components/space/style/css',
'element-plus/es/components/steps/style/css',
'element-plus/es/components/step/style/css',
'element-plus/es/components/timeline/style/css',
'element-plus/es/components/timeline-item/style/css',
'element-plus/es/components/transfer/style/css',
'element-plus/es/components/calendar/style/css',
'element-plus/es/components/affix/style/css',
'element-plus/es/components/backtop/style/css',
'element-plus/es/components/infinite-scroll/style/css',
'element-plus/es/components/scrollbar/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/avatar/style/css',
'element-plus/es/components/avatar-group/style/css',
'element-plus/es/components/badge/style/css',
'element-plus/es/components/progress/style/css',
'element-plus/es/components/spinner/style/css',
'element-plus/es/components/statistic/style/css',
'element-plus/es/components/button/style/css',
'element-plus/es/components/button-group/style/css',
'element-plus/es/components/dropdown/style/css',
'element-plus/es/components/dropdown-menu/style/css',
'element-plus/es/components/dropdown-item/style/css',
'element-plus/es/components/menu/style/css',
'element-plus/es/components/sub-menu/style/css',
'element-plus/es/components/menu-item/style/css',
'element-plus/es/components/tree/style/css',
'element-plus/es/components/image/style/css',
'element-plus/es/components/image-viewer/style/css',
'element-plus/es/components/link/style/css',
'element-plus/es/components/descriptions/style/css',
'element-plus/es/components/descriptions-item/style/css',
'element-plus/es/components/collapse-transition/style/css',
'element-plus/es/components/slider/style/css'
] ]
const exclude = ['@iconify/json'] const exclude = ['@iconify/json']
......
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
"dev": "vite --mode env.local", "dev": "vite --mode env.local",
"dev-server": "vite --mode dev", "dev-server": "vite --mode dev",
"ts:check": "vue-tsc --noEmit", "ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build", "build:local": "node node_modules/vite/bin/vite.js build",
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev", "build:dev": "node node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test", "build:test": "node node_modules/vite/bin/vite.js build --mode test",
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage", "build:stage": "node node_modules/vite/bin/vite.js build --mode stage",
"build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod", "build:prod": "node node_modules/vite/bin/vite.js build --mode prod",
"serve:dev": "vite preview --mode dev", "serve:dev": "vite preview --mode dev",
"serve:prod": "vite preview --mode prod", "serve:prod": "vite preview --mode prod",
"preview": "pnpm build:local && vite preview", "preview": "pnpm build:local && vite preview",
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
"driver.js": "^1.3.1", "driver.js": "^1.3.1",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"echarts-wordcloud": "^2.1.0", "echarts-wordcloud": "^2.1.0",
"element-plus": "2.8.0", "element-plus": "2.14.2",
"fast-xml-parser": "^4.3.2", "fast-xml-parser": "^4.3.2",
"highlight.js": "^11.9.0", "highlight.js": "^11.9.0",
"jsencrypt": "^3.3.2", "jsencrypt": "^3.3.2",
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
"unplugin-auto-import": "^0.16.7", "unplugin-auto-import": "^0.16.7",
"unplugin-element-plus": "^0.8.0", "unplugin-element-plus": "^0.8.0",
"unplugin-vue-components": "^0.25.2", "unplugin-vue-components": "^0.25.2",
"vite": "5.1.4", "vite": "4.5.0",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-ejs": "^1.7.0", "vite-plugin-ejs": "^1.7.0",
"vite-plugin-eslint": "^1.8.1", "vite-plugin-eslint": "^1.8.1",
......
...@@ -43,7 +43,7 @@ importers: ...@@ -43,7 +43,7 @@ importers:
version: 4.1.1 version: 4.1.1
axios: axios:
specifier: ^1.6.8 specifier: ^1.6.8
version: 1.6.8 version: 1.6.8(debug@4.3.4)
benz-amr-recorder: benz-amr-recorder:
specifier: ^1.1.5 specifier: ^1.1.5
version: 1.1.5 version: 1.1.5
...@@ -75,8 +75,8 @@ importers: ...@@ -75,8 +75,8 @@ importers:
specifier: ^2.1.0 specifier: ^2.1.0
version: 2.1.0(echarts@5.5.0) version: 2.1.0(echarts@5.5.0)
element-plus: element-plus:
specifier: 2.8.0 specifier: 2.14.2
version: 2.8.0(vue@3.4.21(typescript@5.3.3)) version: 2.14.2(vue@3.4.21(typescript@5.3.3))
fast-xml-parser: fast-xml-parser:
specifier: ^4.3.2 specifier: ^4.3.2
version: 4.3.6 version: 4.3.6
...@@ -206,13 +206,13 @@ importers: ...@@ -206,13 +206,13 @@ importers:
version: 0.58.9 version: 0.58.9
'@vitejs/plugin-legacy': '@vitejs/plugin-legacy':
specifier: ^5.3.1 specifier: ^5.3.1
version: 5.3.2(terser@5.30.4)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 5.3.2(terser@5.30.4)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^5.0.4 specifier: ^5.0.4
version: 5.0.4(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3)) version: 5.0.4(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))
'@vitejs/plugin-vue-jsx': '@vitejs/plugin-vue-jsx':
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3)) version: 3.1.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))
autoprefixer: autoprefixer:
specifier: ^10.4.17 specifier: ^10.4.17
version: 10.4.19(postcss@8.4.38) version: 10.4.19(postcss@8.4.38)
...@@ -290,7 +290,7 @@ importers: ...@@ -290,7 +290,7 @@ importers:
version: 5.3.3 version: 5.3.3
unocss: unocss:
specifier: ^0.58.5 specifier: ^0.58.5
version: 0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
unplugin-auto-import: unplugin-auto-import:
specifier: ^0.16.7 specifier: ^0.16.7
version: 0.16.7(@vueuse/core@10.9.0(vue@3.4.21(typescript@5.3.3)))(rollup@4.17.1) version: 0.16.7(@vueuse/core@10.9.0(vue@3.4.21(typescript@5.3.3)))(rollup@4.17.1)
...@@ -301,29 +301,29 @@ importers: ...@@ -301,29 +301,29 @@ importers:
specifier: ^0.25.2 specifier: ^0.25.2
version: 0.25.2(@babel/parser@7.24.4)(rollup@4.17.1)(vue@3.4.21(typescript@5.3.3)) version: 0.25.2(@babel/parser@7.24.4)(rollup@4.17.1)(vue@3.4.21(typescript@5.3.3))
vite: vite:
specifier: 5.1.4 specifier: 4.5.0
version: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) version: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vite-plugin-compression: vite-plugin-compression:
specifier: ^0.5.1 specifier: ^0.5.1
version: 0.5.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 0.5.1(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-ejs: vite-plugin-ejs:
specifier: ^1.7.0 specifier: ^1.7.0
version: 1.7.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 1.7.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-eslint: vite-plugin-eslint:
specifier: ^1.8.1 specifier: ^1.8.1
version: 1.8.1(eslint@8.57.0)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 1.8.1(eslint@8.57.0)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-progress: vite-plugin-progress:
specifier: ^0.0.7 specifier: ^0.0.7
version: 0.0.7(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 0.0.7(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-purge-icons: vite-plugin-purge-icons:
specifier: ^0.10.0 specifier: ^0.10.0
version: 0.10.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 0.10.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-svg-icons: vite-plugin-svg-icons:
specifier: ^2.0.1 specifier: ^2.0.1
version: 2.0.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 2.0.1(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vite-plugin-top-level-await: vite-plugin-top-level-await:
specifier: ^1.3.1 specifier: ^1.3.1
version: 1.4.1(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) version: 1.4.1(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
vue-eslint-parser: vue-eslint-parser:
specifier: ^9.3.2 specifier: ^9.3.2
version: 9.4.2(eslint@8.57.0) version: 9.4.2(eslint@8.57.0)
...@@ -1055,9 +1055,9 @@ packages: ...@@ -1055,9 +1055,9 @@ packages:
peerDependencies: peerDependencies:
postcss-selector-parser: ^6.0.13 postcss-selector-parser: ^6.0.13
'@ctrl/tinycolor@3.6.1': '@ctrl/tinycolor@4.2.0':
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
engines: {node: '>=10'} engines: {node: '>=14'}
'@dual-bundle/import-meta-resolve@4.0.0': '@dual-bundle/import-meta-resolve@4.0.0':
resolution: {integrity: sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==} resolution: {integrity: sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==}
...@@ -1067,140 +1067,139 @@ packages: ...@@ -1067,140 +1067,139 @@ packages:
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.2.0
'@esbuild/aix-ppc64@0.19.12': '@element-plus/icons-vue@2.3.2':
resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==}
engines: {node: '>=12'} peerDependencies:
cpu: [ppc64] vue: ^3.2.0
os: [aix]
'@esbuild/android-arm64@0.19.12': '@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@esbuild/android-arm@0.19.12': '@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@esbuild/android-x64@0.19.12': '@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [android] os: [android]
'@esbuild/darwin-arm64@0.19.12': '@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@esbuild/darwin-x64@0.19.12': '@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@esbuild/freebsd-arm64@0.19.12': '@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@esbuild/freebsd-x64@0.19.12': '@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@esbuild/linux-arm64@0.19.12': '@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@esbuild/linux-arm@0.19.12': '@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@esbuild/linux-ia32@0.19.12': '@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [ia32]
os: [linux] os: [linux]
'@esbuild/linux-loong64@0.19.12': '@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@esbuild/linux-mips64el@0.19.12': '@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [mips64el] cpu: [mips64el]
os: [linux] os: [linux]
'@esbuild/linux-ppc64@0.19.12': '@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@esbuild/linux-riscv64@0.19.12': '@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@esbuild/linux-s390x@0.19.12': '@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@esbuild/linux-x64@0.19.12': '@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@esbuild/netbsd-x64@0.19.12': '@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [netbsd] os: [netbsd]
'@esbuild/openbsd-x64@0.19.12': '@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [openbsd] os: [openbsd]
'@esbuild/sunos-x64@0.19.12': '@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [sunos] os: [sunos]
'@esbuild/win32-arm64@0.19.12': '@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@esbuild/win32-ia32@0.19.12': '@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@esbuild/win32-x64@0.19.12': '@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
...@@ -1223,14 +1222,14 @@ packages: ...@@ -1223,14 +1222,14 @@ packages:
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@floating-ui/core@1.6.1': '@floating-ui/core@1.7.5':
resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
'@floating-ui/dom@1.6.4': '@floating-ui/dom@1.7.6':
resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==} resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
'@floating-ui/utils@0.2.2': '@floating-ui/utils@0.2.11':
resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
'@form-create/component-elm-checkbox@3.1.29': '@form-create/component-elm-checkbox@3.1.29':
resolution: {integrity: sha512-tzqpwg+lq1X/V1wEsOkHBC9QxZyUsoymFRrWiEdqvstRcTQKQjntt/3gl8MQ3Tcq22dP2xJbQxjTeu1J8o6NCA==} resolution: {integrity: sha512-tzqpwg+lq1X/V1wEsOkHBC9QxZyUsoymFRrWiEdqvstRcTQKQjntt/3gl8MQ3Tcq22dP2xJbQxjTeu1J8o6NCA==}
...@@ -1281,6 +1280,7 @@ packages: ...@@ -1281,6 +1280,7 @@ packages:
'@humanwhocodes/config-array@0.11.14': '@humanwhocodes/config-array@0.11.14':
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
engines: {node: '>=10.10.0'} engines: {node: '>=10.10.0'}
deprecated: Use @eslint/config-array instead
'@humanwhocodes/module-importer@1.0.1': '@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
...@@ -1288,6 +1288,7 @@ packages: ...@@ -1288,6 +1288,7 @@ packages:
'@humanwhocodes/object-schema@2.0.3': '@humanwhocodes/object-schema@2.0.3':
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
'@iconify/iconify@2.1.2': '@iconify/iconify@2.1.2':
resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==} resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==}
...@@ -1463,46 +1464,55 @@ packages: ...@@ -1463,46 +1464,55 @@ packages:
resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==} resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.17.1': '@rollup/rollup-linux-arm-musleabihf@4.17.1':
resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==} resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.17.1': '@rollup/rollup-linux-arm64-gnu@4.17.1':
resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==} resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.17.1': '@rollup/rollup-linux-arm64-musl@4.17.1':
resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==} resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-powerpc64le-gnu@4.17.1': '@rollup/rollup-linux-powerpc64le-gnu@4.17.1':
resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==} resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.17.1': '@rollup/rollup-linux-riscv64-gnu@4.17.1':
resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==} resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-s390x-gnu@4.17.1': '@rollup/rollup-linux-s390x-gnu@4.17.1':
resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==} resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.17.1': '@rollup/rollup-linux-x64-gnu@4.17.1':
resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==} resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.17.1': '@rollup/rollup-linux-x64-musl@4.17.1':
resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==} resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.17.1': '@rollup/rollup-win32-arm64-msvc@4.17.1':
resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==} resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==}
...@@ -1545,24 +1555,28 @@ packages: ...@@ -1545,24 +1555,28 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@swc/core-linux-arm64-musl@1.4.17': '@swc/core-linux-arm64-musl@1.4.17':
resolution: {integrity: sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==} resolution: {integrity: sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@swc/core-linux-x64-gnu@1.4.17': '@swc/core-linux-x64-gnu@1.4.17':
resolution: {integrity: sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==} resolution: {integrity: sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@swc/core-linux-x64-musl@1.4.17': '@swc/core-linux-x64-musl@1.4.17':
resolution: {integrity: sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==} resolution: {integrity: sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==}
engines: {node: '>=10'} engines: {node: '>=10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@swc/core-win32-arm64-msvc@1.4.17': '@swc/core-win32-arm64-msvc@1.4.17':
resolution: {integrity: sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==} resolution: {integrity: sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==}
...@@ -1597,8 +1611,8 @@ packages: ...@@ -1597,8 +1611,8 @@ packages:
'@swc/types@0.1.6': '@swc/types@0.1.6':
resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==}
'@sxzz/popperjs-es@2.11.7': '@sxzz/popperjs-es@2.11.8':
resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==}
'@transloadit/prettier-bytes@0.0.7': '@transloadit/prettier-bytes@0.0.7':
resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
...@@ -1709,6 +1723,9 @@ packages: ...@@ -1709,6 +1723,9 @@ packages:
'@types/estree@1.0.5': '@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
'@types/event-emitter@0.3.5': '@types/event-emitter@0.3.5':
resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==} resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==}
...@@ -1724,6 +1741,9 @@ packages: ...@@ -1724,6 +1741,9 @@ packages:
'@types/lodash@4.17.0': '@types/lodash@4.17.0':
resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==}
'@types/lodash@4.17.24':
resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
'@types/node@10.17.60': '@types/node@10.17.60':
resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
...@@ -1748,12 +1768,12 @@ packages: ...@@ -1748,12 +1768,12 @@ packages:
'@types/video.js@7.3.58': '@types/video.js@7.3.58':
resolution: {integrity: sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ==} resolution: {integrity: sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ==}
'@types/web-bluetooth@0.0.16':
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
'@types/web-bluetooth@0.0.20': '@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
'@typescript-eslint/eslint-plugin@7.7.1': '@typescript-eslint/eslint-plugin@7.7.1':
resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==} resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
...@@ -1851,6 +1871,7 @@ packages: ...@@ -1851,6 +1871,7 @@ packages:
'@ungap/structured-clone@1.2.0': '@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
deprecated: Potential CWE-502 - Update to 1.3.1 or higher
'@unocss/astro@0.58.9': '@unocss/astro@0.58.9':
resolution: {integrity: sha512-VWfHNC0EfawFxLfb3uI+QcMGBN+ju+BYtutzeZTjilLKj31X2UpqIh8fepixL6ljgZzB3fweqg2xtUMC0gMnoQ==} resolution: {integrity: sha512-VWfHNC0EfawFxLfb3uI+QcMGBN+ju+BYtutzeZTjilLKj31X2UpqIh8fepixL6ljgZzB3fweqg2xtUMC0gMnoQ==}
...@@ -2094,20 +2115,24 @@ packages: ...@@ -2094,20 +2115,24 @@ packages:
'@vueuse/core@10.9.0': '@vueuse/core@10.9.0':
resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==}
'@vueuse/core@9.13.0': '@vueuse/core@14.3.0':
resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
peerDependencies:
vue: ^3.5.0
'@vueuse/metadata@10.9.0': '@vueuse/metadata@10.9.0':
resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==}
'@vueuse/metadata@9.13.0': '@vueuse/metadata@14.3.0':
resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
'@vueuse/shared@10.9.0': '@vueuse/shared@10.9.0':
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==}
'@vueuse/shared@9.13.0': '@vueuse/shared@14.3.0':
resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
peerDependencies:
vue: ^3.5.0
'@wangeditor/basic-modules@1.1.7': '@wangeditor/basic-modules@1.1.7':
resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==} resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==}
...@@ -2199,6 +2224,7 @@ packages: ...@@ -2199,6 +2224,7 @@ packages:
'@xmldom/xmldom@0.8.10': '@xmldom/xmldom@0.8.10':
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
deprecated: this version has critical issues, please update to the latest version
'@zxcvbn-ts/core@3.0.4': '@zxcvbn-ts/core@3.0.4':
resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==} resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==}
...@@ -2867,6 +2893,9 @@ packages: ...@@ -2867,6 +2893,9 @@ packages:
dayjs@1.11.11: dayjs@1.11.11:
resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==}
dayjs@1.11.21:
resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==}
de-indent@1.0.2: de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
...@@ -3038,10 +3067,10 @@ packages: ...@@ -3038,10 +3067,10 @@ packages:
electron-to-chromium@1.4.750: electron-to-chromium@1.4.750:
resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==} resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==}
element-plus@2.8.0: element-plus@2.14.2:
resolution: {integrity: sha512-7ngapVlVlQAjocVqD4MUKvKXlBneT9DSDk2mmBOSLRFWNm/HLDT15ozmsvUBfy18sajnyUeSIHTtINE8gfrGMg==} resolution: {integrity: sha512-eNH9uP3wQoNqieEIHXiNvIVv+zO5sZDU0CAZq5b0zqSN06DD0/V9xIq1R/qm3rw5k3nBTM1JvpxhCfRbaFLzDQ==}
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.3.7
emoji-regex@10.3.0: emoji-regex@10.3.0:
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
...@@ -3114,8 +3143,8 @@ packages: ...@@ -3114,8 +3143,8 @@ packages:
resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
esbuild@0.19.12: esbuild@0.18.20:
resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true hasBin: true
...@@ -3123,9 +3152,6 @@ packages: ...@@ -3123,9 +3152,6 @@ packages:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'} engines: {node: '>=6'}
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
escape-string-regexp@1.0.5: escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'} engines: {node: '>=0.8.0'}
...@@ -3152,6 +3178,7 @@ packages: ...@@ -3152,6 +3178,7 @@ packages:
eslint-define-config@2.1.0: eslint-define-config@2.1.0:
resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==} resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==}
engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
eslint-plugin-prettier@5.1.3: eslint-plugin-prettier@5.1.3:
resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
...@@ -3184,6 +3211,7 @@ packages: ...@@ -3184,6 +3211,7 @@ packages:
eslint@8.57.0: eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true hasBin: true
esniff@2.0.1: esniff@2.0.1:
...@@ -3415,6 +3443,7 @@ packages: ...@@ -3415,6 +3443,7 @@ packages:
git-raw-commits@4.0.0: git-raw-commits@4.0.0:
resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
engines: {node: '>=16'} engines: {node: '>=16'}
deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.
hasBin: true hasBin: true
glob-parent@5.1.2: glob-parent@5.1.2:
...@@ -3428,10 +3457,12 @@ packages: ...@@ -3428,10 +3457,12 @@ packages:
glob@10.3.12: glob@10.3.12:
resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==}
engines: {node: '>=16 || 14 >=14.17'} engines: {node: '>=16 || 14 >=14.17'}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true hasBin: true
glob@7.2.3: glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
global-directory@4.0.1: global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
...@@ -3621,6 +3652,7 @@ packages: ...@@ -3621,6 +3652,7 @@ packages:
inflight@1.0.6: inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits-browser@0.1.0: inherits-browser@0.1.0:
resolution: {integrity: sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==} resolution: {integrity: sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==}
...@@ -3982,6 +4014,9 @@ packages: ...@@ -3982,6 +4014,9 @@ packages:
lodash-es@4.17.21: lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
lodash-es@4.18.1:
resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
lodash-unified@1.0.3: lodash-unified@1.0.3:
resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
peerDependencies: peerDependencies:
...@@ -4003,6 +4038,7 @@ packages: ...@@ -4003,6 +4038,7 @@ packages:
lodash.isequal@4.5.0: lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
lodash.isplainobject@4.0.6: lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
...@@ -4040,6 +4076,9 @@ packages: ...@@ -4040,6 +4076,9 @@ packages:
lodash@4.17.21: lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
lodash@4.18.1:
resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
log-update@6.0.0: log-update@6.0.0:
resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
engines: {node: '>=18'} engines: {node: '>=18'}
...@@ -4251,6 +4290,11 @@ packages: ...@@ -4251,6 +4290,11 @@ packages:
namespace-emitter@2.0.1: namespace-emitter@2.0.1:
resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
nanoid@3.3.12:
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanoid@3.3.7: nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
...@@ -4452,6 +4496,9 @@ packages: ...@@ -4452,6 +4496,9 @@ packages:
picocolors@1.0.0: picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1: picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
...@@ -4547,6 +4594,10 @@ packages: ...@@ -4547,6 +4594,10 @@ packages:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
postcss@8.5.15:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
posthtml-parser@0.2.1: posthtml-parser@0.2.1:
resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
...@@ -4744,6 +4795,7 @@ packages: ...@@ -4744,6 +4795,7 @@ packages:
rimraf@3.0.2: rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true hasBin: true
rimraf@5.0.5: rimraf@5.0.5:
...@@ -4763,6 +4815,11 @@ packages: ...@@ -4763,6 +4815,11 @@ packages:
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
hasBin: true hasBin: true
rollup@3.30.0:
resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
rollup@4.17.1: rollup@4.17.1:
resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==} resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
...@@ -4917,6 +4974,10 @@ packages: ...@@ -4917,6 +4974,10 @@ packages:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
source-map-resolve@0.5.3: source-map-resolve@0.5.3:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated deprecated: See https://github.com/lydell/source-map-resolve#deprecated
...@@ -5330,6 +5391,7 @@ packages: ...@@ -5330,6 +5391,7 @@ packages:
uuid@9.0.1: uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
hasBin: true hasBin: true
vary@1.1.2: vary@1.1.2:
...@@ -5383,12 +5445,12 @@ packages: ...@@ -5383,12 +5445,12 @@ packages:
peerDependencies: peerDependencies:
vite: '>=2.8' vite: '>=2.8'
vite@5.1.4: vite@4.5.0:
resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0 '@types/node': '>= 14'
less: '*' less: '*'
lightningcss: ^1.21.0 lightningcss: ^1.21.0
sass: '*' sass: '*'
...@@ -5411,6 +5473,9 @@ packages: ...@@ -5411,6 +5473,9 @@ packages:
terser: terser:
optional: true optional: true
vue-component-type-helpers@3.3.5:
resolution: {integrity: sha512-Fe1jyPJoUGpJOYKOri44jduR7My4yYINOMJISuMAbmrs+L5LbIDUc8NTWZYY3EJLK0yPLuCmcd5zoCsE4k2/KA==}
vue-demi@0.14.7: vue-demi@0.14.7:
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'} engines: {node: '>=12'}
...@@ -5436,6 +5501,7 @@ packages: ...@@ -5436,6 +5501,7 @@ packages:
vue-i18n@9.10.2: vue-i18n@9.10.2:
resolution: {integrity: sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==} resolution: {integrity: sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
deprecated: v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
...@@ -5621,7 +5687,7 @@ snapshots: ...@@ -5621,7 +5687,7 @@ snapshots:
'@babel/code-frame@7.24.2': '@babel/code-frame@7.24.2':
dependencies: dependencies:
'@babel/highlight': 7.24.2 '@babel/highlight': 7.24.2
picocolors: 1.0.0 picocolors: 1.1.1
'@babel/compat-data@7.24.4': {} '@babel/compat-data@7.24.4': {}
...@@ -5788,7 +5854,7 @@ snapshots: ...@@ -5788,7 +5854,7 @@ snapshots:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2 chalk: 2.4.2
js-tokens: 4.0.0 js-tokens: 4.0.0
picocolors: 1.0.0 picocolors: 1.1.1
'@babel/parser@7.24.4': '@babel/parser@7.24.4':
dependencies: dependencies:
...@@ -6506,7 +6572,7 @@ snapshots: ...@@ -6506,7 +6572,7 @@ snapshots:
dependencies: dependencies:
postcss-selector-parser: 6.0.16 postcss-selector-parser: 6.0.16
'@ctrl/tinycolor@3.6.1': {} '@ctrl/tinycolor@4.2.0': {}
'@dual-bundle/import-meta-resolve@4.0.0': {} '@dual-bundle/import-meta-resolve@4.0.0': {}
...@@ -6514,73 +6580,74 @@ snapshots: ...@@ -6514,73 +6580,74 @@ snapshots:
dependencies: dependencies:
vue: 3.4.21(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
'@esbuild/aix-ppc64@0.19.12': '@element-plus/icons-vue@2.3.2(vue@3.4.21(typescript@5.3.3))':
optional: true dependencies:
vue: 3.4.21(typescript@5.3.3)
'@esbuild/android-arm64@0.19.12': '@esbuild/android-arm64@0.18.20':
optional: true optional: true
'@esbuild/android-arm@0.19.12': '@esbuild/android-arm@0.18.20':
optional: true optional: true
'@esbuild/android-x64@0.19.12': '@esbuild/android-x64@0.18.20':
optional: true optional: true
'@esbuild/darwin-arm64@0.19.12': '@esbuild/darwin-arm64@0.18.20':
optional: true optional: true
'@esbuild/darwin-x64@0.19.12': '@esbuild/darwin-x64@0.18.20':
optional: true optional: true
'@esbuild/freebsd-arm64@0.19.12': '@esbuild/freebsd-arm64@0.18.20':
optional: true optional: true
'@esbuild/freebsd-x64@0.19.12': '@esbuild/freebsd-x64@0.18.20':
optional: true optional: true
'@esbuild/linux-arm64@0.19.12': '@esbuild/linux-arm64@0.18.20':
optional: true optional: true
'@esbuild/linux-arm@0.19.12': '@esbuild/linux-arm@0.18.20':
optional: true optional: true
'@esbuild/linux-ia32@0.19.12': '@esbuild/linux-ia32@0.18.20':
optional: true optional: true
'@esbuild/linux-loong64@0.19.12': '@esbuild/linux-loong64@0.18.20':
optional: true optional: true
'@esbuild/linux-mips64el@0.19.12': '@esbuild/linux-mips64el@0.18.20':
optional: true optional: true
'@esbuild/linux-ppc64@0.19.12': '@esbuild/linux-ppc64@0.18.20':
optional: true optional: true
'@esbuild/linux-riscv64@0.19.12': '@esbuild/linux-riscv64@0.18.20':
optional: true optional: true
'@esbuild/linux-s390x@0.19.12': '@esbuild/linux-s390x@0.18.20':
optional: true optional: true
'@esbuild/linux-x64@0.19.12': '@esbuild/linux-x64@0.18.20':
optional: true optional: true
'@esbuild/netbsd-x64@0.19.12': '@esbuild/netbsd-x64@0.18.20':
optional: true optional: true
'@esbuild/openbsd-x64@0.19.12': '@esbuild/openbsd-x64@0.18.20':
optional: true optional: true
'@esbuild/sunos-x64@0.19.12': '@esbuild/sunos-x64@0.18.20':
optional: true optional: true
'@esbuild/win32-arm64@0.19.12': '@esbuild/win32-arm64@0.18.20':
optional: true optional: true
'@esbuild/win32-ia32@0.19.12': '@esbuild/win32-ia32@0.18.20':
optional: true optional: true
'@esbuild/win32-x64@0.19.12': '@esbuild/win32-x64@0.18.20':
optional: true optional: true
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
...@@ -6606,16 +6673,16 @@ snapshots: ...@@ -6606,16 +6673,16 @@ snapshots:
'@eslint/js@8.57.0': {} '@eslint/js@8.57.0': {}
'@floating-ui/core@1.6.1': '@floating-ui/core@1.7.5':
dependencies: dependencies:
'@floating-ui/utils': 0.2.2 '@floating-ui/utils': 0.2.11
'@floating-ui/dom@1.6.4': '@floating-ui/dom@1.7.6':
dependencies: dependencies:
'@floating-ui/core': 1.6.1 '@floating-ui/core': 1.7.5
'@floating-ui/utils': 0.2.2 '@floating-ui/utils': 0.2.11
'@floating-ui/utils@0.2.2': {} '@floating-ui/utils@0.2.11': {}
'@form-create/component-elm-checkbox@3.1.29': '@form-create/component-elm-checkbox@3.1.29':
dependencies: dependencies:
...@@ -6754,7 +6821,7 @@ snapshots: ...@@ -6754,7 +6821,7 @@ snapshots:
'@intlify/message-compiler@9.13.1': '@intlify/message-compiler@9.13.1':
dependencies: dependencies:
'@intlify/shared': 9.13.1 '@intlify/shared': 9.13.1
source-map-js: 1.2.0 source-map-js: 1.2.1
'@intlify/shared@9.10.2': {} '@intlify/shared@9.10.2': {}
...@@ -6974,7 +7041,7 @@ snapshots: ...@@ -6974,7 +7041,7 @@ snapshots:
dependencies: dependencies:
'@swc/counter': 0.1.3 '@swc/counter': 0.1.3
'@sxzz/popperjs-es@2.11.7': {} '@sxzz/popperjs-es@2.11.8': {}
'@transloadit/prettier-bytes@0.0.7': {} '@transloadit/prettier-bytes@0.0.7': {}
...@@ -7103,11 +7170,13 @@ snapshots: ...@@ -7103,11 +7170,13 @@ snapshots:
'@types/eslint@8.56.10': '@types/eslint@8.56.10':
dependencies: dependencies:
'@types/estree': 1.0.5 '@types/estree': 1.0.9
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/estree@1.0.5': {} '@types/estree@1.0.5': {}
'@types/estree@1.0.9': {}
'@types/event-emitter@0.3.5': {} '@types/event-emitter@0.3.5': {}
'@types/geojson@7946.0.14': {} '@types/geojson@7946.0.14': {}
...@@ -7120,6 +7189,8 @@ snapshots: ...@@ -7120,6 +7189,8 @@ snapshots:
'@types/lodash@4.17.0': {} '@types/lodash@4.17.0': {}
'@types/lodash@4.17.24': {}
'@types/node@10.17.60': {} '@types/node@10.17.60': {}
'@types/node@20.12.7': '@types/node@20.12.7':
...@@ -7142,10 +7213,10 @@ snapshots: ...@@ -7142,10 +7213,10 @@ snapshots:
'@types/video.js@7.3.58': {} '@types/video.js@7.3.58': {}
'@types/web-bluetooth@0.0.16': {}
'@types/web-bluetooth@0.0.20': {} '@types/web-bluetooth@0.0.20': {}
'@types/web-bluetooth@0.0.21': {}
'@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': '@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
...@@ -7288,13 +7359,13 @@ snapshots: ...@@ -7288,13 +7359,13 @@ snapshots:
'@ungap/structured-clone@1.2.0': {} '@ungap/structured-clone@1.2.0': {}
'@unocss/astro@0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))': '@unocss/astro@0.58.9(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
dependencies: dependencies:
'@unocss/core': 0.58.9 '@unocss/core': 0.58.9
'@unocss/reset': 0.58.9 '@unocss/reset': 0.58.9
'@unocss/vite': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) '@unocss/vite': 0.58.9(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
optionalDependencies: optionalDependencies:
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
...@@ -7452,7 +7523,7 @@ snapshots: ...@@ -7452,7 +7523,7 @@ snapshots:
dependencies: dependencies:
'@unocss/core': 0.58.9 '@unocss/core': 0.58.9
'@unocss/vite@0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))': '@unocss/vite@0.58.9(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0(rollup@4.17.1) '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
...@@ -7464,7 +7535,7 @@ snapshots: ...@@ -7464,7 +7535,7 @@ snapshots:
chokidar: 3.6.0 chokidar: 3.6.0
fast-glob: 3.3.2 fast-glob: 3.3.2
magic-string: 0.30.10 magic-string: 0.30.10
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
...@@ -7526,7 +7597,7 @@ snapshots: ...@@ -7526,7 +7597,7 @@ snapshots:
global: 4.4.0 global: 4.4.0
is-function: 1.0.2 is-function: 1.0.2
'@vitejs/plugin-legacy@5.3.2(terser@5.30.4)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))': '@vitejs/plugin-legacy@5.3.2(terser@5.30.4)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
dependencies: dependencies:
'@babel/core': 7.24.4 '@babel/core': 7.24.4
'@babel/preset-env': 7.24.4(@babel/core@7.24.4) '@babel/preset-env': 7.24.4(@babel/core@7.24.4)
...@@ -7537,23 +7608,23 @@ snapshots: ...@@ -7537,23 +7608,23 @@ snapshots:
regenerator-runtime: 0.14.1 regenerator-runtime: 0.14.1
systemjs: 6.15.1 systemjs: 6.15.1
terser: 5.30.4 terser: 5.30.4
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))': '@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))':
dependencies: dependencies:
'@babel/core': 7.24.4 '@babel/core': 7.24.4
'@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4)
'@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.4) '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.4)
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vue: 3.4.21(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-vue@5.0.4(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))': '@vitejs/plugin-vue@5.0.4(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))':
dependencies: dependencies:
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vue: 3.4.21(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
'@volar/language-core@1.11.1': '@volar/language-core@1.11.1':
...@@ -7612,7 +7683,7 @@ snapshots: ...@@ -7612,7 +7683,7 @@ snapshots:
'@vue/shared': 3.4.26 '@vue/shared': 3.4.26
entities: 4.5.0 entities: 4.5.0
estree-walker: 2.0.2 estree-walker: 2.0.2
source-map-js: 1.2.0 source-map-js: 1.2.1
'@vue/compiler-dom@3.4.21': '@vue/compiler-dom@3.4.21':
dependencies: dependencies:
...@@ -7633,7 +7704,7 @@ snapshots: ...@@ -7633,7 +7704,7 @@ snapshots:
'@vue/shared': 3.4.21 '@vue/shared': 3.4.21
estree-walker: 2.0.2 estree-walker: 2.0.2
magic-string: 0.30.10 magic-string: 0.30.10
postcss: 8.4.38 postcss: 8.5.15
source-map-js: 1.2.0 source-map-js: 1.2.0
'@vue/compiler-sfc@3.4.26': '@vue/compiler-sfc@3.4.26':
...@@ -7709,19 +7780,16 @@ snapshots: ...@@ -7709,19 +7780,16 @@ snapshots:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/core@9.13.0(vue@3.4.21(typescript@5.3.3))': '@vueuse/core@14.3.0(vue@3.4.21(typescript@5.3.3))':
dependencies: dependencies:
'@types/web-bluetooth': 0.0.16 '@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 9.13.0 '@vueuse/metadata': 14.3.0
'@vueuse/shared': 9.13.0(vue@3.4.21(typescript@5.3.3)) '@vueuse/shared': 14.3.0(vue@3.4.21(typescript@5.3.3))
vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3)) vue: 3.4.21(typescript@5.3.3)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/metadata@10.9.0': {} '@vueuse/metadata@10.9.0': {}
'@vueuse/metadata@9.13.0': {} '@vueuse/metadata@14.3.0': {}
'@vueuse/shared@10.9.0(vue@3.4.21(typescript@5.3.3))': '@vueuse/shared@10.9.0(vue@3.4.21(typescript@5.3.3))':
dependencies: dependencies:
...@@ -7730,12 +7798,9 @@ snapshots: ...@@ -7730,12 +7798,9 @@ snapshots:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/shared@9.13.0(vue@3.4.21(typescript@5.3.3))': '@vueuse/shared@14.3.0(vue@3.4.21(typescript@5.3.3))':
dependencies: dependencies:
vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3)) vue: 3.4.21(typescript@5.3.3)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)': '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)':
dependencies: dependencies:
...@@ -7982,7 +8047,7 @@ snapshots: ...@@ -7982,7 +8047,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
axios@1.6.8: axios@1.6.8(debug@4.3.4):
dependencies: dependencies:
follow-redirects: 1.15.6(debug@4.3.4) follow-redirects: 1.15.6(debug@4.3.4)
form-data: 4.0.0 form-data: 4.0.0
...@@ -8605,6 +8670,8 @@ snapshots: ...@@ -8605,6 +8670,8 @@ snapshots:
dayjs@1.11.11: {} dayjs@1.11.11: {}
dayjs@1.11.21: {}
de-indent@1.0.2: {} de-indent@1.0.2: {}
debug@2.6.9: debug@2.6.9:
...@@ -8788,26 +8855,24 @@ snapshots: ...@@ -8788,26 +8855,24 @@ snapshots:
electron-to-chromium@1.4.750: {} electron-to-chromium@1.4.750: {}
element-plus@2.8.0(vue@3.4.21(typescript@5.3.3)): element-plus@2.14.2(vue@3.4.21(typescript@5.3.3)):
dependencies: dependencies:
'@ctrl/tinycolor': 3.6.1 '@ctrl/tinycolor': 4.2.0
'@element-plus/icons-vue': 2.3.1(vue@3.4.21(typescript@5.3.3)) '@element-plus/icons-vue': 2.3.2(vue@3.4.21(typescript@5.3.3))
'@floating-ui/dom': 1.6.4 '@floating-ui/dom': 1.7.6
'@popperjs/core': '@sxzz/popperjs-es@2.11.7' '@popperjs/core': '@sxzz/popperjs-es@2.11.8'
'@types/lodash': 4.17.0 '@types/lodash': 4.17.24
'@types/lodash-es': 4.17.12 '@types/lodash-es': 4.17.12
'@vueuse/core': 9.13.0(vue@3.4.21(typescript@5.3.3)) '@vueuse/core': 14.3.0(vue@3.4.21(typescript@5.3.3))
async-validator: 4.2.5 async-validator: 4.2.5
dayjs: 1.11.11 dayjs: 1.11.21
escape-html: 1.0.3 lodash: 4.18.1
lodash: 4.17.21 lodash-es: 4.18.1
lodash-es: 4.17.21 lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1)
lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21)
memoize-one: 6.0.0 memoize-one: 6.0.0
normalize-wheel-es: 1.2.0 normalize-wheel-es: 1.2.0
vue: 3.4.21(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
transitivePeerDependencies: vue-component-type-helpers: 3.3.5
- '@vue/composition-api'
emoji-regex@10.3.0: {} emoji-regex@10.3.0: {}
...@@ -8922,36 +8987,33 @@ snapshots: ...@@ -8922,36 +8987,33 @@ snapshots:
d: 1.0.2 d: 1.0.2
ext: 1.7.0 ext: 1.7.0
esbuild@0.19.12: esbuild@0.18.20:
optionalDependencies: optionalDependencies:
'@esbuild/aix-ppc64': 0.19.12 '@esbuild/android-arm': 0.18.20
'@esbuild/android-arm': 0.19.12 '@esbuild/android-arm64': 0.18.20
'@esbuild/android-arm64': 0.19.12 '@esbuild/android-x64': 0.18.20
'@esbuild/android-x64': 0.19.12 '@esbuild/darwin-arm64': 0.18.20
'@esbuild/darwin-arm64': 0.19.12 '@esbuild/darwin-x64': 0.18.20
'@esbuild/darwin-x64': 0.19.12 '@esbuild/freebsd-arm64': 0.18.20
'@esbuild/freebsd-arm64': 0.19.12 '@esbuild/freebsd-x64': 0.18.20
'@esbuild/freebsd-x64': 0.19.12 '@esbuild/linux-arm': 0.18.20
'@esbuild/linux-arm': 0.19.12 '@esbuild/linux-arm64': 0.18.20
'@esbuild/linux-arm64': 0.19.12 '@esbuild/linux-ia32': 0.18.20
'@esbuild/linux-ia32': 0.19.12 '@esbuild/linux-loong64': 0.18.20
'@esbuild/linux-loong64': 0.19.12 '@esbuild/linux-mips64el': 0.18.20
'@esbuild/linux-mips64el': 0.19.12 '@esbuild/linux-ppc64': 0.18.20
'@esbuild/linux-ppc64': 0.19.12 '@esbuild/linux-riscv64': 0.18.20
'@esbuild/linux-riscv64': 0.19.12 '@esbuild/linux-s390x': 0.18.20
'@esbuild/linux-s390x': 0.19.12 '@esbuild/linux-x64': 0.18.20
'@esbuild/linux-x64': 0.19.12 '@esbuild/netbsd-x64': 0.18.20
'@esbuild/netbsd-x64': 0.19.12 '@esbuild/openbsd-x64': 0.18.20
'@esbuild/openbsd-x64': 0.19.12 '@esbuild/sunos-x64': 0.18.20
'@esbuild/sunos-x64': 0.19.12 '@esbuild/win32-arm64': 0.18.20
'@esbuild/win32-arm64': 0.19.12 '@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.18.20
'@esbuild/win32-x64': 0.19.12
escalade@3.1.2: {} escalade@3.1.2: {}
escape-html@1.0.3: {}
escape-string-regexp@1.0.5: {} escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
...@@ -9826,11 +9888,13 @@ snapshots: ...@@ -9826,11 +9888,13 @@ snapshots:
lodash-es@4.17.21: {} lodash-es@4.17.21: {}
lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): lodash-es@4.18.1: {}
lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1):
dependencies: dependencies:
'@types/lodash-es': 4.17.12 '@types/lodash-es': 4.17.12
lodash: 4.17.21 lodash: 4.18.1
lodash-es: 4.17.21 lodash-es: 4.18.1
lodash.camelcase@4.3.0: {} lodash.camelcase@4.3.0: {}
...@@ -9866,6 +9930,8 @@ snapshots: ...@@ -9866,6 +9930,8 @@ snapshots:
lodash@4.17.21: {} lodash@4.17.21: {}
lodash@4.18.1: {}
log-update@6.0.0: log-update@6.0.0:
dependencies: dependencies:
ansi-escapes: 6.2.1 ansi-escapes: 6.2.1
...@@ -10117,6 +10183,8 @@ snapshots: ...@@ -10117,6 +10183,8 @@ snapshots:
namespace-emitter@2.0.1: {} namespace-emitter@2.0.1: {}
nanoid@3.3.12: {}
nanoid@3.3.7: {} nanoid@3.3.7: {}
nanomatch@1.2.13: nanomatch@1.2.13:
...@@ -10304,6 +10372,8 @@ snapshots: ...@@ -10304,6 +10372,8 @@ snapshots:
picocolors@1.0.0: {} picocolors@1.0.0: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {} picomatch@2.3.1: {}
pidtree@0.6.0: {} pidtree@0.6.0: {}
...@@ -10385,6 +10455,12 @@ snapshots: ...@@ -10385,6 +10455,12 @@ snapshots:
picocolors: 1.0.0 picocolors: 1.0.0
source-map-js: 1.2.0 source-map-js: 1.2.0
postcss@8.5.15:
dependencies:
nanoid: 3.3.12
picocolors: 1.1.1
source-map-js: 1.2.1
posthtml-parser@0.2.1: posthtml-parser@0.2.1:
dependencies: dependencies:
htmlparser2: 3.10.1 htmlparser2: 3.10.1
...@@ -10590,6 +10666,10 @@ snapshots: ...@@ -10590,6 +10666,10 @@ snapshots:
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
rollup@3.30.0:
optionalDependencies:
fsevents: 2.3.3
rollup@4.17.1: rollup@4.17.1:
dependencies: dependencies:
'@types/estree': 1.0.5 '@types/estree': 1.0.5
...@@ -10785,6 +10865,8 @@ snapshots: ...@@ -10785,6 +10865,8 @@ snapshots:
source-map-js@1.2.0: {} source-map-js@1.2.0: {}
source-map-js@1.2.1: {}
source-map-resolve@0.5.3: source-map-resolve@0.5.3:
dependencies: dependencies:
atob: 2.1.2 atob: 2.1.2
...@@ -11194,9 +11276,9 @@ snapshots: ...@@ -11194,9 +11276,9 @@ snapshots:
universalify@2.0.1: {} universalify@2.0.1: {}
unocss@0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): unocss@0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
'@unocss/astro': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) '@unocss/astro': 0.58.9(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
'@unocss/cli': 0.58.9(rollup@4.17.1) '@unocss/cli': 0.58.9(rollup@4.17.1)
'@unocss/core': 0.58.9 '@unocss/core': 0.58.9
'@unocss/extractor-arbitrary-variants': 0.58.9 '@unocss/extractor-arbitrary-variants': 0.58.9
...@@ -11215,9 +11297,9 @@ snapshots: ...@@ -11215,9 +11297,9 @@ snapshots:
'@unocss/transformer-compile-class': 0.58.9 '@unocss/transformer-compile-class': 0.58.9
'@unocss/transformer-directives': 0.58.9 '@unocss/transformer-directives': 0.58.9
'@unocss/transformer-variant-group': 0.58.9 '@unocss/transformer-variant-group': 0.58.9
'@unocss/vite': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)) '@unocss/vite': 0.58.9(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
optionalDependencies: optionalDependencies:
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- postcss - postcss
- rollup - rollup
...@@ -11282,7 +11364,7 @@ snapshots: ...@@ -11282,7 +11364,7 @@ snapshots:
dependencies: dependencies:
browserslist: 4.23.0 browserslist: 4.23.0
escalade: 3.1.2 escalade: 3.1.2
picocolors: 1.0.0 picocolors: 1.1.1
uri-js@4.4.1: uri-js@4.4.1:
dependencies: dependencies:
...@@ -11327,46 +11409,46 @@ snapshots: ...@@ -11327,46 +11409,46 @@ snapshots:
dependencies: dependencies:
global: 4.4.0 global: 4.4.0
vite-plugin-compression@0.5.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-compression@0.5.1(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
chalk: 4.1.2 chalk: 4.1.2
debug: 4.3.4 debug: 4.3.4
fs-extra: 10.1.0 fs-extra: 10.1.0
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite-plugin-ejs@1.7.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-ejs@1.7.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
ejs: 3.1.10 ejs: 3.1.10
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vite-plugin-eslint@1.8.1(eslint@8.57.0)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-eslint@1.8.1(eslint@8.57.0)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
eslint: 8.57.0 eslint: 8.57.0
rollup: 2.79.1 rollup: 2.79.1
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vite-plugin-progress@0.0.7(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-progress@0.0.7(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
picocolors: 1.0.0 picocolors: 1.0.0
progress: 2.0.3 progress: 2.0.3
rd: 2.0.1 rd: 2.0.1
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
vite-plugin-purge-icons@0.10.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-purge-icons@0.10.0(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
'@purge-icons/core': 0.10.0 '@purge-icons/core': 0.10.0
'@purge-icons/generated': 0.10.0 '@purge-icons/generated': 0.10.0
rollup-plugin-purge-icons: 0.10.0 rollup-plugin-purge-icons: 0.10.0
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
- supports-color - supports-color
vite-plugin-svg-icons@2.0.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-svg-icons@2.0.1(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
'@types/svgo': 2.6.4 '@types/svgo': 2.6.4
cors: 2.8.5 cors: 2.8.5
...@@ -11376,31 +11458,33 @@ snapshots: ...@@ -11376,31 +11458,33 @@ snapshots:
pathe: 0.2.0 pathe: 0.2.0
svg-baker: 1.7.0 svg-baker: 1.7.0
svgo: 2.8.0 svgo: 2.8.0
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite-plugin-top-level-await@1.4.1(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)): vite-plugin-top-level-await@1.4.1(rollup@4.17.1)(vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
dependencies: dependencies:
'@rollup/plugin-virtual': 3.0.2(rollup@4.17.1) '@rollup/plugin-virtual': 3.0.2(rollup@4.17.1)
'@swc/core': 1.4.17 '@swc/core': 1.4.17
uuid: 9.0.1 uuid: 9.0.1
vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4) vite: 4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/helpers' - '@swc/helpers'
- rollup - rollup
vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4): vite@4.5.0(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4):
dependencies: dependencies:
esbuild: 0.19.12 esbuild: 0.18.20
postcss: 8.4.38 postcss: 8.5.15
rollup: 4.17.1 rollup: 3.30.0
optionalDependencies: optionalDependencies:
'@types/node': 20.12.7 '@types/node': 20.12.7
fsevents: 2.3.3 fsevents: 2.3.3
sass: 1.75.0 sass: 1.75.0
terser: 5.30.4 terser: 5.30.4
vue-component-type-helpers@3.3.5: {}
vue-demi@0.14.7(vue@3.4.21(typescript@5.3.3)): vue-demi@0.14.7(vue@3.4.21(typescript@5.3.3)):
dependencies: dependencies:
vue: 3.4.21(typescript@5.3.3) vue: 3.4.21(typescript@5.3.3)
......
...@@ -73,4 +73,35 @@ export const ChatAnalysisApi = { ...@@ -73,4 +73,35 @@ export const ChatAnalysisApi = {
data data
}) })
}, },
// 上传至 FastGPT 测试知识库
uploadToFastGpt: async (data: {
id: number
kbTitle: string
kbContent: string
category: string
}) => {
return await request.post({
url: `/ai/chat/analysis/upload-to-fastgpt`,
data
})
},
// 上传至 FastGPT 正式知识库(测试通过后调用)
uploadToProductionFastGpt: async (data: {
id: number
kbTitle: string
kbContent: string
category: string
}) => {
return await request.post({
url: `/ai/chat/analysis/upload-to-production-fastgpt`,
data
})
},
// 测试 FastGPT 知识库连接
testFastGpt: async (data: { question: string; category: string }) => {
return await request.post({
url: `/ai/chat/analysis/test-fastgpt`,
data
})
},
} }
<template> D:\IdeaProjects\lufa-ai\lufa-ai\upload_logs\step2_analyze_local.py<template>
<ContentWrap> <!-- ==================== 视图1: 表格页 ==================== -->
<!-- 搜索工作栏 --> <div v-show="currentView === 'table'">
<el-form <ContentWrap>
class="-mb-15px" <div class="filter-card">
:model="queryParams" <div class="filter-item">
ref="queryFormRef" <span class="filter-label">分类</span>
:inline="true" <el-select v-model="queryParams.type" placeholder="请选择分类" clearable style="width:220px">
label-width="68px" <el-option label="公租房" value="公租房" />
> <el-option label="长租房" value="长租房" />
<el-form-item label="分类" prop="type"> </el-select>
<el-select </div>
v-model="queryParams.type" <div class="filter-item">
placeholder="请选择分类" <span class="filter-label">状态</span>
clearable <el-select v-model="queryParams.status" placeholder="请选择状态" clearable style="width:220px">
class="!w-240px" <el-option label="待处理" :value="0" />
> <el-option label="已处理" :value="1" />
<el-option label="公租房" value="公租房" /> </el-select>
<el-option label="长租房" value="长租房" /> </div>
</el-select> <button class="btn" @click="handleQuery">🔍 搜索</button>
</el-form-item> <button class="btn" @click="resetQuery">↻ 重置</button>
<el-form-item label="状态" prop="status"> </div>
<el-select </ContentWrap>
v-model="queryParams.status"
placeholder="请选择状态" <ContentWrap>
clearable <div class="table-card">
class="!w-240px" <table>
> <thead>
<el-option label="待处理" :value="0" /> <tr>
<el-option label="已处理" :value="1" /> <th class="col-index">序号</th>
</el-select> <th class="col-category">分类</th>
</el-form-item> <th>建议内容</th>
<el-form-item> <th class="col-time">分析时间</th>
<el-button @click="handleQuery"> <th class="col-status">状态</th>
<Icon icon="ep:search" class="mr-5px" /> 搜索 <th class="col-action">操作</th>
</el-button> </tr>
<el-button @click="resetQuery"> </thead>
<Icon icon="ep:refresh" class="mr-5px" /> 重置 <tbody id="tableBody">
</el-button> <tr
</el-form-item> v-for="(row, idx) in list" :key="row.id"
</el-form> :data-id="row.id"
</ContentWrap> :data-category="row.type"
:data-original-question="row.originalQuestion || ''">
<!-- 列表 --> <td class="col-index">{{ (queryParams.pageNo - 1) * queryParams.pageSize + idx + 1 }}</td>
<ContentWrap> <td class="col-category">{{ row.type }}</td>
<el-table <td class="col-content">{{ row.summary || '-' }}</td>
v-loading="loading" <td class="col-time">{{ formatTime(row.summaryTime || row.createTime) }}</td>
:data="list" <td class="col-status">
:stripe="true" <span :class="['status-tag', row.status === 1 ? 'done' : '']">
:show-overflow-tooltip="true" {{ row.status === 1 ? '已完成' : '待处理' }}
> </span>
<!-- <el-table-column label="编号" align="center" prop="id" width="100px" /> --> <div v-if="row.status === 1" class="completed-info">
<el-table-column label="序号" align="center" type="index" width="100px" /> <div v-if="row.modifierName">处理人:{{ row.modifierName }}</div>
<el-table-column label="分类" align="center" prop="type" min-width="120px" /> <div v-if="row.updateTime">{{ formatTime(row.updateTime) }}</div>
<el-table-column label="建议内容" align="left" prop="summary" min-width="300px"> </div>
<template #default="scope"> </td>
<div class="summary-content">{{ scope.row.summary || '-' }}</div> <td class="col-action">
</template> <button class="btn-handle" @click="goToEdit(row)">处理</button>
</el-table-column> </td>
<!-- 新增:状态标签列 --> </tr>
<el-table-column label="状态" align="center" width="100px"> </tbody>
<template #default="scope"> </table>
<el-tag :type="scope.row.status === 1 ? 'success' : 'warning'"> </div>
{{ scope.row.status === 1 ? '已处理' : '待处理' }} <Pagination
</el-tag> :total="total"
</template> v-model:page="queryParams.pageNo"
</el-table-column> v-model:limit="queryParams.pageSize"
<el-table-column label="是否已修改" align="center" prop="status" width="100px"> @pagination="getList"
<template #default="scope"> />
<el-checkbox </ContentWrap>
v-model="scope.row.status" </div>
:true-value="1"
:false-value="0" <!-- ==================== 视图2: 编辑页 ==================== -->
@change="handleStatusChange(scope.row, $event)" <div v-show="currentView === 'edit'">
/> <ContentWrap>
</template> <div class="steps">
</el-table-column> <div class="step active"><span class="step-num">1</span><span>编辑知识库</span></div>
</el-table> <span class="step-line"></span>
<div class="step"><span class="step-num">2</span><span>测试验证</span></div>
<!-- 分页 --> <span class="step-line"></span>
<Pagination <div class="step"><span class="step-num">3</span><span>完成处理</span></div>
:total="total" </div>
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize" <div class="page-header">
@pagination="getList" <div class="page-title">📝 知识库编辑</div>
/> </div>
</ContentWrap>
<!-- 原对话 -->
<div class="dialog-card">
<div class="ref-label">💬 原对话</div>
<div class="dialog-bubble user">
<span class="bubble-label">用户</span>
<span class="bubble-text" id="dlgUserQ">{{ editForm.question }}</span>
</div>
<div class="dialog-bubble ai">
<span class="bubble-label">AI</span>
<span class="bubble-text" id="dlgAiA">{{ editForm.answer }}</span>
</div>
</div>
<!-- 分析建议 -->
<div class="ref-card">
<div class="ref-label">{{ '📌 对话分析建议(分类:' + editForm.category + ')' }}</div>
<div class="ref-content">{{ editForm.suggestionContent }}</div>
</div>
<!-- 编辑表单 -->
<div class="form-card">
<div class="form-group">
<div class="form-label">
<span class="required">*</span>问答标题<span class="label-tip">(可修改)</span>
</div>
<input class="form-input" v-model="editForm.kbTitle" type="text" placeholder="请输入知识库条目标题" />
</div>
<div class="form-group">
<div class="form-label"><span class="required">*</span>正文内容</div>
<textarea class="form-textarea" v-model="editForm.kbContent" placeholder="请输入知识库条目正文内容&#10;&#10;提示:请根据原始建议完善知识内容,确保信息准确、完整、易于检索回答。"></textarea>
<div class="char-count"><span>{{ editForm.kbContent.length }}</span></div>
<div class="tip-text">💡 编辑完成后点击"保存并测试",将进入测试验证环节确认知识库条目是否正确回答问题。</div>
</div>
</div>
<div class="btn-row">
<button class="btn" @click="switchView('table')">← 返回列表</button>
<button class="btn btn-primary" :disabled="saving" @click="saveAndTest">💾 保存并测试</button>
</div>
</ContentWrap>
</div>
<!-- ==================== 视图3: 测试页 ==================== -->
<div v-show="currentView === 'test'">
<ContentWrap>
<div class="steps">
<div class="step done"><span class="step-num">1</span><span>编辑知识库</span></div>
<span class="step-line"></span>
<div class="step active"><span class="step-num">2</span><span>测试验证</span></div>
<span class="step-line"></span>
<div class="step"><span class="step-num">3</span><span>完成处理</span></div>
</div>
<div class="page-header">
<div class="page-title">🧪 知识测试验证</div>
</div>
<div class="info-card">
<div class="info-row"><span class="info-label">原始问题</span><span class="info-value">{{ testInfo.originalQuestion }}</span></div>
<div class="info-row"><span class="info-label">建议分类</span><span class="info-value"><span class="cat-tag">{{ testInfo.category }}</span></span></div>
<div class="info-row"><span class="info-label">知识标题</span><span class="info-value">{{ testInfo.kbTitle }}</span></div>
</div>
<div class="test-list">
<div :class="['test-item', testResultPassed ? 'pass-border' : 'fail-border']">
<div class="test-header">
<div class="test-question"><span class="q-label original">原始问题</span><span>{{ testInfo.originalQuestion }}</span></div>
</div>
<div class="test-body open">
<table class="compare-table">
<tr>
<th class="col-label">AI 回答</th>
<td class="ai-answer">{{ testInfo.aiAnswer || '等待测试...' }}</td>
</tr>
<tr>
<th class="col-label">期望回答</th>
<td class="expected-answer">{{ testInfo.kbContent || '-' }}</td>
</tr>
</table>
</div>
</div>
</div>
<!-- 操作按钮 -->
<div class="btn-row">
<button class="btn" @click="switchView('edit')">← 返回编辑</button>
<button class="btn btn-success" id="btnWrite" :disabled="!testDone" @click="writeToKB">测试通过</button>
</div>
</ContentWrap>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { ChatAnalysisApi, ChatAnalysisVO } from '@/api/ai/chat/analysis' import { ChatAnalysisApi } from '@/api/ai/chat/analysis'
/** AI 对话总结列表 */
defineOptions({ name: 'AiChatSummary' }) defineOptions({ name: 'AiChatSummary' })
const message = ElMessage const message = ElMessage
// ==================== 视图切换 ====================
const currentView = ref('table')
function switchView(view: string) {
currentView.value = view
}
// ==================== 表格数据 ====================
const loading = ref(true) const loading = ref(true)
const list = ref<ChatAnalysisVO[]>([]) const list = ref<any[]>([])
const total = ref(0) const total = ref(0)
const queryFormRef = ref()
// 查询参数
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
...@@ -109,8 +205,7 @@ const queryParams = reactive({ ...@@ -109,8 +205,7 @@ const queryParams = reactive({
status: undefined as number | undefined status: undefined as number | undefined
}) })
/** 查询列表 */ async function getList() {
const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await ChatAnalysisApi.getChatSummaryPage(queryParams) const data = await ChatAnalysisApi.getChatSummaryPage(queryParams)
...@@ -121,59 +216,581 @@ const getList = async () => { ...@@ -121,59 +216,581 @@ const getList = async () => {
} }
} }
/** 搜索按钮操作 */ function handleQuery() {
const handleQuery = () => {
queryParams.pageNo = 1 queryParams.pageNo = 1
getList() getList()
} }
/** 重置按钮操作 */ function resetQuery() {
const resetQuery = () => { queryParams.type = undefined
queryFormRef.value?.resetFields() queryParams.status = undefined
handleQuery() handleQuery()
} }
/** 修改状态操作(使用 switch 切换时触发) */ const formatTime = (time: string | number | undefined | null) => {
const handleStatusChange = async (row: ChatAnalysisVO, newStatus: number) => { if (time === undefined || time === null || time === '') return '-'
const oldStatus = row.status if (typeof time === 'number') {
const d = new Date(time)
const pad = (n: number) => String(n).padStart(2, '0')
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
const t = time.replace('T', ' ')
return t.length > 16 ? t.substring(0, 19) : t
}
// ==================== 编辑页数据 ====================
const editForm = reactive({
id: 0,
chatId: '',
category: '',
question: '',
answer: '',
suggestionContent: '',
kbTitle: '',
kbContent: ''
})
/** 从列表点击"处理"进入编辑 */
async function goToEdit(row: any) {
editForm.id = row.id
editForm.chatId = row.chatId || ''
editForm.category = row.type || ''
editForm.suggestionContent = row.summary || ''
editForm.kbTitle = ''
editForm.kbContent = ''
// 加载对话消息
if (editForm.chatId) {
try {
const msgs = await ChatAnalysisApi.getChatList(editForm.chatId)
if (msgs && msgs.length > 0) {
editForm.question = (msgs.find((m: any) => m.question)?.question) || '-'
editForm.answer = (msgs.find((m: any) => m.answer)?.answer) || '-'
// 自动预填标题
const firstQ = msgs.find((m: any) => m.question)
if (firstQ) {
editForm.kbTitle = firstQ.question
}
}
} catch {
editForm.question = '-'
editForm.answer = '-'
message.warning('加载对话消息失败')
}
}
// 重置测试状态
saving.value = false
testResultPassed.value = false
testDone.value = false
testInfo.originalQuestion = editForm.question
testInfo.aiAnswer = ''
testInfo.kbContent = ''
testInfo.category = editForm.category
testInfo.kbTitle = editForm.kbTitle
switchView('edit')
}
// ==================== 测试页数据 ====================
const testResultPassed = ref(false)
const testDone = ref(false)
const uploading = ref(false)
const testInfo = reactive({
originalQuestion: '',
category: '',
kbTitle: '',
kbContent: '',
aiAnswer: ''
})
const saving = ref(false)
/** 保存并测试 - 点击后立即跳转测试页,后台慢慢保存 */
async function saveAndTest() {
if (saving.value) return
if (!editForm.kbTitle.trim()) {
message.warning('请输入知识标题')
return
}
if (!editForm.kbContent.trim()) {
message.warning('请输入正文内容')
return
}
// 立即禁用按钮并跳转测试页
saving.value = true
testInfo.originalQuestion = editForm.question
testInfo.category = editForm.category
testInfo.kbTitle = editForm.kbTitle
testInfo.kbContent = editForm.kbContent
testInfo.aiAnswer = '正在保存并测试,请稍候...'
testResultPassed.value = false
testDone.value = false
switchView('test')
// 后台异步执行上传 + 测试
executeSaveAndTest()
}
async function executeSaveAndTest() {
// 先上传至测试知识库
uploading.value = true
try { try {
// 二次确认 await ChatAnalysisApi.uploadToFastGpt({
// await ElMessageBox.confirm( id: editForm.id,
// `确认要将该记录状态改为 ${newStatus === 1 ? '已处理' : '未处理'} 吗?`, kbTitle: editForm.kbTitle.trim(),
// '提示', kbContent: editForm.kbContent.trim(),
// { category: editForm.category
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }
//)
// 调用更新接口
await ChatAnalysisApi.updateSummaryStatus({
id: row.id,
status: newStatus
}) })
message.success('状态更新成功') } catch (e: any) {
// 刷新列表(保持当前页码) message.error('上传至测试知识库失败:' + (e?.message || e?.userMsg || '连接异常'))
await getList() uploading.value = false
} catch (error) { return
// 用户取消或接口失败时,恢复原来的状态 }
row.status = oldStatus uploading.value = false
if (error !== 'cancel') {
message.error('状态更新失败,请稍后重试') // 自动调用 FastGPT 测试
await runTest()
}
/** 执行测试 - 调用 FastGPT */
async function runTest() {
if (!testInfo.originalQuestion || testInfo.originalQuestion === '-') {
message.warning('无原始问题可用于测试')
return
}
testDone.value = false
testResultPassed.value = false
try {
const result = await ChatAnalysisApi.testFastGpt({
question: testInfo.originalQuestion,
category: testInfo.category
})
testInfo.aiAnswer = result
testDone.value = true
// 简单的通过判断:不包含"抱歉""暂无"即为通过
testResultPassed.value = result.indexOf('抱歉') === -1 && result.indexOf('暂无') === -1
if (!testResultPassed.value) {
message.warning('AI 回答未能命中知识库,请检查知识内容')
} }
} catch (e: any) {
testInfo.aiAnswer = '测试失败:' + (e?.message || e?.userMsg || '连接异常')
testDone.value = true
testResultPassed.value = false
} }
} }
/** 初始化加载数据 */ /** 测试通过 - 自动上传正式知识库 → 标记已完成 → 返回列表 */
async function writeToKB() {
// 1. 先上传至正式知识库
uploading.value = true
try {
await ChatAnalysisApi.uploadToProductionFastGpt({
id: editForm.id,
kbTitle: editForm.kbTitle.trim(),
kbContent: editForm.kbContent.trim(),
category: editForm.category
})
} catch (e: any) {
message.error('上传正式知识库失败:' + (e?.message || e?.userMsg || '连接异常'))
uploading.value = false
return
}
uploading.value = false
// 2. 标记为已完成
message.success('知识库写入成功!正在返回列表页...')
setTimeout(async () => {
try {
await ChatAnalysisApi.updateSummaryStatus({
id: editForm.id,
status: 1
})
} catch {
// 静默处理
}
await getList()
switchView('table')
}, 1500)
}
onMounted(() => { onMounted(() => {
getList() getList()
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.summary-content { /* ====== 筛选卡片 ====== */
white-space: pre-wrap; .filter-card {
word-break: break-all; background: #fff;
line-height: 1.5; border-radius: 4px;
padding: 16px 20px;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 16px;
}
.filter-item {
display: flex;
align-items: center;
gap: 8px;
}
.filter-label {
font-size: 13px;
color: #333;
white-space: nowrap;
}
/* ====== 通用按钮 ====== */
.btn {
height: 32px;
padding: 0 16px;
border-radius: 4px;
border: 1px solid #d9d9d9;
background: #fff;
cursor: pointer;
font-size: 13px;
display: inline-flex;
align-items: center;
gap: 4px;
color: #333;
&:hover { border-color: #1890ff; color: #1890ff; }
}
.btn-primary {
background: #1890ff;
color: #fff;
border-color: #1890ff;
&:hover { background: #40a9ff; border-color: #40a9ff; color: #fff; }
&:disabled { background: #91caff; border-color: #91caff; cursor: not-allowed; }
}
.btn-success {
background: #52c41a;
color: #fff;
border-color: #52c41a;
&:hover { background: #73d13d; border-color: #73d13d; color: #fff; }
&:disabled { background: #b7eb8f; border-color: #b7eb8f; cursor: not-allowed; }
}
/* ====== 表格 ====== */
.table-card {
background: #fff;
border-radius: 4px;
overflow: hidden;
}
table {
width: 100%;
border-collapse: collapse;
}
th {
background: #fafafa;
padding: 12px 16px;
text-align: left;
font-size: 13px;
font-weight: 500;
color: #333;
border-bottom: 1px solid #e8e8e8;
}
td {
padding: 14px 16px;
font-size: 13px;
color: #333;
border-bottom: 1px solid #f0f0f0;
vertical-align: top;
word-wrap: break-word;
}
tr:hover td { background: #fafafa; }
tr:nth-child(even) td { background: #fafbfc; }
tr:nth-child(even):hover td { background: #f0f5ff; }
.col-index { width: 60px; text-align: center; }
.col-category { width: 100px; text-align: center; }
.col-status { width: 180px; text-align: center; }
.col-time { width: 150px; text-align: center; white-space: nowrap; }
.col-action { width: 80px; text-align: center; }
.col-content { line-height: 1.6; }
.status-tag {
display: inline-block;
padding: 2px 10px;
background: #fff7e6;
color: #fa8c16;
border: 1px solid #ffd591;
border-radius: 2px;
font-size: 12px;
&.done { background: #f6ffed; color: #52c41a; border-color: #b7eb8f; }
}
.completed-info { font-size: 11px; color: #999; margin-top: 4px; line-height: 1.5; }
.btn-handle {
height: 28px;
padding: 0 12px;
background: #1890ff;
color: #fff;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 12px;
white-space: nowrap;
&:hover { background: #40a9ff; }
}
/* ====== 步骤条 ====== */
.steps {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 20px;
}
.step {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: #999;
&.active { color: #1890ff; font-weight: 500; }
&.done { color: #52c41a; }
}
.step-num {
width: 22px;
height: 22px;
border-radius: 50%;
background: #d9d9d9;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
.step.active & { background: #1890ff; }
.step.done & { background: #52c41a; }
}
.step-line {
width: 40px;
height: 1px;
background: #d9d9d9;
.step.done + & { background: #52c41a; }
}
/* ====== 页面标题 ====== */
.page-header { margin-bottom: 20px; }
.page-title { font-size: 18px; font-weight: 500; color: #333; margin-bottom: 8px; }
/* ====== 参考卡片 ====== */
.ref-card {
background: #fff;
border-radius: 4px;
padding: 16px 20px;
margin-bottom: 16px;
border-left: 3px solid #1890ff;
}
.ref-label {
font-size: 12px;
color: #999;
margin-bottom: 6px;
display: inline-block;
}
.ref-content {
font-size: 13px;
color: #555;
line-height: 1.6;
background: #fafafa;
padding: 12px;
border-radius: 4px;
}
/* ====== 对话卡片 ====== */
.dialog-card {
background: #fff;
border-radius: 4px;
padding: 16px 20px;
margin-bottom: 16px;
border-left: 3px solid #52c41a;
}
.dialog-bubble {
display: flex;
align-items: flex-start;
margin-bottom: 10px;
line-height: 1.6;
&:last-child { margin-bottom: 0; }
.bubble-label {
display: inline-block;
width: 36px;
height: 22px;
line-height: 22px;
text-align: center;
border-radius: 3px;
font-size: 11px;
color: #fff;
flex-shrink: 0;
margin-right: 10px;
margin-top: 2px;
}
&.user .bubble-label { background: #1890ff; }
&.ai .bubble-label { background: #52c41a; }
.bubble-text {
font-size: 13px;
color: #333;
background: #fafafa;
padding: 8px 12px;
border-radius: 4px;
flex: 1;
}
}
/* ====== 表单卡片 ====== */
.form-card {
background: #fff;
border-radius: 4px;
padding: 24px 20px;
margin-bottom: 16px;
}
.form-group {
margin-bottom: 20px;
&:last-child { margin-bottom: 0; }
}
.form-label {
font-size: 13px;
font-weight: 500;
color: #333;
margin-bottom: 8px;
display: flex;
align-items: center;
.required { color: #ff4d4f; margin-right: 4px; }
.label-tip { color: #999; font-weight: 400; margin-left: 4px; font-size: 12px; }
}
.form-input {
width: 100%;
height: 36px;
border: 1px solid #d9d9d9;
border-radius: 4px;
padding: 0 12px;
font-size: 13px;
color: #333;
outline: none;
transition: border-color 0.2s;
&:focus { border-color: #1890ff; box-shadow: 0 0 0 2px rgba(24,144,255,0.1); }
}
.form-textarea {
width: 100%;
min-height: 260px;
border: 1px solid #d9d9d9;
border-radius: 4px;
padding: 12px;
font-size: 13px;
color: #333;
outline: none;
resize: vertical;
line-height: 1.8;
font-family: inherit;
transition: border-color 0.2s;
&:focus { border-color: #1890ff; box-shadow: 0 0 0 2px rgba(24,144,255,0.1); }
}
.char-count {
text-align: right;
font-size: 12px;
color: #999;
margin-top: 4px;
}
.tip-text {
font-size: 12px;
color: #999;
margin-top: 8px;
}
/* ====== 按钮行 ====== */
.btn-row {
display: flex;
gap: 12px;
justify-content: flex-end;
background: #fff;
border-radius: 4px;
padding: 16px 20px;
margin-top: 16px;
}
/* ====== 测试页 ====== */
.info-card {
background: #fff;
border-radius: 4px;
padding: 16px 20px;
margin-bottom: 16px;
}
.info-row {
display: flex;
margin-bottom: 10px;
font-size: 13px;
&:last-child { margin-bottom: 0; }
}
.info-label { color: #999; width: 80px; flex-shrink: 0; }
.info-value { color: #333; line-height: 1.5; }
.cat-tag {
display: inline-block;
padding: 2px 10px;
background: #e6f7ff;
color: #1890ff;
border-radius: 2px;
font-size: 12px;
}
.test-list { margin-bottom: 20px; }
.test-item {
background: #fff;
border-radius: 4px;
margin-bottom: 12px;
overflow: hidden;
border: 1px solid #e8e8e8;
&.pass-border { border-left: 3px solid #52c41a; }
&.fail-border { border-left: 3px solid #ff4d4f; }
}
.test-header {
padding: 12px 16px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #f0f0f0;
}
.test-question {
font-size: 13px;
font-weight: 500;
color: #333;
display: flex;
align-items: center;
gap: 8px;
}
.q-label {
display: inline-block;
padding: 2px 8px;
border-radius: 2px;
font-size: 11px;
font-weight: 500;
&.original { background: #e6f7ff; color: #1890ff; }
}
.test-body { display: block; }
.compare-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
th {
background: #fafafa;
padding: 10px 12px;
text-align: left;
font-weight: 500;
color: #555;
border: 1px solid #e8e8e8;
}
td {
padding: 10px 12px;
border: 1px solid #e8e8e8;
vertical-align: top;
line-height: 1.6;
color: #333;
}
.col-label { width: 90px; color: #999; }
} }
</style> .ai-answer { background: #f6ffed; color: #333; }
\ No newline at end of file .expected-answer { background: #e6f7ff; color: #333; }
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment