From 314173e3813b2b2986c5b7136d0dd5d0121d2dcc Mon Sep 17 00:00:00 2001 From: hrx <18603305412@163.com> Date: Fri, 17 Jul 2026 15:28:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- f/web-kboss/src/App.vue | 183 +++++++++++++ f/web-kboss/src/api/newsapi/newsapi.js | 10 + f/web-kboss/src/i18n/lang/en-US.js | 88 ++++++- f/web-kboss/src/i18n/lang/zh-CN.js | 80 +++++- f/web-kboss/src/layout/components/Navbar.vue | 2 +- .../src/layout/components/Sidebar/index.vue | 21 ++ f/web-kboss/src/router/index.js | 16 +- f/web-kboss/src/utils/request.js | 11 +- .../src/views/LoginDialog/LoginDialog.vue | 3 +- f/web-kboss/src/views/beforeLogin/index.vue | 2 +- f/web-kboss/src/views/homePage/bak12_25.vue | 2 +- .../homePage/components/topBox/index.vue | 17 +- .../homePage/computeMarket/createInstance.vue | 8 +- f/web-kboss/src/views/homePage/indexNew.vue | 2 +- .../src/views/homePage/mainPage/OPC/index.vue | 6 +- .../src/views/homePage/mainPage/index.vue | 61 +++-- .../src/views/homePage/ncmatch/index.vue | 2 +- .../views/homePage/ncmatch/mainPage/index.vue | 6 +- .../ncmatch/supplyAndDemandSquare/index.vue | 2 +- .../homePage/news/ArticleEditorDialog.vue | 249 ++++++++++++++---- .../src/views/homePage/news/NewsDetail.vue | 110 +++++--- .../src/views/homePage/news/newsLog.vue | 67 +++-- .../src/views/homePage/news/newsView.vue | 17 +- .../views/homePage/trainPlatform/index.vue | 2 +- .../src/views/homePage/wxDetailPage.vue | 7 +- f/web-kboss/src/views/homePage/wxPage.vue | 9 +- .../src/views/homePageMobile/indexNew.vue | 2 +- .../login/components/ForgotPasswordDialog.vue | 55 ++-- .../views/modelManagement/modelManagement.vue | 2 + .../views/operation/modelInfoConfig/index.vue | 1 + .../src/views/product/allProduct/index.vue | 28 +- .../src/views/tokenManagement/index.vue | 1 + f/web-kboss/src/views/tokenUsage/index.vue | 10 +- 33 files changed, 846 insertions(+), 236 deletions(-) diff --git a/f/web-kboss/src/App.vue b/f/web-kboss/src/App.vue index 1663d7f..6e799fe 100644 --- a/f/web-kboss/src/App.vue +++ b/f/web-kboss/src/App.vue @@ -313,10 +313,193 @@ body { width: 100% !important; } +.news-confirm-box { + position: relative; + width: 460px !important; + padding: 28px 32px 24px; + border: 0; + border-radius: 20px; + box-shadow: 0 20px 56px rgba(15, 23, 42, 0.2); +} + +.news-confirm-box .el-message-box__header { + padding: 0; + text-align: left; +} + +.news-confirm-box .el-message-box__title { + display: flex; + align-items: center; + gap: 14px; + width: 100%; + padding-left: 0; + text-align: left; + color: #1f2937; + font-size: 20px; + font-weight: 800; + line-height: 1.35; +} + +.news-confirm-box .el-message-box__title span { + display: block; + flex: 1; + text-align: left; +} + +.news-confirm-box .el-message-box__status { + display: none !important; +} + +.news-confirm-box .el-message-box__title::before { + width: 44px; + height: 44px; + flex: 0 0 44px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 50%; + font-size: 24px; + font-weight: 800; + line-height: 1; +} + +.news-confirm-box--warning .el-message-box__title::before { + content: '!'; + color: #f59e0b; + background: #fff7ed; +} + +.news-confirm-box--danger .el-message-box__title::before { + content: '×'; + color: #ef4444; + background: #fef2f2; +} + +.news-confirm-box--success .el-message-box__title::before { + content: '✓'; + color: #22c55e; + background: #f0fdf4; +} + +.news-confirm-box .el-message-box__headerbtn { + display: none; +} + +.news-confirm-box .el-message-box__content { + position: static; + padding: 16px 0 0 58px; + text-align: left; +} + +.news-confirm-box .el-message-box__message { + margin-left: 0 !important; + padding-left: 0 !important; + display: block; + width: 100%; + text-align: left; + color: #64748b; + font-size: 16px; + line-height: 1.65; +} + +.news-confirm-box .el-message-box__message p { + margin: 0; + text-align: left; +} + +.news-confirm-box .el-message-box__btns { + display: flex; + justify-content: flex-end; + gap: 12px; + padding: 24px 0 0; +} + +.news-confirm-btn { + min-width: 88px; + height: 42px; + margin-left: 0 !important; + padding: 0 22px; + border-radius: 10px; + font-size: 15px; + font-weight: 600; +} + +.news-confirm-btn--cancel { + color: #64748b; + background: #fff; + border-color: #d8e0ec; +} + +.news-confirm-btn--cancel:hover, +.news-confirm-btn--cancel:focus { + color: #334155; + background: #f8fafc; + border-color: #cbd5e1; +} + +.news-confirm-btn--confirm { + color: #fff; + background: #3b82f6; + border-color: #3b82f6; +} + +.news-confirm-btn--confirm:hover, +.news-confirm-btn--confirm:focus { + color: #fff; + background: #2563eb; + border-color: #2563eb; +} + +.news-confirm-btn--confirm.is-danger { + background: #ef4444; + border-color: #ef4444; +} + +.news-confirm-btn--confirm.is-danger:hover, +.news-confirm-btn--confirm.is-danger:focus { + background: #dc2626; + border-color: #dc2626; +} + +.news-confirm-btn--confirm.is-success { + background: #22c55e; + border-color: #22c55e; +} + +.news-confirm-btn--confirm.is-success:hover, +.news-confirm-btn--confirm.is-success:focus { + background: #16a34a; + border-color: #16a34a; +} + @media screen and (max-width: 760px) { .el-message-box { width: 320px !important; } + + .news-confirm-box { + width: calc(100vw - 32px) !important; + padding: 24px 20px 22px; + } + + .news-confirm-box .el-message-box__title { + font-size: 18px; + } + + .news-confirm-box .el-message-box__title::before { + width: 40px; + height: 40px; + flex-basis: 40px; + font-size: 22px; + } + + .news-confirm-box .el-message-box__content { + padding-left: 52px; + } + + .news-confirm-box .el-message-box__message { + font-size: 15px; + } } * { diff --git a/f/web-kboss/src/api/newsapi/newsapi.js b/f/web-kboss/src/api/newsapi/newsapi.js index de2f50e..a5b3cf4 100644 --- a/f/web-kboss/src/api/newsapi/newsapi.js +++ b/f/web-kboss/src/api/newsapi/newsapi.js @@ -66,4 +66,14 @@ export const reqUnpublishNews = (data) => { method: 'get', params: data }) +} + +// 新闻图片上传 +export const reqUploadNewsImage = (data) => { + return request({ + url: '/docs/upload_file.dspy', + method: 'post', + data, + headers: { 'Content-Type': 'multipart/form-data' } + }) } \ No newline at end of file diff --git a/f/web-kboss/src/i18n/lang/en-US.js b/f/web-kboss/src/i18n/lang/en-US.js index 29ff115..2e01858 100644 --- a/f/web-kboss/src/i18n/lang/en-US.js +++ b/f/web-kboss/src/i18n/lang/en-US.js @@ -37,35 +37,99 @@ export default { solutionCards: { collaboration: { title: 'Collaborative Intelligence', - subtitle: 'Multi-Agent Coordination' + subtitle: 'Multi-Agent Collaboration', + detailTitle: 'Collective Intelligence', + detailSubTitle: 'Multi-Agent Collaboration', + detailDesc: 'Multiple AI agents collaborate autonomously based on role specialization, completing the full workflow of information gathering, data analysis, logical reasoning, and conclusion generation. With dynamic task allocation and shared context, complex business decisions shift from human sequential workflows to parallel agent execution, significantly reducing cycle times for high-knowledge-density work.', + metrics: { + first: { value: '10x+', label: 'Knowledge work efficiency improvement' }, + second: { value: 'Real-time', label: 'Multi-source information fusion' }, + third: { value: 'High complexity', label: 'Decision scenario adaptability' } + } }, spatial: { title: 'Spatial Intelligence', - subtitle: 'GIS Smart Analysis' + subtitle: 'GIS Intelligent Analysis', + detailTitle: 'Spatial Awakening', + detailSubTitle: 'GIS Intelligent Analysis', + detailDesc: 'Integrating Geographic Information Systems, satellite remote sensing imagery, and drone aerial photography, AI automatically identifies land feature boundaries, analyzes spatial relationships through overlay analysis, and verifies compliance constraints. Geographic spatial judgments that once required manual layer-by-layer comparison are now upgraded to automated spatial intelligence decisions delivered in minutes.', + metrics: { + first: { value: 'Days to minutes', label: 'Spatial analysis' }, + second: { value: '90%+', label: 'Violation detection accuracy' }, + third: { value: '70%', label: 'Labor cost savings' } + } }, predictive: { title: 'Predictive Insight', - subtitle: 'Intelligent Forecasting Engine' + subtitle: 'Intelligent Prediction Engine', + detailTitle: 'One Step Ahead', + detailSubTitle: 'Intelligent Prediction Engine', + detailDesc: 'Integrating physics-based models with data-driven approaches, the system collects real-time equipment operating parameters to autonomously identify early anomaly characteristics and accurately predict remaining useful life. Warnings are issued 72 hours before actual failure occurs, transforming maintenance from reactive repair to proactive defense and maximizing production continuity.', + metrics: { + first: { value: '95%+', label: 'Fault warning accuracy' }, + second: { value: '60%', label: 'Unplanned downtime reduction' }, + third: { value: '72 hours', label: 'Advance prediction lead time' } + } }, vision: { - title: 'Microscopic Insight', - subtitle: 'Machine Vision Inspection' + title: 'Insight into the Microscopic', + subtitle: 'Machine Vision Inspection', + detailTitle: 'Insight into the Microscopic', + detailSubTitle: 'Machine Vision Inspection', + detailDesc: 'Deep learning-based high-speed full-coverage defect detection for production lines, covering the entire quality inspection process including surface treatment, coating spraying, and welding assembly. This is not sampling inspection; every inch of product undergoes AI pixel-by-pixel comparison, completing defect identification and classification in milliseconds, ensuring zero compromise on product quality.', + metrics: { + first: { value: 'Milliseconds', label: 'Inspection speed' }, + second: { value: '95%', label: 'Missed detection rate reduction' }, + third: { value: '99.5%+', label: 'Identification accuracy' } + } }, qa: { title: 'Instant Answers', - subtitle: 'Intelligent Q&A Knowledge Base' + subtitle: 'Intelligent Q&A Knowledge Base', + detailTitle: 'Instant Answers', + detailSubTitle: 'Intelligent Q&A Knowledge Base', + detailDesc: 'An AI-powered Q&A engine built on enterprise private knowledge bases, supporting natural language queries for business data, technical specifications, and policy documents. Every answer is automatically annotated with authoritative sources, ensuring information is traceable and verifiable. Expert-level knowledge is no longer locked in documents but available on demand, like asking a colleague.', + metrics: { + first: { value: '<3 sec', label: 'Response time' }, + second: { value: '90%', label: 'Expert knowledge coverage' }, + third: { value: '5x', label: 'Decision-making efficiency improvement' } + } }, protection: { - title: 'Continuous Protection', - subtitle: 'Intelligent Device Monitoring' + title: 'Full Protection', + subtitle: 'Intelligent Device Monitoring', + detailTitle: 'Full Protection', + detailSubTitle: 'Intelligent Equipment Monitoring', + detailDesc: 'Building independent monitoring strategies for each device, with 3D visualization presenting real-time operating status. AI automatically identifies anomalies and highlights fault locations, while synchronously outputting detailed diagnostic recommendations and troubleshooting steps. Operations staff are liberated from being glued to screens hunting for issues; the system proactively tells you where the issue is and how to fix it.', + metrics: { + first: { value: '1000+', label: 'Monitoring points supported' }, + second: { value: '<1 sec', label: 'Alert response' }, + third: { value: '40%', label: 'Maintenance cost reduction' } + } }, document: { - title: 'Document Intelligence', - subtitle: 'Smart Document Parsing' + title: 'Read and Comprehend', + subtitle: 'Intelligent Document Parsing', + detailTitle: 'Read and Comprehend', + detailSubTitle: 'Intelligent Document Parsing', + detailDesc: 'Supporting one-click parsing of multiple formats including PDF, Word, and scanned documents. AI automatically extracts key clauses, qualification requirements, scoring criteria, and other core information for structured presentation. This is not simple OCR text recognition; it understands document semantics, judges information importance, and highlights risk points, making the core content of lengthy documents clear at a glance.', + metrics: { + first: { value: '98%+', label: 'Parsing accuracy' }, + second: { value: '85%', label: 'Manual review time reduction' }, + third: { value: 'Zero omission', label: 'Key information' } + } }, edge: { - title: 'Edge Intelligence', - subtitle: 'Edge AI Inference' + title: 'On-Site Intelligence', + subtitle: 'Edge AI Inference', + detailTitle: 'On-Site Intelligence', + detailSubTitle: 'Edge AI Inference', + detailDesc: 'Deploying AI inference capabilities at the edge of production sites, achieving millisecond-level real-time decisions through lightweight algorithms. Data does not need to be transmitted back to the cloud; sensing to judgment is completed locally, ensuring data never leaves the facility and zero-latency response. Redundant architecture guarantees 7x24 continuous operation with uninterrupted production line inspection.', + metrics: { + first: { value: '<50ms', label: 'Inference latency' }, + second: { value: 'Local', label: 'Data processed on site' }, + third: { value: '7x24h', label: 'Continuous operation' } + } } }, cases: { diff --git a/f/web-kboss/src/i18n/lang/zh-CN.js b/f/web-kboss/src/i18n/lang/zh-CN.js index a6ebcf6..aa964ac 100644 --- a/f/web-kboss/src/i18n/lang/zh-CN.js +++ b/f/web-kboss/src/i18n/lang/zh-CN.js @@ -37,35 +37,99 @@ export default { solutionCards: { collaboration: { title: '群智协作', - subtitle: '多智能体协同' + subtitle: '多智能体协同', + detailTitle: '群智协作', + detailSubTitle: '多智能体协同', + detailDesc: '多个AI智能体按角色分工,自主完成信息采集、数据分析、逻辑推理与结论生成的全流程协作。支持动态任务分配与上下文共享,将复杂业务决策从"人串联"变为"智能体并行",大幅压缩高知识密度工作的完成周期。', + metrics: { + first: { value: '10倍+', label: '知识工作效率提升' }, + second: { value: '多源', label: '信息实时融合' }, + third: { value: '高复杂度', label: '决策场景适配' } + } }, spatial: { title: '空间觉醒', - subtitle: 'GIS智能分析' + subtitle: 'GIS智能分析', + detailTitle: '空间觉醒', + detailSubTitle: 'GIS智能分析', + detailDesc: '融合地理信息系统、卫星遥感影像、无人机航拍等多维空间数据,AI自动识别地物边界、叠加分析空间关系、校验合规约束。将传统需要人工逐层比对的地理空间判断,升级为分钟级自动完成的空间智能决策。', + metrics: { + first: { value: '分钟级', label: '空间分析' }, + second: { value: '90%+', label: '违规识别准确率' }, + third: { value: '70%', label: '人力成本节省' } + } }, predictive: { title: '先见一步', - subtitle: '智能预测引擎' + subtitle: '智能预测引擎', + detailTitle: '先见一步', + detailSubTitle: '智能预测引擎', + detailDesc: '融合机理模型与数据驱动模型,通过实时采集设备运行参数,AI自主识别早期异常特征并精准预测剩余使用寿命。在故障真正发生前72小时发出预警,让运维从"事后抢修"转变为"事前防御",最大化保障生产连续性。', + metrics: { + first: { value: '95%+', label: '故障预警准确率' }, + second: { value: '60%', label: '非计划停机减少' }, + third: { value: '72小时', label: '预测提前量' } + } }, vision: { title: '洞察入微', - subtitle: '机器视觉检测' + subtitle: '机器视觉检测', + detailTitle: '洞察入微', + detailSubTitle: '机器视觉检测', + detailDesc: '基于深度学习的高速产线全幅面缺陷检测能力,覆盖表面处理、涂层喷涂、焊接装配等全流程质检环节。不是抽样检查,而是每一寸产品都经过AI逐像素比对,在毫秒级时间内完成缺陷识别与分类,确保出厂品质零妥协。', + metrics: { + first: { value: '毫秒级', label: '检测速度' }, + second: { value: '95%', label: '漏检率降低' }, + third: { value: '99.5%+', label: '识别准确率' } + } }, qa: { title: '一问即达', - subtitle: '智能问答知识库' + subtitle: '智能问答知识库', + detailTitle: '一问即达', + detailSubTitle: '智能问答知识库', + detailDesc: '基于企业私有知识库构建的AI问答引擎,支持自然语言直接查询业务数据、技术规范、制度文件。每条回答自动标注权威来源,信息可追溯、可验证。让专家级知识不再锁在文档里,而是像问同事一样即问即答。', + metrics: { + first: { value: '<3秒', label: '响应速度' }, + second: { value: '90%', label: '专家知识覆盖率' }, + third: { value: '5倍', label: '决策效率提升' } + } }, protection: { title: '全程守护', - subtitle: '设备智能监控' + subtitle: '设备智能监控', + detailTitle: '全程守护', + detailSubTitle: '设备智能监控', + detailDesc: '为每台设备构建独立监控策略,通过三维可视化实时呈现运行状态。AI自动识别异常并高亮定位故障点,同步输出详细诊断建议和排查步骤。将运维人员从"盯屏找问题"解放出来,让系统主动告诉你问题在哪、怎么修。', + metrics: { + first: { value: '1000+', label: '监控点位支持' }, + second: { value: '<1秒', label: '告警响应' }, + third: { value: '40%', label: '运维成本降低' } + } }, document: { title: '触文即懂', - subtitle: '智能文档解析' + subtitle: '智能文档解析', + detailTitle: '触文即懂', + detailSubTitle: '智能文档解析', + detailDesc: '支持PDF、Word、扫描件等多种格式一键解析,AI自动提取关键条款、资质要求、评分细则等核心信息并结构化呈现。不是简单的OCR文字识别,而是理解文档语义、判断信息重要性、标注风险点,让冗长文档的核心内容一目了然。', + metrics: { + first: { value: '98%+', label: '解析准确率' }, + second: { value: '85%', label: '人工核查时间减少' }, + third: { value: '零遗漏', label: '关键信息' } + } }, edge: { title: '端侧即算', - subtitle: '边缘AI推理' + subtitle: '边缘AI推理', + detailTitle: '端侧即算', + detailSubTitle: '边缘AI推理', + detailDesc: '将AI推理能力部署在生产现场边缘侧,通过轻量化算法实现毫秒级实时决策。数据无需回传云端,在本地即可完成从感知到判断的全流程,确保数据不出厂、响应零延迟。冗余架构设计保障7×24小时持续运行,产线检测永不中断。', + metrics: { + first: { value: '<50ms', label: '推理延迟' }, + second: { value: '本地', label: '数据处理不出厂' }, + third: { value: '7×24h', label: '持续运行' } + } } }, cases: { diff --git a/f/web-kboss/src/layout/components/Navbar.vue b/f/web-kboss/src/layout/components/Navbar.vue index 218233d..ededb2a 100644 --- a/f/web-kboss/src/layout/components/Navbar.vue +++ b/f/web-kboss/src/layout/components/Navbar.vue @@ -391,7 +391,7 @@ export default { const userId = sessionStorage.getItem('userId'); if (!userId) { this.$message.warning('请先登录'); - this.$router.push('/login'); + window.dispatchEvent(new Event('kboss-open-login-dialog')); return; } this.messageCenterVisible = true; diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue index f4a5c7f..b2d45d3 100644 --- a/f/web-kboss/src/layout/components/Sidebar/index.vue +++ b/f/web-kboss/src/layout/components/Sidebar/index.vue @@ -122,6 +122,27 @@ export default { box-sizing: border-box; } } + + ::v-deep .happy-scroll-strip, + ::v-deep .happy-scroll-bar, + ::v-deep .happy-scroll-rail { + display: none !important; + opacity: 0 !important; + width: 0 !important; + } + + ::v-deep .happy-scroll-content, + ::v-deep .happy-scroll-container { + scrollbar-width: none; + -ms-overflow-style: none; + } + + ::v-deep .happy-scroll-content::-webkit-scrollbar, + ::v-deep .happy-scroll-container::-webkit-scrollbar { + display: none; + width: 0; + height: 0; + } } .sidebar-collapse-btn { diff --git a/f/web-kboss/src/router/index.js b/f/web-kboss/src/router/index.js index 58e9c71..81298f0 100644 --- a/f/web-kboss/src/router/index.js +++ b/f/web-kboss/src/router/index.js @@ -610,7 +610,7 @@ export const asyncRoutes = [ path: "/newsLog", component: Layout, meta: { - title: "新闻动态", + title: "企业动态", fullPath: "/newsLog", noCache: true, icon: "el-icon-document", @@ -622,7 +622,7 @@ export const asyncRoutes = [ component: () => import('@/views/homePage/news/newsLog.vue'), name: 'NewsLog', meta: { - title: "新闻动态", + title: "企业动态", fullPath: "/newsLog", noCache: true, roles: ["运营"] @@ -855,6 +855,18 @@ export const asyncRoutes = [ name: "detail", hidden: true, meta: { title: "详情", cache: true }, + }, { + path: "news", + component: () => import("@/views/homePage/news/newsView.vue"), + name: "homePageNewsLegacy", + hidden: true, + meta: { title: "企业动态", cache: true }, + }, { + path: "news/detail/:id", + component: () => import("@/views/homePage/news/NewsDetail.vue"), + name: "homePageNewsDetailLegacy", + hidden: true, + meta: { title: "新闻详情", cache: true }, }, { path: "hospital", component: () => import("@/views/homePage/solve/hospital/index.vue"), diff --git a/f/web-kboss/src/utils/request.js b/f/web-kboss/src/utils/request.js index 6c46ead..a713084 100644 --- a/f/web-kboss/src/utils/request.js +++ b/f/web-kboss/src/utils/request.js @@ -165,9 +165,16 @@ service.interceptors.response.use( isRedirectingToLogin = true saveLoginRedirectPath() showErrorMessage('登录已过期,请重新登录') - router.push({path: '/login'}).finally(() => { + const currentPath = (router.currentRoute && router.currentRoute.path) || '' + const isHomePage = currentPath.includes('/homePage') || currentPath.includes('/ncmatchHome') + if (isHomePage) { + window.dispatchEvent(new Event('kboss-open-login-dialog')) isRedirectingToLogin = false - }) + } else { + router.push({path: '/login'}).finally(() => { + isRedirectingToLogin = false + }) + } } // window.location.href = 'https://www.opencomputing.cn/' } else if (code == 403) { diff --git a/f/web-kboss/src/views/LoginDialog/LoginDialog.vue b/f/web-kboss/src/views/LoginDialog/LoginDialog.vue index 3762027..263a61f 100644 --- a/f/web-kboss/src/views/LoginDialog/LoginDialog.vue +++ b/f/web-kboss/src/views/LoginDialog/LoginDialog.vue @@ -13,8 +13,7 @@
-

{{ activeTab === 'login' ? '欢迎回来' : '创建账号' }}

-

{{ activeTab === 'login' ? '登录后继续使用智能服务' : '注册开启全新体验' }}

+

{{ activeTab === 'login' ? '欢迎登录' : '创建账号' }}

diff --git a/f/web-kboss/src/views/beforeLogin/index.vue b/f/web-kboss/src/views/beforeLogin/index.vue index 281ebeb..b282c62 100644 --- a/f/web-kboss/src/views/beforeLogin/index.vue +++ b/f/web-kboss/src/views/beforeLogin/index.vue @@ -39,7 +39,7 @@ export default { }, methods: { goLoginPage() { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) }, goRegisterPage() { this.$router.push('/register') diff --git a/f/web-kboss/src/views/homePage/bak12_25.vue b/f/web-kboss/src/views/homePage/bak12_25.vue index 13c73b9..bfba7c6 100644 --- a/f/web-kboss/src/views/homePage/bak12_25.vue +++ b/f/web-kboss/src/views/homePage/bak12_25.vue @@ -407,7 +407,7 @@ export default { window.open('http://tmpweb.opencomputing.cn/col.jsp?id=136') }, login() { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) }, register() { this.$router.push('/registrationPage') diff --git a/f/web-kboss/src/views/homePage/components/topBox/index.vue b/f/web-kboss/src/views/homePage/components/topBox/index.vue index 7c4e5d8..91f25ee 100644 --- a/f/web-kboss/src/views/homePage/components/topBox/index.vue +++ b/f/web-kboss/src/views/homePage/components/topBox/index.vue @@ -367,9 +367,11 @@ export default Vue.extend({ mounted() { this.nick_name = sessionStorage.getItem('username') || '' window.addEventListener('kboss-open-ai-chat', this.handleExternalAIOpen) + window.addEventListener('kboss-open-login-dialog', this.handleExternalLoginOpen) }, beforeDestroy() { window.removeEventListener('kboss-open-ai-chat', this.handleExternalAIOpen) + window.removeEventListener('kboss-open-login-dialog', this.handleExternalLoginOpen) this.stopAIPanelDrag() }, methods: { @@ -519,17 +521,10 @@ export default Vue.extend({ this.userId = sessionStorage.getItem('userId') }, goLogin() { - this.closeProductPanelImmediate() - if (this.$route && this.$route.fullPath && !this.$route.fullPath.includes('/login')) { - sessionStorage.setItem('loginRedirectPath', this.$route.fullPath) - } - const fallback = `${window.location.origin}${window.location.pathname}#/login?fromPath=homePage` - this.$router.replace({ path: '/login', query: { fromPath: 'homePage' } }).catch(() => {}) - window.setTimeout(() => { - if (!window.location.hash.includes('/login')) { - window.location.href = fallback - } - }, 220) + this.openLoginDialog() + }, + handleExternalLoginOpen() { + this.openLoginDialog() }, handleMessageClick() { if (this.loginState) { diff --git a/f/web-kboss/src/views/homePage/computeMarket/createInstance.vue b/f/web-kboss/src/views/homePage/computeMarket/createInstance.vue index 5c50ff4..05c74c1 100644 --- a/f/web-kboss/src/views/homePage/computeMarket/createInstance.vue +++ b/f/web-kboss/src/views/homePage/computeMarket/createInstance.vue @@ -255,13 +255,7 @@ export default { submitCreate() { if (!this.loginState) { this.$message.warning('请先登录后再创建实例') - this.$router.push({ - path: '/login', - query: { - fromPath: 'computeMarketCreateInstance', - redirect: this.$route.fullPath - } - }) + window.dispatchEvent(new Event('kboss-open-login-dialog')) return } diff --git a/f/web-kboss/src/views/homePage/indexNew.vue b/f/web-kboss/src/views/homePage/indexNew.vue index 2583c36..d65ddfc 100644 --- a/f/web-kboss/src/views/homePage/indexNew.vue +++ b/f/web-kboss/src/views/homePage/indexNew.vue @@ -455,7 +455,7 @@ export default { window.open('http://tmpweb.opencomputing.cn/col.jsp?id=136') }, login() { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) }, register() { this.$router.push('/registrationPage') diff --git a/f/web-kboss/src/views/homePage/mainPage/OPC/index.vue b/f/web-kboss/src/views/homePage/mainPage/OPC/index.vue index 697c034..f72184a 100644 --- a/f/web-kboss/src/views/homePage/mainPage/OPC/index.vue +++ b/f/web-kboss/src/views/homePage/mainPage/OPC/index.vue @@ -359,7 +359,7 @@ export default Vue.extend({ } }) } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } }, initData() { @@ -418,14 +418,14 @@ export default Vue.extend({ if (this.loginState) { this.$router.push('/ncmatchHome/favoriteBox') } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } }, goHistory() { if (this.loginState) { this.$router.push('/ncmatchHome/historyBox') } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } } } diff --git a/f/web-kboss/src/views/homePage/mainPage/index.vue b/f/web-kboss/src/views/homePage/mainPage/index.vue index c1aed2f..7a01cde 100644 --- a/f/web-kboss/src/views/homePage/mainPage/index.vue +++ b/f/web-kboss/src/views/homePage/mainPage/index.vue @@ -115,7 +115,7 @@ - + @@ -338,13 +338,26 @@ export default { '触文即懂': 'document', '端侧即算': 'edge' } + const metricKeys = ['first', 'second', 'third'] return this.solutionCards.map((card) => { const key = keyMap[card.title] if (!key) return card return { ...card, title: this.$t(`home.solutionCards.${key}.title`), - subtitle: this.$t(`home.solutionCards.${key}.subtitle`) + subtitle: this.$t(`home.solutionCards.${key}.subtitle`), + detailTitle: this.$t(`home.solutionCards.${key}.detailTitle`), + detailSubTitle: this.$t(`home.solutionCards.${key}.detailSubTitle`), + detailDesc: this.$t(`home.solutionCards.${key}.detailDesc`), + metrics: card.metrics.map((metric, index) => { + const metricKey = metricKeys[index] + if (!metricKey) return metric + return { + ...metric, + value: this.$t(`home.solutionCards.${key}.metrics.${metricKey}.value`), + label: this.$t(`home.solutionCards.${key}.metrics.${metricKey}.label`) + } + }) } }) }, @@ -840,7 +853,7 @@ body.dark-theme .bg-orb { border-radius: inherit; display: flex; flex-direction: column; - justify-content: space-between; + justify-content: flex-start; color: #1f2937; text-align: left; background: transparent; @@ -850,6 +863,18 @@ body.dark-theme .bg-orb { pointer-events: none; transform: translateY(16px); transition: all 0.25s ease; + overflow-x: hidden; + overflow-y: auto; + box-sizing: border-box; + + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-thumb { + background: rgba(37, 99, 235, 0.18); + border-radius: 999px; + } strong { margin-bottom: 8px; @@ -872,23 +897,24 @@ body.dark-theme .bg-orb { p { margin: 0; color: #475569; - font-size: 13px; - line-height: 1.7; + font-size: 12px; + line-height: 1.62; letter-spacing: 0; } ul { - margin: 18px 0 0; + margin: 16px 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 10px; + gap: 8px; } li { - min-height: 72px; - padding: 10px 6px 9px; + min-width: 0; + min-height: 74px; + padding: 9px 6px 8px; border: 1px solid rgba(186, 220, 255, 0.72); border-radius: 14px; display: flex; @@ -901,21 +927,26 @@ body.dark-theme .bg-orb { b { display: block; + max-width: 100%; color: #2563eb; - font-size: 26px; - line-height: 1.1; + font-size: 22px; + line-height: 1.12; font-weight: 800; letter-spacing: -0.01em; - white-space: nowrap; + white-space: normal; + overflow-wrap: anywhere; + word-break: normal; } small { display: block; + max-width: 100%; margin-top: 7px; color: #64748b; - font-size: 12px; - line-height: 1.25; + font-size: 11px; + line-height: 1.2; font-weight: 700; + overflow-wrap: anywhere; } &::before { diff --git a/f/web-kboss/src/views/homePage/ncmatch/index.vue b/f/web-kboss/src/views/homePage/ncmatch/index.vue index 9b1c261..a99cd22 100644 --- a/f/web-kboss/src/views/homePage/ncmatch/index.vue +++ b/f/web-kboss/src/views/homePage/ncmatch/index.vue @@ -191,7 +191,7 @@ export default Vue.extend({ } }) } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } }, diff --git a/f/web-kboss/src/views/homePage/ncmatch/mainPage/index.vue b/f/web-kboss/src/views/homePage/ncmatch/mainPage/index.vue index 8eea68f..1ebd6a8 100644 --- a/f/web-kboss/src/views/homePage/ncmatch/mainPage/index.vue +++ b/f/web-kboss/src/views/homePage/ncmatch/mainPage/index.vue @@ -359,7 +359,7 @@ export default Vue.extend({ } }) } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } }, initData() { @@ -418,14 +418,14 @@ export default Vue.extend({ if (this.loginState) { this.$router.push('/ncmatchHome/favoriteBox') } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } }, goHistory() { if (this.loginState) { this.$router.push('/ncmatchHome/historyBox') } else { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) } } } diff --git a/f/web-kboss/src/views/homePage/ncmatch/supplyAndDemandSquare/index.vue b/f/web-kboss/src/views/homePage/ncmatch/supplyAndDemandSquare/index.vue index f92267a..0ae4d17 100644 --- a/f/web-kboss/src/views/homePage/ncmatch/supplyAndDemandSquare/index.vue +++ b/f/web-kboss/src/views/homePage/ncmatch/supplyAndDemandSquare/index.vue @@ -454,7 +454,7 @@ export default { }, sendInfo(type) { if (!this.loginState) { - this.$router.push('/login') + window.dispatchEvent(new Event('kboss-open-login-dialog')) return } diff --git a/f/web-kboss/src/views/homePage/news/ArticleEditorDialog.vue b/f/web-kboss/src/views/homePage/news/ArticleEditorDialog.vue index 7f01019..4f04029 100644 --- a/f/web-kboss/src/views/homePage/news/ArticleEditorDialog.vue +++ b/f/web-kboss/src/views/homePage/news/ArticleEditorDialog.vue @@ -1,21 +1,32 @@