diff --git a/f/web-kboss/package.json b/f/web-kboss/package.json index 5081730..703ab73 100644 --- a/f/web-kboss/package.json +++ b/f/web-kboss/package.json @@ -98,6 +98,7 @@ "lint-staged": "8.1.5", "mockjs": "1.0.1-beta3", "plop": "2.3.0", + "postcss": "^8.5.26", "postcss-pxtorem": "^5.0.0", "runjs": "4.3.2", "sass": "1.39.0", @@ -106,6 +107,7 @@ "serve-static": "1.13.2", "svg-sprite-loader": "4.1.3", "svgo": "1.2.0", + "tailwindcss": "^2.2.19", "vue-happy-scroll": "^2.1.1", "vue-template-compiler": "2.6.10", "webpack": "^4.47.0" diff --git a/f/web-kboss/src/components/FloatingBox/FloatingBox.vue b/f/web-kboss/src/components/FloatingBox/FloatingBox.vue index ce2ef33..cca8240 100644 --- a/f/web-kboss/src/components/FloatingBox/FloatingBox.vue +++ b/f/web-kboss/src/components/FloatingBox/FloatingBox.vue @@ -133,11 +133,18 @@ export default { }, computed: { shouldShowFloatingConsult() { + const path = this.$route && this.$route.path ? this.$route.path : '' + // 兼容 hash 模式部署在外部域名的情况(例如 www.ncmatch.cn) + const hashPath = (window.location.hash || '').replace(/^#/, '') const isHomePage = [ '/homePage/index', - '/homePage/indexLast', - '/ncmatchHome/index' - ].includes(this.$route.path) + // '/homePage/indexLast', + + ].some(p => path === p || hashPath === p || hashPath.startsWith(p + '/')) + // ncmatch 子站单独部署场景下,不显示云宝 + const isNcmatchSubSite = window.location.host === 'www.ncmatch.cn' + || window.location.host.endsWith('.ncmatch.cn') + if (isNcmatchSubSite) return false return isHomePage || this.orgType === '2' || this.orgType === '3' || !this.userid } }, diff --git a/f/web-kboss/src/router/index.js b/f/web-kboss/src/router/index.js index f4ed06b..786d15f 100644 --- a/f/web-kboss/src/router/index.js +++ b/f/web-kboss/src/router/index.js @@ -120,6 +120,16 @@ export const constantRoutes = [ title: 'H5合同智能审查案例', component: () => import('@/views/H5/contractCase/index.vue'), meta: { title: '合同智能审查', fullPath: '/h5HomePage/contract-case' } + }, + { + path: 'consultDialogFull', + name: 'consultDialogFull', + title: 'H5咨询对话', + component: () => import('@/views/H5/consultDialogFullPreview/index.vue'), + meta: { + title: 'H5咨询对话', + fullPath: '/h5HomePage/consultDialogFull' + } } ] }, @@ -283,19 +293,28 @@ export const constantRoutes = [ name: 'ncmatchSocietyNews', meta: { title: '政社快讯', fullPath: '/ncmatch/societyNews', noCache: true } }, + // token市集 { path: 'tokenMarket', - component: () => import('@/views/product/allProduct/index.vue'), - name: 'homePageTokenMarket', + component: () => import('@/views/Ncmatch/token.vue'), + name: 'ncmatchTokenMarket', hidden: true, - meta: { title: 'TOKEN市集', onCache: true } + meta: { title: 'TOKEN市集', fullPath: '/ncmatch/tokenMarket', noCache: true } + }, + // 云枢基座 + { + path: 'cloudHub', + component: () => import('@/views/Ncmatch/CloudHub.vue'), + name: 'ncmatchCloudHub', + hidden: true, + meta: { title: '云枢基座', fullPath: '/ncmatch/cloudHub', noCache: true } }, { path: 'supplyAndDemandSquare', - component: () => import('@/views/homePage/ncmatch/supplyAndDemandSquare/index.vue'), + component: () => import('@/views/Ncmatch/supply_demand.vue'), name: 'supplyAndDemandSquare', hidden: true, - meta: { title: '算力供需广场', fullPath: '/ncmatch/supplyAndDemandSquare' } + meta: { title: '供需广场', fullPath: '/ncmatch/supplyAndDemandSquare' } }, { diff --git a/f/web-kboss/src/views/Ncmatch/CloudHub.vue b/f/web-kboss/src/views/Ncmatch/CloudHub.vue new file mode 100644 index 0000000..0456e88 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/CloudHub.vue @@ -0,0 +1,627 @@ + + + + + diff --git a/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue b/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue index 92821e0..86cdff3 100644 --- a/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue +++ b/f/web-kboss/src/views/Ncmatch/OpcJoinDialog.vue @@ -22,212 +22,281 @@ - +
- - -
-

- 1 - 企业基本信息 -

-
- - - - - - - - - - - -

以最近一个月实际缴纳社保为准

-
- -
- -
-
- - - - - - - - - - - - -
-
- -
-

- 2 - 创始人信息 -

-
- - - - - - - - - - - - - -
- -
-
- {{ file.name }} - -
+ +
+

+ 1 + 企业基本信息 +

+ + +
+
+ + +

{{ errors.company_name }}

+
+
+ + +

{{ errors.credit_code }}

+
+
+ + +
+
+ + +
+
+ + +

以最近一个月实际缴纳社保为准

+
+
+ + +
+
+ +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+

+ 2 + 创始人信息 +

+ + +
+
+ + +

{{ errors.founder_name }}

+
+
+ + +
+
+ + +
+
+ + +

{{ errors.founder_phone }}

+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ {{ file.name }} +
- - - - +
-
+
- -
-

- 3 - 联系人信息 -

-
- - - - - - - - - + +
+
+ +
-
- +
+
+ + +
+

+ 3 + 联系人信息 +

+ +
+
+ + +

{{ errors.contact_name }}

+
+
+ + +
+
+ + +

{{ errors.contact_phone }}

+
+
+
@@ -246,18 +315,22 @@ props: { } }, data() { - const validatePhone = (rule, value, callback) => { - if (!value) { - callback(new Error('请输入联系电话')) - } else if (!/^1[3-9]\d{9}$/.test(value)) { - callback(new Error('请输入正确的手机号')) - } else { - callback() - } + const validatePhone = (value) => { + if (!value) return '请输入联系电话' + if (!/^1[3-9]\d{9}$/.test(value)) return '请输入正确的手机号' + return null + } + const validateCreditCode = (value) => { + if (!value) return '请输入统一社会信用代码' + const trimmed = String(value).trim() + // 统一社会信用代码:18 位,由数字和大写字母组成 + if (!/^[0-9A-Z]{18}$/.test(trimmed)) return '请输入正确的统一社会信用代码(18位数字或大写字母)' + return null } return { submitting: false, companyTypeOptions: ['国有企业', '国有控股企业', '私营企业', '外资企业', '合资企业', '个体工商户', '其他'], + errors: {}, formData: { company_name: '', credit_code: '', @@ -277,13 +350,6 @@ data() { contact_name: '', job_title: '', contact_phone: '' - }, - rules: { - company_name: [{ required: true, message: '请输入企业名称', trigger: 'blur' }], - founder_name: [{ required: true, message: '请输入创始人姓名', trigger: 'blur' }], - founder_phone: [{ required: true, validator: validatePhone, trigger: 'blur' }], - contact_name: [{ required: true, message: '请输入联系人姓名', trigger: 'blur' }], - contact_phone: [{ required: true, validator: validatePhone, trigger: 'blur' }] } } }, @@ -301,6 +367,7 @@ watch: { visible(val) { if (val) { this.loadDraft() + this.errors = {} } } }, @@ -334,22 +401,52 @@ methods: { // ignore } }, + validateField(field) { + const value = this.formData[field] + let msg = null + switch (field) { + case 'company_name': + case 'founder_name': + case 'contact_name': + if (!value) msg = '该项为必填项' + break + case 'credit_code': + msg = validateCreditCode(value) + break + case 'founder_phone': + case 'contact_phone': + msg = validatePhone(value) + break + } + if (msg) { + this.$set(this.errors, field, msg) + } else { + this.$delete(this.errors, field) + } + }, + validateAll() { + ['company_name', 'credit_code', 'founder_name', 'founder_phone', 'contact_name', 'contact_phone'].forEach(f => this.validateField(f)) + return Object.keys(this.errors).length === 0 + }, submitForm() { - this.$refs.form.validate(async valid => { - if (!valid) return - this.submitting = true - try { - // TODO: 调用提交接口 - console.log('提交数据:', this.formData) - this.$message.success('提交成功') - localStorage.removeItem('opc_application_draft') + if (!this.validateAll()) { + this.$message.error('请填写必填项') + return + } + this.submitting = true + try { + // TODO: 调用提交接口 + console.log('提交数据:', this.formData) + this.$message.success('提交成功') + localStorage.removeItem('opc_application_draft') + setTimeout(() => { this.handleClose() - } catch (e) { - this.$message.error('提交失败,请重试') - } finally { - this.submitting = false - } - }) + }, 800) + } catch (e) { + this.$message.error('提交失败,请重试') + } finally { + this.submitting = false + } } } } diff --git a/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue b/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue index 0e5b5d3..b942ee5 100644 --- a/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue +++ b/f/web-kboss/src/views/Ncmatch/SocietyNewsBrief.vue @@ -126,47 +126,47 @@ export default { title: '北京市正式印发《支持人工智能OPC创新发展行动方案》(试行)', desc: '北京市经济和信息化局正式印发《支持人工智能OPC创新发展行动方案》(试行),从培育孵化、算力支撑、场景开放、融资渠道、人才引进五大维度系统构建OPC创业支持体系。', content: ` -

+

为落实国家"人工智能+"战略,构建活跃开放的人工智能创新创业生态,支持青年人才创新创业,助力超级经济个体(OPC)快速成长,近日,北京市经济和信息化局正式印发《支持人工智能OPC创新发展行动方案》(试行)。方案围绕支持创办OPC企业、建设OPC社区、发放"全栈资源包"、加强融资增信赋能、强化赛事培优赋能、举办全球OPC共创节、深化合规引导赋能、支持高校设立OPC微专业八大重点领域,出台8条支持举措。

-

+

北京市经济和信息化局关于印发《支持人工智能OPC创新发展行动方案(试行)》的通知

-

各区中小企业主管部门、各有关单位:

-

现将《支持人工智能OPC创新发展行动方案(试行)》印发给你们,请结合实际认真贯彻落实。

-

北京市经济和信息化局

-

2026年6月17日

-

+

各区中小企业主管部门、各有关单位:

+

现将《支持人工智能OPC创新发展行动方案(试行)》印发给你们,请结合实际认真贯彻落实。

+

北京市经济和信息化局

+

2026年6月17日

+

《支持人工智能OPC创新发展行动方案》(试行)

-

+

为深入贯彻落实国家"人工智能+"战略部署,加快构建活跃开放的人工智能创新创业生态,支持青年人才创新创业,培育一批AI驱动、小而精、专而强的创新主体,助力更多超级经济个体(OPC)快速成长,壮大本市中小企业科技创新力量,制定本行动方案。

-

+

一、支持创办智能体开发、AIGC产品创制、大模型微调、AI行业落地应用等领域的OPC企业。依托北京市中小企业公共服务平台,打造"OPC开办服务专区",提供开办指引、社区入驻、政策辅导和订单对接等全链条服务。联合高校、产业园区、龙头企业,开展OPC创业"校园行""园区行""企业行",通过政策宣讲、案例分享、技术培训等,鼓励各类科技人才创办OPC。

-

+

二、出台OPC成长社区建设指引,支持社区自建词元(Token)服务平台或链接智算服务机构、数字员工服务平台,为OPC企业提供AI工具集、高质量数据集、优惠算力、低成本办公空间、创业服务包等配套服务,对于服务成效突出的OPC社区,最高给予200万元资金支持。鼓励新一代信息技术企业依托存量技术人才与产业生态资源,探索建设企业内部OPC社区。

-

+

三、通过OPC成长社区为入驻OPC企业发放"全栈资源包",包含Token券(模型券)、算力券、数据券等。入驻企业可免费享受3个月的模型使用、智能算力使用、数据代采赠送等服务(单个企业合计最高不超过10万元)。OPC成长社区可按季度申请兑付,每个社区每年最高不超过1000万元。对通过北京人工智能数据沙盒服务平台开展数据治理和模型应用的OPC企业,可享受50%服务费减免。

-

+

四、依托北京市企业融资综合信用服务平台设立"OPC金融服务专区",提供担保增信、融资撮合、政策对接等服务。联合金融机构开发适配OPC企业的专属信贷产品"OPC贷",综合运用Token消耗数据、赛事获奖情况、创始人征信报告、自主知识产权与自研技术成果等内容,为企业提供增信支持。

-

+

五、联合一批投资机构举办"创赢未来"OPC专场路演活动,由OPC社区推荐OPC企业参赛。针对参赛企业提供"创训营"综合赋能服务,对路演通过的OPC项目,最高给予1000万元资金支持。依托"创客北京""京彩大创"设立OPC专项赛道,对于优质项目最高给予50万元资金支持。

-

+

六、举办全球OPC共创节,通过AI黑客松、AI工作坊、项目路演、大咖分享、成果发布等系列活动,为OPC企业提供项目展示的国际舞台和资源对接平台,打造连接开发者、创作者、企业与大众的创新生态。支持符合条件OPC企业参加中小企业服务券服务商遴选,依托服务券政策,推动其产品在中小企业中落地应用。

-

+

七、编制OPC合规指引,梳理财税管理、知识产权、算法备案、跨境出海等领域的风险要点,明确合规要求和操作规范。联合专业服务机构开展"合规服务进社区"活动,通过合规咨询、实操指导,推动合规服务深度对接,提升OPC企业合规经营意识与风险防控能力。

-

+

八、支持高校依托学科特色设立OPC微专业,聚焦"人工智能大模型工程应用+OPC创业实践",构建"AI通识+政策解读+场景实战"课程体系,推行校企"双师制"教学,推动形成"学科建设—产业需求—人才培养"闭环育人体系,打造校企政合作共建的实训基地。鼓励OPC社区开办"夜校""加速营"等OPC创业培训。

-

+

本方案自印发之日起试行,由北京市经济和信息化局负责解释。

` @@ -180,26 +180,26 @@ export default { source: '石景山区人民政府', location: '石景山区', date: '2026年7月10日', - url: '', + url: 'https://www.bjsjs.gov.cn/ywdt/sjsdt/202607/t20260723_763460.shtml', title: '石景山区关于支持OPC创业生态发展的若干措施', desc: '石景山区出台专项措施支持OPC创业生态发展,涵盖入驻补贴、算力支持、融资对接、人才保障等多项扶持政策,打造OPC创业首选地。', content: ` -

+

石景山区人民政府正式出台《关于支持OPC创业生态发展的若干措施》,围绕OPC企业入驻、算力支撑、融资渠道、人才保障等关键环节,推出多项专项扶持政策,旨在将石景山区打造为北京OPC创业首选地。

-

+

一、办公空间支持。新入驻 OPC 企业首年办公租金全免,第二年减免50%,第三年减免30%,,单家最高可节省租金支出约500万元。符合条件的企业可优先入驻石景山区人工智能产业园,享受"一事一议"专项支持。

-

+

二、算力补贴政策。联合区内智算中心为OPC企业提供专项算力包,单家最高补贴200万元/年。企业可享受不高于市场价的80%算力采购折扣,同时可申请算力"先用后付"试点服务。

-

+

三、融资对接机制。设立 OPC 创投联盟,搭建"基金 + 直投"双轨融资通道。区级产业发展基金优先跟投优质OPC项目,单笔跟投最高5000万元。定期举办OPC项目路演及资本对接会。

-

+

四、人才引进保障。为OPC企业引进的高层次人才提供最高100万元安家补贴,在住房、子女入学、医疗等方面给予优先保障。设立"石景山OPC人才服务专线",提供一对一政策咨询服务。

-

+

五、政务绿色通道。开通 OPC 项目"绿色通道",实行专班专员全程服务,企业注册、资质审批、政策申报等事项平均提速50%以上。

` @@ -213,26 +213,26 @@ export default { source: '紫东数智OPC社区', location: '北京市', date: '2026年7月14日', - url: '', + url: 'https://mp.weixin.qq.com/s/8QKyYCloB468Lw2An0nW-A', title: '紫东数智OPC社区正式揭牌', desc: '紫东数智OPC社区正式揭牌成立,标志着北京OPC创业生态建设迈入新阶段。社区由中关村数智人工智能产业联盟与紫东太初联合打造,致力于构建集科研创新、项目孵化、创业加速与产业转化于一体的新型生态社区。', content: ` -

+

紫东数智OPC社区正式揭牌成立,标志着北京OPC创业生态建设迈入新阶段。社区由中关村数智人工智能产业联盟与紫东太初联合打造,致力于构建集科研创新、项目孵化、创业加速与产业转化于一体的新型生态社区。

-

+

一、孵化空间。社区首期启用2万平方米孵化空间,覆盖50+创业团队,配备独立办公室、共享工位及会议室,满足OPC企业不同阶段的空间需求。

-

+

二、产学研合作。联合清华、北航、北理工等高校共建OPC联合实验室,围绕大模型应用、智能体开发、AI行业落地等方向开展联合技术攻关,推动科研成果转化。

-

+

三、品牌活动。每月举办AI沙龙、项目路演、产业对接等品牌活动,邀请学术界、产业界、投资界嘉宾分享前沿洞见,为OPC创业者搭建高质量交流平台。

-

+

四、公共服务。配套算力、数据、模型"一站式"公共服务平台,提供优惠算力调用、高质量数据集获取、主流大模型API接入等服务,降低OPC企业创新门槛。

-

+

五、发展目标。2026年内计划孵化30个标杆性OPC创业项目,培育5家以上估值超亿元的OPC头部企业,形成具有全国影响力的OPC创新高地。

` diff --git a/f/web-kboss/src/views/Ncmatch/images/illustration-ecosystem.jpeg b/f/web-kboss/src/views/Ncmatch/images/illustration-ecosystem.jpeg new file mode 100644 index 0000000..c6ad75b Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/illustration-ecosystem.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/illustration-platform.jpeg b/f/web-kboss/src/views/Ncmatch/images/illustration-platform.jpeg new file mode 100644 index 0000000..574de79 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/illustration-platform.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/illustration-services.jpeg b/f/web-kboss/src/views/Ncmatch/images/illustration-services.jpeg new file mode 100644 index 0000000..9277add Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/illustration-services.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/illustration-supply.jpeg b/f/web-kboss/src/views/Ncmatch/images/illustration-supply.jpeg new file mode 100644 index 0000000..063928f Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/illustration-supply.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/illustration-tech.jpeg b/f/web-kboss/src/views/Ncmatch/images/illustration-tech.jpeg new file mode 100644 index 0000000..764f4a6 Binary files /dev/null and b/f/web-kboss/src/views/Ncmatch/images/illustration-tech.jpeg differ diff --git a/f/web-kboss/src/views/Ncmatch/images/96008e08710dc520404f3d41cf05366c.jpg b/f/web-kboss/src/views/Ncmatch/images/zhongguancun.jpg similarity index 100% rename from f/web-kboss/src/views/Ncmatch/images/96008e08710dc520404f3d41cf05366c.jpg rename to f/web-kboss/src/views/Ncmatch/images/zhongguancun.jpg diff --git a/f/web-kboss/src/views/Ncmatch/images/a86f92912905fe67783b4ec66c1ac72a.png b/f/web-kboss/src/views/Ncmatch/images/zidongtaichu.png similarity index 100% rename from f/web-kboss/src/views/Ncmatch/images/a86f92912905fe67783b4ec66c1ac72a.png rename to f/web-kboss/src/views/Ncmatch/images/zidongtaichu.png diff --git a/f/web-kboss/src/views/Ncmatch/index.vue b/f/web-kboss/src/views/Ncmatch/index.vue index f2382a8..a07777a 100644 --- a/f/web-kboss/src/views/Ncmatch/index.vue +++ b/f/web-kboss/src/views/Ncmatch/index.vue @@ -1,135 +1,624 @@ \ No newline at end of file +@import url('./less/index.less'); + diff --git a/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less b/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less index 4d2f71c..6ed2937 100644 --- a/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less +++ b/f/web-kboss/src/views/Ncmatch/less/OpcJoinDialog.less @@ -1,24 +1,27 @@ +// ==================== Dialog Shell ==================== ::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; + background: transparent !important; + border: none !important; + box-shadow: none !important; + display: flex !important; flex-direction: column; - + max-height: 85vh !important; + top: 100px; .el-dialog__header { display: none; } .el-dialog__body { - flex: 1; + flex: 1 1 auto; padding: 0; - overflow: hidden; + overflow: hidden !important; + display: flex; + flex-direction: column; + background: transparent !important; min-height: 0; } } @@ -27,24 +30,29 @@ background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); - overflow: hidden; } +// ==================== Layout Container ==================== .dialog-layout { display: flex; flex-direction: column; + width: 100%; height: 100%; - background: #ffffff; + max-height: 85vh; overflow: hidden; + background: #ffffff; + border-radius: 16px; + border: 1px solid #dbeafe; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } +// ==================== Header ==================== .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 { @@ -82,12 +90,16 @@ } } +// ==================== Body (scrollable) ==================== .dialog-body { - flex: 1; + flex: 1 1 auto; overflow-y: auto; + overflow-x: hidden; padding: 24px 32px; + min-height: 0; } +// ==================== Footer ==================== .dialog-footer { flex-shrink: 0; display: flex; @@ -117,11 +129,25 @@ border-radius: 8px; font-size: 14px; height: 40px; + padding: 0 20px; + border-color: #e5e7eb; + color: #6b7280; + background: #ffffff; + + &:hover { + border-color: #d1d5db; + color: #374151; + } } } +// ==================== Form Section ==================== .form-section { - margin-bottom: 32px; + margin-bottom: 28px; + + &:last-child { + margin-bottom: 0; + } .section-title { display: flex; @@ -143,36 +169,137 @@ display: flex; align-items: center; justify-content: center; + flex-shrink: 0; } } } -.grid-2 { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 16px; +// ==================== Field Row(核心:一行就是一个 .field-row) ==================== +// 关键设计:每个"一行"就是一个独立 .field-row 容器 +// - 单列:.field-row(里面 1 个 .field-item 独占整行) +// - 两列:.field-row.grid-2(里面 2 个 .field-item 自动等分两列) +// - 三列:.field-row.grid-3(里面 3 个 .field-item 自动等分三列) +// 这样无论每行是 1、2、3 个字段,列宽都严格对齐 +.field-row { + display: block; + margin-bottom: 16px; - .col-span-2 { - grid-column: 1 / -1; + &:last-child { + margin-bottom: 0; } } -.grid-3 { +.field-row.grid-2 { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } -.full-width { - width: 100%; +.field-row.grid-3 { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 16px; +} + +// ==================== Field Item ==================== +.field-item { + display: block; + min-width: 0; +} + +.field-label { + display: block; + font-size: 14px; + font-weight: 500; + color: #374151; + margin-bottom: 6px; + line-height: 1.4; + + .required { + color: #ef4444; + margin-left: 2px; + } } .field-tip { margin: 4px 0 0; font-size: 12px; color: #9ca3af; + line-height: 1.4; } +.field-error { + margin: 4px 0 0; + font-size: 12px; + color: #ef4444; + line-height: 1.4; +} + +.full-width { + width: 100%; +} + +// ==================== Element UI Input Overrides ==================== +::v-deep .el-input__inner, +::v-deep .el-textarea__inner { + border-radius: 8px; + border-color: #e5e7eb; + background: #f9fafb; + font-size: 14px; + color: #111827; + width: 100%; + box-sizing: border-box; + transition: border-color 0.15s, box-shadow 0.15s; + + &::placeholder { + color: #9ca3af; + } + + &:focus { + border-color: #2563eb; + background: #ffffff; + box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); + outline: none; + } +} + +::v-deep .el-input { + width: 100% !important; + display: block !important; + + .el-input__inner { + height: 40px; + } +} + +::v-deep .el-textarea { + width: 100% !important; + display: block !important; +} + +::v-deep .el-textarea__inner { + resize: none; + padding: 10px 14px; + line-height: 1.5; +} + +::v-deep .el-date-editor.el-input { + width: 100%; + .el-input__inner { + padding-right: 30px; + } +} + +::v-deep .el-input-number { + width: 100% !important; + .el-input__inner { + text-align: left; + padding-left: 14px; + padding-right: 60px; + } +} + +// ==================== Checkbox Group ==================== .checkbox-group { display: flex; flex-wrap: wrap; @@ -180,7 +307,7 @@ } .checkbox-label { - display: flex; + display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; @@ -209,6 +336,7 @@ } } +// ==================== File Upload ==================== .file-upload-area { display: flex; flex-direction: column; @@ -274,75 +402,13 @@ } } -::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; - } -} - +// ==================== Responsive ==================== @media (max-width: 768px) { - .grid-2, - .grid-3 { + .field-row.grid-2, + .field-row.grid-3 { grid-template-columns: 1fr; } - .col-span-2 { - grid-column: 1; - } - .dialog-header { padding: 16px 20px; } @@ -353,10 +419,15 @@ .dialog-footer { padding: 12px 16px; + gap: 8px; } ::v-deep .opc-application-dialog { margin: 16px auto !important; - max-height: calc(100vh - 32px); + max-height: calc(100vh - 32px) !important; + + .el-dialog__body { + max-height: calc(100vh - 32px) !important; + } } } diff --git a/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less b/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less index eb9fca8..67745db 100644 --- a/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less +++ b/f/web-kboss/src/views/Ncmatch/less/SocietyNewsBrief.less @@ -454,8 +454,8 @@ } .detail-content { - font-size: 14px; - line-height: 1.9; + font-size: 13px; + line-height: 1.85; color: #374151; p { diff --git a/f/web-kboss/src/views/Ncmatch/less/index.less b/f/web-kboss/src/views/Ncmatch/less/index.less new file mode 100644 index 0000000..d769feb --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/less/index.less @@ -0,0 +1,1193 @@ +// ==================== Font ==================== +@font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; + +// ==================== Page Wrapper ==================== +.page-wrapper { + position: relative; + width: 100%; + min-height: 100vh; + overflow: hidden; + font-family: @font-family; + background: linear-gradient(135deg, #dbeafe 0%, #eff6ff 40%, #ecfeff 100%); +} + +// ==================== 网格背景点 ==================== +.bg-grid { + position: fixed; + inset: 0; + pointer-events: none; + z-index: 0; + background-image: radial-gradient(rgba(59, 130, 246, 0.12) 1px, transparent 1px); + background-size: 32px 32px; +} + +// ==================== 浮动光球 ==================== +.orb { + position: fixed; + border-radius: 50%; + pointer-events: none; + z-index: 0; + filter: blur(80px); + animation: orb-float 25s ease-in-out infinite; +} + +.orb-1 { + width: 500px; + height: 500px; + top: -100px; + right: -100px; + background: radial-gradient(circle, #3b82f6 0%, transparent 70%); + opacity: 0.5; + animation-delay: 0s; +} + +.orb-2 { + width: 600px; + height: 600px; + bottom: -150px; + left: -150px; + background: radial-gradient(circle, #1d4ed8 0%, transparent 70%); + opacity: 0.4; + animation-delay: -8s; +} + +.orb-3 { + width: 400px; + height: 400px; + top: 50%; + left: 10%; + background: radial-gradient(circle, #06b6d4 0%, transparent 70%); + opacity: 0.35; + animation-delay: -16s; +} + +.orb-4 { + width: 300px; + height: 300px; + top: 30%; + right: 5%; + background: radial-gradient(circle, #3b82f6 0%, transparent 70%); + opacity: 0.3; + animation-delay: -5s; +} + +@keyframes orb-float { + 0%, 100% { transform: translate(0, 0) scale(1); } + 33% { transform: translate(25px, -25px) scale(1.03); } + 66% { transform: translate(-15px, 15px) scale(0.97); } +} + +// ==================== Container ==================== +.container { + position: relative; + z-index: 1; + width: 100%; +} + +// ==================== Slogan ==================== +.slogan { + width: 100%; + padding: 176px 0; + display: flex; + flex-direction: column; + align-items: center; + + .title { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding-bottom: 72px; + font-weight: 900; + + .gradient-text { + font-size: 72px; + // font-weight: 800; + background: linear-gradient(135deg, #1e40af 0%, #2563eb 40%, #3b82f6 70%, #0ea5e9 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .clip-text { + font-size: 72px; + // font-weight: 800; + margin-bottom: 32px; + background: linear-gradient(to right, rgb(147, 51, 234), rgb(37, 99, 235), rgb(6, 182, 212)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } + + .desp { + font-size: 20px; + color: rgb(75, 85, 99); + } + } +} + +// ==================== Metrics Display ==================== +.metrics-display { + display: flex; + justify-content: center; + gap: 24px; + flex-wrap: wrap; + width: 100%; + max-width: 960px; + padding: 0 24px; +} + +// ==================== 指标卡片 ==================== +.metric-card { + flex: 1; + // min-width: 180px; + // max-width: 220px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 28px 20px; + text-align: center; + border-radius: 16px; + + + .card-num { + font-size: 40px; + font-weight: 700; + color: #1e293b; + // line-height: 1; + + } + + .card-unit { + font-size: 40px; + font-weight: 600; + // color: #2563eb; + background: linear-gradient(135deg, #7c3aed 0%, #2563eb 50%, #06b6d4 100%); + background-color: #000; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + + // margin-top: 4px; + // line-height: 1; + } + + .card-label { + font-size: 14px; + color: #6b7280; + margin-top: 8px; + line-height: 1.4; + } +} + +// ==================== 玻璃卡片(政策卡) ==================== +.glass-card { + border-radius: 16px; + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(24px) saturate(1.2); + -webkit-backdrop-filter: blur(24px) saturate(1.2); + border: 1px solid rgba(59, 130, 246, 0.2); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 4px 24px rgba(59, 130, 246, 0.08); + transition: all 0.3s ease; + + &:hover { + border-color: rgba(59, 130, 246, 0.4); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06), 0 12px 48px rgba(59, 130, 246, 0.15); + transform: translateY(-4px); + } +} + +// ==================== 优惠政策 ==================== +.policies { + width: 100%; + padding: 80px 0; + + .policies-inner { + max-width: 1400px; + margin: 0 auto; + padding: 0 32px; + } + + .policies-header { + text-align: center; + margin-bottom: 56px; + + .policies-title { + font-size: 36px; + font-weight: 700; + color: #1e293b; + margin-bottom: 16px; + } + + .policies-subtitle { + font-size: 18px; + color: #6b7280; + margin: 0 auto; + line-height: 1.6; + } + } +} + +// ==================== 政策卡片网格 ==================== +.policy-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; +} + +.policy-card { + border-radius: 16px; + padding: 28px; + // cursor: default; + display: flex; + flex-direction: column; + justify-content: space-between; + + .policy-card-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + + .policy-icon { + flex-shrink: 0; + width: 40px; + height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + + .icon-svg { + width: 20px; + height: 20px; + color: #fff; + } + } + + .policy-name { + font-size: 16px; + font-weight: 700; + color: #1e293b; + line-height: 1.3; + } + } + + .policy-desc { + font-size: 14px; + color: #6b7280; + line-height: 1.7; + margin-bottom: 16px; + } + + .policy-amount { + display: flex; + align-items: baseline; + gap: 4px; + + .amount-num { + font-size: 20px; + font-weight: 800; + line-height: 1; + } + + .amount-unit { + font-size: 14px; + font-weight: 600; + line-height: 1; + } + } + + .policy-sub-amount { + display: flex; + align-items: baseline; + gap: 4px; + margin-top: 6px; + + .amount-num.sub { + font-size: 22px; + font-weight: 800; + line-height: 1; + } + + .amount-unit.sub { + font-size: 12px; + font-weight: 600; + line-height: 1; + opacity: 0.8; + } + } +} + +// ==================== 政策脚注 ==================== +.policy-footer { + margin-top: 48px; + text-align: center; + + .footer-note { + font-size: 14px; + color: #9ca3af; + line-height: 1.8; + } +} + +// ==================== Responsive ==================== +@media (max-width: 1024px) { + .policy-grid { + grid-template-columns: repeat(2, 1fr); + } + + .core-advantages-grid { + grid-template-columns: repeat(2, 1fr) !important; + } + + .service-content-grid { + grid-template-columns: repeat(2, 1fr) !important; + } +} + +@media (max-width: 768px) { + .slogan { + padding: 120px 0 80px; + + .title { + padding-bottom: 48px; + + .gradient-text, + .clip-text { + font-size: 48px; + } + + .desp { + font-size: 16px; + padding: 0 16px; + } + } + } + + .metrics-display { + gap: 12px; + } + + .policy-grid { + grid-template-columns: 1fr; + } + + .policies .policies-header .policies-title { + font-size: 28px; + } +} + +// ==================== 紫东数智OPC社区介绍 ==================== +.community-intro { + position: relative; + padding: 80px 0; + overflow: hidden; + + .community-intro-container { + max-width: 1280px; + margin: 0 auto; + padding: 0 48px; + position: relative; + z-index: 1; + + @media (max-width: 768px) { + padding: 0 24px; + } + } + + // 背景装饰 + .community-intro-bg { + position: absolute; + inset: 0; + pointer-events: none; + + .community-intro-bg-orb { + position: absolute; + border-radius: 50%; + filter: blur(100px); + + &--blue { + top: 0; + left: 25%; + width: 400px; + height: 400px; + background: rgba(219, 234, 254, 0.2); + } + + &--violet { + bottom: 25%; + right: 25%; + width: 320px; + height: 320px; + background: rgba(238, 233, 254, 0.15); + } + } + } + + // 页面标题 + .community-intro-header { + text-align: center; + margin-bottom: 48px; + + .community-intro-title { + font-size: 36px; + font-weight: 800; + color: #111827; + margin-bottom: 16px; + + @media (max-width: 768px) { + font-size: 28px; + } + } + + .community-intro-subtitle { + font-size: 18px; + color: #6b7280; + max-width: 800px; + margin: 0 auto; + line-height: 1.7; + + @media (max-width: 768px) { + font-size: 16px; + } + } + } + + // 社区简介 + .community-intro-brief { + padding: 32px; + margin-bottom: 48px; + + .community-intro-brief-inner { + display: flex; + align-items: center; + gap: 16px; + + @media (max-width: 768px) { + flex-direction: column; + align-items: flex-start; + } + } + + .community-intro-logos { + display: flex; + align-items: center; + gap: 12px; + flex-shrink: 0; + } + + .community-intro-logo-wrapper { + width: 160px; + height: 56px; + display: flex; + align-items: center; + justify-content: center; + } + + .community-intro-logo { + max-width: 100%; + max-height: 100%; + object-fit: contain; + } + + .community-intro-brief-content { + flex: 1; + min-width: 0; + } + + .community-intro-brief-title { + font-size: 18px; + font-weight: 700; + color: #111827; + margin-bottom: 8px; + } + + .community-intro-brief-text { + font-size: 16px; + color: #4b5563; + line-height: 1.7; + } + + .community-intro-brief-highlight { + color: #111827; + font-weight: 700; + } + } + + // 核心优势 + .core-advantages { + margin-bottom: 64px; + + .core-advantages-header { + text-align: center; + margin-bottom: 32px; + + .core-advantages-title { + font-size: 24px; + font-weight: 700; + color: #111827; + margin-bottom: 8px; + } + + .core-advantages-subtitle { + font-size: 16px; + color: #6b7280; + } + } + + .core-advantages-grid { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 24px; + + @media (max-width: 1200px) { + grid-template-columns: repeat(3, 1fr); + } + + @media (max-width: 768px) { + grid-template-columns: 1fr !important; + } + } + } + + // 核心优势卡片 + .core-advantage-card { + padding: 24px; + cursor: default; + + &:hover { + border-color: rgba(59, 130, 246, 0.3); + + .core-advantage-image { + transform: scale(1.05); + } + + .core-advantage-icon { + transform: scale(1.1); + } + } + + .core-advantage-image-wrapper { + border-radius: 12px; + overflow: hidden; + margin-bottom: 16px; + background-color: rgba(59, 130, 246, 0.05); + } + + .core-advantage-image { + width: 100%; + height: 128px; + object-fit: cover; + transition: transform 0.5s ease; + } + + .core-advantage-content { + .core-advantage-icon-title { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + } + + .core-advantage-icon { + flex-shrink: 0; + width: 40px; + height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + transition: transform 0.3s ease; + + &--blue { + background-color: #eff6ff; + border: 1px solid #bfdbfe; + + .core-advantage-icon-svg { + color: #60a5fa; + } + } + + &--cyan { + background-color: #ecfeff; + border: 1px solid #a5f3fc; + + .core-advantage-icon-svg { + color: #22d3ee; + } + } + + &--violet { + background-color: #f5f3ff; + border: 1px solid #ddd6fe; + + .core-advantage-icon-svg { + color: #a78bfa; + } + } + + &--amber { + background-color: #fffbeb; + border: 1px solid #fde68a; + + .core-advantage-icon-svg { + color: #fbbf24; + } + } + + &--rose { + background-color: #fff1f2; + border: 1px solid #fecdd3; + + .core-advantage-icon-svg { + color: #fb7185; + } + } + } + + .core-advantage-icon-svg { + width: 20px; + height: 20px; + } + + .core-advantage-name { + font-size: 16px; + font-weight: 700; + color: #111827; + line-height: 1.3; + } + + .core-advantage-desc { + font-size: 14px; + color: #6b7280; + line-height: 1.7; + } + } + } + + // 服务内容 + .service-content { + margin-bottom: 64px; + + .service-content-header { + text-align: center; + margin-bottom: 32px; + + .service-content-title { + font-size: 24px; + font-weight: 700; + color: #111827; + margin-bottom: 8px; + } + + .service-content-subtitle { + font-size: 16px; + color: #6b7280; + } + } + + .service-content-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; + + @media (max-width: 1024px) { + grid-template-columns: repeat(2, 1fr); + } + + @media (max-width: 768px) { + grid-template-columns: 1fr !important; + } + } + } + + // 服务卡片 + .service-card { + padding: 24px; + cursor: default; + + &:hover { + border-color: rgba(59, 130, 246, 0.3); + + .service-card-icon { + transform: scale(1.1); + } + } + + .service-card-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + } + + .service-card-icon { + flex-shrink: 0; + width: 40px; + height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + transition: transform 0.3s ease; + + &--blue { + background-color: #eff6ff; + border: 1px solid #bfdbfe; + + .service-card-icon-svg { + color: #60a5fa; + } + } + + &--emerald { + background-color: #ecfdf5; + border: 1px solid #a7f3d0; + + .service-card-icon-svg { + color: #34d399; + } + } + + &--violet { + background-color: #f5f3ff; + border: 1px solid #ddd6fe; + + .service-card-icon-svg { + color: #a78bfa; + } + } + } + + .service-card-icon-svg { + width: 20px; + height: 20px; + } + + .service-card-title { + font-size: 18px; + font-weight: 700; + color: #111827; + } + + .service-card-list { + list-style: none; + padding: 0; + margin: 0; + } + + .service-card-list-item { + display: flex; + align-items: flex-start; + gap: 8px; + margin-bottom: 10px; + font-size: 14px; + color: #4b5563; + line-height: 1.6; + + &:last-child { + margin-bottom: 0; + } + } + + .service-card-list-dot { + flex-shrink: 0; + width: 4px; + height: 4px; + border-radius: 50%; + margin-top: 8px; + + &--blue { + background-color: #60a5fa; + } + + &--emerald { + background-color: #34d399; + } + + &--violet { + background-color: #a78bfa; + } + } + } + + // 招募信息 + .recruitment-banner { + .recruitment-banner-inner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding: 32px; + border-radius: 16px; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), rgba(139, 92, 246, 0.05)); + + @media (max-width: 768px) { + flex-direction: column; + align-items: flex-start; + } + } + + .recruitment-banner-content { + flex: 1; + min-width: 0; + } + + .recruitment-banner-title { + font-size: 20px; + font-weight: 700; + color: #111827; + margin-bottom: 12px; + } + + .recruitment-banner-text { + font-size: 16px; + color: #4b5563; + line-height: 1.7; + margin-bottom: 16px; + } + + .recruitment-banner-highlight { + color: #111827; + font-weight: 700; + } + + .recruitment-banner-tags { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; + } + + .recruitment-tag { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + background: #fff; + border-radius: 8px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + + &--blue { + border: 1px solid #dbeafe; + } + + &--emerald { + border: 1px solid #d1fae5; + } + + &--violet { + border: 1px solid #ede9fe; + } + } + + .recruitment-tag-icon { + width: 14px; + height: 14px; + + .recruitment-tag--blue & { + color: #60a5fa; + } + + .recruitment-tag--emerald & { + color: #34d399; + } + + .recruitment-tag--violet & { + color: #a78bfa; + } + } + + .recruitment-tag-text { + font-size: 12px; + font-weight: 500; + color: #374151; + } + + .recruitment-banner-actions { + flex-shrink: 0; + display: flex; + flex-direction: column; + gap: 12px; + } + + .recruitment-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 24px; + font-size: 16px; + font-weight: 600; + border-radius: 12px; + border: none; + cursor: pointer; + transition: all 0.3s ease; + + &--blue { + background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%); + color: #fff; + box-shadow: 0 4px 14px rgba(59, 130, 246, 0.25); + + &:hover { + box-shadow: 0 6px 20px rgba(59, 130, 246, 0.35); + transform: translateY(-2px); + } + } + + &--violet { + background: linear-gradient(135deg, #8b5cf6 0%, #a855f7 100%); + color: #fff; + box-shadow: 0 4px 14px rgba(139, 92, 246, 0.3); + + &:hover { + box-shadow: 0 6px 20px rgba(139, 92, 246, 0.4); + transform: translateY(-2px); + } + } + } + + .recruitment-btn-arrow { + width: 16px; + height: 16px; + } + } +} + +// ==================== 入驻要求弹窗 ==================== +// 弹窗过渡动画 +.modal-fade-enter-active, +.modal-fade-leave-active { + transition: opacity 0.3s ease; +} + +.modal-fade-enter, +.modal-fade-leave-to { + opacity: 0; +} + +.entry-requirements-overlay { + position: fixed; + inset: 0; + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.4); + backdrop-filter: blur(6px); +} + +.entry-requirements-modal { + width: 100%; + max-width: 672px; + margin: 0 16px; + background: #fff; + border-radius: 24px; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + overflow: hidden; + animation: modalFadeIn 0.3s ease; + max-height: 90vh; + display: flex; + flex-direction: column; + + @keyframes modalFadeIn { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } + } + + // 头部 + .entry-requirements-header { + padding: 2px 32px 0px; + border-bottom: 1px solid #f3f4f6; + flex-shrink: 0; + display: flex; + justify-content: space-between; + align-items: center; + + .entry-requirements-header-inner { + display: flex; + align-items: center; + justify-content: space-between; + } + + .entry-requirements-title { + font-size: 20px; + font-weight: 700; + color: #111827; + } + + .entry-requirements-close { + width: 32px; + height: 32px; + border-radius: 8px; + background: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s ease; + + &:hover { + background: #e5e7eb; + } + + .entry-requirements-close-icon { + width: 16px; + height: 16px; + color: #6b7280; + } + } + } + + // 内容区域 + .entry-requirements-body { + padding: 0px 32px; + overflow-y: auto; + padding-bottom: 10px; + flex: 1; + } + + // 区块标题 + .entry-requirements-section-title { + display: flex; + align-items: center; + gap: 8px; + font-size: 16px; + font-weight: 700; + color: #111827; + margin-bottom: 16px; + } + + .entry-requirements-section-indicator { + width: 4px; + height: 20px; + border-radius: 4px; + + &--blue { + background-color: #3b82f6; + } + + &--emerald { + background-color: #10b981; + } + } + + // 入驻条件列表 + .entry-requirements-list { + margin-bottom: 32px; + } + + .entry-requirements-item { + display: flex; + align-items: flex-start; + gap: 12px; + padding: 12px; + border-radius: 12px; + background: #eff6ff; + border: 1px solid #dbeafe; + margin-bottom: 12px; + + &:last-child { + margin-bottom: 0; + } + + .entry-requirements-item-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; + flex-shrink: 0; + margin-top: 2px; + } + + .entry-requirements-item-text { + font-size: 14px; + color: #374151; + line-height: 1.6; + } + } + + // 提交信息网格 + .entry-requirements-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; + margin-bottom: 24px; + + @media (max-width: 640px) { + grid-template-columns: 1fr; + } + } + + .entry-requirements-grid-item { + padding: 12px; + border-radius: 12px; + background: #f9fafb; + border: 1px solid #f3f4f6; + + .entry-requirements-grid-label { + font-size: 12px; + color: #6b7280; + margin-bottom: 4px; + } + + .entry-requirements-grid-value { + font-size: 14px; + color: #374151; + } + } + + // 联系方式 + .entry-requirements-contact { + padding: 16px; + border-radius: 12px; + background: #fffbeb; + border: 1px solid #fef3c7; + + .entry-requirements-contact-header { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 8px; + + .entry-requirements-contact-icon { + width: 16px; + height: 16px; + color: #d97706; + } + + .entry-requirements-contact-title { + font-size: 14px; + font-weight: 600; + color: #92400e; + } + } + + .entry-requirements-contact-info { + font-size: 14px; + color: #b45309; + line-height: 1.6; + + p { + margin: 0; + + &:not(:last-child) { + margin-bottom: 4px; + } + } + } + } +} \ 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 index 5e3dce9..f9dcc4a 100644 --- a/f/web-kboss/src/views/Ncmatch/opcOverview.vue +++ b/f/web-kboss/src/views/Ncmatch/opcOverview.vue @@ -18,7 +18,7 @@ -
+
紫东数智OPC社区 @@ -37,7 +37,7 @@
- +
@@ -142,7 +142,7 @@ export default { name: 'OpcOverview', components: { OpcJoinDialog }, - data() { + data() { return { showFormModal: false } diff --git a/f/web-kboss/src/views/Ncmatch/supply_demand.vue b/f/web-kboss/src/views/Ncmatch/supply_demand.vue new file mode 100644 index 0000000..4e2a6e7 --- /dev/null +++ b/f/web-kboss/src/views/Ncmatch/supply_demand.vue @@ -0,0 +1,823 @@ + + + + + diff --git a/f/web-kboss/src/views/Ncmatch/token.vue b/f/web-kboss/src/views/Ncmatch/token.vue index e69de29..4102ec4 100644 --- a/f/web-kboss/src/views/Ncmatch/token.vue +++ b/f/web-kboss/src/views/Ncmatch/token.vue @@ -0,0 +1,1121 @@ + + + + + diff --git a/f/web-kboss/src/views/Ncmatch/topNav.vue b/f/web-kboss/src/views/Ncmatch/topNav.vue index 839a2c4..361926b 100644 --- a/f/web-kboss/src/views/Ncmatch/topNav.vue +++ b/f/web-kboss/src/views/Ncmatch/topNav.vue @@ -6,7 +6,7 @@ OPC数智平台 - +