diff --git a/f/web-kboss/src/permission.js b/f/web-kboss/src/permission.js index 8d32c0d..1f0fcaa 100644 --- a/f/web-kboss/src/permission.js +++ b/f/web-kboss/src/permission.js @@ -11,7 +11,7 @@ import {getHomePath} from "@/views/setting/tools"; NProgress.configure({showSpinner: false}); // NProgress Configuration -const whiteList = ["product", "/tokenMarket", "/modelDetail", "/modelApiDocument", "/login", "/homePage", "/registrationPage", "/shoppingCart", "/homePageImage","/h5HomePage",'/H5about','/modelProductDetail','/ncmatchHome', '/agreement']; // no redirect whitelist +const whiteList = ["product", "/tokenMarket", "/modelDetail", "/modelApiDocument", "/login", "/homePage", "/registrationPage", "/shoppingCart", "/homePageImage","/h5HomePage",'/H5about','/modelProductDetail','/ncmatchHome', '/agreement', '/ncmatch']; // no redirect whitelist // 获取用户代理字符串 const userAgent = window.navigator.userAgent; diff --git a/f/web-kboss/src/router/index.js b/f/web-kboss/src/router/index.js index 2bec5ab..f4ed06b 100644 --- a/f/web-kboss/src/router/index.js +++ b/f/web-kboss/src/router/index.js @@ -259,17 +259,36 @@ export const constantRoutes = [ { hidden: true, path: '/ncmatchHome', - component: () => import('@/views/homePage/ncmatch/index.vue'), + component: () => import('@/views/Ncmatch/HomeIndex.vue'), name: 'ncmatchHome', redirect: '/ncmatchHome/index', meta: { fullPath: '/ncmatchHome/index', title: '官网首页', noCache: true, icon: 'el-icon-s-home' }, children: [ { path: 'index', - component: () => import('@/views/homePage/ncmatch/mainPage/index.vue'), + component: () => import('@/views/Ncmatch/index.vue'), name: 'ncmatchPageIndex', hidden: true, - meta: { title: '首页', fullPath: '/ncmatch/mainPage/index' } + meta: { title: '首页', fullPath: '/ncmatch/mainPage/index' }, + }, + { + path: 'opcOverview', + component: () => import('@/views/Ncmatch/opcOverview.vue'), + name: 'ncmatchOpcOverview', + meta: { title: 'OPC社区概况', fullPath: '/ncmatch/opcOverview', noCache: true } + }, + { + path: 'societyNews', + component: () => import('@/views/Ncmatch/SocietyNewsBrief.vue'), + name: 'ncmatchSocietyNews', + meta: { title: '政社快讯', fullPath: '/ncmatch/societyNews', noCache: true } + }, + { + path: 'tokenMarket', + component: () => import('@/views/product/allProduct/index.vue'), + name: 'homePageTokenMarket', + hidden: true, + meta: { title: 'TOKEN市集', onCache: true } }, { path: 'supplyAndDemandSquare', @@ -481,6 +500,28 @@ export const constantRoutes = [ * 需要根据用户角色动态加载的路由 */ export const asyncRoutes = [ + // NCMatch + { + path: '/ncmatch', + component: () => import('@/views/Ncmatch/HomeIndex.vue'), + name: 'ncmatch', + redirect: '/ncmatch/opcOverview', + meta: { title: 'NCMatch', fullPath: '/ncmatch', noCache: true }, + children: [ + { + path: 'opcOverview', + component: () => import('@/views/Ncmatch/opcOverview.vue'), + name: 'ncmatchOpcOverview', + meta: { title: 'OPC社区概况', fullPath: '/ncmatch/opcOverview', noCache: true } + }, + { + path: 'societyNews', + component: () => import('@/views/Ncmatch/SocietyNewsBrief.vue'), + name: 'ncmatchSocietyNews', + meta: { title: '政社快讯', fullPath: '/ncmatch/societyNews', noCache: true } + } + ] + }, // 财务——财务概览 { path: '/financialOverview', diff --git a/f/web-kboss/src/views/H5/components/H5_dialog/MobileFullScreenConsultDialog.vue b/f/web-kboss/src/views/H5/components/H5_dialog/MobileFullScreenConsultDialog.vue new file mode 100644 index 0000000..5ace931 --- /dev/null +++ b/f/web-kboss/src/views/H5/components/H5_dialog/MobileFullScreenConsultDialog.vue @@ -0,0 +1,594 @@ + + + + + diff --git a/f/web-kboss/src/views/H5/consultDialogFullPreview/index.vue b/f/web-kboss/src/views/H5/consultDialogFullPreview/index.vue new file mode 100644 index 0000000..dbcfc69 --- /dev/null +++ b/f/web-kboss/src/views/H5/consultDialogFullPreview/index.vue @@ -0,0 +1,42 @@ + + + + + + \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/HomeIndex.vue b/f/web-kboss/src/views/Ncmatch/HomeIndex.vue new file mode 100644 index 0000000..5e84f77 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/HomeIndex.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue b/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue new file mode 100644 index 0000000..92821e0 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue b/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue new file mode 100644 index 0000000..0e5b5d3 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/f/web-kboss/src/views/Ncmatch/images/96008e08710dc520404f3d41cf05366c.jpg b/f/web-kboss/src/views/Ncmatch/images/96008e08710dc520404f3d41cf05366c.jpg new file mode 100644 index 0000000..4133ded Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/96008e08710dc520404f3d41cf05366c.jpg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/a86f92912905fe67783b4ec66c1ac72a.png b/f/web-kboss/src/views/Ncmatch/images/a86f92912905fe67783b4ec66c1ac72a.png new file mode 100644 index 0000000..6d2b66e Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/a86f92912905fe67783b4ec66c1ac72a.png differ diff --git a/f/web-kboss/src/views/Ncmatch/images/logo.png b/f/web-kboss/src/views/Ncmatch/images/logo.png new file mode 100644 index 0000000..046b572 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/logo.png differ diff --git a/f/web-kboss/src/views/Ncmatch/images/office-space.jpeg b/f/web-kboss/src/views/Ncmatch/images/office-space.jpeg new file mode 100644 index 0000000..ed12a23 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/office-space.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/opc-community-sign.jpeg b/f/web-kboss/src/views/Ncmatch/images/opc-community-sign.jpeg new file mode 100644 index 0000000..5ebfce3 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/opc-community-sign.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/step1-register.jpg b/f/web-kboss/src/views/Ncmatch/images/step1-register.jpg new file mode 100644 index 0000000..3404d84 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/step1-register.jpg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/step2-submit.jpg b/f/web-kboss/src/views/Ncmatch/images/step2-submit.jpg new file mode 100644 index 0000000..a99ec14 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/step2-submit.jpg differ diff --git a/f/web-kboss/src/views/Ncmatch/index.vue b/f/web-kboss/src/views/Ncmatch/index.vue new file mode 100644 index 0000000..f2382a8 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/index.vue @@ -0,0 +1,135 @@ + + + + + \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less b/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less new file mode 100644 index 0000000..4d2f71c --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less @@ -0,0 +1,362 @@ +::v-deep .opc-application-dialog { + margin: 0 auto !important; + width: 100% !important; + max-width: 900px; + // max-height: 85vh; + border-radius: 16px !important; + background: #ffffff; + border: 1px solid #dbeafe; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + overflow: hidden; + display: flex; + flex-direction: column; + + .el-dialog__header { + display: none; + } + + .el-dialog__body { + flex: 1; + padding: 0; + overflow: hidden; + min-height: 0; + } +} + +::v-deep .el-dialog__wrapper { + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + overflow: hidden; +} + +.dialog-layout { + display: flex; + flex-direction: column; + height: 100%; + background: #ffffff; + overflow: hidden; +} + +.dialog-header { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 32px; + background: #ffffff; + border-bottom: 1px solid #f0f0f0; + + .header-info { + .header-title { + margin: 0 0 4px; + font-size: 20px; + font-weight: 700; + color: #111827; + } + + .header-desc { + margin: 0; + font-size: 13px; + color: #6b7280; + } + } + + .close-btn { + width: 32px; + height: 32px; + border: none; + border-radius: 8px; + background: #f3f4f6; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + color: #374151; + } + } +} + +.dialog-body { + flex: 1; + overflow-y: auto; + padding: 24px 32px; +} + +.dialog-footer { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: flex-end; + gap: 12px; + padding: 16px 32px; + background: #f9fafb; + border-top: 1px solid #f0f0f0; + + .el-button--primary { + background: linear-gradient(135deg, #2563eb, #06b6d4); + border: none; + border-radius: 8px; + padding: 0 24px; + height: 40px; + font-weight: 500; + font-size: 14px; + transition: opacity 0.2s; + + &:hover { + opacity: 0.9; + } + } + + .el-button { + border-radius: 8px; + font-size: 14px; + height: 40px; + } +} + +.form-section { + margin-bottom: 32px; + + .section-title { + display: flex; + align-items: center; + gap: 8px; + margin: 0 0 16px; + font-size: 15px; + font-weight: 600; + color: #111827; + + .section-num { + width: 24px; + height: 24px; + border-radius: 50%; + background: #dbeafe; + color: #2563eb; + font-size: 12px; + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + } + } +} + +.grid-2 { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; + + .col-span-2 { + grid-column: 1 / -1; + } +} + +.grid-3 { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; +} + +.full-width { + width: 100%; +} + +.field-tip { + margin: 4px 0 0; + font-size: 12px; + color: #9ca3af; +} + +.checkbox-group { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.checkbox-label { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 12px; + background: #f9fafb; + border: 1px solid #e5e7eb; + border-radius: 8px; + cursor: pointer; + transition: all 0.15s; + font-size: 14px; + color: #374151; + + input { + display: none; + } + + &:hover { + border-color: #2563eb; + color: #2563eb; + } + + &.active { + background: #eff6ff; + border-color: #2563eb; + color: #2563eb; + font-weight: 500; + } +} + +.file-upload-area { + display: flex; + flex-direction: column; + gap: 8px; +} + +.upload-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border: 1px dashed #2563eb; + border-radius: 8px; + color: #2563eb; + font-size: 14px; + cursor: pointer; + width: fit-content; + transition: all 0.15s; + + &:hover { + background: #eff6ff; + } + + input { + display: none; + } +} + +.file-list { + display: flex; + flex-direction: column; + gap: 4px; +} + +.file-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 6px 12px; + background: #f9fafb; + border-radius: 6px; + font-size: 13px; + color: #374151; + + .file-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .file-remove { + border: none; + background: none; + color: #9ca3af; + font-size: 16px; + cursor: pointer; + padding: 0 4px; + line-height: 1; + + &:hover { + color: #ef4444; + } + } +} + +::v-deep .opc-form { + .el-form-item { + margin-bottom: 0; + } + + .el-form-item__label { + padding-bottom: 6px; + font-size: 14px; + font-weight: 500; + color: #374151; + line-height: 1.4; + } + + .el-form-item__error { + position: static; + padding-top: 4px; + font-size: 12px; + } + + .el-input__inner, + .el-textarea__inner { + border-radius: 8px; + border-color: #e5e7eb; + background: #f9fafb; + font-size: 14px; + color: #111827; + + &::placeholder { + color: #9ca3af; + } + + &:focus { + border-color: #2563eb; + background: #ffffff; + box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); + } + } + + .el-input { + .el-input__inner { + height: 40px; + } + } + + .el-textarea__inner { + resize: none; + } + + .el-checkbox__input.is-checked .el-checkbox__inner { + background-color: #2563eb; + border-color: #2563eb; + } + + .el-checkbox__label { + color: #374151; + font-size: 14px; + } +} + +@media (max-width: 768px) { + .grid-2, + .grid-3 { + grid-template-columns: 1fr; + } + + .col-span-2 { + grid-column: 1; + } + + .dialog-header { + padding: 16px 20px; + } + + .dialog-body { + padding: 20px 16px; + } + + .dialog-footer { + padding: 12px 16px; + } + + ::v-deep .opc-application-dialog { + margin: 16px auto !important; + max-height: calc(100vh - 32px); + } +} diff --git a/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less b/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less new file mode 100644 index 0000000..eb9fca8 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less @@ -0,0 +1,540 @@ +.society-news-page { + position: relative; + z-index: 10; + padding: 56px 0 80px; + height: 100%; + //height: calc(100vh - 64px); + background: linear-gradient(135deg, #f0f4ff 0%, #ffffff 50%, #f8fafc 100%); +} + +.news-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 24px; + width: 100%; + box-sizing: border-box; +} + + +.news-header { + text-align: center; + margin-bottom: 48px; +} + +.news-title { + margin: 0 0 16px; + font-size: 36px; + font-weight: 700; + background: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.news-subtitle { + margin: 0 auto; + max-width: 576px; + font-size: 16px; + line-height: 1.625; + color: #6b7280; +} + +.filter-row { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 12px; + margin-bottom: 48px; +} + +.filter-btn { + padding: 8px 20px; + border-radius: 9999px; + font-size: 14px; + font-weight: 500; + background: #ffffff; + color: #6b7280; + border: 1px solid #e5e7eb; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #eff6ff; + color: #2563eb; + border-color: #93c5fd; + } + + &.active { + background: linear-gradient(135deg, #2563eb, #3b82f6); + color: #ffffff; + border-color: #2563eb; + } +} + +.activity-list { + display: flex; + justify-content: center; + align-items: stretch; + flex-direction: column; + gap: 16px; + width: 100%; + max-width: 960px; + margin: 0 auto; +} + +.activity-card { + position: relative; + border-radius: 16px; + padding: 24px; + cursor: pointer; + animation: fadeIn 0.4s ease-out both; + + &:hover { + transform: translateY(-2px); + border-color: rgba(59, 130, 246, 0.3); + box-shadow: 0 8px 32px rgba(59, 130, 246, 0.12); + + .activity-title { + color: #2563eb; + } + + .arrow-icon { + color: #2563eb; + transform: translateX(4px); + } + } +} + + +.activity-row { + display: flex; + gap: 24px; + flex-direction: row; + align-items: flex-start; + +} + + + +.activity-date { + flex-shrink: 0; + display: flex; + align-items: center; + gap: 8px; +} + + + +.date-block { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 64px; + height: 64px; + border-radius: 12px; + border: 1px solid; + background-clip: padding-box; + + .date-day { + font-size: 20px; + font-weight: 700; + line-height: 1; + } + + .date-month { + font-size: 12px; + color: #6b7280; + margin-top: 2px; + } +} + +.date-block-blue { + background-image: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(6, 182, 212, 0.08)); + border-color: #bfdbfe; + + .date-day { + color: #2563eb; + } +} + +.date-block-green { + background-image: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(20, 184, 166, 0.08)); + border-color: #a7f3d0; + + .date-day { + color: #059669; + } +} + +.date-block-violet { + background-image: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(168, 85, 247, 0.08)); + border-color: #ddd6fe; + + .date-day { + color: #7c3aed; + } +} + +.activity-main { + flex: 1; + min-width: 0; +} + +.activity-meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 12px; + margin-bottom: 12px; +} + +.tag { + display: inline-block; + padding: 2px 10px; + border-radius: 9999px; + font-size: 12px; + font-weight: 500; + line-height: 1.5; +} + +.tag-blue { + background: rgba(59, 130, 246, 0.08); + color: #2563eb; + border: 1px solid rgba(59, 130, 246, 0.2); +} + +.tag-green { + background: rgba(16, 185, 129, 0.08); + color: #059669; + border: 1px solid rgba(16, 185, 129, 0.2); +} + +.tag-violet { + background: rgba(139, 92, 246, 0.08); + color: #7c3aed; + border: 1px solid rgba(139, 92, 246, 0.2); +} + +.meta-source { + font-size: 14px; + color: #6b7280; +} + +.activity-title { + margin: 0 0 12px; + font-size: 18px; + font-weight: 600; + line-height: 1.5; + color: #111827; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + transition: color 0.2s; +} + +.activity-desc { + margin: 0; + font-size: 14px; + line-height: 1.625; + color: #4b5563; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.activity-arrow { + flex-shrink: 0; + display: none; + align-items: center; +} + +@media (min-width: 1024px) { + .activity-arrow { + display: flex; + } +} + +.arrow-icon { + width: 20px; + height: 20px; + color: #93c5fd; + transition: all 0.2s; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(8px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* glass-card 玻璃拟态背景 */ +.glass-card { + background: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(59, 130, 246, 0.15); + box-shadow: 0 4px 16px rgba(59, 130, 246, 0.04); + transition: all 0.3s; +} + +@media (max-width: 768px) { + .news-title { + font-size: 28px; + } + + .activity-card { + padding: 20px 16px; + } + + .activity-meta { + gap: 8px; + } + + .activity-title { + font-size: 16px; + } +} + +/* ==================== Detail Modal ==================== */ +.detail-overlay { + position: fixed; + inset: 0; + z-index: 999; + display: flex; + align-items: flex-start; + justify-content: center; + padding: 40px 24px; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + overflow-y: auto; +} + +.detail-panel { + position: relative; + width: 100%; + max-width: 720px; + background: #ffffff; + border-radius: 16px; + border: 1px solid #dbeafe; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + overflow: hidden; + flex-shrink: 0; +} + +.detail-sticky-header { + position: sticky; + top: 0; + z-index: 10; + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 24px; + background: linear-gradient(to bottom, #ffffff 80%, rgba(255,255,255,0.95)); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border-bottom: 1px solid #dbeafe; + + .detail-header-left { + display: flex; + align-items: center; + gap: 12px; + } + + .detail-tag { + display: inline-block; + padding: 3px 12px; + border-radius: 9999px; + font-size: 12px; + font-weight: 500; + line-height: 1.5; + + &.tag-blue { + background: rgba(59, 130, 246, 0.1); + color: #2563eb; + border: 1px solid rgba(59, 130, 246, 0.2); + } + + &.tag-green { + background: rgba(16, 185, 129, 0.1); + color: #059669; + border: 1px solid rgba(16, 185, 129, 0.2); + } + + &.tag-violet { + background: rgba(139, 92, 246, 0.1); + color: #7c3aed; + border: 1px solid rgba(139, 92, 246, 0.2); + } + } + + .detail-publisher { + font-size: 13px; + color: #6b7280; + } +} + +.detail-close { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border: 1px solid #e5e7eb; + border-radius: 8px; + background: #f3f4f6; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + color: #374151; + } +} + +.detail-body { + padding: 24px 32px; +} + +.detail-title { + margin: 0 0 16px; + font-size: 20px; + font-weight: 700; + line-height: 1.45; + color: #111827; +} + +.detail-meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 16px; + margin-bottom: 24px; + padding-bottom: 24px; + border-bottom: 1px solid #f0f0f0; + + .detail-meta-item { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 13px; + color: #6b7280; + } + + .detail-meta-link { + color: #3b82f6; + text-decoration: none; + transition: color 0.2s; + + &:hover { + color: #2563eb; + text-decoration: underline; + } + } + + svg { + flex-shrink: 0; + opacity: 0.6; + } +} + +.detail-content { + font-size: 14px; + line-height: 1.9; + color: #374151; + + p { + margin: 0 0 12px; + } + + strong { + color: #111827; + } +} + +.detail-sticky-footer { + position: sticky; + bottom: 0; + z-index: 10; + display: flex; + align-items: center; + justify-content: flex-end; + padding: 16px 24px; + background: linear-gradient(to top, #ffffff 80%, rgba(255,255,255,0.95)); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border-top: 1px solid #dbeafe; +} + +.btn-close { + height: 40px; + padding: 0 24px; + border: none; + border-radius: 12px; + font-size: 14px; + font-weight: 500; + color: #ffffff; + background: linear-gradient(135deg, #2563eb, #3b82f6); + box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); + cursor: pointer; + transition: opacity 0.2s; + + &:hover { + opacity: 0.9; + } +} + +.detail-fade-enter-active, +.detail-fade-leave-active { + transition: opacity 0.25s ease; +} + +.detail-fade-enter-active .detail-panel, +.detail-fade-leave-active .detail-panel { + transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); +} + +.detail-fade-enter, +.detail-fade-leave-to { + opacity: 0; +} + +.detail-fade-enter .detail-panel, +.detail-fade-leave-to .detail-panel { + transform: translateY(20px) scale(0.96); + opacity: 0; +} + +@media (max-width: 640px) { + .detail-panel { + max-width: 100%; + border-radius: 16px; + } + + .detail-cover { + padding: 24px 20px 20px; + } + + .detail-body { + padding: 20px; + } + + .detail-title { + font-size: 18px; + } +} \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/less/opcOverview.less b/f/web-kboss/src/views/Ncmatch/less/opcOverview.less new file mode 100644 index 0000000..9bd681f --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/less/opcOverview.less @@ -0,0 +1,520 @@ +.opc-overview-page { + min-height: 100%; + position: relative; + overflow-x: hidden; + background: linear-gradient(135deg, #f0f4ff 0%, #ffffff 50%, #f8fafc 100%); + } + + /* 背景装饰球 */ + .bg-orb { + position: fixed; + border-radius: 50%; + pointer-events: none; + z-index: 0; + + &.orb-blue { + width: 600px; + height: 600px; + top: -100px; + right: -100px; + background: radial-gradient(circle, rgba(59, 130, 246, 0.12) 0%, transparent 70%); + filter: blur(60px); + } + + &.orb-cyan { + width: 500px; + height: 500px; + bottom: 100px; + left: -150px; + background: radial-gradient(circle, rgba(6, 182, 212, 0.1) 0%, transparent 70%); + filter: blur(60px); + } + } + + /* Hero Section */ + .hero-section { + position: relative; + padding-top: 40px; + padding-bottom: 64px; + overflow: hidden; + } + + .hero-glow { + position: absolute; + border-radius: 50%; + pointer-events: none; + + &.glow-blue { + width: 480px; + height: 480px; + top: 0; + right: 10%; + background: radial-gradient(circle, rgba(59, 130, 246, 0.15) 0%, transparent 70%); + filter: blur(40px); + } + + &.glow-cyan { + width: 400px; + height: 400px; + bottom: 0; + left: 5%; + background: radial-gradient(circle, rgba(6, 182, 212, 0.12) 0%, transparent 70%); + filter: blur(40px); + } + } + + .hero-content { + position: relative; + max-width: 1200px; + margin: 0 auto; + padding: 0 24px; + z-index: 1; + } + + .hero-text-wrap { + text-align: center; + margin-bottom: 48px; + } + + .hero-title { + margin: 0 0 16px; + font-size: 48px; + font-weight: 700; + background: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .hero-subtitle { + margin: 0; + font-size: 20px; + color: #9ca3af; + } + + .hero-images { + display: grid; + gap: 24px; + grid-template-columns: repeat(1, 1fr); + } + + @media (min-width: 768px) { + .hero-images { + grid-template-columns: repeat(2, 1fr); + } + } + + .image-card { + position: relative; + border-radius: 16px; + overflow: hidden; + border: 1px solid rgba(59, 130, 246, 0.15); + transition: all 0.3s; + + &:hover { + border-color: rgba(59, 130, 246, 0.3); + box-shadow: 0 8px 32px rgba(59, 130, 246, 0.08); + + .image-wrapper img { + transform: scale(1.05); + } + } + } + + .image-wrapper { + width: 100%; + height: 320px; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.5s; + } + } + + .image-overlay { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 16px; + background: linear-gradient(to top, rgba(0, 0, 0, 0.6), transparent); + + h3 { + margin: 0; + font-size: 16px; + font-weight: 600; + color: #fff; + } + } + + /* 入驻流程 */ + .process-section { + position: relative; + padding: 96px 24px; + overflow: hidden; + } + + .section-bg { + position: absolute; + inset: 0; + background: linear-gradient(to bottom, transparent, rgba(59, 130, 246, 0.03), transparent); + } + + .section-glow { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 800px; + height: 800px; + background: radial-gradient(circle, rgba(59, 130, 246, 0.08) 0%, transparent 70%); + border-radius: 50%; + filter: blur(60px); + pointer-events: none; + } + + .section-content { + position: relative; + max-width: 1200px; + margin: 0 auto; + z-index: 1; + } + + .process-header { + text-align: center; + margin-bottom: 48px; + } + + .section-title { + margin: 0 0 16px; + font-size: 36px; + font-weight: 700; + background: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .section-desc { + margin: 0; + font-size: 18px; + color: #9ca3af; + text-align: center; + } + + .process-connector { + display: none; + } + + @media (min-width: 1024px) { + .process-connector { + display: block; + position: absolute; + top: 97px; + left: 25%; + right: 25%; + height: 2px; + // background: linear-gradient(to right, rgba(59, 130, 246, 0.3), rgba(6, 182, 212, 0.4), rgba(59, 130, 246, 0.3)); + pointer-events: none; + } + } + + .process-grid { + display: grid; + grid-template-columns: 1fr; + gap: 32px; + } + + @media (min-width: 1024px) { + .process-grid { + grid-template-columns: repeat(2, 1fr); + gap: 48px; + } + } + + .process-card { + position: relative; + border-radius: 24px; + overflow: hidden; + transition: all 0.5s; + animation: fadeInUp 0.6s ease-out both; + + &::before { + content: ''; + position: absolute; + inset: 0; + border-radius: 24px; + padding: 1px; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.3), rgba(6, 182, 212, 0.2), rgba(59, 130, 246, 0.3)); + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + mask-composite: exclude; + pointer-events: none; + transition: opacity 0.5s; + opacity: 0.5; + } + + &:hover::before { + opacity: 1; + } + + &:nth-child(2) { + animation-delay: 0.2s; + } + + &:hover { + box-shadow: 0 8px 32px rgba(59, 130, 246, 0.12); + + .step-badge-01 { + background: linear-gradient(135deg, #3b82f6, #06b6d4); + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); + } + + .step-badge-02 { + background: linear-gradient(135deg, #06b6d4, #3b82f6); + box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3); + } + } + } + + @keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + .step-badge { + position: absolute; + top: 16px; + right: 16px; + width: 48px; + height: 48px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + z-index: 10; + transition: all 0.3s; + + span { + font-size: 16px; + font-weight: 700; + color: #1e293b; + } + + &.step-badge-01 { + background: linear-gradient(135deg, #3b82f6, #06b6d4); + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2); + + span { + color: #fff; + } + } + + &.step-badge-02 { + background: linear-gradient(135deg, #06b6d4, #3b82f6); + box-shadow: 0 4px 12px rgba(6, 182, 212, 0.2); + + span { + color: #fff; + } + } + } + + .card-media { + padding: 24px 24px 0; + + .media-inner { + border-radius: 16px; + overflow: hidden; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(6, 182, 212, 0.05)); + padding: 6px; + + img { + width: 100%; + height: 208px; + object-fit: cover; + border-radius: 12px; + transition: transform 0.5s; + + &:hover { + transform: scale(1.03); + } + } + } + } + + .card-body { + padding: 20px 24px 28px; + } + + .card-icon-row { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; + + h3 { + margin: 0; + font-size: 18px; + font-weight: 700; + color: #1e293b; + } + } + + .card-icon { + width: 40px; + height: 40px; + border-radius: 10px; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(6, 182, 212, 0.1)); + border: 1px solid rgba(59, 130, 246, 0.2); + display: flex; + align-items: center; + justify-content: center; + color: #2563eb; + + svg { + flex-shrink: 0; + } + } + + .card-body > p { + margin: 0 0 16px; + font-size: 14px; + color: #9ca3af; + line-height: 1.6; + } + + .card-link-row { + padding-top: 16px; + border-top: 1px solid #f1f5f9; + } + + .card-link, + .card-link-btn { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 14px; + color: #3b82f6; + text-decoration: none; + transition: color 0.2s; + background: none; + border: none; + padding: 0; + cursor: pointer; + + &:hover { + color: #06b6d4; + } + + svg { + flex-shrink: 0; + } + } + + /* CTA */ + .cta-section { + position: relative; + padding: 64px 24px; + text-align: center; + } + + .cta-bg { + position: absolute; + inset: 0; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), rgba(139, 92, 246, 0.05)); + border-radius: 0; + } + + .cta-content { + position: relative; + max-width: 640px; + margin: 0 auto; + z-index: 1; + } + + .cta-title { + margin: 0 0 20px; + font-size: 30px; + font-weight: 700; + background: linear-gradient(135deg, #3b82f6 0%, #06b6d4 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .cta-desc { + margin: 0 0 32px; + font-size: 16px; + color: #9ca3af; + } + + .cta-btn { + display: inline-block; + padding: 16px 40px; + border: none; + border-radius: 12px; + font-size: 16px; + font-weight: 500; + color: #fff; + background: linear-gradient(135deg, #3b82f6, #06b6d4); + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.25); + cursor: pointer; + transition: all 0.2s; + + &:hover { + opacity: 0.9; + transform: translateY(-2px); + } + } + + /* 响应式 */ + @media (max-width: 768px) { + .nav-links { + display: none; + } + + .hero-title { + font-size: 32px; + } + + .hero-subtitle { + font-size: 16px; + } + + .hero-images { + grid-template-columns: 1fr; + } + + .image-wrapper { + height: 220px; + } + + .section-title { + font-size: 28px; + } + + .process-grid { + grid-template-columns: 1fr; + } + } + + @media (max-width: 480px) { + .hero-title { + font-size: 28px; + } + + .card-icon-row h3 { + font-size: 16px; + } + } \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/opcOverview.vue b/f/web-kboss/src/views/Ncmatch/opcOverview.vue new file mode 100644 index 0000000..5e3dce9 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/opcOverview.vue @@ -0,0 +1,161 @@ + + + + + + \ No newline at end of file diff --git a/f/web-kboss/src/views/Ncmatch/token.vue b/f/web-kboss/src/views/Ncmatch/token.vue new file mode 100644 index 0000000..e69de29 diff --git a/f/web-kboss/src/views/Ncmatch/topNav.vue b/f/web-kboss/src/views/Ncmatch/topNav.vue new file mode 100644 index 0000000..839a2c4 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/topNav.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file