feat: 服务、需求市场调整

This commit is contained in:
liulujian 2026-04-05 11:38:07 +08:00
parent b933da492c
commit 53517b4594
16 changed files with 1082 additions and 255 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -4,7 +4,7 @@
<div class="footer-box">
<div class="footer-box-1">
<div class="font-semibold flex items-center btjs-title btjs-title-18">
<logo size=30 />平台介绍
<logo :size="30" />平台介绍
</div>
<p class="btjs-text text-gray-400">
{{ APP_INTRODUCTION1 }}

View File

@ -0,0 +1,422 @@
<template>
<!-- 顶部菜单栏 -->
<div class="nav-box">
<div class="logo-box">
<img src="@/pages/index/assets/logo-name.png">
</div>
<div class="menu-box">
<div v-for="(menu,index) in menuOptions" :key="index">
<t-dropdown v-if="menu.child" trigger="hover" :options="menu.child" @click="handleDropdownClick">
<div class="menu-title" :class="{'meun-title-active': curPage == menu.name ,'meun-title-disable':menu.disable}" @click="gotoIfreamPage(menu)">
<img v-if="menu.icon" :src="menu.icon" width="24px" height="24px" style="margin-right:10px">
<span> {{menu.title}} </span>
</div>
</t-dropdown>
<div v-else class="menu-title" :class="{'meun-title-active': curPage == menu.name ,'meun-title-disable':menu.disable}" @click="gotoIfreamPage(menu)">
<img v-if="menu.icon" :src="menu.icon" width="24px" height="24px" style="margin-right:10px">
<span> {{menu.title}} </span>
</div>
</div>
</div>
<div>
<div v-if="loginFlag" class="option-box">
<div class="gzt">
<img src="@/pages/index/assets/home-gzt-icon.png" />
<span> 工作台</span>
</div>
<div style="margin-left:20px; cursor: pointer;" @click="goyhzx">用户中心</div>
<div>|</div>
<div style="cursor: pointer;" @click="logoutHandler">退出登录</div>
</div>
<div v-else class="option-box">
<div class="gzt">
<img src="@/pages/index/assets/home-gzt-icon.png" />
<span> 工作台</span>
</div>
<div style="margin-left:20px; cursor: pointer;">激活</div>
<div>|</div>
<div style="cursor: pointer;" @click="gologin">登录</div>
</div>
</div>
</div>
</template>
<script>
import { logout, authorize, init } from '@/pages/index/api/login';
import api from '@/pages/index/api/gxzx/index.js';
export default {
name: 'Nav',
props: {
},
data() {
return {
curPage: "home",
loginFlag: false, //
menuOptions: [
{
name: 'home',
title: '首页',
icon: require('@/pages/index/assets/nav-home.png'),
},
{
name: 'tzzx',
title: '碳证中心',
iframeUrl: 'https://ctn-web-pre.lingshu.net/carbon-index',
needLogin: true,
clientId: 'client_id_tfwzx',//txw_sso_client
child: [
{
name: 'tzcx',
title: '碳证查询',
value: 'tzcx', //name
content: '碳证查询', //title
divider: true, //线
needLogin: true, //访
clientId: 'client_id_tfwzx',
// iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/index', //
iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/list?type=carbon-query', //
},
{
name: 'tsjfcg',
title: '碳数据防篡改',
value: 'tsjfcg',
content: '碳数据防篡改',
divider: true,
needLogin: true,
clientId: 'client_id_tfwzx',
iframeUrl: 'https://ctn-web-pre.lingshu.net/carbon-protection',
},
{
name: 'tzhy',
title: '碳证核验',
value: 'tzhy',
content: '碳证核验',
divider: true,
needLogin: true,
clientId: 'client_id_tfwzx',
iframeUrl: 'https://ctn-web-pre.lingshu.net/carbon-verify',
},
{
name: 'tgbcz',
title: '碳报告存证',
value: 'tgbcz',
content: '碳报告存证',
divider: true,
needLogin: true,
clientId: 'client_id_tfwzx',
iframeUrl: 'https://ctn-web-pre.lingshu.net/carbon-report-cert',
},
{
name: 'tbgtg',
title: '碳报告托管:',
value: 'tgbcz',
content: '碳报告存证',
divider: true,
needLogin: true,
clientId: 'client_id_tfwzx',
iframeUrl: 'https://ctn-web-pre.lingshu.net/carbon-report-hosting',
}
]
},
{
name: 'fwsc',
title: '服务中心',
child: [
{
name: 'tfwsc',
title: '碳服务市场',
value: 'tfwsc',
content: '碳服务市场',
divider: true,
},
{
name: 'tjrsc',
title: '碳金融市场',
value: 'tjrsc',
content: '碳金融市场',
divider: true,
}, {
name: 'txqsc',
title: '碳需求市场',
value: 'txqsc',
content: '碳需求市场',
divider: true,
},
{
name: 'tsjsc',
title: '碳数据市场',
value: 'tsjsc',
content: '碳数据市场',
divider: true,
}
]
},
{
name: 'gxnl',
title: '共性能力',
disable: true
},
{
name: 'qych',
title: '企业出海',
disable: true
},
{
name: 'hyzt',
title: '行业专题',
disable: true
},
]
};
},
created() {
// this.gettfwzxurl();
},
mounted() {
// this.gettfwzxurl();
console.log('newUrl', this.$route);
this.newUrl = this.$route.query.newUrl;
this.nowurl = this.newUrl || '/view/mhzc/home';
if (this.$route.name == 'yhzx') {
this.nowurl = '/yhzx';
}
if (this.$route.name == 'newsCenter') {
this.nowurl = '/yhzx';
}
const sfdl = window.sessionStorage.getItem('sfdl');
if (sfdl) {
this.loginFlag = true;
this.getWdxxCount();
} else {
this.loginFlag = false;
}
},
beforeUnmount() { },
methods: {
//
handleDropdownClick(menu) {
this.gotoIfreamPage(menu); //
},
gotoIfreamPage(menu) {
console.log("当前菜单配置:", menu)
//
if (menu.disable) {
this.$dialog.alert({
header: '提示',
body: '该功能暂未开放。',
confirmBtn: null
})
return
}
//
console.log("当前页面是否需要登录:", menu.needLogin)
if (menu.needLogin) {
const sfdl = window.sessionStorage.getItem('sfdl'); //
console.log("是否已经登录登录:", sfdl)
if (!sfdl) {
this.$router.push("/login")
return
}
}
this.curPage = menu.name;
let iframeUrl = menu.iframeUrl;
if (iframeUrl) {
//login.jsauthorize
this.$emit('gotoIfreamPage', iframeUrl);
} else {
this.$emit('gotoPage', this.curPage);
}
},
gonewCenter() {
window.location.href = `/view/mhzc/yhzx?activeCompo=ggwhgl`;
},
async getWdxxCount() {
try {
// const res = await getMxjbxx(prame);
const { data } = await api.getWdxxCount();
this.xxtxCount = data;
console.log('res', data);
} catch (error) {
this.xxtxCount = 0;
console.error('数据加载失败', error);
}
},
async gettfwzxurl() {
try {
// const res = await getMxjbxx(prame);
const { data } = await api.tfwzxurl();
this.kxurl = data.kxtfwzx;
console.log('res', data);
} catch (error) {
console.error('数据加载失败', error);
}
},
gologin() {
this.$router.push("/login")
// window.location.href = `/view/mhzc/login`;
},
goyhzx() {
this.$router.push("/yhzx")
// window.location.href = `/view/mhzc/yhzx`;
},
goSelfChange(menuParams) {
const sfdl = window.sessionStorage.getItem('sfdl');
if (!sfdl) {
if (menuParams == this.kxurl) {
window.location.href = `/view/mhzc/login`;
return;
}
if (menuParams == '/view/gxzx/gxzx') {
window.location.href = `/view/mhzc/login`;
return;
}
}
console.log(11111, this.nowurl, menuParams);
this.nowurl = menuParams;
if (menuParams == '/view/mhzc/home') {
window.location.href = `/view/mhzc/home`;
return;
}
console.log('menuParams', menuParams);
// return
this.$router.replace({
path: '/mhsy/mhNewMain',
name: 'mhNewMain', // name
query: {
newUrl: menuParams,
// parmasStr: menuParams.menuParmasStr,
},
});
// return;
if (this.newUrl) {
window.location.reload();
}
},
grxxisShow() {
if (!this.hoverxxzxTimeout) {
this.hoverxxzxTimeout = setTimeout(() => {
this.grxxShow = true;
}, 500);
}
},
headMouseLeave() {
clearTimeout(this.hoverxxzxTimeout);
this.hoverxxzxTimeout = null;
this.grxxShow = false;
},
async logoutHandler() {
const res = await logout();
const resVO = res.data;
if (resVO.dcdz) {
resVO.forEach((item) => {
const { token } = item;
const { dcdz } = item;
axios.get(
dcdz,
{},
{
headers: {
'Admin-Token': token,
},
},
);
});
}
sessionStorage.removeItem('sfdl');
sessionStorage.removeItem('yhxx');
window.location.href = `/view/mhzc/login`;
},
},
};
</script>
<style lang="css" scoped>
.nav-box {
position: fixed;
top: 0;
z-index: 9999;
display: grid;
width: 100%;
margin: 0 auto;
color: #fff;
background: #009a29;
grid-template-columns: 1fr 2fr 1fr;
place-items: center;
}
.logo-box {
text-align: center;
}
.option-box {
display: flex;
height: 64px;
font-family: PingFang SC;
font-size: 16px;
font-style: regular;
font-weight: 400;
letter-spacing: 0%;
text-align: center;
justify-content: center;
align-items: center;
gap: 10px;
leading-trim: none;
}
.option-box .gzt {
display: flex;
padding: 10px;
text-align: center;
background: rgba(255, 255, 255, 0.3);
border-radius: 6px;
justify-content: space-around;
align-items: center;
gap: 10px;
}
.menu-box {
display: grid;
width: 100%;
height: 64px;
font-size: 16px;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 10px;
}
.menu-title {
display: flex;
width: 96px;
height: 64px;
line-height: 24px;
text-align: center;
cursor: pointer;
justify-content: center;
align-items: center;
}
.meun-title-active {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
border-bottom: 2px solid #fff;
}
.meun-title-disable {
cursor: not-allowed !important;
}
</style>

View File

@ -15,7 +15,16 @@ import './assets/css/theme.css';
const storeGlobalTypes = Vue.prototype.$storeGlobalTypes;
MessagePlugin.config({
placement: 'top', // 位置top/center
offset: [0, 80], // [ 水平偏移,垂直偏移] → 顶部80px
zIndex: 9999 // 层级
});
Vue.prototype.$message = MessagePlugin;
Vue.use(GgzcWeb, { store, extSettings });

View File

@ -3,6 +3,14 @@ import VueRouter from 'vue-router';
import { hasLogin } from '@/pages/index/api/login';
import routes from './routes';
import Main from '@/pages/index/views/main.vue'
// import Home2 from '@/pages/index/views/home2/index.vue'
// import login from '@/pages/index/views/login/login.vue'
// import yhzx from '@/pages/index/views/glxtSy/glxtSy.vue'
// import authorize from '@/pages/index/views/dddl/authorize.vue' //单点登录跳转中间页
Vue.use(VueRouter);
const baseRoutes = [
@ -12,15 +20,42 @@ const baseRoutes = [
},
];
routes.push(...baseRoutes);
const mainRoutes = {
path: '/',
component: Main,
name: 'main',
redirect: { name: 'home' },
meta: { title: '主入口整体布局' },
children: routes,
// [
// // // 通过meta对象设置路由展示方式
// // // 1. isTab: 是否通过tab展示内容, true: 是, false: 否
// // // 2. iframeUrl: 是否通过iframe嵌套展示内容, '以http[s]://开头': 是, '': 否
// // // 提示: 如需要通过iframe嵌套展示内容, 但不通过tab打开, 请自行创建组件使用iframe处理!
// { path: 'home', component: Home2, name: 'home', meta: { title: '首页' } },
// { path: 'login', component: login, name: 'login', meta: { title: '登录' } },
// { path: 'yhzx', component: yhzx, name: 'yhzx', meta: { title: '用户中心' } },
// ],
beforeEnter(to, from, next) {
// let token = Vue.cookie.get('token')
// if (!token || !/\S/.test(token)) {
// clearLoginInfo()
// next({ name: 'login' })
// }
next()
}
}
// routes.push(...baseRoutes);
// routes.push(mainRoutes);
const router = new VueRouter({
mode: 'history',
base: `${window.STATIC_ENV_CONFIG.ROUTER_PREFIX}/`,
routes: [...routes],
scrollBehavior(_to, _from, _savedPosition) {
return { x: 0, y: 0 };
},
routes: [mainRoutes],
});
router.beforeEach((to, from, next) => {

View File

@ -2,11 +2,11 @@ function login() {
return import(/* webpackChunkName: "sbfdemo" */ '@/pages/index/views/login/login.vue');
}
function home() {
return import(/* webpackChunkName: "sbfdemo" */ '@/pages/index/views/home/index.vue');
}
function home2() {
return import(/* webpackChunkName: "sbfdemo" */ '@/pages/index/views/home2/index.vue');
}
// function home2() {
// return import(/* webpackChunkName: "sbfdemo" */ '@/pages/index/views/home2/index.vue');
// }
function yhzx() {
return import(/* webpackChunkName: "sbfdemo" */ '@/pages/index/views/glxtSy/glxtSy.vue');
}
@ -66,6 +66,33 @@ function sjlbc() {
function fwscIndex() {
return import(/* webpackChunkName: "fwsc" */ '@/pages/index/views/fwsc/index.vue');
}
//企业认证
function qyrenzheng() {
return import('@/pages/index/views/qyrz/index.vue');
}
//企业入驻
function qyruzhu() {
return import('@/pages/index/views/qy-rz/index.vue');
}
//碳服务供给
function tfwgj() {
return import('@/pages/index/views/gxfb/tfwgj.vue');
}
//碳服务需求
function tfwxq() {
return import('@/pages/index/views/gxfb/tfwxq.vue');
}
//绿色交易
function lsjy() {
return import('@/pages/index/views/lsjy/lsjy.vue');
}
export default [
{
name: 'login',
@ -104,19 +131,19 @@ export default [
needLogin: false,
},
},
{
name: 'home2',
path: '/home2',
component: home2,
meta: {
title: '首页',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home2' }],
disableBack: true,
needLogin: false,
},
},
// {
// name: 'home2',
// path: '/home2',
// component: home2,
// meta: {
// title: '首页',
// isShowSideBar: false,
// hasHome: true,
// breadCrumbs: [{ title: '首页', to: '/home2' }],
// disableBack: true,
// needLogin: false,
// },
// },
{
name: 'yhzx',
path: '/yhzx',
@ -128,8 +155,16 @@ export default [
breadCrumbs: [{ title: '用户中心', to: '/yhzx' }],
disableBack: true,
},
children: [
{ path: 'qyrenzheng', component: qyrenzheng, name: 'qyrenzheng', meta: { title: '企业认证' } },
{ path: 'qyruzhu', component: qyruzhu, name: 'qyruzhu', meta: { title: '企业入驻' } },
{ path: 'tfwgj', component: tfwgj, name: 'tfwgj', meta: { title: '碳服务供给' } },
{ path: 'tfwxq', component: tfwxq, name: 'tfwxq', meta: { title: '碳服务需求' } },
{ path: 'ggwhgl', component: newsCenter, name: 'ggwhgl', meta: { title: '消息中心' } },
{ path: 'lsjy', component: lsjy, name: 'lsjy', meta: { title: '绿色交易' } },
]
},
{
{
name: 'newsCenter',
path: '/newsCenter',
component: newsCenter,
@ -167,62 +202,62 @@ export default [
component: hyzt,
},
{
name: 'fwsc-fwsc',
path: '/fwsc/fwsc',
name: 'tfwsc',
path: '/tfwsc',
component: fwsc,
meta: {
title: '碳服务市场',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳服务市场', to: '/fwsc/fwsc' }],
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳服务市场', to: '/tfwsc' }],
disableBack: true,
},
},
{
name: 'jrsc',
path: '/fwsc/jrsc',
name: 'tjrsc',
path: '/tjrsc',
component: jrsc,
meta: {
title: '碳金融市场',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳金融市场', to: '/fwsc/jrsc' }],
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳金融市场', to: '/tjrsc' }],
disableBack: true,
},
},
{
name: 'xqsc',
path: '/fwsc/xqsc',
name: 'txqsc',
path: '/txqsc',
component: xqsc,
meta: {
title: '碳需求市场',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳需求市场', to: '/fwsc/xqsc' }],
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳需求市场', to: '/txqsc' }],
disableBack: true,
},
},
{
name: 'fwsc-sjsc',
path: '/fwsc/sjsc',
name: 'tsjsc',
path: '/tsjsc',
component: sjsc,
meta: {
title: '碳数据市场',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳数据市场', to: '/fwsc/sjsc' }],
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳数据市场', to: '/tsjsc' }],
disableBack: true,
},
},
{
name: 'fwsc-sjlbc',
path: '/fwsc/sjlbc',
name: 'tsjlbc',
path: '/tsjlbc',
component: sjlbc,
meta: {
title: '数据列表',
isShowSideBar: false,
hasHome: true,
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳数据市场', to: '/fwsc/sjsc' }, { title: '数据列表', to: '/fwsc/sjlbc' }],
breadCrumbs: [{ title: '首页', to: '/home' }, { title: '服务中心', to: '' }, { title: '碳数据市场', to: '/fwscsjlbc' }],
disableBack: true,
},
},

View File

@ -41,6 +41,7 @@ export default {
this.doAuthorize(true,this.loginForm.scopes,null).then(res => {
const href = res.data
console.log("authorize.res=>",res)
if (!href) {
console.log('自动授权未通过!')
return;

View File

@ -1,7 +1,5 @@
<template>
<div class="fwsc-container">
<NewNav />
<!-- 面包屑导航 -->
<BreadcrumbNav currentPage="碳服务市场" />
@ -27,6 +25,23 @@
<!-- 左侧筛选栏 -->
<aside class="filter-sidebar">
<div class="filter-sidebar-content">
<!-- 内容搜索 -->
<div class="filter-section">
<div class="filter-title">内容搜索</div>
<t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" />
</div>
<div class="filter-buttons">
<t-button theme="primary" @click="onSearch">查询</t-button>
<t-button theme="default" @click="onReset">重置</t-button>
</div>
<!-- 只展示收藏项 -->
<div class="filter-section">
<t-checkbox v-model="filter.zzsscx" @change="onSearch">只展示收藏项</t-checkbox>
</div>
<!-- 服务类型 -->
<div class="filter-section">
<div class="filter-title">服务类型</div>
@ -38,26 +53,10 @@
<!-- 服务企业 -->
<div class="filter-section">
<div class="filter-title">服务企业</div>
<div class="filter-options">
<div class="filter-options enterprise-options">
<t-checkbox-group v-model="filter.qyuuids" :options="qyOptions" @change="onSearch" />
</div>
</div>
<!-- 只展示收藏项 -->
<div class="filter-section">
<t-checkbox v-model="filter.zzsscx" @change="onSearch">只展示收藏项</t-checkbox>
</div>
<!-- 内容搜索 -->
<div class="filter-section">
<div class="filter-title">内容搜索</div>
<t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" />
</div>
<div class="filter-buttons">
<t-button theme="primary" @click="onSearch">查询</t-button>
<t-button theme="default" @click="onReset">重置</t-button>
</div>
</div>
</aside>
@ -207,10 +206,10 @@ export default {
data() {
return {
navTabs: [
{ label: '碳服务市场', path: '/fwsc/fwsc' },
{ label: '碳需求市场', path: '/fwsc/xqsc' },
{ label: '碳金融市场', path: '/fwsc/jrsc' },
{ label: '碳数据市场', path: '/fwsc/sjsc' },
{ label: '碳服务市场', path: '/tfwsc' },
{ label: '碳需求市场', path: '/txqsc' },
{ label: '碳金融市场', path: '/tjrsc' },
{ label: '碳数据市场', path: '/tsjsc' },
],
//
filter: {
@ -338,7 +337,7 @@ export default {
});
}
this.cardList = data.records || [];
this.page.total = data.total || 0;
this.page.total = Number(data.total || 0);
} catch (error) {
this.cardList = [];
this.page.total = 0;
@ -433,7 +432,7 @@ export default {
},
onPublishSuccessCancel() {
this.publishSuccessVisible = false;
this.$router.push('/fwsc/fwsc');
this.$router.push('/tfwsc');
},
onPublishSuccessClose() {
this.publishSuccessVisible = false;
@ -550,12 +549,18 @@ export default {
font-size: 14px;
color: #666;
}
&.enterprise-options {
max-height: 200px;
overflow-y: auto;
}
}
.filter-buttons {
display: flex;
gap: 8px;
margin-top: 16px;
margin-bottom: 16px;
.t-button {
flex: 1;
@ -573,7 +578,7 @@ export default {
.service-card {
display: flex;
flex-direction: column;
width: calc((100% - 40px) / 3);
width: calc((100% - 20px) / 2);
overflow: hidden;
background: #fff;
border-radius: 12px;
@ -644,20 +649,18 @@ export default {
}
.card-content {
flex: 1;
padding: 16px;
}
.card-desc {
display: box;
margin-bottom: 12px;
display: block;
height: 70px;
overflow: hidden;
font-size: 14px;
line-height: 1.6;
color: #666;
text-overflow: ellipsis;
-webkit-line-clamp: 3;
box-orient: vertical;
}
.card-tags {

View File

@ -1,6 +1,5 @@
<template>
<div class="fwsc-page">
<NewNav />
<div class="main-content">
<!-- 当前位置导航 -->
<div class="breadcrumb-box">
@ -22,33 +21,33 @@
<div class="services-section">
<div class="services-grid">
<!-- 碳服务市场 -->
<div class="service-card" @click="goToPage('/fwsc/fwsc')">
<div class="service-card" @click="goToPage('/tfwsc')">
<div class="service-card-icon">
<span style="font-size: 48px">🌐</span>
</div>
<h3 class="service-card-title">碳服务市场</h3>
<p class="service-card-desc">汇聚全国优质第三方服务机构提供从核算到认证的全链条专业服务</p>
<div class="service-card-buttons">
<t-button theme="primary" variant="outline" @click.stop="goToPage('/fwsc/fwsc')">浏览服务信息</t-button>
<t-button theme="primary" @click.stop="goToPage('/fwsc/fwsc?publish=1')">我要发布服务</t-button>
<t-button theme="primary" variant="outline" @click.stop="goToPage('/tfwsc')">浏览服务信息</t-button>
<t-button theme="primary" @click.stop="goToPage('/tfwsc?publish=1')">我要发布服务</t-button>
</div>
</div>
<!-- 碳需求市场 -->
<div class="service-card" @click="goToPage('/fwsc/xqsc')">
<div class="service-card" @click="goToPage('/txqsc')">
<div class="service-card-icon">
<span style="font-size: 48px">📋</span>
</div>
<h3 class="service-card-title">碳需求市场</h3>
<p class="service-card-desc">企业发布真实服务采购需求智能匹配靠谱服务商杜绝中间商差价</p>
<div class="service-card-buttons">
<t-button theme="primary" variant="outline" @click.stop="goToPage('/fwsc/xqsc')">浏览求购信息</t-button>
<t-button theme="primary" @click.stop="goToPage('/fwsc/xqsc?publish=1')">我要发布需求</t-button>
<t-button theme="primary" variant="outline" @click.stop="goToPage('/txqsc')">浏览求购信息</t-button>
<t-button theme="primary" @click.stop="goToPage('/txqsc?publish=1')">我要发布需求</t-button>
</div>
</div>
<!-- 碳金融市场 -->
<div class="service-card" @click="goToPage('/fwsc/jrsc')">
<div class="service-card" @click="goToPage('/tjrsc')">
<div class="service-card-icon">
<span style="font-size: 48px">💰</span>
</div>

View File

@ -1,8 +1,5 @@
<template>
<div class="jrsc-page">
<!-- 顶部导航 -->
<NewNav />
<!-- 面包屑导航 -->
<BreadcrumbNav currentPage="碳金融市场" />
@ -156,10 +153,10 @@ export default {
data() {
return {
navTabs: [
{ label: '碳服务市场', path: '/fwsc/fwsc' },
{ label: '碳需求市场', path: '/fwsc/xqsc' },
{ label: '碳金融市场', path: '/fwsc/jrsc' },
{ label: '碳数据市场', path: '/fwsc/sjsc' },
{ label: '碳服务市场', path: '/tfwsc' },
{ label: '碳需求市场', path: '/txqsc' },
{ label: '碳金融市场', path: '/tjrsc' },
{ label: '碳数据市场', path: '/tsjsc' },
],
//
selectedServiceType: '全部',

View File

@ -1,13 +1,10 @@
<template>
<div class="sjlbc-page">
<!-- 顶部导航 -->
<NewNav />
<!-- 面包屑导航 -->
<BreadcrumbNav
:currentPage="currentPageName"
secondPage="碳数据市场"
secondLink="/fwsc/sjsc"
secondLink="/tsjsc"
/>
<!-- 主内容区 -->

View File

@ -1,7 +1,5 @@
<template>
<div class="sjsc-page">
<NewNav />
<!-- 面包屑导航 -->
<BreadcrumbNav currentPage="碳数据市场" />
@ -94,10 +92,10 @@ export default {
data() {
return {
navTabs: [
{ label: '碳服务市场', path: '/fwsc/fwsc' },
{ label: '碳需求市场', path: '/fwsc/xqsc' },
{ label: '碳金融市场', path: '/fwsc/jrsc' },
{ label: '碳数据市场', path: '/fwsc/sjsc' },
{ label: '碳服务市场', path: '/tfwsc' },
{ label: '碳需求市场', path: '/txqsc' },
{ label: '碳金融市场', path: '/tjrsc' },
{ label: '碳数据市场', path: '/tsjsc' },
],
selectedType: 'all',
dataTypeList: [
@ -180,7 +178,7 @@ export default {
//
},
goToDataList(id) {
this.$router.push({ path: '/fwsc/sjlbc', query: { id } });
this.$router.push({ path: '/tsjlbc', query: { id } });
},
getTagClass(tag) {
const classMap = {

View File

@ -1,7 +1,5 @@
<template>
<div class="xqsc-container">
<NewNav />
<!-- 面包屑导航 -->
<BreadcrumbNav currentPage="碳需求市场" />
@ -27,6 +25,23 @@
<!-- 左侧筛选栏 -->
<aside class="filter-sidebar">
<div class="filter-sidebar-content">
<!-- 内容搜索 -->
<div class="filter-section">
<div class="filter-title">内容搜索</div>
<t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" />
</div>
<div class="filter-buttons">
<t-button theme="primary" @click="onSearch">查询</t-button>
<t-button theme="default" @click="onReset">重置</t-button>
</div>
<!-- 服务地区 -->
<div class="filter-section">
<div class="filter-title">服务地区</div>
<t-select v-model="filter.dq" :options="fwfwOptions" placeholder="请选择" clearable style="width: 100%" @change="onSearch" />
</div>
<!-- 需求类型 -->
<div class="filter-section">
<div class="filter-title">需求类型</div>
@ -42,23 +57,6 @@
<t-checkbox-group v-model="filter.sshy" :options="sshyDmOptions" @change="onSearch" />
</div>
</div>
<!-- 服务地区 -->
<div class="filter-section">
<div class="filter-title">服务地区</div>
<t-select v-model="filter.dq" :options="fwfwOptions" placeholder="请选择" clearable style="width: 100%" @change="onSearch" />
</div>
<!-- 内容搜索 -->
<div class="filter-section">
<div class="filter-title">内容搜索</div>
<t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" />
</div>
<div class="filter-buttons">
<t-button theme="primary" @click="onSearch">查询</t-button>
<t-button theme="default" @click="onReset">重置</t-button>
</div>
</div>
</aside>
@ -98,7 +96,7 @@
<span class="budget-value">{{ card.ysfwDm1 }}</span>
</div>
<div class="card-actions">
<t-button theme="primary" size="small" @click="handleContact(card)">联系服务</t-button>
<t-button theme="primary" size="small" @click="handleContact(card)">联系客户</t-button>
</div>
</div>
</div>
@ -134,7 +132,7 @@
<!-- 联系服务弹窗 -->
<t-dialog
:closeOnOverlayClick="false"
header="联系服务"
header="联系客户"
:visible.sync="contactVisible"
@confirm="onContactConfirm"
:onClose="onContactClose"
@ -200,10 +198,10 @@ export default {
data() {
return {
navTabs: [
{ label: '碳服务市场', path: '/fwsc/fwsc' },
{ label: '碳需求市场', path: '/fwsc/xqsc' },
{ label: '碳金融市场', path: '/fwsc/jrsc' },
{ label: '碳数据市场', path: '/fwsc/sjsc' },
{ label: '碳服务市场', path: '/tfwsc' },
{ label: '碳需求市场', path: '/txqsc' },
{ label: '碳金融市场', path: '/tjrsc' },
{ label: '碳数据市场', path: '/tsjsc' },
],
//
filter: {
@ -303,7 +301,7 @@ export default {
});
}
this.cardList = data.records || [];
this.page.total = data.total || 0;
this.page.total = Number(data.total || 0);
} catch (error) {
this.cardList = [];
this.page.total = 0;
@ -348,7 +346,7 @@ export default {
this.rzVisible = true;
}
},
//
//
handleContact(card) {
this.contactData = {
lxr: card.lxr || '',
@ -387,7 +385,7 @@ export default {
},
onPublishSuccessCancel() {
this.publishSuccessVisible = false;
this.$router.push('/fwsc/xqsc');
this.$router.push('/txqsc');
},
onPublishSuccessClose() {
this.publishSuccessVisible = false;
@ -510,6 +508,7 @@ export default {
display: flex;
gap: 8px;
margin-top: 16px;
margin-bottom: 16px;
.t-button {
flex: 1;
@ -606,7 +605,7 @@ export default {
.card-desc {
display: box;
margin-bottom: 16px;
height: 70px;
overflow: hidden;
font-size: 14px;
line-height: 1.6;

View File

@ -1,17 +1,11 @@
<template>
<div class="yhzx-box" style="height: 100vh">
<Nav style="position: sticky;" />
<div style="display: flex; height: 100vh">
<div class="yhzx-box" style="height: calc(100vh - 65px)">
<!-- <Nav style="position: sticky;" /> -->
<div style="display: flex; height: 100%">
<div style="height: 100%">
<template>
<div style="height: 100%" class="htglMenu">
<t-menu
style="width: 220px; background: #fff"
:defaultValue="defaultValue"
:collapsed="collapsed"
:defaultExpanded="expanded"
@change="changeHandler"
>
<t-menu style="width: 220px; background: #fff" :defaultValue="defaultValue" :collapsed="collapsed" :defaultExpanded="expanded" @change="gotoPage">
<div class="title">用户中心</div>
<!-- 循环实现 -->
<template v-for="item in cdList">
@ -35,28 +29,21 @@
</template>
</div>
<div style="position: relative; width: 100%; height: 100%; overflow: auto">
<!-- <div class="topheader">
<div class="hederLeft" @mouseover="grxxisShow" @mouseleave="headMouseLeave">
<img
class="user_pic"
src="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QNxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NkYxNDI1RjU0MjIwNjgxMTgwODM4RjQyOEIzQ0M4MUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDY1QzI5QzczQUVDMTFFNEIzM0U4Q0I5MkNEOTVGMkMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDY1QzI5QzYzQUVDMTFFNEIzM0U4Q0I5MkNEOTVGMkMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkJDRTc1MDAyMzEyMDY4MTE4MDgzOUE3MjIxRTIwQTNGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjZGMTQyNUY1NDIyMDY4MTE4MDgzOEY0MjhCM0NDODFFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwv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 //Z"
/>
<div class="grxxHt" v-show="grxxShow">
<h6 @click="xgmm">修改密码</h6>
<h6 @click="exit">退出登录</h6>
</div>
</div>
</div> -->
<div class="htglLeft">
<component :is="activeCompo" v-if="iskxt" :sfHtgl="true" @changeComponent="changeComponent" />
<!-- <component :is="activeCompo" v-if="iskxt" :sfHtgl="true" @changeComponent="changeComponent" />
<iframe ref="myIframe" v-else :src="iFrameSrc" style="width: 100%; height: 100%" class="iframe-container">
</iframe>
</iframe> -->
<!-- <qyrz/> -->
<!-- <xzmbgl v-if="activeCompo === 'xzmbgl'" @changeComponent="changeComponent" /> -->
<iframe v-if="iframeUrl" :src="iframeUrl" width="100%" height="100%" frameborder="0" scrolling="yes">
</iframe>
<keep-alive v-else>
<router-view />
</keep-alive>
</div>
</div>
</div>
<Footer />
<!-- <Footer /> -->
</div>
</template>
@ -91,19 +78,19 @@ export default {
activeCompo: 'qyrz', //
collapsed: false,
expanded: ['qyrz'],
defaultValue:'qyrz',
defaultValue: 'qyrz',
cdList: [
{
id: 'qyrz',
id: 'qyrenzheng',
title: '企业认证',
icon: 'user',
name: 'qyrz',
name: 'qyrenzheng',
},
{
id: 'qyrz1',
{
id: 'qyruzhu',
title: '企业入驻',
icon: 'user',
name: 'qyrz1',
name: 'qyruzhu',
},
{
id: 'tfwgj',
@ -130,26 +117,86 @@ export default {
name: 'lsjy',
},
{
id: 'zljggl',
title: '质证结果管理',
id: 'cunzhengjilu',
title: '存证记录',
icon: 'user',
name: 'zljggl',
name: 'cunzhengjilu',
iframeUrl: "https://ctn-web-pre.lingshu.net/cert-record-mgt",
}, {
id: 'tgjlgl',
title: '托管记录管理',
icon: 'user',
name: 'tgjlgl',
iframeUrl: "https://ctn-web-pre.lingshu.net/hosting-record-mgt",
}, {
id: 'chazhengjilu',
title: '查证记录',
icon: 'user',
name: 'chazhengjilu',
iframeUrl: "https://ctn-web-pre.lingshu.net/query-record-mgt",
},
],
ejcdList: [],
iFrameSrc: '',
zljgglurl:'https://ctn-web-pre.lingshu.net/proof-result-mgt?type=carbon-certify',
zljgglurl: 'https://ctn-web-pre.lingshu.net/proof-result-mgt?type=carbon-certify',
iframeUrl: "",
};
},
created() {
this.initView();
const activeCompo = this.$route.query.activeCompo;
if(activeCompo){
this.changeHandler(activeCompo);
}
// this.initView();
// const activeCompo = this.$route.query.activeCompo;
// if (activeCompo) {
// this.changeHandler(activeCompo);
// }
this.gotoPage(this.cdList[0].id);
},
methods: {
async yhinit() {
gotoPage(menuId) {
const menu = this.cdList.find((item) => item.id == menuId)
console.log("当前菜单配置:", menu)
//
if (menu.disable) {
this.$dialog.alert({
header: '提示',
body: '该功能暂未开放。',
confirmBtn: null
})
return
}
//
console.log("当前页面是否需要登录:", menu.needLogin)
if (menu.needLogin) {
const sfdl = window.sessionStorage.getItem('sfdl'); //
console.log("是否已经登录登录:", sfdl)
if (!sfdl) {
this.$router.push("/login")
return
}
}
// this.curPage = menu.name;
let iframeUrl = menu.iframeUrl;
if (iframeUrl) {
this.iframeUrl = iframeUrl;
} else {
this.$router.push({
path: "/yhzx/" + menu.name
})
}
},
async yhinit() {
try {
// const res = await getMxjbxx(prame);
const { data } = await api.init();
@ -159,21 +206,21 @@ export default {
}
},
async initView() {
try{
const params = 'ZZJGGL_URL';
const {data} = await api.dm2mc(params);
console.log('initView',data);
this.zljgglurl = data;
}catch(err){
try {
const params = 'ZZJGGL_URL';
const { data } = await api.dm2mc(params);
console.log('initView', data);
this.zljgglurl = data;
} catch (err) {
}finally{
// console.log('newUrl', this.$route.query?.activeCompo);
if(this.$route.query?.activeCompo){
this.activeCompo = this.$route.query.activeCompo;
this.expanded=[this.activeCompo];
this.defaultValue = this.activeCompo;
this.changeHandler(this.activeCompo);
}
} finally {
// console.log('newUrl', this.$route.query?.activeCompo);
if (this.$route.query?.activeCompo) {
this.activeCompo = this.$route.query.activeCompo;
this.expanded = [this.activeCompo];
this.defaultValue = this.activeCompo;
this.changeHandler(this.activeCompo);
}
}
},
@ -326,7 +373,7 @@ export default {
.iframe-container {
border: none;
}
.yhzx-box{
.yhzx-box {
overflow: auto;
}
.yhzx-box::-webkit-scrollbar {

View File

@ -1,7 +1,31 @@
<template>
<div class="page-box">
<!-- 顶部菜单栏 -->
<NewNav />
<!-- <div class="nav-box">
<div class="logo-box">
<img src="@/pages/index/assets/logo-name.png">
</div>
<div class="menu-box">
<div class="menu-title meun-title-active">
<img src="@/pages/index/assets/nav-home.png" width="24px" height="24px">
<span> &nbsp;&nbsp;首页</span>
</div>
<div class="menu-title">碳证中心</div>
<div class="menu-title">服务中心</div>
<div class="menu-title">共性能力</div>
<div class="menu-title">企业出海</div>
<div class="menu-title">行业专题</div>
</div>
<div class="option-box">
<div class="gzt">
<img src="@/pages/index/assets/home-gzt-icon.png" />
<span> 工作台</span>
</div>
<div style="margin-left:20px; cursor: pointer;">激活</div>
<div>|</div>
<div style="cursor: pointer;">登录</div>
</div>
</div> -->
<!-- 主页面 -->
<div class="container">
@ -11,7 +35,7 @@
<img src="@/pages/index/assets/home-top-title.png">
</div>
<div class="top-title-desc">
<img src="@/pages/index/assets/top-desc-text.png"/>
<img src="@/pages/index/assets/top-desc-text.png" />
</div>
<div class="top-search-box">
@ -28,7 +52,7 @@
<div class="top-options-box">
<div class="option-item-box green">
<div class="title">碳数字身份证</div>
<div class="option-item-box-title">碳数字身份证</div>
<div class="option-btn-box ">
<div class="btn">办证指南</div>
<div class="btn">碳证查询</div>
@ -39,7 +63,7 @@
</div>
</div>
<div class="option-item-box blue">
<div class="title">国家可信碳链</div>
<div class="option-item-box-title">国家可信碳链</div>
<div class="option-btn-box">
<div class="btn">上链指南</div>
<div class="btn">上链标准</div>
@ -50,7 +74,7 @@
</div>
</div>
<div class="option-item-box cyan">
<div class="title">绿色服务</div>
<div class="option-item-box-title">绿色服务</div>
<div class="option-btn-box">
<div class="btn">服务市场</div>
<div class="btn">需求市场</div>
@ -70,7 +94,7 @@
<!-- 中间核心驱动 -->
<div class="center-box">
<div class="title">
<div class="center-box-title">
核心驱动
</div>
@ -150,7 +174,7 @@
<div class="name1">企业出海</div>
<div class="name2">政策要求合规指引案例分享一站式信息与系统入口</div>
<div class="item">
<div class="title">电池法案</div>
<div class="qych-box-item-title">电池法案</div>
<div class="desc-btn-box">
<div class="desc">欧盟电池法案管控电池全生命周期涉及回收碳足迹等要求</div>
<div class="btn">申请服务</div>
@ -158,7 +182,7 @@
</div>
<div class="item" style="margin-top:21px;">
<div class="title">CBAM</div>
<div class="qych-box-item-title">CBAM</div>
<div class="desc-btn-box">
<div class="desc">欧盟对进口高碳产品按隐含排放征收碳关税</div>
<div class="btn">CBAM试算</div>
@ -166,7 +190,7 @@
</div>
<div class="item" style="margin-top:21px;">
<div class="title">航运燃料</div>
<div class="qych-box-item-title">航运燃料</div>
<div class="desc-btn-box">
<div class="desc">从化石油基向LNG绿甲醇绿氨等多元低碳方向加速转型</div>
<div class="btn">申请服务</div>
@ -183,7 +207,7 @@
<div>行业资讯</div>
<div>平台公告</div>
</div>
<div>
<div style="width:100%">
<div class="item">
国家发改委发布2025年碳减排重点任务
</div>
@ -204,9 +228,11 @@
<!-- 建立您的碳数字身份 -->
<div class="bottom-box">
<div class="content">
<div class="title">建立您的碳数字身份</div>
<div class="desc">基于国家区块链网络实现碳数据的一站式确权核验与托管</div>
<div class="btn">申请服务</div>
<div>
<div class="bottom-box-content-title">建立您的碳数字身份</div>
<div class="desc">基于国家区块链网络实现碳数据的一站式确权核验与托管</div>
<div class="btn">申请服务</div>
</div>
</div>
</div>
@ -221,11 +247,14 @@
<script>
import Footer from '@/pages/index/components/footer/index.vue';
import NewNav from '@/pages/index/components/new-nav/index.vue';
export default {
data() {
return {
inputValue: ""
}
},
components: {
Footer,
NewNav,
},
}
</script>
@ -235,20 +264,92 @@ export default {
background: #f5f5f7;
}
.nav-box {
position: fixed;
top: 0;
z-index: 9999;
display: grid;
width: 100%;
margin: 0 auto;
color: #fff;
background: #009a29;
grid-template-columns: 1fr 2fr 1fr;
place-items: center;
}
.logo-box {
text-align: center;
}
.option-box {
display: flex;
height: 64px;
font-family: PingFang SC;
font-size: 16px;
font-style: regular;
font-weight: 400;
letter-spacing: 0%;
text-align: center;
justify-content: center;
align-items: center;
gap: 10px;
leading-trim: none;
}
.option-box .gzt {
display: flex;
padding: 10px;
text-align: center;
background: rgba(255, 255, 255, 0.3);
border-radius: 6px;
justify-content: space-around;
align-items: center;
gap: 10px;
}
.menu-box {
display: grid;
width: 100%;
height: 64px;
font-size: 16px;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 10px;
}
.menu-title {
display: flex;
width: 96px;
height: 64px;
line-height: 24px;
text-align: center;
cursor: pointer;
justify-content: center;
align-items: center;
}
.meun-title-active {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
border-bottom: 2px solid #fff;
}
.top-box {
position: relative;
display: flex;
width: 1920px;
height: 630px;
width: 100%;
background-image: url(~@/pages/index/assets/home-top-bg1.jpg);
background-position: center; /* 永远显示中间部分 */
background-repeat: no-repeat; /* 不重复 */
background-size: auto; /* 不拉伸,保持原图尺寸 */
/* height: 630px; */
animation: switchBg 18s infinite linear;
background-repeat: no-repeat; /* 不重复 */
background-size: cover; /* 不拉伸,保持原图尺寸 */
animation: switchBg 30s infinite linear;
flex-direction: column;
justify-content: start;
align-items: center;
@ -270,22 +371,23 @@ export default {
}
.container {
width: 1920px;
width: 100%;
min-height: 100vh;
/* max-width: 1920px; */
margin: 0 auto; /* 左右居中 */
margin-top: 64px;
}
.top-title {
width: 100%;
height: 58;
margin-top: 130px;
height: 58px;
margin-top: 128px;
text-align: center;
}
.top-title-desc {
width: 876px;
width: 100%;
margin-top: 40px;
font-size: 24px;
font-weight: bold;
@ -295,10 +397,25 @@ export default {
text-stroke: 0.3px #fff;
}
.top-title-desc img {
height: 100%;
max-width: 100%;
object-fit: contain;
}
.top-search-box {
z-index: 999;
width: 100%;
padding: 0 6%;
margin-top: 40px;
}
.search-box {
display: flex;
width: 100%;
max-width: 600px;
padding: 8px;
margin: 0 auto;
background: rgba(255, 255, 255, 0.4);
border: 1px solid #fff;
border-radius: 12px;
@ -309,11 +426,6 @@ export default {
backdrop-filter: blur(8px);
}
.top-search-box {
z-index: 999;
margin-top: 40px;
}
.search-btn {
width: 92px;
height: 40px;
@ -335,7 +447,8 @@ export default {
}
.search-box input {
width: 500px;
width: calc(100% - 100px);
max-width: 500px;
background: transparent;
border: none;
outline: none;
@ -356,6 +469,7 @@ export default {
font-style: regular;
font-weight: 400;
color: #fff;
text-align: center;
leading-trim: none;
}
@ -373,17 +487,25 @@ export default {
}
.top-options-box {
position: absolute;
bottom: -20px;
z-index: 999;
display: flex;
justify-content: space-around;
gap: 30px;
display: grid;
/* display: flex; */
/* justify-content: space-between; */
width: 100%;
padding: 0% 20%;
/* position: absolute;
bottom: -60px; */
margin-top: 100px;
gap: 3%;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
.option-item-box {
width: 384px;
width: 100%;
padding-bottom: 20px;
background: rgba(255, 255, 255, 0.8);
border: 1px solid #fff;
@ -399,13 +521,15 @@ export default {
}
.option-btn-box {
display: flex;
display: grid;
width: 100%;
justify-content: space-around;
align-items: center;
padding: 6px 10px;
grid-template-columns: 1fr 1fr;
place-items: center;
gap: 10px;
}
.option-item-box .title {
.option-item-box-title {
width: 100%;
height: 39px;
margin-top: 20px;
@ -421,9 +545,8 @@ export default {
}
.option-btn-box .btn {
width: 156px;
width: 100%;
height: 48px;
margin-top: 20px;
font-size: 18px;
line-height: 48px;
color: #333;
@ -444,28 +567,28 @@ export default {
.center-box {
width: 100%;
padding: 60px;
padding: 60px 20%;
background: #fff;
}
.center-box .content-box {
display: flex;
justify-content: center;
gap: 40px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
justify-items: center;
gap: 20px;
width: 100%;
}
.center-box .title {
width: 128px;
.center-box-title {
width: fit-content;
height: 32px;
margin-bottom: 20px;
margin-left: 290px;
margin-left: 10px;
font-family: PingFang SC;
font-size: 32px;
font-style: medium;
font-weight: 500;
line-height: 36px;
line-height: 28px;
letter-spacing: 0%;
color: #222;
@ -476,8 +599,7 @@ export default {
.center-box .item {
display: flex;
width: 280px;
padding: 10px;
width: 100%;
transition: transform 0.3s ease;
flex-direction: column;
justify-content: start;
@ -528,28 +650,26 @@ export default {
}
.gxnl-qych-hydt-box {
display: flex;
display: grid;
width: 100%;
padding: 80px 0;
padding: 3% 20%;
background: #f5f7fa;
justify-content: center;
gap: 40px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 30px;
}
.gxnl-qych-hydt-box > div {
display: flex;
width: 382px;
width: 100%;
height: 553px;
min-height: 200px;
padding: 15px;
overflow: auto;
background: #fff;
background-position: center; /* 永远显示中间部分 */
background-repeat: no-repeat !important; /* 不重复 */
background-size: auto; /* 不拉伸,保持原图尺寸 */
border-radius: 12px;
@ -559,6 +679,13 @@ export default {
flex-direction: column;
justify-content: start;
align-items: center;
}
.gxnl-qych-hydt-box > div::-webkit-scrollbar {
display: none;
width: 0;
height: 0;
}
.gxnl-qych-hydt-box > div:hover {
@ -567,12 +694,18 @@ export default {
.gxnl-qych-hydt-box .gxnl-box {
background-image: url(~@/pages/index/assets/home-gxnl.png);
background-repeat: no-repeat !important; /* 不重复 */
background-size: 100% auto;
}
.gxnl-qych-hydt-box .qych-box {
background-image: url(~@/pages/index/assets/home-qych.png);
background-repeat: no-repeat !important; /* 不重复 */
background-size: 100% auto;
}
.gxnl-qych-hydt-box .hydt-box {
background-image: url(~@/pages/index/assets/home-hydt.png);
background-repeat: no-repeat !important; /* 不重复 */
background-size: 100% auto;
}
.gxnl-qych-hydt-box .name1 {
@ -600,20 +733,19 @@ export default {
}
.gxnl-box .item {
display: flex;
width: 352px;
display: grid;
width: 100%;
height: 64px;
padding: 20px;
margin-top: 16px;
cursor: pointer;
background: linear-gradient(90deg, #7be188 0%, #e8ffea 100%);
border-radius: 8px;
justify-content: space-between;
grid-template-columns: 64px 1fr 32px;
align-items: center;
}
.gxnl-box .item .text {
width: 280px;
padding-left: 20px;
font-family: PingFang SC;
font-size: 20px;
@ -639,7 +771,8 @@ export default {
gap: 10px;
}
.qych-box .item .title {
.qych-box-item-title {
padding: 0;
font-family: PingFang SC;
font-size: 20px;
font-style: semibold;
@ -723,7 +856,7 @@ export default {
height: 539px;
background-image: url(~@/pages/index/assets/home-szsf-bg.png);
background-position: center; /* 永远显示中间部分 */
background-position: left; /* 永远显示中间部分 */
background-repeat: no-repeat; /* 不重复 */
background-size: cover; /* 不拉伸,保持原图尺寸 */
@ -732,10 +865,35 @@ export default {
}
.bottom-box .content {
margin-left: 200px;
display: flex;
width: 64%;
height: 400px;
background: linear-gradient(
95.7deg,
rgba(255, 255, 255, 0) 1.44%,
rgba(255, 255, 255, 0) 6.39%,
rgba(255, 255, 255, 0.3) 41.25%,
rgba(255, 255, 255, 0.5) 91.66%
);
border: 2px solid #fff;
border-radius: 12px;
/* backdrop-filter: blur(12px); */
box-shadow: 0 4px 20px 0 rgba(255, 255, 255, 0.08);
justify-content: center;
align-items: center;
}
.bottom-box .content > div {
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.bottom-box .content .title {
.bottom-box-content-title {
padding: 0;
font-family: PingFang SC;
font-size: 40px;
font-style: semibold;
@ -779,13 +937,29 @@ export default {
border: 1px solid #fff;
border-radius: 8px;
transition: transform 0.3s ease;
transition: transform 0.3s ease;
backdrop-filter: blur(8px);
leading-trim: none;
}
.bottom-box .content .btn:hover {
transform: scale(1.05);
}
@media (max-width: 767px) {
.nav-box {
grid-template-columns: 1fr;
}
}</style>
.container {
margin-top: 192px;
}
/* .option-box {
display: none !important;
}
.menu-box {
display: none !important;
} */
}
</style>

View File

@ -0,0 +1,111 @@
<template>
<div>
<Nav @gotoIfreamPage="gotoIfreamPage" @gotoPage="gotoPage" />
<div :style="{ 'height': documentClientHeight-64 + 'px' ,'margin-top':'64px'}">
<iframe v-if="iframeUrl" :src="iframeUrl" width="100%" height="100%" frameborder="0" scrolling="yes">
</iframe>
<keep-alive v-else>
<router-view />
</keep-alive>
</div>
</div>
</template>
<script>
import Nav from "@/pages/index/components/nav/index2.vue";
export default {
name: "Main",
data() {
return {
iframeUrl: '',
documentClientHeight: 100
};
},
components: {
Nav,
},
computed: {
// documentClientHeight: {
// get() {
// return this.$store.state.common.documentClientHeight;
// },
// set(val) {
// this.$store.commit("common/updateDocumentClientHeight", val);
// },
// },
},
created() {
// this.getUserInfo();
//store sessionStore
this.bakStore();
},
mounted() {
this.resetDocumentClientHeight();
},
methods: {
gotoPage(name) {
// this.$router.push({
// name: name
// })
// this.$router.replace({ name: name, force: true })
window.location.href = name
},
gotoIfreamPage(iframeUrl) {
this.iframeUrl = iframeUrl;
},
//
resetDocumentClientHeight() {
this.documentClientHeight = document.documentElement["clientHeight"];
window.onresize = () => {
this.documentClientHeight = document.documentElement["clientHeight"];
};
},
//
// getUserInfo() {
// this.$http({
// url: this.$http.adornUrl("/sys/user/info"),
// method: "get",
// params: this.$http.adornParams(),
// }).then(({ data }) => {
// if (data && data.code === 0) {
// this.loading = false;
// this.userId = data.user.userId;
// this.userName = data.user.username;
// this.realname = data.user.realname;
// this.companyId = data.user.companyId;
// this.companyTaxNo = data.user.companyTaxNo;
// this.companyName = data.user.companyName;
// }
// });
// },
bakStore() {
// sessionStorage
if (sessionStorage.getItem("store")) {
this.$store.replaceState(
Object.assign(
{},
this.$store.state,
JSON.parse(sessionStorage.getItem("store"))
)
);
} // 在页面刷新时将vuex里的信息保存到sessionStorage里 // beforeunload事件在页面刷新时先触发
window.addEventListener("beforeunload", () => {
sessionStorage.setItem("store", JSON.stringify(this.$store.state));
});
},
},
};
</script>