mirror of
https://gitee.com/270580156/weiyu.git
synced 2025-12-30 10:52:26 +00:00
update
This commit is contained in:
@@ -87,6 +87,12 @@ public interface ThreadRepository extends JpaRepository<ThreadEntity, Long>, Jpa
|
||||
@Query("SELECT t FROM ThreadEntity t WHERE t.topic LIKE :topicPrefix AND t.status = :status AND t.deleted = false ORDER BY t.createdAt ASC")
|
||||
List<ThreadEntity> findByTopicStartsWithAndStatusAndDeletedFalse(@Param("topicPrefix") String topicPrefix, @Param("status") String status);
|
||||
|
||||
/**
|
||||
* 统计在时间范围内按关闭来源分组的数量
|
||||
*/
|
||||
@Query("SELECT t.closeType, COUNT(t) FROM ThreadEntity t WHERE t.status = 'CLOSED' AND t.deleted = false AND t.updatedAt BETWEEN :start AND :end GROUP BY t.closeType")
|
||||
List<Object[]> countClosedGroupedByCloseType(@Param("start") java.time.ZonedDateTime start, @Param("end") java.time.ZonedDateTime end);
|
||||
|
||||
/**
|
||||
* 根据访客ID查找最近的客服会话记录
|
||||
* 查找访客与客服的最近一次会话,按更新时间倒序排列
|
||||
|
||||
@@ -78,6 +78,17 @@ public class ThreadRestService
|
||||
private final BytedeskEventPublisher bytedeskEventPublisher;
|
||||
|
||||
private final TopicRestService topicRestService;
|
||||
|
||||
public Map<String, Long> reportClosedByCloseType(java.time.ZonedDateTime start, java.time.ZonedDateTime end) {
|
||||
List<Object[]> rows = threadRepository.countClosedGroupedByCloseType(start, end);
|
||||
Map<String, Long> result = new HashMap<>();
|
||||
for (Object[] row : rows) {
|
||||
String key = (String) row[0];
|
||||
Long count = (Long) row[1];
|
||||
result.put(key != null ? key : "NONE", count != null ? count : 0L);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ThreadEntity> queryByOrgEntity(ThreadRequest request) {
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.bytedesk.core.thread.ThreadRestService;
|
||||
import com.bytedesk.core.thread.enums.ThreadProcessStatusEnum;
|
||||
import com.bytedesk.core.thread.event.ThreadAcceptEvent;
|
||||
import com.bytedesk.core.thread.event.ThreadCloseEvent;
|
||||
import com.bytedesk.core.quartz.event.QuartzOneMinEvent;
|
||||
import com.bytedesk.core.utils.BdDateUtils;
|
||||
import com.bytedesk.service.utils.ThreadMessageUtil;
|
||||
import com.bytedesk.core.message.content.QueueContent;
|
||||
@@ -166,6 +167,21 @@ public class QueueMemberEventListener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onQuartzOneMinEvent(QuartzOneMinEvent event) {
|
||||
int removed = queueMemberRestService.cleanupIdleQueueMembers();
|
||||
if (removed > 0) {
|
||||
log.info("Idle queue members removed: {}", removed);
|
||||
// 广播所有前缀的队列位置刷新:这里简化处理,按当前活跃排队线程重新计算
|
||||
// 获取任意还在排队的线程列表,通过提取前缀分组刷新
|
||||
// 为避免复杂度,这里只刷新受影响的所有排队会话(全量刷新)
|
||||
// 查找所有排队中的线程(匹配已有查询方法前缀需要 topicPrefix, 此处使用简单遍历 prefix 集合)
|
||||
// 简化:不区分前缀,逐个线程重新发送其位置
|
||||
// 由于缺少批量查询接口,这里暂不实现全量广播以免性能问题,可后续优化
|
||||
// (占位注释)
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onMessageCreateEvent(MessageCreateEvent event) {
|
||||
MessageEntity message = event.getMessage();
|
||||
|
||||
@@ -49,4 +49,10 @@ public interface QueueMemberRepository extends JpaRepository<QueueMemberEntity,
|
||||
@Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.orgUid = :orgUid AND qm.robotQueue IS NOT NULL AND qm.createdAt >= :startDate AND qm.createdAt <= :endDate")
|
||||
Long countByRobotUidAndDateBetween(@Param("orgUid") String orgUid, @Param("robotUid") String robotUid, @Param("startDate") ZonedDateTime startDate, @Param("endDate") ZonedDateTime endDate);
|
||||
|
||||
/**
|
||||
* 查找在指定时间之前仍未发送任何访客消息(visitorMessageCount=0)的排队成员
|
||||
*/
|
||||
@Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.visitorMessageCount = 0 AND qm.deleted = false AND qm.visitorEnqueueAt < :threshold")
|
||||
List<QueueMemberEntity> findIdleBefore(@Param("threshold") ZonedDateTime threshold);
|
||||
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ public class QueueMemberRestService extends BaseRestServiceWithExport<QueueMembe
|
||||
private final QueueMemberRepository queueMemberRepository;
|
||||
private final ModelMapper modelMapper;
|
||||
private final UidUtils uidUtils;
|
||||
private static final int IDLE_QUEUE_TIMEOUT_MINUTES = 5; // 超过5分钟未发首条消息视为过期
|
||||
|
||||
/**
|
||||
* 访客主动退出排队:标记离开时间并软删除队列成员记录
|
||||
@@ -56,6 +57,25 @@ public class QueueMemberRestService extends BaseRestServiceWithExport<QueueMembe
|
||||
entity.setDeleted(true);
|
||||
save(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫描超时(未发送首条消息)的排队成员并标记删除
|
||||
*/
|
||||
public int cleanupIdleQueueMembers() {
|
||||
java.time.ZonedDateTime threshold = com.bytedesk.core.utils.BdDateUtils.now().minusMinutes(IDLE_QUEUE_TIMEOUT_MINUTES);
|
||||
java.util.List<QueueMemberEntity> idleList = queueMemberRepository.findIdleBefore(threshold);
|
||||
int removed = 0;
|
||||
for (QueueMemberEntity qm : idleList) {
|
||||
// 只处理仍处于排队状态的线程
|
||||
if (qm.getThread() != null && qm.getThread().isQueuing()) {
|
||||
qm.setDeleted(true);
|
||||
qm.setVisitorLeavedAt(com.bytedesk.core.utils.BdDateUtils.now());
|
||||
save(qm);
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
|
||||
@Cacheable(value = "queue_member", key = "#uid", unless = "#result == null")
|
||||
@Override
|
||||
|
||||
@@ -48,6 +48,7 @@ import com.bytedesk.core.thread.ThreadResponse;
|
||||
import com.bytedesk.core.thread.ThreadRestService;
|
||||
import com.bytedesk.core.thread.ThreadRequest;
|
||||
import com.bytedesk.core.thread.enums.ThreadCloseTypeEnum;
|
||||
import java.time.ZonedDateTime;
|
||||
import com.bytedesk.service.queue_member.QueueMemberRestService;
|
||||
import com.bytedesk.core.utils.JsonResult;
|
||||
|
||||
@@ -202,6 +203,18 @@ public class VisitorRestControllerVisitor {
|
||||
return ResponseEntity.ok(JsonResult.success("close success", response));
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭来源分布报表(按 updatedAt 时间范围统计)
|
||||
*/
|
||||
@GetMapping("/thread/report/close-type")
|
||||
public ResponseEntity<?> reportCloseType(@RequestParam(value = "start", required = false) Long startEpoch,
|
||||
@RequestParam(value = "end", required = false) Long endEpoch) {
|
||||
ZonedDateTime end = endEpoch != null ? ZonedDateTime.ofInstant(java.time.Instant.ofEpochMilli(endEpoch), java.time.ZoneId.systemDefault()) : ZonedDateTime.now();
|
||||
ZonedDateTime start = startEpoch != null ? ZonedDateTime.ofInstant(java.time.Instant.ofEpochMilli(startEpoch), java.time.ZoneId.systemDefault()) : end.minusDays(1);
|
||||
Map<String, Long> data = threadRestService.reportClosedByCloseType(start, end);
|
||||
return ResponseEntity.ok(JsonResult.success("report success", data));
|
||||
}
|
||||
|
||||
// 清空当前用户所有未读消息
|
||||
@PostMapping("/message/unread/clear")
|
||||
public ResponseEntity<?> clearMessageUnread(@RequestBody MessageUnreadRequest request) {
|
||||
|
||||
259
starter/src/main/resources/templates/ftl/ai.ftl
Normal file
259
starter/src/main/resources/templates/ftl/ai.ftl
Normal file
@@ -0,0 +1,259 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="${lang! 'zh-CN'}">
|
||||
<head>
|
||||
<#-- Header -->
|
||||
<#include "./common/header_meta.ftl" />
|
||||
<#include "./common/header_js.ftl" />
|
||||
<#include "./common/header_css.ftl" />
|
||||
<#-- i18n macro -->
|
||||
<#include "./common/macro/i18n.ftl" />
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<#-- 导航 -->
|
||||
<#include "./common/header_nav.ftl" />
|
||||
|
||||
<!-- **************** MAIN CONTENT START **************** -->
|
||||
<main>
|
||||
|
||||
<!-- =======================
|
||||
Page Banner START -->
|
||||
<section class="bg-light py-5">
|
||||
<div class="container">
|
||||
<div class="row g-4 g-md-5 position-relative">
|
||||
<!-- Main content START -->
|
||||
<div class="col-lg-8">
|
||||
<!-- Title -->
|
||||
<h1><@t key="page.ai.title">AI Agent - 智能代理平台</@t></h1>
|
||||
<p class="lead"><@t key="page.ai.subtitle">对接主流大模型,打造企业智能助手</@t></p>
|
||||
</div>
|
||||
<!-- Main content END -->
|
||||
|
||||
<!-- Image -->
|
||||
<div class="col-lg-4 text-center">
|
||||
<img src="assets/images/element/online.svg" class="h-200px" alt="<@t key='alt.ai.icon'>AI Agent图标</@t>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Page Banner END -->
|
||||
|
||||
<!-- =======================
|
||||
Features START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<!-- Title -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.ai.features.title">核心功能</@t></h2>
|
||||
<p class="mb-0"><@t key="page.ai.features.desc">AI技术赋能企业业务流程</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature list -->
|
||||
<div class="row g-4">
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-primary bg-opacity-10 text-primary rounded-circle mb-3">
|
||||
<i class="bi bi-cpu fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.llm.title">多模型支持</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.llm.desc">对接Ollama、DeepSeek、智谱、通义千问等主流大模型,灵活选择最适合的AI能力</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-success bg-opacity-10 text-success rounded-circle mb-3">
|
||||
<i class="bi bi-server fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.deploy.title">私有部署</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.deploy.desc">支持本地部署Ollama等开源大模型,数据安全完全可控,无需担心隐私泄露</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-warning bg-opacity-10 text-warning rounded-circle mb-3">
|
||||
<i class="bi bi-chat-quote fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.assistant.title">智能对话</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.assistant.desc">自然语言理解,上下文记忆,多轮对话,提供类人化的交互体验</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-info bg-opacity-10 text-info rounded-circle mb-3">
|
||||
<i class="bi bi-book fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.rag.title">知识库问答</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.rag.desc">基于RAG技术,结合企业知识库提供精准答案,减少幻觉提升可靠性</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-danger bg-opacity-10 text-danger rounded-circle mb-3">
|
||||
<i class="bi bi-diagram-3 fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.agent.title">智能体编排</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.agent.desc">Function Calling、MCP协议支持,构建复杂的AI智能体工作流</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-purple bg-opacity-10 text-purple rounded-circle mb-3">
|
||||
<i class="bi bi-code-slash fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.ai.feature.api.title">API接口</@t></h5>
|
||||
<p class="mb-0"><@t key="page.ai.feature.api.desc">标准化API接口,方便集成到现有业务系统,快速实现AI能力</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Features END -->
|
||||
|
||||
<!-- =======================
|
||||
Models START -->
|
||||
<section class="bg-light">
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.ai.models.title">支持的大模型</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<!-- Model card -->
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="card text-center h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Ollama</h5>
|
||||
<p class="card-text small"><@t key="page.ai.model.ollama">本地部署,开源免费,支持Llama、Qwen等多种模型</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Model card -->
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="card text-center h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">DeepSeek</h5>
|
||||
<p class="card-text small"><@t key="page.ai.model.deepseek">国产优秀大模型,性价比高,推理能力强</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Model card -->
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="card text-center h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.model.zhipu.name">智谱AI</@t></h5>
|
||||
<p class="card-text small"><@t key="page.ai.model.zhipu">清华技术背景,中文理解能力出色</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Model card -->
|
||||
<div class="col-md-6 col-lg-3">
|
||||
<div class="card text-center h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.model.qwen.name">通义千问</@t></h5>
|
||||
<p class="card-text small"><@t key="page.ai.model.qwen">阿里云出品,多模态能力强大</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Models END -->
|
||||
|
||||
<!-- =======================
|
||||
Use Cases START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.ai.usecases.title">应用场景</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<!-- Use case 1 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.usecase.customer.title">智能客服</@t></h5>
|
||||
<p class="card-text"><@t key="page.ai.usecase.customer.desc">7x24小时自动回复客户咨询,结合知识库提供准确答案,人工坐席兜底</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 2 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.usecase.writing.title">内容创作</@t></h5>
|
||||
<p class="card-text"><@t key="page.ai.usecase.writing.desc">AI写作助手,自动生成文档、报告、公告等内容,提升创作效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 3 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.usecase.analysis.title">数据分析</@t></h5>
|
||||
<p class="card-text"><@t key="page.ai.usecase.analysis.desc">自然语言查询数据,自动生成报表和可视化图表,洞察业务趋势</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 4 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.ai.usecase.automation.title">流程自动化</@t></h5>
|
||||
<p class="card-text"><@t key="page.ai.usecase.automation.desc">智能体自动执行重复性任务,工作流编排提升业务效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Use Cases END -->
|
||||
|
||||
<#include "./common/action_box.ftl" />
|
||||
|
||||
</main>
|
||||
<!-- **************** MAIN CONTENT END **************** -->
|
||||
|
||||
<!-- ======================= Footer START -->
|
||||
<#include "./common/footer_nav.ftl" />
|
||||
<!-- ======================= Footer END -->
|
||||
|
||||
<#include "./common/footer_js.ftl" />
|
||||
|
||||
<#-- livechat code 客服代码 -->
|
||||
<#include "./common/bytedesk.ftl" />
|
||||
|
||||
<#-- trace code 统计代码 -->
|
||||
<#include "./common/track.ftl" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
236
starter/src/main/resources/templates/ftl/kbase.ftl
Normal file
236
starter/src/main/resources/templates/ftl/kbase.ftl
Normal file
@@ -0,0 +1,236 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="${lang! 'zh-CN'}">
|
||||
<head>
|
||||
<#-- Header -->
|
||||
<#include "./common/header_meta.ftl" />
|
||||
<#include "./common/header_js.ftl" />
|
||||
<#include "./common/header_css.ftl" />
|
||||
<#-- i18n macro -->
|
||||
<#include "./common/macro/i18n.ftl" />
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<#-- 导航 -->
|
||||
<#include "./common/header_nav.ftl" />
|
||||
|
||||
<!-- **************** MAIN CONTENT START **************** -->
|
||||
<main>
|
||||
|
||||
<!-- =======================
|
||||
Page Banner START -->
|
||||
<section class="bg-light py-5">
|
||||
<div class="container">
|
||||
<div class="row g-4 g-md-5 position-relative">
|
||||
<!-- Main content START -->
|
||||
<div class="col-lg-8">
|
||||
<!-- Title -->
|
||||
<h1><@t key="page.kbase.title">企业知识库 / 帮助中心</@t></h1>
|
||||
<p class="lead"><@t key="page.kbase.subtitle">AI赋能的企业知识管理与服务平台</@t></p>
|
||||
</div>
|
||||
<!-- Main content END -->
|
||||
|
||||
<!-- Image -->
|
||||
<div class="col-lg-4 text-center">
|
||||
<img src="assets/images/element/engineering.svg" class="h-200px" alt="<@t key='alt.kbase.icon'>知识库图标</@t>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Page Banner END -->
|
||||
|
||||
<!-- =======================
|
||||
Features START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<!-- Title -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.kbase.features.title">核心功能</@t></h2>
|
||||
<p class="mb-0"><@t key="page.kbase.features.desc">全方位的知识管理解决方案</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature list -->
|
||||
<div class="row g-4">
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-primary bg-opacity-10 text-primary rounded-circle mb-3">
|
||||
<i class="bi bi-folder fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.manage.title">知识管理</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.manage.desc">文档分类管理、版本控制、权限设置,构建结构化的企业知识体系</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-success bg-opacity-10 text-success rounded-circle mb-3">
|
||||
<i class="bi bi-robot fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.aiwriter.title">AI写作助手</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.aiwriter.desc">自动撰写文档内容、智能润色、多语言翻译,大幅提升内容创作效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-warning bg-opacity-10 text-warning rounded-circle mb-3">
|
||||
<i class="bi bi-chat-left-dots fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.aiqa.title">AI知识问答</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.aiqa.desc">基于知识库内容的智能问答,快速定位答案,提升知识检索效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-info bg-opacity-10 text-info rounded-circle mb-3">
|
||||
<i class="bi bi-search fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.search.title">全文搜索</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.search.desc">强大的全文检索能力,支持模糊搜索、高亮显示、搜索建议</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-danger bg-opacity-10 text-danger rounded-circle mb-3">
|
||||
<i class="bi bi-globe fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.public.title">对外发布</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.public.desc">支持将知识库发布为公开帮助中心,为客户提供自助服务</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-purple bg-opacity-10 text-purple rounded-circle mb-3">
|
||||
<i class="bi bi-people fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.kbase.feature.collab.title">协作编辑</@t></h5>
|
||||
<p class="mb-0"><@t key="page.kbase.feature.collab.desc">多人协作编辑、评论反馈、变更追踪,促进知识共建共享</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Features END -->
|
||||
|
||||
<!-- =======================
|
||||
Scenarios START -->
|
||||
<section class="bg-light">
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.kbase.scenarios.title">应用场景</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.kbase.scenario.internal.title">内部知识库</@t></h5>
|
||||
<ul>
|
||||
<li><@t key="page.kbase.scenario.internal.item1">技术文档、开发规范、API文档</@t></li>
|
||||
<li><@t key="page.kbase.scenario.internal.item2">培训资料、操作手册、FAQ</@t></li>
|
||||
<li><@t key="page.kbase.scenario.internal.item3">制度流程、规章制度、通知公告</@t></li>
|
||||
<li><@t key="page.kbase.scenario.internal.item4">项目文档、会议纪要、知识沉淀</@t></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.kbase.scenario.external.title">对外帮助中心</@t></h5>
|
||||
<ul>
|
||||
<li><@t key="page.kbase.scenario.external.item1">产品使用说明、功能介绍</@t></li>
|
||||
<li><@t key="page.kbase.scenario.external.item2">常见问题解答、故障排查</@t></li>
|
||||
<li><@t key="page.kbase.scenario.external.item3">视频教程、图文教程</@t></li>
|
||||
<li><@t key="page.kbase.scenario.external.item4">更新日志、版本说明</@t></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Scenarios END -->
|
||||
|
||||
<!-- =======================
|
||||
Benefits START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.kbase.benefits.title">核心价值</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<ul class="list-group list-group-borderless">
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.kbase.benefit.efficiency">减少重复性咨询,提升客服效率和客户满意度</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.kbase.benefit.knowledge">沉淀企业知识资产,避免知识流失</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.kbase.benefit.onboarding">加速新员工培训,降低学习成本</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.kbase.benefit.selfservice">提供自助服务,降低人工支持成本</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.kbase.benefit.ai">AI技术赋能,提升内容质量和检索效率</@t>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 text-center">
|
||||
<img src="assets/images/element/07.svg" class="img-fluid" alt="<@t key='alt.kbase.benefit'>知识库价值插图</@t>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Benefits END -->
|
||||
|
||||
<#include "./common/action_box.ftl" />
|
||||
|
||||
</main>
|
||||
<!-- **************** MAIN CONTENT END **************** -->
|
||||
|
||||
<!-- ======================= Footer START -->
|
||||
<#include "./common/footer_nav.ftl" />
|
||||
<!-- ======================= Footer END -->
|
||||
|
||||
<#include "./common/footer_js.ftl" />
|
||||
|
||||
<#-- livechat code 客服代码 -->
|
||||
<#include "./common/bytedesk.ftl" />
|
||||
|
||||
<#-- trace code 统计代码 -->
|
||||
<#include "./common/track.ftl" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
250
starter/src/main/resources/templates/ftl/team.ftl
Normal file
250
starter/src/main/resources/templates/ftl/team.ftl
Normal file
@@ -0,0 +1,250 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="${lang! 'zh-CN'}">
|
||||
<head>
|
||||
<#-- Header -->
|
||||
<#include "./common/header_meta.ftl" />
|
||||
<#include "./common/header_js.ftl" />
|
||||
<#include "./common/header_css.ftl" />
|
||||
<#-- i18n macro -->
|
||||
<#include "./common/macro/i18n.ftl" />
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<#-- 导航 -->
|
||||
<#include "./common/header_nav.ftl" />
|
||||
|
||||
<!-- **************** MAIN CONTENT START **************** -->
|
||||
<main>
|
||||
|
||||
<!-- =======================
|
||||
Page Banner START -->
|
||||
<section class="bg-light py-5">
|
||||
<div class="container">
|
||||
<div class="row g-4 g-md-5 position-relative">
|
||||
<!-- Main content START -->
|
||||
<div class="col-lg-8">
|
||||
<!-- Title -->
|
||||
<h1><@t key="page.team.title">企业IM - 智能即时通讯平台</@t></h1>
|
||||
<p class="lead"><@t key="page.team.subtitle">面向中大型团队打造的企业级即时通讯解决方案</@t></p>
|
||||
</div>
|
||||
<!-- Main content END -->
|
||||
|
||||
<!-- Image -->
|
||||
<div class="col-lg-4 text-center">
|
||||
<img src="assets/images/element/coding.svg" class="h-200px" alt="<@t key='alt.team.icon'>企业IM图标</@t>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Page Banner END -->
|
||||
|
||||
<!-- =======================
|
||||
Features START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<!-- Title -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.team.features.title">核心功能</@t></h2>
|
||||
<p class="mb-0"><@t key="page.team.features.desc">为企业团队协作提供全方位支持</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature list -->
|
||||
<div class="row g-4">
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-primary bg-opacity-10 text-primary rounded-circle mb-3">
|
||||
<i class="bi bi-chat-dots fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.chat.title">即时通讯</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.chat.desc">支持单聊、群聊、文件传输、语音视频通话等完整IM功能,支持数万人同时在线</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-success bg-opacity-10 text-success rounded-circle mb-3">
|
||||
<i class="bi bi-robot fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.ai.title">AI智能助手</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.ai.desc">AI群聊助手自动回答常见问题,AI会话总结提炼关键信息,提升沟通效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-warning bg-opacity-10 text-warning rounded-circle mb-3">
|
||||
<i class="bi bi-people fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.org.title">组织架构</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.org.desc">完善的组织架构管理,支持部门、角色、权限配置,灵活适配企业组织结构</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-info bg-opacity-10 text-info rounded-circle mb-3">
|
||||
<i class="bi bi-shield-check fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.security.title">安全可靠</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.security.desc">端到端加密,聊天记录监控,敏感信息过滤,满足企业安全合规要求</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-danger bg-opacity-10 text-danger rounded-circle mb-3">
|
||||
<i class="bi bi-clock-history fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.history.title">消息存档</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.history.desc">完整的聊天记录存储与检索,支持历史消息搜索,满足审计需求</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature item -->
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card card-body h-100">
|
||||
<div class="icon-lg bg-purple bg-opacity-10 text-purple rounded-circle mb-3">
|
||||
<i class="bi bi-phone fs-5"></i>
|
||||
</div>
|
||||
<h5><@t key="page.team.feature.multiplatform.title">多平台支持</@t></h5>
|
||||
<p class="mb-0"><@t key="page.team.feature.multiplatform.desc">支持Web、Windows、Mac、Linux、iOS、Android等全平台,随时随地沟通</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Features END -->
|
||||
|
||||
<!-- =======================
|
||||
Advantages START -->
|
||||
<section class="bg-light">
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.team.advantages.title">产品优势</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 align-items-center">
|
||||
<!-- Left content -->
|
||||
<div class="col-lg-6">
|
||||
<ul class="list-group list-group-borderless">
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.team.advantage.scalable">高并发架构设计,支持数万人同时在线,轻松应对大规模团队协作</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.team.advantage.opensource">完全开源,支持私有部署,数据100%掌控在您手中</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.team.advantage.customizable">灵活的二次开发能力,可根据企业需求深度定制</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.team.advantage.integrated">与其他企业系统无缝集成,打造统一工作平台</@t>
|
||||
</li>
|
||||
<li class="list-group-item d-flex">
|
||||
<i class="bi bi-check-circle-fill text-success me-2"></i>
|
||||
<@t key="page.team.advantage.ai">AI技术赋能,智能助手提升沟通效率和质量</@t>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Right image -->
|
||||
<div class="col-lg-6 text-center">
|
||||
<img src="assets/images/element/07.svg" class="img-fluid" alt="<@t key='alt.team.advantage'>企业IM优势插图</@t>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Advantages END -->
|
||||
|
||||
<!-- =======================
|
||||
Use Cases START -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="row mb-4">
|
||||
<div class="col-12 text-center">
|
||||
<h2><@t key="page.team.usecases.title">应用场景</@t></h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<!-- Use case 1 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.team.usecase.internal.title">企业内部协作</@t></h5>
|
||||
<p class="card-text"><@t key="page.team.usecase.internal.desc">部门间沟通、项目协作、工作汇报、通知公告等日常办公场景</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 2 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.team.usecase.remote.title">远程办公</@t></h5>
|
||||
<p class="card-text"><@t key="page.team.usecase.remote.desc">分布式团队实时沟通,跨地域协作,在线会议,远程培训</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 3 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.team.usecase.support.title">内部支持</@t></h5>
|
||||
<p class="card-text"><@t key="page.team.usecase.support.desc">IT支持、HR咨询、行政服务等内部支持场景,提升员工体验</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Use case 4 -->
|
||||
<div class="col-md-6">
|
||||
<div class="card border h-100">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><@t key="page.team.usecase.emergency.title">应急指挥</@t></h5>
|
||||
<p class="card-text"><@t key="page.team.usecase.emergency.desc">突发事件快速响应,紧急通知即时触达,协同处置提升效率</@t></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- =======================
|
||||
Use Cases END -->
|
||||
|
||||
<#include "./common/action_box.ftl" />
|
||||
|
||||
</main>
|
||||
<!-- **************** MAIN CONTENT END **************** -->
|
||||
|
||||
<!-- ======================= Footer START -->
|
||||
<#include "./common/footer_nav.ftl" />
|
||||
<!-- ======================= Footer END -->
|
||||
|
||||
<#include "./common/footer_js.ftl" />
|
||||
|
||||
<#-- livechat code 客服代码 -->
|
||||
<#include "./common/bytedesk.ftl" />
|
||||
|
||||
<#-- trace code 统计代码 -->
|
||||
<#include "./common/track.ftl" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user