|
|
@@ -124,70 +124,32 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="home-scenes-cards">
|
|
|
- <div class="home-scenes-card">
|
|
|
+ <div
|
|
|
+ v-for="item in hotServerList"
|
|
|
+ :key="item.id"
|
|
|
+ class="home-scenes-card"
|
|
|
+ :style="item.cardBackground ? { background: item.cardBackground } : undefined"
|
|
|
+ >
|
|
|
<div class="home-scenes-card-head">
|
|
|
- <div class="home-scenes-card-icon-box">
|
|
|
- <icon-svg name="keyword_search" size="24px" />
|
|
|
+ <div class="home-scenes-card-icon-box" :style="parseCssStyle(item.iconStyle)">
|
|
|
+ <img
|
|
|
+ v-if="item.iconUrl"
|
|
|
+ :src="item.iconUrl"
|
|
|
+ :alt="item.name"
|
|
|
+ class="home-scenes-card-icon-img"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="home-scenes-card-title">法规导则-关键词检索</div>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-desc">
|
|
|
- 赋能大模型的法规检索工具,让AI助手理解自然语言提问,智能检索相关法规
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-tags">
|
|
|
- <span>政策法规关键词检索</span>
|
|
|
- <span>标准导则关键词检索</span>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-footer">
|
|
|
- <span class="home-scenes-card-stat">近30天请求 1777万</span>
|
|
|
- <router-link
|
|
|
- class="home-scenes-card-link"
|
|
|
- :to="{ name: 'mcpServer', query: { id: '2090355139104735232' } }"
|
|
|
- >查看详情</router-link>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card">
|
|
|
- <div class="home-scenes-card-head">
|
|
|
- <div class="home-scenes-card-icon-box">
|
|
|
- <icon-svg name="semantic_retrieval" size="24px" />
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-title">法规导则-语义检索</div>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-desc">
|
|
|
- 赋能大模型的导则检索工具,让AI助手理解自然语言提问,智能检索相关导则
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-tags">
|
|
|
- <span>国家环保政策法规知识库语义检索</span>
|
|
|
- <span>国家环保标准导则知识库语义检索</span>
|
|
|
- <span>省部环保政策及标准知识库语义检索</span>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-footer">
|
|
|
- <span class="home-scenes-card-stat">近30天请求 1777万</span>
|
|
|
- <router-link
|
|
|
- class="home-scenes-card-link"
|
|
|
- :to="{ name: 'mcpServer', query: { id: '2090355139108929536' } }"
|
|
|
- >查看详情</router-link>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card">
|
|
|
- <div class="home-scenes-card-head">
|
|
|
- <div class="home-scenes-card-icon-box">
|
|
|
- <icon-svg name="question_answer_retrieval" size="24px" />
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-title">问答检索</div>
|
|
|
- </div>
|
|
|
- <div class="home-scenes-card-desc">
|
|
|
- 赋能大模型的法规问答工具,让AI助手理解自然语言提问,智能回答
|
|
|
+ <div class="home-scenes-card-title">{{ item.name }}</div>
|
|
|
</div>
|
|
|
+ <div class="home-scenes-card-desc">{{ item.describe }}</div>
|
|
|
<div class="home-scenes-card-tags">
|
|
|
- <span>关键词问答检索</span>
|
|
|
- <span>全国环保政策问答知识库语义检索</span>
|
|
|
+ <span v-for="tool in item.toolList || []" :key="tool.id">{{ tool.name }}</span>
|
|
|
</div>
|
|
|
<div class="home-scenes-card-footer">
|
|
|
- <span class="home-scenes-card-stat">近30天请求 1777万</span>
|
|
|
+ <span class="home-scenes-card-stat">近30天请求 {{ formatHotRequestCount(item.requestCount30d) }}</span>
|
|
|
<router-link
|
|
|
class="home-scenes-card-link"
|
|
|
- :to="{ name: 'mcpServer', query: { id: '2090355139108929537' } }"
|
|
|
+ :to="{ name: 'mcpServer', query: { id: item.id } }"
|
|
|
>查看详情</router-link>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -337,15 +299,6 @@
|
|
|
<div class="home-guide-tool-step">
|
|
|
<div class="home-guide-tool-step-num">1</div>
|
|
|
<div class="home-guide-tool-step-copy">
|
|
|
- <div class="home-guide-tool-step-title">内置连接器一键接入</div>
|
|
|
- <div class="home-guide-tool-step-desc">
|
|
|
- 打开 WorkBuddy → 连接第三方应用 → 管理连接器 → 找到「环评云助手」→ 一键连接并完成授权
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="home-guide-tool-step">
|
|
|
- <div class="home-guide-tool-step-num">2</div>
|
|
|
- <div class="home-guide-tool-step-copy">
|
|
|
<div class="home-guide-tool-step-title">自定义 MCP 配置</div>
|
|
|
<div class="home-guide-tool-step-desc">
|
|
|
复制右侧 JSON → 对话框发送「这是环评云助手的 MCP 服务 JSON,帮我配置自定义的 mcp」并粘贴
|
|
|
@@ -353,7 +306,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="home-guide-tool-step">
|
|
|
- <div class="home-guide-tool-step-num">3</div>
|
|
|
+ <div class="home-guide-tool-step-num">2</div>
|
|
|
<div class="home-guide-tool-step-copy">
|
|
|
<div class="home-guide-tool-step-title">验证接入是否成功</div>
|
|
|
<div class="home-guide-tool-step-desc">
|
|
|
@@ -684,69 +637,69 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</section>
|
|
|
- </div>
|
|
|
- <section class="home-section home-footer">
|
|
|
- <div class="home-footer-inner">
|
|
|
- <div class="home-footer-left">
|
|
|
- <div class="home-footer-brand">
|
|
|
- <icon-svg name="systemLogoCircle" size="24px" class="home-footer-brand-icon" />
|
|
|
- <span class="home-footer-brand-text">环评云助手 MCP · 智能环境法规标准平台</span>
|
|
|
+ <section class="home-section home-footer">
|
|
|
+ <div class="home-guide-inner home-footer-inner">
|
|
|
+ <div class="home-footer-left">
|
|
|
+ <div class="home-footer-brand">
|
|
|
+ <icon-svg name="systemLogoCircle" size="24px" class="home-footer-brand-icon" />
|
|
|
+ <span class="home-footer-brand-text">环评云助手 MCP · 智能环境法规标准平台</span>
|
|
|
+ </div>
|
|
|
+ <p class="home-footer-legal">
|
|
|
+ <span>京公网安备 11010802024562号</span>
|
|
|
+ <span class="home-footer-legal-sep">|</span>
|
|
|
+ <span>Copyright © 2001-2013 Comsenz Inc. All Rights Reserved.</span>
|
|
|
+ <span class="home-footer-legal-sep">|</span>
|
|
|
+ <span>Powered by Discuz! X3.4( 京ICP备17049511号-1 )</span>
|
|
|
+ </p>
|
|
|
</div>
|
|
|
- <p class="home-footer-legal">
|
|
|
- <span>京公网安备 11010802024562号</span>
|
|
|
- <span class="home-footer-legal-sep">|</span>
|
|
|
- <span>Copyright © 2001-2013 Comsenz Inc. All Rights Reserved.</span>
|
|
|
- <span class="home-footer-legal-sep">|</span>
|
|
|
- <span>Powered by Discuz! X3.4( 京ICP备17049511号-1 )</span>
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- <div class="home-footer-right">
|
|
|
- <div class="home-footer-icons">
|
|
|
- <div class="home-footer-icon-item">
|
|
|
- <icon-svg name="footer_WeChat" size="24px" class="home-footer-icon" />
|
|
|
- <div class="home-footer-popover">
|
|
|
- <img src="@/assets/images/service_WeChat.png" alt="云助手客服微信" class="home-footer-popover-img" />
|
|
|
- <div class="home-footer-popover-sub">云助手客服微信</div>
|
|
|
+ <div class="home-footer-right">
|
|
|
+ <div class="home-footer-icons">
|
|
|
+ <div class="home-footer-icon-item">
|
|
|
+ <icon-svg name="footer_WeChat" size="24px" class="home-footer-icon" />
|
|
|
+ <div class="home-footer-popover">
|
|
|
+ <img src="@/assets/images/service_WeChat.png" alt="云助手客服微信" class="home-footer-popover-img" />
|
|
|
+ <div class="home-footer-popover-sub">云助手客服微信</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="home-footer-icon-item">
|
|
|
- <icon-svg name="footer_phone" size="24px" class="home-footer-icon" />
|
|
|
- <div class="home-footer-popover">
|
|
|
- <div class="home-footer-popover-title">官方应用下载</div>
|
|
|
- <img src="@/assets/images/app_download.png" alt="官方应用下载" class="home-footer-popover-img" />
|
|
|
- <div class="home-footer-popover-sub">环评云助手APP</div>
|
|
|
+ <div class="home-footer-icon-item">
|
|
|
+ <icon-svg name="footer_phone" size="24px" class="home-footer-icon" />
|
|
|
+ <div class="home-footer-popover">
|
|
|
+ <div class="home-footer-popover-title">官方应用下载</div>
|
|
|
+ <img src="@/assets/images/app_download.png" alt="官方应用下载" class="home-footer-popover-img" />
|
|
|
+ <div class="home-footer-popover-sub">环评云助手APP</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="home-footer-links">
|
|
|
- <a
|
|
|
- class="home-footer-link"
|
|
|
- href="https://www.eiacloud.com/lxwmhjzx/550.jhtml"
|
|
|
- target="_blank"
|
|
|
- rel="noopener noreferrer"
|
|
|
- >关于我们</a>
|
|
|
- <a
|
|
|
- class="home-footer-link"
|
|
|
- href="https://www.eiacloud.com/bbs/userAgreement"
|
|
|
- target="_blank"
|
|
|
- rel="noopener noreferrer"
|
|
|
- >用户协议</a>
|
|
|
- <a
|
|
|
- class="home-footer-link"
|
|
|
- href="https://www.eiacloud.com/hpy/lawstandardApp/getDetailYS"
|
|
|
- target="_blank"
|
|
|
- rel="noopener noreferrer"
|
|
|
- >隐私政策</a>
|
|
|
- <a
|
|
|
- class="home-footer-link"
|
|
|
- href="https://www.eiacloud.com/lxwmlxfs/669.jhtml"
|
|
|
- target="_blank"
|
|
|
- rel="noopener noreferrer"
|
|
|
- >联系我们</a>
|
|
|
+ <div class="home-footer-links">
|
|
|
+ <a
|
|
|
+ class="home-footer-link"
|
|
|
+ href="https://www.eiacloud.com/lxwmhjzx/550.jhtml"
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ >关于我们</a>
|
|
|
+ <a
|
|
|
+ class="home-footer-link"
|
|
|
+ href="https://www.eiacloud.com/bbs/userAgreement"
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ >用户协议</a>
|
|
|
+ <a
|
|
|
+ class="home-footer-link"
|
|
|
+ href="https://www.eiacloud.com/hpy/lawstandardApp/getDetailYS"
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ >隐私政策</a>
|
|
|
+ <a
|
|
|
+ class="home-footer-link"
|
|
|
+ href="https://www.eiacloud.com/lxwmlxfs/669.jhtml"
|
|
|
+ target="_blank"
|
|
|
+ rel="noopener noreferrer"
|
|
|
+ >联系我们</a>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </section>
|
|
|
+ </section>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -754,7 +707,8 @@
|
|
|
import { computed, onMounted, ref } from "vue";
|
|
|
import { useRouter } from "vue-router";
|
|
|
import { ElMessage } from "element-plus";
|
|
|
-import { getMcpToken, createMcpToken } from "@/api/mcp";
|
|
|
+import { getMcpToken, createMcpToken, getMcpServerHotList } from "@/api/mcp";
|
|
|
+import { requireUserLogin } from "@/utils/auth";
|
|
|
import globalStore from "@/store/modules/global";
|
|
|
import demoImgGreen from "@/assets/images/test_instruction_green.jpg";
|
|
|
import demoImgBlue from "@/assets/images/test_instruction_blue.jpg";
|
|
|
@@ -769,6 +723,42 @@ const demoQuestions = [
|
|
|
];
|
|
|
const demoCaseImages = [demoImgGreen, demoImgBlue, demoImgPurple];
|
|
|
const activeDemoQuestion = ref(0);
|
|
|
+const hotServerList = ref([]);
|
|
|
+
|
|
|
+const parseCssStyle = (cssText) => {
|
|
|
+ if (!cssText) return {};
|
|
|
+ const style = {};
|
|
|
+ String(cssText)
|
|
|
+ .split(";")
|
|
|
+ .forEach((rule) => {
|
|
|
+ const colonIndex = rule.indexOf(":");
|
|
|
+ if (colonIndex === -1) return;
|
|
|
+ const key = rule.slice(0, colonIndex).trim();
|
|
|
+ const value = rule.slice(colonIndex + 1).trim();
|
|
|
+ if (!key || !value) return;
|
|
|
+ const prop = key.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
|
+ style[prop] = value;
|
|
|
+ });
|
|
|
+ return style;
|
|
|
+};
|
|
|
+
|
|
|
+const formatHotRequestCount = (value) => {
|
|
|
+ if (value == null || value === "") return "-";
|
|
|
+ const num = Number(value);
|
|
|
+ if (Number.isNaN(num)) return String(value);
|
|
|
+ return String(num);
|
|
|
+};
|
|
|
+
|
|
|
+const fetchHotServerList = async () => {
|
|
|
+ try {
|
|
|
+ const res = await getMcpServerHotList();
|
|
|
+ hotServerList.value = Array.isArray(res?.data) ? res.data : [];
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error);
|
|
|
+ hotServerList.value = [];
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
const guideToken = computed(() => global.mcpToken || "");
|
|
|
const guideTokenVisible = ref(false);
|
|
|
const guideTokenMasked = computed(() => {
|
|
|
@@ -778,7 +768,7 @@ const guideTokenMasked = computed(() => {
|
|
|
}
|
|
|
return {
|
|
|
head: token.slice(0, 9),
|
|
|
- middle: "•".repeat(token.length - 15),
|
|
|
+ middle: "*".repeat(token.length - 15),
|
|
|
tail: token.slice(-6),
|
|
|
};
|
|
|
});
|
|
|
@@ -808,6 +798,7 @@ const fetchMcpToken = async () => {
|
|
|
};
|
|
|
|
|
|
const createToken = async () => {
|
|
|
+ if (!requireUserLogin("请先登录", { redirect: true })) return;
|
|
|
if (guideToken.value) {
|
|
|
ElMessage.warning("Token 已存在,无需重复获取");
|
|
|
return;
|
|
|
@@ -822,6 +813,7 @@ const createToken = async () => {
|
|
|
|
|
|
onMounted(() => {
|
|
|
fetchMcpToken();
|
|
|
+ fetchHotServerList();
|
|
|
});
|
|
|
const guideAccessTab = ref("mcp");
|
|
|
const guideToolTab = ref("workbuddy");
|
|
|
@@ -829,7 +821,6 @@ const guideTools = [
|
|
|
{ key: "workbuddy", label: "WorkBuddy", icon: true },
|
|
|
{ key: "doubao", label: "豆包", icon: false },
|
|
|
{ key: "qoderwork", label: "Qoderwork", icon: false },
|
|
|
- { key: "wps", label: "WPS Comate", icon: false },
|
|
|
];
|
|
|
const guideDoubaoContent = {
|
|
|
alert: "豆包只能通过新建自定义连接器接入,不支持直接粘贴 JSON 配置。",
|
|
|
@@ -853,11 +844,11 @@ const guideDoubaoContent = {
|
|
|
};
|
|
|
const guideWpsContent = {
|
|
|
alert:
|
|
|
- "仅支持内置连接:WPS Comate 只能通过内置「北大法宝」连接接入,不支持粘贴 JSON 或自定义 MCP 配置。",
|
|
|
+ "仅支持内置连接:WPS Comate 只能通过内置「环评云助手」连接接入,不支持粘贴 JSON 或自定义 MCP 配置。",
|
|
|
steps: [
|
|
|
{
|
|
|
num: 1,
|
|
|
- title: "打开 WPS Comate → 进入「连接」→ 找到「北大法宝」→ 点击「连接」",
|
|
|
+ title: "打开 WPS Comate → 进入「连接」→ 找到「环评云助手」→ 点击「连接」",
|
|
|
},
|
|
|
{
|
|
|
num: 2,
|
|
|
@@ -1490,18 +1481,6 @@ const guideVerifyCards = [
|
|
|
border: 1px solid #EEF2F7;
|
|
|
}
|
|
|
|
|
|
-.home-scenes-card:nth-child(1) {
|
|
|
- background: linear-gradient(180deg, #CAEACE 0%, #FFFFFF 39.2%);
|
|
|
-}
|
|
|
-
|
|
|
-.home-scenes-card:nth-child(2) {
|
|
|
- background: linear-gradient(180deg, #BBE0FD 0%, #FFFFFF 39.2%);
|
|
|
-}
|
|
|
-
|
|
|
-.home-scenes-card:nth-child(3) {
|
|
|
- background: linear-gradient(180deg, #DED3FF 0%, #FFFFFF 39.2%);
|
|
|
-}
|
|
|
-
|
|
|
.home-scenes-card-head {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
@@ -1518,19 +1497,10 @@ const guideVerifyCards = [
|
|
|
border-radius: 12px;
|
|
|
}
|
|
|
|
|
|
-.home-scenes-card:nth-child(1) .home-scenes-card-icon-box {
|
|
|
- background: linear-gradient(135deg, #059669 0%, #10B981 100%);
|
|
|
- box-shadow: 0px 6px 16px 0px rgba(5, 150, 105, 0.25);
|
|
|
-}
|
|
|
-
|
|
|
-.home-scenes-card:nth-child(2) .home-scenes-card-icon-box {
|
|
|
- background: linear-gradient(135deg, #3B82F6 0%, #60A5FA 100%);
|
|
|
- box-shadow: 0px 6px 16px 0px rgba(59, 130, 246, 0.25);
|
|
|
-}
|
|
|
-
|
|
|
-.home-scenes-card:nth-child(3) .home-scenes-card-icon-box {
|
|
|
- background: linear-gradient(135deg, #7C3AED 0%, #A78BFA 100%);
|
|
|
- box-shadow: 0px 8px 24px 0px rgba(124, 58, 237, 0.25);
|
|
|
+.home-scenes-card-icon-img {
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ object-fit: contain;
|
|
|
}
|
|
|
|
|
|
.home-scenes-card-title {
|
|
|
@@ -2056,11 +2026,6 @@ const guideVerifyCards = [
|
|
|
text-align: left;
|
|
|
}
|
|
|
|
|
|
-.home-guide-token-mask {
|
|
|
- letter-spacing: -0.55em;
|
|
|
- margin-right: 0.55em;
|
|
|
-}
|
|
|
-
|
|
|
.home-guide-token-icons {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -3197,12 +3162,20 @@ const guideVerifyCards = [
|
|
|
.home-footer {
|
|
|
background: #F5F7FA;
|
|
|
border-radius: 0;
|
|
|
- padding: 70px 280px;
|
|
|
+ padding: 70px 0;
|
|
|
|
|
|
.home-footer-inner {
|
|
|
- display: flex;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 0 24px;
|
|
|
+ flex-direction: row;
|
|
|
justify-content: space-between;
|
|
|
align-items: flex-start;
|
|
|
+ gap: 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .home-footer-left {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
}
|
|
|
|
|
|
.home-footer-left,
|
|
|
@@ -3213,6 +3186,7 @@ const guideVerifyCards = [
|
|
|
}
|
|
|
|
|
|
.home-footer-right {
|
|
|
+ flex-shrink: 0;
|
|
|
align-items: flex-end;
|
|
|
}
|
|
|
|