feat:重构优化五个页面前端展示,修复部分问题,修正未登录态下类型错误异常捕获问题,本地改动部分后端配置,前后端联调,经检查不影响其余开发人员

This commit is contained in:
liulong 2026-05-22 12:34:42 +08:00
parent 08f66e895b
commit f1f05ca8cb
118 changed files with 34456 additions and 1514 deletions

9
.gitignore vendored
View File

@ -59,5 +59,14 @@ ewm.png
# 本地开发配置(包含敏感信息)
**/bootstrap-local.yml
# 本地 Docker 运行时数据
devops/mysql-data/
devops/minio-data/
devops/docker-compose.override.yml
# IDE
.cursor/
# Added by code-review-graph
.code-review-graph/

View File

@ -0,0 +1,219 @@
{
"name": "碳信网-正式设计稿",
"lastModified": "2026-05-21T09:52:36Z",
"thumbnailUrl": "https://s3-alpha.figma.com/thumbnails/d10a00b1-3625-430e-8ca4-dcc282abca16?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAQ4GOSFWCUPUXLFMB%2F20260521%2Fus-west-2%2Fs3%2Faws4_request\u0026X-Amz-Date=20260521T000000Z\u0026X-Amz-Expires=604800\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=42c8c868cb4fd7dc9d0589e0b0d58f4ea6d2ecd52d1f7289cdadc2ab4d013a45",
"version": "2355973360704949811",
"role": "viewer",
"editorType": "figma",
"linkAccess": "view",
"nodes": {
"150581:2545": {
"document": {
"id": "150581:2545",
"name": "banner-bg",
"type": "FRAME",
"scrollBehavior": "SCROLLS",
"children": [
{
"id": "150581:2546",
"name": "轮播背景",
"type": "GROUP",
"scrollBehavior": "SCROLLS",
"children": [
"@{id=150581:2547; name=轮播图; visible=False; type=RECTANGLE; scrollBehavior=SCROLLS; blendMode=PASS_THROUGH; fills=System.Object[]; strokes=System.Object[]; strokeWeight=1.0; strokeAlign=INSIDE; absoluteBoundingBox=; absoluteRenderBounds=; preserveRatio=True; targetAspectRatio=; constraints=; effects=System.Object[]; interactions=System.Object[]; complexStrokeProperties=}",
"@{id=150581:2549; name=图层 1 1; type=RECTANGLE; scrollBehavior=SCROLLS; blendMode=PASS_THROUGH; fills=System.Object[]; strokes=System.Object[]; strokeWeight=1.0; strokeAlign=INSIDE; absoluteBoundingBox=; absoluteRenderBounds=; preserveRatio=True; targetAspectRatio=; constraints=; effects=System.Object[]; interactions=System.Object[]; complexStrokeProperties=}"
],
"blendMode": "PASS_THROUGH",
"clipsContent": false,
"background": [
],
"fills": [
],
"strokes": [
],
"strokeWeight": 1.0,
"strokeAlign": "INSIDE",
"backgroundColor": {
"r": 0.0,
"g": 0.0,
"b": 0.0,
"a": 0.0
},
"absoluteBoundingBox": {
"x": 4869.0,
"y": 29.0,
"width": 1440.0,
"height": 617.0
},
"absoluteRenderBounds": {
"x": 4869.0,
"y": 64.0,
"width": 1440.0,
"height": 350.0
},
"targetAspectRatio": {
"x": 1440.0,
"y": 617.0
},
"constraints": {
"vertical": "TOP",
"horizontal": "CENTER"
},
"layoutAlign": "INHERIT",
"layoutGrow": 0.0,
"layoutPositioning": "ABSOLUTE",
"layoutSizingHorizontal": "FIXED",
"layoutSizingVertical": "FIXED",
"exportSettings": [
"@{suffix=; format=PNG; constraint=}",
"@{suffix=@2x; format=PNG; constraint=}"
],
"effects": [
],
"interactions": [
],
"complexStrokeProperties": {
"strokeType": "BASIC"
}
},
{
"id": "150581:2550",
"name": "title",
"type": "FRAME",
"scrollBehavior": "SCROLLS",
"children": [
"@{id=150581:2551; name=Frame 289; type=FRAME; scrollBehavior=SCROLLS; children=System.Object[]; blendMode=PASS_THROUGH; clipsContent=False; background=System.Object[]; fills=System.Object[]; strokes=System.Object[]; strokeWeight=1.0; individualStrokeWeights=; strokeAlign=INSIDE; backgroundColor=; layoutMode=HORIZONTAL; counterAxisAlignItems=CENTER; primaryAxisAlignItems=CENTER; paddingBottom=20.0; layoutWrap=NO_WRAP; absoluteBoundingBox=; absoluteRenderBounds=; constraints=; layoutAlign=INHERIT; layoutGrow=0.0; layoutSizingHorizontal=HUG; layoutSizingVertical=HUG; effects=System.Object[]; interactions=System.Object[]; complexStrokeProperties=}",
"@{id=150581:2553; name=专题; type=TEXT; scrollBehavior=SCROLLS; blendMode=PASS_THROUGH; fills=System.Object[]; strokes=System.Object[]; strokeWeight=2.0; strokeAlign=OUTSIDE; absoluteBoundingBox=; absoluteRenderBounds=; constraints=; layoutAlign=INHERIT; layoutGrow=0.0; layoutSizingHorizontal=HUG; layoutSizingVertical=HUG; characters=专题; characterStyleOverrides=System.Object[]; styleOverrideTable=; lineTypes=System.Object[]; lineIndentations=System.Object[]; style=; layoutVersion=5; effects=System.Object[]; interactions=System.Object[]; complexStrokeProperties=}"
],
"blendMode": "PASS_THROUGH",
"clipsContent": false,
"background": [
],
"fills": [
],
"strokes": [
],
"strokeWeight": 1.0,
"strokeAlign": "INSIDE",
"backgroundColor": {
"r": 0.0,
"g": 0.0,
"b": 0.0,
"a": 0.0
},
"layoutMode": "HORIZONTAL",
"primaryAxisSizingMode": "FIXED",
"paddingLeft": 60.0,
"paddingTop": 20.0,
"paddingBottom": 20.0,
"layoutWrap": "NO_WRAP",
"absoluteBoundingBox": {
"x": 4939.0,
"y": 175.0,
"width": 1300.0,
"height": 128.0
},
"absoluteRenderBounds": {
"x": 4939.0,
"y": 175.0,
"width": 1300.0,
"height": 128.0
},
"constraints": {
"vertical": "TOP",
"horizontal": "LEFT"
},
"layoutAlign": "INHERIT",
"layoutGrow": 0.0,
"layoutSizingHorizontal": "FIXED",
"layoutSizingVertical": "HUG",
"effects": [
],
"interactions": [
],
"complexStrokeProperties": {
"strokeType": "BASIC"
}
}
],
"blendMode": "PASS_THROUGH",
"clipsContent": true,
"background": [
],
"fills": [
],
"strokes": [
],
"strokeWeight": 1.0,
"strokeAlign": "INSIDE",
"backgroundColor": {
"r": 0.0,
"g": 0.0,
"b": 0.0,
"a": 0.0
},
"layoutMode": "VERTICAL",
"counterAxisSizingMode": "FIXED",
"primaryAxisSizingMode": "FIXED",
"counterAxisAlignItems": "CENTER",
"primaryAxisAlignItems": "CENTER",
"paddingLeft": 286.0,
"paddingRight": 286.0,
"paddingTop": 75.0,
"paddingBottom": 75.0,
"itemSpacing": 10.0,
"layoutWrap": "NO_WRAP",
"absoluteBoundingBox": {
"x": 4869.0,
"y": 64.0,
"width": 1440.0,
"height": 350.0
},
"absoluteRenderBounds": {
"x": 4869.0,
"y": 64.0,
"width": 1440.0,
"height": 350.0
},
"constraints": {
"vertical": "TOP",
"horizontal": "LEFT"
},
"layoutSizingHorizontal": "FIXED",
"layoutSizingVertical": "FIXED",
"effects": [
],
"interactions": [
],
"complexStrokeProperties": {
"strokeType": "BASIC"
}
},
"components": {
},
"componentSets": {
},
"schemaVersion": 0,
"styles": {
}
}
}
}

26898
devops/.figma-fetch-temp.json Normal file

File diff suppressed because it is too large Load Diff

1491
devops/.figma-hyzt.json Normal file

File diff suppressed because it is too large Load Diff

1521
devops/.figma-qych-full.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,192 @@
C:\nvm4w\nodejs\npx.cmd : [INFO] Retrieving raw Figma node: 150581:2709,150581:2748 from QVKV61TRu0gMc0waIo6o58 (depth:
default)
C:\Users\23721\AppData\Local\Temp\ps-script-36191cfb-6cb2-4734-92b0-56ff86d5948e.ps1:114 : 1
+ C:\nvm4w\nodejs\npx.cmd -y figma-developer-mcp fetch --env "C:\Users\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ([INFO] Retrievi...depth: default):String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
[INFO] Calling https://api.figma.com/v1/files/QVKV61TRu0gMc0waIo6o58/nodes?ids=150581:2709,150581:2748
[INFO] Using Personal Access Token for authentication
{
"metadata": {
"name": "??,
"components": {},
"componentSets": {}
},
"nodes": [
{
"id": "150581:2709",
"name": "banner",
"type": "FRAME",
"layout": "layout_NB1SPE",
"children": [
{
"id": "150581:2710",
"name": "bg",
"type": "GROUP",
"layout": "layout_8IZZQA",
"children": [
{
"id": "150581:2712",
"name": "061adba99a214734f140ad097dfa09c4 1",
"type": "RECTANGLE",
"layout": "layout_TZ51L7",
"fills": "fill_B6WNJR"
}
]
},
{
"id": "150581:2713",
"name": "banner_title ",
"type": "FRAME",
"layout": "layout_JR3UYU",
"children": [
{
"id": "150581:2714",
"name": "Frame 289",
"type": "FRAME",
"layout": "layout_97HZ6Y",
"strokes": "fill_5XUNEF",
"strokeWeight": "0px 0px 4px",
"children": [
{
"id": "150581:2715",
"name": "浼佷笟鍑烘捣",
"type": "TEXT",
"layout": "layout_CD2M09",
"text": "浼佷笟鍑烘捣",
"textStyle": "style_CTV4IW",
"fills": "fill_5XUNEF"
}
]
},
{
"id": "150581:2716",
"name": "路",
"type": "TEXT",
"layout": "layout_CD2M09",
"text": "路",
"textStyle": "style_CTV4IW",
"fills": "fill_ZNWVUN"
},
{
"id": "150581:2717",
"name": "鍚堣涓撻",
"type": "TEXT",
"layout": "layout_CD2M09",
"text": "鍚堣涓撻",
"textStyle": "style_CTV4IW",
"fills": "fill_ZNWVUN"
}
]
}
]
}
],
"globalVars": {
"styles": {
"layout_NB1SPE": {
"mode": "column",
"justifyContent": "center",
"alignItems": "center",
"gap": "10px",
"padding": "75px 286px",
"sizing": {
"horizontal": "fixed",
"vertical": "fixed"
},
"dimensions": {
"width": 1440,
"height": 350
}
},
"layout_8IZZQA": {
"mode": "none",
"sizing": {
"horizontal": "fixed",
"vertical": "fixed"
},
"position": "absolute",
"locationRelativeToParent": {
"x": 0,
"y": -10
},
"dimensions": {
"width": 1440,
"height": 371
}
},
"layout_TZ51L7": {
"mode": "none",
"sizing": {},
"locationRelativeToParent": {
"x": 0,
"y": 0
},
"dimensions": {
"width": 1440,
"height": 371
}
},
"fill_B6WNJR": [
{
"type": "IMAGE",
"imageRef": "0715cc45d2025c77b8b0c2cf17d7e70b7ec50af5",
"scaleMode": "FILL",
"objectFit": "cover",
"isBackground": false,
"imageDownloadArguments": {
"needsCropping": false,
"requiresImageDimensions": false
}
}
],
"layout_JR3UYU": {
"mode": "row",
"gap": "6px",
"padding": "20px 0px 20px 60px",
"sizing": {
"horizontal": "fixed",
"vertical": "hug"
},
"dimensions": {
"width": 1300
}
},
"layout_97HZ6Y": {
"mode": "row",
"justifyContent": "center",
"alignItems": "center",
"padding": "0px 0px 20px",
"sizing": {
"horizontal": "hug",
"vertical": "hug"
}
},
"fill_5XUNEF": [
"#2E7D32"
],
"layout_CD2M09": {
"mode": "none",
"sizing": {
"horizontal": "hug",
"vertical": "hug"
}
},
"style_CTV4IW": {
"fontFamily": "PingFang SC",
"fontStyle": "Semibold",
"fontWeight": 600,
"fontSize": 48,
"lineHeight": "68px",
"letterSpacing": "2%",
"textAlignHorizontal": "CENTER",
"textAlignVertical": "TOP"
},
"fill_ZNWVUN": [
"#003B1A"
]
}
}
}

View File

@ -97,10 +97,10 @@ FROM --platform=$TARGETARCH eclipse-temurin:8-jre
WORKDIR /app
# 安装字体(用于验证码 Captcha
# 使用中科大镜像加速
RUN echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble main restricted universe multiverse' > /etc/apt/sources.list && \
echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
# 使用中科大镜像加速amd64 用 ubuntu勿用 ubuntu-ports
RUN echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse' > /etc/apt/sources.list && \
echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
echo 'deb http://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
apt-get update && apt-get install -y --no-install-recommends \
fontconfig \
fonts-noto-cjk \
@ -109,7 +109,7 @@ RUN echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble main restricted uni
&& rm -rf /var/lib/apt/lists/*
COPY devops/start.sh /app/start.sh
RUN chmod +x /app/start.sh
RUN sed -i 's/\r$//' /app/start.sh && chmod +x /app/start.sh
# 复制所有构建产物
COPY --from=builder /build/gateway/target/springboot.jar /app/gateway.jar

View File

@ -131,7 +131,8 @@ docker-compose -f docker-compose.svc.yml ps
| 服务 | 地址 | 说明 |
| ------- | --------------------------- | ----------------------------- |
| Nacos | http://localhost:8848/nacos | 默认账号: nacos / nacos |
| Nacos 控制台 | http://localhost:8080/index.html | Nacos 3.x Web 控制台 |
| Nacos API | http://localhost:8848/nacos | 默认账号: nacos / nacos |
| Redis | localhost:6379 | 密码: redis_password |
| MinIO | http://localhost:9000 | 控制台: http://localhost:9001 |
| Gateway | http://localhost:9300 | API 网关 |

View File

@ -0,0 +1,9 @@
{
"figma-developer-mcp": {
"command": "cmd",
"args": ["/c", "npx", "-y", "figma-developer-mcp", "--stdio"],
"env": {
"FIGMA_API_KEY": "在此填入 figd_ 开头的 Personal Access Token"
}
}
}

View File

@ -12,7 +12,8 @@ services:
image: nacos/nacos-server:v3.0.2
container_name: txw-nacos
ports:
- "8848:8848"
- "8080:8080" # Nacos 3.x 控制台
- "8848:8848" # Nacos API
- "9848:9848"
- "9849:9849"
environment:
@ -45,7 +46,7 @@ services:
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
test: ["CMD", "redis-cli", "-a", "redis_password", "ping"]
interval: 30s
timeout: 10s
retries: 5

View File

@ -0,0 +1,10 @@
# 本机端口冲突时复制为 docker-compose.override.yml该文件已在 .gitignore 中忽略,勿提交)
# 用法cd devops && copy docker-compose.override.example.yml docker-compose.override.yml
# docker compose -f docker-compose.infra.yml -f docker-compose.override.yml up -d
version: '3.8'
services:
redis:
ports:
- "16379:6379"

View File

@ -1,186 +0,0 @@
version: '3.8'
# ============================================================
# 碳信网 - 服务编排
# 使用方式:
# 单服务启动: docker-compose up -d gateway
# 启动所有: docker-compose up -d
# ============================================================
services:
# ============================================
# 基础设施服务
# ============================================
nacos:
image: nacos/nacos-server:v3.0.2 # Nacos 官方镜像指定稳定版本避免latest
container_name: txw-nacos # 容器名称,方便管理
ports:
- "8848:8848" # Nacos 核心端口Web控制台+API
- "9848:9848" # Nacos 2.x 新增的客户端通信端口
- "9849:9849" # Nacos 2.x 新增的客户端grpc端口
environment:
# 核心配置:单机模式启动(必选)
- MODE=standalone
# 首选主机模式单机环境用hostname即可
- PREFER_HOST_MODE=hostname
# JVM 内存配置(避免默认内存过大/过小)
- JVM_XMS=512m
- JVM_XMX=512m
- JVM_XMN=256m
# 开启鉴权
- NACOS_AUTH_ENABLE=true
# 鉴权 Token 密钥Base64 编码,至少 32 字节)
- NACOS_AUTH_TOKEN=TmFjb3NBdXRoVG9rZW5TZWNyZXRLZXkyMDI0Rm9yRGV2RW52aXJvbm1lbnQ=
# 服务身份验证密钥
- NACOS_CORE_AUTH_SERVER_IDENTITY_KEY=nacos
- NACOS_CORE_AUTH_SERVER_IDENTITY_VALUE=nacos2024
volumes:
# 数据持久化挂载Nacos的数据目录到宿主机
- ./nacos/data:/home/nacos/data
# 日志持久化:挂载日志目录到宿主机
- ./nacos/logs:/home/nacos/logs
# 配置文件挂载(如需自定义配置,可先从容器拷贝再挂载)
# - ./nacos/conf:/home/nacos/conf
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos"]
interval: 30s
timeout: 10s
retries: 5
networks:
- txw-network
redis:
image: redis:latest
container_name: txw-redis
ports:
- "6379:6379"
command: redis-server --requirepass redis_password
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
networks:
- txw-network
minio:
image: minio/minio:latest
container_name: txw-minio
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin123
command: server /data --console-address ":9001"
volumes:
- minio-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 5
networks:
- txw-network
# ============================================
# 业务服务(统一后端镜像)
# ============================================
gateway:
image: txw-all:1.0.0-BETA
container_name: txw-gateway
environment:
- SERVICE_NAME=gateway
- SPRING_PROFILES_ACTIVE=prod
- NACOS_SERVER_ADDR=nacos:8848
ports:
- "9300:9300"
depends_on:
nacos:
condition: service_healthy
redis:
condition: service_healthy
networks:
- txw-network
sso:
image: txw-all:1.0.0-BETA
container_name: txw-sso
environment:
- SERVICE_NAME=sso
- SPRING_PROFILES_ACTIVE=prod
- NACOS_SERVER_ADDR=nacos:8848
- SPRING_REDIS_HOST=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=redis_password
ports:
- "9301:9301"
depends_on:
nacos:
condition: service_healthy
redis:
condition: service_healthy
networks:
- txw-network
mhzc:
image: txw-all:1.0.0-BETA
container_name: txw-mhzc
environment:
- SERVICE_NAME=mhzc
- SPRING_PROFILES_ACTIVE=prod
- NACOS_SERVER_ADDR=nacos:8848
- SPRING_REDIS_HOST=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=redis_password
ports:
- "9302:9302"
depends_on:
nacos:
condition: service_healthy
redis:
condition: service_healthy
networks:
- txw-network
yygl:
image: txw-all:1.0.0-BETA
container_name: txw-yygl
environment:
- SERVICE_NAME=yygl
- SPRING_PROFILES_ACTIVE=prod
- NACOS_SERVER_ADDR=nacos:8848
- SPRING_REDIS_HOST=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=redis_password
ports:
- "20010:20010"
depends_on:
nacos:
condition: service_healthy
redis:
condition: service_healthy
networks:
- txw-network
# ============================================
# 前端服务
# ============================================
# ============================================
# 网络和存储卷
# ============================================
networks:
txw-network:
driver: bridge
volumes:
nacos-data:
redis-data:
minio-data:

View File

@ -0,0 +1,50 @@
# figma-developer-mcpFramelink配置说明
使用 [figma-developer-mcp](https://www.npmjs.com/package/figma-developer-mcp) 通过 **Figma REST API** 读取设计稿,不占用官方 Figma MCP 的月度调用额度。
## 1. 获取 Figma Token
1. 打开 Figma → Settings → Security → **Personal access tokens**
2. 创建 token需有设计文件访问权限
3. 复制 token形如 `figd_...`
## 2. 配置密钥(二选一)
**方式 A推荐**:用户目录 env 文件
```powershell
copy %USERPROFILE%\.cursor\figma-mcp.env.example %USERPROFILE%\.cursor\figma-mcp.env
# 编辑 figma-mcp.env填入 FIGMA_API_KEY=figd_xxx
```
**方式 B**:在 Cursor MCP 配置的 `env.FIGMA_API_KEY` 中直接填写(勿提交到 Git
## 3. 应用 MCP 配置
`devops/cursor-mcp.figma-developer.json` 中的 `figma-developer-mcp` 段合并进:
- 全局:`%USERPROFILE%\.cursor\mcp.json`(已自动合并时可跳过)
- 或项目:`txw/.cursor/mcp.json`(本地生效,目录已在 .gitignore
## 4. 启用
1. **Ctrl+Shift+P** → **Reload Window**
2. **Cursor Settings → MCP**,确认 `figma-developer-mcp` 为绿色已连接
3. 在对话中粘贴 Figma 链接,例如:
`https://www.figma.com/design/QVKV61TRu0gMc0waIo6o58/...?node-id=150479-2522`
## 工具说明
| 工具 | 用途 |
|------|------|
| `get_figma_data` | 获取节点布局、样式、文案等结构化数据 |
| `download_figma_images` | 下载设计稿中的图片资源 |
## 与官方 Figma MCP 的关系
| 服务 | 说明 |
|------|------|
| `figma`https://mcp.figma.com/mcp | 官方远程 MCPView 席位约 6 次/月 |
| `figma-developer-mcp` | 本配置,走 API Token适合高频 design-to-code |
两者可同时启用,按场景选用。

View File

@ -1 +0,0 @@
{"version":"1","format":"xl-single","id":"093a4941-8147-4138-b3fe-70e4e14651d6","xl":{"version":"3","this":"f0185256-f990-408e-a72f-8f4c9cb5224b","sets":[["f0185256-f990-408e-a72f-8f4c9cb5224b"]],"distributionAlgo":"SIPMOD+PARITY"}}

View File

@ -15,7 +15,7 @@
<result property="lxr" column="lxr" jdbcType="VARCHAR"/>
<result property="lxdh" column="lxdh" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="bqjh" column="bqhj" jdbcType="VARCHAR"/>
<result property="bqjh" column="bqjh" jdbcType="VARCHAR"/>
<result property="zt" column="zt" jdbcType="CHAR"/>
<result property="qyuuid" column="qyuuid" jdbcType="VARCHAR"/>
<result property="lrrq" column="lrrq" jdbcType="TIMESTAMP"/>

View File

@ -0,0 +1,46 @@
# 门户字体设计包txw-mhzc-web
| 属性 | 内容 |
| --- | --- |
| 版本 | v1.0 |
| 导出日期 | 2026-05-20 |
| 适用项目 | txw-mhzc-web / 门户 index 子应用 |
| 说明 | 本包为**设计规范与 CSS Token**,不含可分发字体文件(苹方、雅黑等为系统/授权字体) |
## 包内文件
| 文件 | 说明 |
| --- | --- |
| `字体设计规范.md` | 主文档:字体族、字号阶梯、行高、使用场景、统一建议 |
| `tokens/font-tokens.css` | 可直接引入的 CSS 变量(推荐全站统一方案) |
| `tokens/font-tokens.less` | Less 变量版本 |
| `export/theme-font-excerpt.css` | 工程内 TDesign `theme.css` 字体段摘录 |
| `audit/当前实现对照.md` | 代码现状与不一致项清单 |
| `samples/typography-preview.html` | 浏览器打开可预览字号阶梯 |
## 快速使用(开发)
```html
<!-- 在入口前引入 -->
<link rel="stylesheet" href="./tokens/font-tokens.css" />
```
```less
@import './tokens/font-tokens.less';
.portal-title {
font: var(--page-font-headline-medium);
}
```
```css
body {
font-family: var(--page-font-family);
}
```
## 推荐统一字体栈
**PingFang SC → Microsoft YaHei → Arial → sans-serif**
`theme.css``--td-font-family` 对齐;勿在 `body` 使用 Inter 作为默认(当前 `tailwindcss.css` 存在冲突,见审计文档)。

View File

@ -0,0 +1,41 @@
# 字体实现现状审计
导出日期2026-05-20
## 一、三套来源并存
| 来源 | 字体栈 | 影响范围 |
| --- | --- | --- |
| `theme.css` | pingfang sc, microsoft yahei, arial | TDesign 组件 |
| `tailwindcss.css` body | Inter, system-ui | 未写 font-family 的全局文本 |
| 各 `.vue` 手写 | PingFang SC / Inter / SimHei / 方正正黑 | 首页、导航、出海页等 |
## 二、主要文件对照
| 文件 | 当前写法 |
| --- | --- |
| `assets/css/theme.css` | `--td-font-family` 苹方栈(规范) |
| `assets/css/tailwindcss.css` | `body { font-family: Inter... }`**冲突** |
| `components/new-nav/index.vue` | PingFang SC, 16px/14px |
| `components/nav/index2.vue` | PingFang SC |
| `views/home2/index.vue` | PingFang SC + FZZhengHeiS + SimHei + Inter |
| `views/qych/index.vue` | PingFang SC, Microsoft YaHei |
| `views/ggwhglHtgl/*` | PingFang SC, Microsoft YaHei, Arial Regular |
## 三、风险
1. 同一屏内中英文混排时 Inter 与苹方度量不一致,行高可能不齐。
2. 设计交付若按苹方标注,开发在 Inter 环境预览会产生偏差。
3. 方正正黑、黑体未全局声明 `@font-face`,依赖用户本机是否安装。
## 四、建议统一步骤
1. `body` 改为 `var(--page-font-family)`(见 `tokens/font-tokens.css`
2. `main.js` 引入 `font-tokens.css` 或合并进 `page-layout.less`
3. 新代码禁止写 `font-family: PingFang SC`,改用 class 或 mixin
4. 展示字白名单:`--page-font-family-display` 仅用于 Banner
## 五、本包不含内容
- 无 `.ttf` / `.woff` / `.woff2` 字体文件(版权与体积考虑)
- 若设计需离线包,请向字体厂商购买并单独交付安装说明

View File

@ -0,0 +1,40 @@
/* 摘自 txw-mhzc-web/src/pages/index/assets/css/theme.css — 字体相关片段 */
:root {
--td-font-gray-1: rgba(0, 0, 0, 0.9);
--td-font-gray-2: rgba(0, 0, 0, 0.6);
--td-font-gray-3: rgba(0, 0, 0, 0.4);
--td-font-gray-4: rgba(0, 0, 0, 0.26);
--td-font-family: pingfang sc, microsoft yahei, arial regular;
--td-font-family-medium: pingfang sc, microsoft yahei, arial medium;
--td-font-size-link-small: 12px;
--td-font-size-link-medium: 14px;
--td-font-size-link-large: 16px;
--td-font-size-mark-small: 12px;
--td-font-size-mark-medium: 14px;
--td-font-size-body-small: 12px;
--td-font-size-body-medium: 14px;
--td-font-size-body-large: 16px;
--td-font-size-title-small: 14px;
--td-font-size-title-medium: 16px;
--td-font-size-title-large: 20px;
--td-font-size-headline-small: 24px;
--td-font-size-headline-medium: 28px;
--td-font-size-headline-large: 36px;
--td-font-size-display-medium: 48px;
--td-font-size-display-large: 64px;
--td-line-height-common: 8px;
--td-font-body-medium: var(--td-font-size-body-medium) /
calc(var(--td-font-size-body-medium) + var(--td-line-height-common))
var(--td-font-family);
--td-font-title-large: var(--td-font-size-title-large) /
calc(var(--td-font-size-title-large) + var(--td-line-height-common))
var(--td-font-family);
--td-font-headline-medium: var(--td-font-size-headline-medium) /
calc(var(--td-font-size-headline-medium) + var(--td-line-height-common))
var(--td-font-family);
}

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>门户字体阶梯预览</title>
<link rel="stylesheet" href="../tokens/font-tokens.css" />
<style>
body { padding: 40px; max-width: 900px; margin: 0 auto; background: #f7f8fa; }
h1 { font: var(--page-font-section-title); margin-bottom: 8px; }
.meta { color: rgba(0,0,0,.6); font-size: 14px; margin-bottom: 32px; }
section { background: #fff; border-radius: 8px; padding: 24px; margin-bottom: 16px; box-shadow: 0 1px 4px rgba(0,0,0,.06); }
section h2 { font-size: 14px; color: #666; margin: 0 0 16px; font-weight: 500; }
.row { display: flex; align-items: baseline; gap: 16px; margin-bottom: 12px; border-bottom: 1px solid #eee; padding-bottom: 12px; }
.row:last-child { border: none; margin: 0; padding: 0; }
.label { width: 140px; flex-shrink: 0; font-size: 12px; color: #999; font-family: monospace; }
.s10 { font-size: 10px; }
.s12 { font-size: 12px; }
.s14 { font-size: 14px; }
.s16 { font-size: 16px; }
.s18 { font-size: 18px; font-weight: 500; }
.s22 { font-size: 22px; font-weight: 600; }
.s24 { font-size: 24px; font-weight: 600; }
.s28 { font-size: 28px; font-weight: 700; }
.s32 { font-size: 32px; font-weight: 600; }
.display { font: var(--page-font-display-title); }
.nav { font: var(--page-font-nav); }
.body { font: var(--page-font-body); }
</style>
</head>
<body>
<h1>门户字体阶梯预览</h1>
<p class="meta">主字体PingFang SC → Microsoft YaHei → Arial。用浏览器打开本文件即可。</p>
<section>
<h2>门户常用字号</h2>
<div class="row"><span class="label">32px / 600</span><span class="s32">屏级大标题 — 共性能力平台</span></div>
<div class="row"><span class="label">28px / 700</span><span class="s28">强调主标题</span></div>
<div class="row"><span class="label">24px / 600</span><span class="s24">模块标题</span></div>
<div class="row"><span class="label">22px / 600</span><span class="s22">区块小标题</span></div>
<div class="row"><span class="label">18px / 500</span><span class="s18">副标题与强调句</span></div>
<div class="row"><span class="label">16px / 400</span><span class="nav">导航与正文16px</span></div>
<div class="row"><span class="label">14px / 400</span><span class="body">次要说明文字14px</span></div>
<div class="row"><span class="label">12px</span><span class="s12">辅助信息</span></div>
<div class="row"><span class="label">10px</span><span class="s10">角标(慎用)</span></div>
</section>
<section>
<h2>展示字Banner</h2>
<p class="display">方正正黑 / 苹方 — 企业出海服务</p>
</section>
</body>
</html>

View File

@ -0,0 +1,86 @@
/**
* 门户字体 Token推荐全站统一方案
* txw-mhzc-web v1.0 2026-05-20
*/
:root {
/* 字体族 */
--page-font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
--page-font-family-medium: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
--page-font-family-display: 'FZZhengHeiS-B-GB', 'PingFang SC', 'Microsoft YaHei', sans-serif;
--page-font-family-mono: 'Fira Code', 'SFMono-Regular', Consolas, monospace;
/* 字号 */
--page-font-size-xs: 10px;
--page-font-size-sm: 12px;
--page-font-size-base: 14px;
--page-font-size-md: 16px;
--page-font-size-lg: 18px;
--page-font-size-xl: 22px;
--page-font-size-2xl: 24px;
--page-font-size-3xl: 28px;
--page-font-size-4xl: 32px;
/* 行高增量(与 TDesign 一致:字号 + 8px */
--page-line-height-delta: 8px;
/* 组合:导航 */
--page-font-nav: 500 var(--page-font-size-md) /
calc(var(--page-font-size-md) + var(--page-line-height-delta))
var(--page-font-family);
/* 组合:正文 */
--page-font-body: 400 var(--page-font-size-base) /
calc(var(--page-font-size-base) + var(--page-line-height-delta))
var(--page-font-family);
--page-font-body-md: 400 var(--page-font-size-md) /
calc(var(--page-font-size-md) + var(--page-line-height-delta))
var(--page-font-family);
/* 组合:区块标题 */
--page-font-section-title: 600 var(--page-font-size-4xl) /
calc(var(--page-font-size-4xl) + var(--page-line-height-delta))
var(--page-font-family);
--page-font-module-title: 600 var(--page-font-size-2xl) /
calc(var(--page-font-size-2xl) + var(--page-line-height-delta))
var(--page-font-family);
/* 组合:展示 Banner */
--page-font-display-title: 600 32px / 40px var(--page-font-family-display);
--page-font-display-subtitle: 500 var(--page-font-size-lg) /
calc(var(--page-font-size-lg) + var(--page-line-height-delta))
var(--page-font-family);
}
/* 全局默认(建议在入口覆盖 tailwindcss body */
body {
font: var(--page-font-body-md);
font-family: var(--page-font-family);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.page-font-nav {
font: var(--page-font-nav);
}
.page-font-body {
font: var(--page-font-body);
}
.page-font-section-title {
font: var(--page-font-section-title);
}
.page-font-module-title {
font: var(--page-font-module-title);
}
.page-font-display-title {
font: var(--page-font-display-title);
}
.page-font-mono {
font-family: var(--page-font-family-mono);
}

View File

@ -0,0 +1,50 @@
// 门户字体 TokenLess— txw-mhzc-web v1.0
@page-font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
@page-font-family-display: 'FZZhengHeiS-B-GB', 'PingFang SC', 'Microsoft YaHei', sans-serif;
@page-font-family-mono: 'Fira Code', 'SFMono-Regular', Consolas, monospace;
@page-font-size-xs: 10px;
@page-font-size-sm: 12px;
@page-font-size-base: 14px;
@page-font-size-md: 16px;
@page-font-size-lg: 18px;
@page-font-size-xl: 22px;
@page-font-size-2xl: 24px;
@page-font-size-3xl: 28px;
@page-font-size-4xl: 32px;
@page-line-height-delta: 8px;
.page-font-base() {
font-family: @page-font-family;
-webkit-font-smoothing: antialiased;
}
.page-font-nav() {
.page-font-base();
font-size: @page-font-size-md;
font-weight: 500;
line-height: @page-font-size-md + @page-line-height-delta;
}
.page-font-body() {
.page-font-base();
font-size: @page-font-size-base;
font-weight: 400;
line-height: @page-font-size-base + @page-line-height-delta;
}
.page-font-section-title() {
.page-font-base();
font-size: @page-font-size-4xl;
font-weight: 600;
line-height: @page-font-size-4xl + @page-line-height-delta;
}
.page-font-display-title() {
font-family: @page-font-family-display;
font-size: 32px;
font-weight: 600;
line-height: 40px;
}

View File

@ -0,0 +1,174 @@
# 门户字体设计规范
| 属性 | 内容 |
| --- | --- |
| 文档版本 | v1.0 |
| 创建日期 | 2026-05-20 |
| 状态 | 已整理(含现状审计与统一建议) |
| 适用 | txw-mhzc-web 门户五页 + TDesign 组件区 |
---
## 一、设计原则
1. **中文优先**:界面正文与标题以苹方/雅黑为主,保证政务、企业类页面的可读性与稳重感。
2. **系统字体**:不内嵌商业字体文件,依赖用户操作系统已安装字体,降低授权与包体积风险。
3. **Token 驱动**:字号、行高、字重通过 CSS 变量维护,页面禁止随意写死 `font-family`(展示字除外)。
4. **组件一致**TDesign 组件使用 `--td-font-*`;门户自定义区块使用 `--page-font-*`(本包提供)。
---
## 二、字体族Font Family
### 2.1 主字体栈(全站默认)
| 优先级 | 字体 | 说明 |
| --- | --- | --- |
| 1 | **PingFang SC**(苹方-简) | macOS / iOS 默认中文 UI 字体 |
| 2 | **Microsoft YaHei**(微软雅黑) | Windows 常见中文 UI 字体 |
| 3 | **Arial** | 西文与兜底 |
| 4 | **sans-serif** | 系统无衬线兜底 |
**CSS 写法:**
```css
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
```
**工程内 TDesign Token已存在**
```css
--td-font-family: pingfang sc, microsoft yahei, arial regular;
--td-font-family-medium: pingfang sc, microsoft yahei, arial medium;
```
### 2.2 中等字重栈(强调、标签)
与主栈相同,字重由 `font-weight: 500 / 600` 控制,不单独换字体文件。
### 2.3 展示/营销标题(仅首页等特殊区块)
| 场景 | 字体栈 | 备注 |
| --- | --- | --- |
| 大 Banner 主标题 | FZZhengHeiS-B-GB, PingFang SC | 需本机安装方正正黑;无则回退苹方 |
| 部分强调标题 | SimHei, 黑体 | 仅 home2 等局部使用,不宜扩散 |
| 数字/英文强调 | Inter, PingFang SC | 首页部分卡片;建议逐步改为苹方栈 |
### 2.4 等宽字体(代码)
```css
font-family: 'Fira Code', 'SFMono-Regular', Consolas, monospace;
```
### 2.5 图标字体
`iconfont`(项目 icon 组件专用,勿用于正文)。
---
## 三、字号阶梯Type Scale
### 3.1 TDesign 标准阶梯(组件、表单、后台)
来源:`src/pages/index/assets/css/theme.css`
| Token | 字号 | 典型用途 |
| --- | --- | --- |
| `--td-font-size-link-small` | 12px | 小链接 |
| `--td-font-size-body-small` | 12px | 辅助说明 |
| `--td-font-size-body-medium` | 14px | **正文默认** |
| `--td-font-size-body-large` | 16px | 强调正文 |
| `--td-font-size-title-small` | 14px | 小标题 |
| `--td-font-size-title-medium` | 16px | 卡片标题 |
| `--td-font-size-title-large` | 20px | 区块标题 |
| `--td-font-size-headline-small` | 24px | 页面副标题 |
| `--td-font-size-headline-medium` | 28px | 页面主标题 |
| `--td-font-size-headline-large` | 36px | 大标题 |
| `--td-font-size-display-medium` | 48px | 展示级 |
| `--td-font-size-display-large` | 64px | 首屏超大字 |
**行高规则:** `line-height = font-size + 8px``--td-line-height-common: 8px`
**组合字体简写:** 使用 `--td-font-body-medium`、`--td-font-title-large` 等(已含字号/行高/字体族)。
### 3.2 门户营销页常用字号home2 / 导航)
| 字号 | 字重 | 场景 |
| --- | --- | --- |
| 10px | 400 | 导航角标等(慎用,注意可访问性) |
| 12px | 400 | 辅助信息 |
| 14px | 400 | 次要文案、导航副项 |
| 16px | 400/500 | **导航、正文、按钮** |
| 18px | 500/700 | 副标题、强调句 |
| 22px | 600 | 区块小标题 |
| 24px | 500/700 | 模块标题 |
| 28px | 700 | 强调标题 |
| 32px | 600/700 | 屏级大标题 |
### 3.3 根字号rem 基准)
`app.vue``html { font-size: 20px; }` — 若使用 rem需以此为准换算。
---
## 四、字重Font Weight
| 值 | 名称 | 用途 |
| --- | --- | --- |
| 400 | Regular | 正文、说明 |
| 500 | Medium | 导航、次要标题 |
| 600 | Semibold | 卡片标题、强调 |
| 700 | Bold | 主标题、数据强调 |
---
## 五、颜色(与字体配套)
TDesign 文本色(`theme.css`
| Token | 值 | 用途 |
| --- | --- | --- |
| `--td-text-color-primary` | rgba(0,0,0,0.9) | 主文案 |
| `--td-text-color-secondary` | rgba(0,0,0,0.6) | 次要文案 |
| `--td-text-color-placeholder` | rgba(0,0,0,0.4) | 占位 |
| `--td-text-color-disabled` | rgba(0,0,0,0.26) | 禁用 |
门户链接色tailwind 片段):`#9ca3af``app.vue` 全局 `a` 标签,可按设计调整)。
---
## 六、使用规范
### 6.1 应该
- 正文、表单、表格:使用 `--td-font-body-medium``--page-font-body-medium`
- 门户导航:`--page-font-nav`16px / 500
- 屏级标题:`--page-font-screen-title`32px / 600
- 新页面只引用 Token不写 `font-family: PingFang SC` 重复声明
### 6.2 不应该
- 在 `body` 使用 Inter 作为中文站默认字体
- 同一页面混用 3 种以上 font-family
- 小于 12px 的正文(除角标等特殊场景)
### 6.3 统一改造建议(可选实施)
1. 修改 `tailwindcss.css``body``font-family: var(--page-font-family);`
2. 新建 `styles/font-tokens.less` 并在 `main.js` 引入
3. 分批删除各 `.vue` 内重复的 `font-family: PingFang SC`
---
## 七、与版心规范的关系
版心、边距见 `page-layout-margin-refactor.md`;字体与版心独立,但**区块大标题**需同时遵守:
- 字号:见 `--page-font-section-title`
- 左对齐:与 `--page-section-title-padding-left` 配合
---
## 八、交付清单
本 zip 包含规范文档、CSS/Less Token、theme 摘录、现状审计、HTML 预览页。**不包含** .ttf/.woff 字体文件。

View File

@ -0,0 +1,43 @@
# 共性能力平台 Tab 图标导出包
| 属性 | 内容 |
| --- | --- |
| 版本 | v1.0 |
| 导出日期 | 2026-05-20 |
| 来源 | `src/pages/index/assets/icon/*.svg`(与 Tab 效果图一致) |
| 说明 | 不含错误的 `home-*-icon.png` 首页素材 |
## 图标清单(见 manifest.json
| 序号 | 中文名 | 文件名前缀 | 图案 |
| --- | --- | --- | --- |
| 01 | 碳核算平台 | `01-carbon-accounting` | 立体线框六边形 |
| 02 | 碳认证机构 | `02-carbon-certification` | 盾牌 + 勾 |
| 03 | 碳交易平台 | `03-carbon-trading` | 日历/交易 |
| 04 | 碳金融服务 | `04-carbon-finance` | 钱袋 + ¥ |
| 05 | 碳技术咨询 | `05-carbon-consulting` | 公文包/文档 |
## 目录结构
```
gxnlpt-tab-icons-export/
├── manifest.json # 中英文名称对照
├── svg/ # 默认态 #66666624×24
├── png/24px|48px|96px/ # 灰色 PNG未选中 Tab
├── png-white/24px|48px|96px/ # 白色 PNG选中 Tab
├── source-from-project/ # 工程原始 thspt.svg 等 5 个文件
└── README.md
```
## 使用建议
- **给设计/外包**:优先发 `svg/` 矢量源文件。
- **给前端嵌入**Tab 未选中用 `png/24px/`,选中用 `png-white/24px/` 或 CSS `filter: brightness(0) invert(1)` 处理灰色 SVG。
- **工程内原始路径**`txw-mhzc-web/src/pages/index/assets/icon/thspt.svg` 等 5 个文件。
## 颜色规范
| 状态 | 填充色 | 对应目录 |
| --- | --- | --- |
| 未选中 | `#666666` | `svg/`、`png/` |
| 选中(绿底 Tab | `#FFFFFF` | `png-white/` |

View File

@ -0,0 +1,36 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const { Resvg } = await import('@resvg/resvg-js');
const svgDir = path.join(__dirname, 'svg');
const sizes = [24, 48, 96];
const files = fs.readdirSync(svgDir).filter((f) => f.endsWith('.svg'));
for (const file of files) {
const base = file.replace('.svg', '');
const svg = fs.readFileSync(path.join(svgDir, file), 'utf8');
for (const size of sizes) {
const outDir = path.join(__dirname, 'png', `${size}px`);
fs.mkdirSync(outDir, { recursive: true });
const grayPng = new Resvg(svg, {
fitTo: { mode: 'width', value: size },
}).render().asPng();
fs.writeFileSync(path.join(outDir, `${base}.png`), grayPng);
const whiteSvg = svg.replace(/#666666/gi, '#FFFFFF');
const whitePng = new Resvg(whiteSvg, {
fitTo: { mode: 'width', value: size },
}).render().asPng();
const whiteDir = path.join(__dirname, 'png-white', `${size}px`);
fs.mkdirSync(whiteDir, { recursive: true });
fs.writeFileSync(path.join(whiteDir, `${base}.png`), whitePng);
}
}
console.log('PNG export done:', files.length, 'icons x', sizes.length, 'sizes x 2 colors');

View File

@ -0,0 +1,47 @@
{
"version": "1.0",
"exportedAt": "2026-05-20",
"source": "txw-mhzc-web/src/pages/index/assets/icon/",
"icons": [
{
"id": "01",
"nameZh": "碳核算平台",
"nameEn": "carbon-accounting",
"sourceFile": "thspt.svg",
"svg": "svg/01-carbon-accounting.svg",
"description": "立体线框六边形"
},
{
"id": "02",
"nameZh": "碳认证机构",
"nameEn": "carbon-certification",
"sourceFile": "trzjg.svg",
"svg": "svg/02-carbon-certification.svg",
"description": "盾牌+勾"
},
{
"id": "03",
"nameZh": "碳交易平台",
"nameEn": "carbon-trading",
"sourceFile": "tjypt.svg",
"svg": "svg/03-carbon-trading.svg",
"description": "日历/交易"
},
{
"id": "04",
"nameZh": "碳金融服务",
"nameEn": "carbon-finance",
"sourceFile": "tjrfw.svg",
"svg": "svg/04-carbon-finance.svg",
"description": "钱袋+人民币符号"
},
{
"id": "05",
"nameZh": "碳技术咨询",
"nameEn": "carbon-consulting",
"sourceFile": "tjszx.svg",
"svg": "svg/05-carbon-consulting.svg",
"description": "公文包/文档"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 952 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>碳核算平台</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="共性能力平台" transform="translate(-530, -148)">
<g id="编组-3" transform="translate(226, 132)">
<g id="碳核算平台" transform="translate(304, 16)">
<rect id="close-circle-(Background)" opacity="0" x="0" y="0" width="24" height="24"></rect>
<g id="编组" transform="translate(5, 4)" fill="#666666" fill-rule="nonzero">
<path d="M3.76771765,1.95670588 L7.272,0 L10.6941176,1.95670588 L7.272,3.91171765 L3.76771765,1.95670588 Z M11.0295529,5.93449412 L8.09364706,4.23698824 L11.3260235,2.43698824 L14.4,4.04047059 L14.4,7.20677647 L11.0295529,9.08470588 L11.0295529,5.93449412 L11.0295529,5.93449412 Z M4.21835294,14.3771294 L4.21835294,10.4908235 L7.2,12.1781647 L10.1587765,10.4908235 L10.1587765,14.3771294 L7.18814118,16.0907294 L4.21835294,14.3771294 Z M11.0295529,10.0825412 L14.4,8.22748235 L14.4,12.0502588 L11.0295529,14.1128471 L11.0295529,10.0825412 L11.0295529,10.0825412 Z M4.21835294,6.46305882 L7.272,4.77487059 L10.1587765,6.46305882 L10.1587765,9.62936471 L7.2,11.1769412 L4.21835294,9.62851765 L4.21835294,6.46305882 Z M0,12.0384 L0,8.22748235 L3.52207059,10.0825412 L3.52207059,14.0018824 L0,12.0384 Z M0.0592941176,4.04047059 L2.98588235,2.43698824 L6.25552941,4.23698824 L3.36282353,5.93449412 L3.36282353,9.08555294 L0,7.20592941 L0.0592941176,4.03962353 L0.0592941176,4.04047059 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>碳金融服务</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="共性能力平台" transform="translate(-1262, -148)">
<g id="编组-3" transform="translate(226, 132)">
<g id="碳金融服务" transform="translate(1036, 16)">
<rect id="close-circle-(Background)" opacity="0" x="0" y="0" width="24" height="24"></rect>
<g id="编组" transform="translate(5, 4)" fill="#666666" fill-rule="nonzero">
<path d="M12.8617052,5.57915475 C14.0526038,6.83329421 14.7835692,8.2746922 14.7835692,9.87213899 C14.7835692,14.3121376 11.4654792,16.426188 7.46570245,16.426188 L7.31786675,16.426188 C3.31808998,16.426188 0,14.3121376 0,9.87213899 C0,8.27469221 0.730965366,6.83329421 1.921864,5.57915475 C2.37525411,5.09844589 2.87605903,4.66478185 3.4166471,4.28477114 C2.78423887,3.95706869 2.36537107,3.36736854 2.36537107,2.68732436 C2.36537107,1.61387297 3.38379473,0.795027499 4.59111955,0.795027499 C4.87036474,0.795027499 5.12497066,0.844306063 5.35493729,0.934650097 C5.4699206,0.975715567 5.55205154,1.01678104 5.6177563,1.05784651 C5.65060867,1.0742727 5.74095271,1.04963341 5.77380508,1.00856794 C5.86414912,0.868945345 6.00377171,0.704683465 6.20088597,0.532208491 C6.54337199,0.235715798 6.94417098,0.0402441605 7.3917846,0 C7.83939822,0.0402441605 8.24019721,0.234894488 8.58268323,0.5330298 C8.77979749,0.705504774 8.91942008,0.868945345 9.00976412,1.00774663 C9.04261649,1.0488121 9.13296053,1.07345139 9.1658129,1.0570252 C9.23151766,1.01595973 9.3136486,0.974894258 9.42863191,0.933828788 C9.65859854,0.843484753 9.91320446,0.795027499 10.1924497,0.795027499 C11.3997745,0.795027499 12.4181981,1.61387297 12.4181981,2.68732436 C12.4181981,3.36736854 11.9993303,3.95706869 11.3669221,4.28477114 C11.4326268,4.32583661 11.4983316,4.37511517 11.5722494,4.43260683 C12.0157565,4.76030928 12.4510505,5.14550339 12.8617052,5.57915475 L12.8617052,5.57915475 Z M9.50994154,9.86638982 C9.81875388,9.86638982 10.0700746,9.60110689 10.0700746,9.27422574 C10.0700746,8.9473446 9.81875388,8.68288298 9.50994154,8.68288298 L8.84878748,8.68288298 L9.89349303,7.57986445 C10.1119915,7.34399239 10.1119915,6.97964355 9.89349303,6.74377148 C9.79135313,6.63325224 9.64770066,6.57040775 9.49721125,6.57040775 C9.34672183,6.57040775 9.20306937,6.63325224 9.10092946,6.74377148 L7.49609089,8.43731147 L5.89207364,6.74377148 C5.78993373,6.63325224 5.64628126,6.57040775 5.49579185,6.57040775 C5.34530244,6.57040775 5.20164997,6.63325224 5.09951006,6.74377148 C4.88101162,6.97964355 4.88101162,7.34399239 5.09951006,7.57986445 L6.14421562,8.68288298 L5.48798941,8.68288298 C5.17835577,8.68288298 4.9278564,8.9473446 4.9278564,9.27422574 C4.9278564,9.60110689 5.17835577,9.86556851 5.48798941,9.86556851 L6.93595788,9.86556851 L6.93595788,10.4569113 L5.81651317,10.4569113 C5.50687953,10.4569113 5.25638016,10.7213729 5.25638016,11.048254 C5.25638016,11.3751352 5.50687953,11.6395968 5.81651317,11.6395968 L6.93595788,11.6395968 L6.93595788,12.5496076 C6.93595788,12.8764888 7.18727856,13.1409504 7.49609089,13.1409504 C7.80572454,13.1409504 8.05704521,12.8764888 8.05704521,12.5496076 L8.05704521,11.6395968 L9.12721136,11.6395968 C9.43684501,11.6395968 9.68734437,11.3751352 9.68734437,11.048254 C9.68734437,10.7213729 9.43684501,10.4569113 9.12721136,10.4569113 L8.05704521,10.4569113 L8.05704521,9.86556851 L9.50994154,9.86556851 L9.50994154,9.86638982 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>碳技术咨询</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="共性能力平台" transform="translate(-1506, -148)">
<g id="编组-3" transform="translate(226, 132)">
<g id="碳技术咨询" transform="translate(1280, 16)">
<rect id="close-circle-(Background)" opacity="0" x="0" y="0" width="24" height="24"></rect>
<g id="编组" transform="translate(4, 4)" fill="#666666" fill-rule="nonzero">
<path d="M7.90512018,5.27616944e-07 C8.36370476,-0.000279365339 8.7948826,0.218336032 9.06568143,0.588427765 C9.33648026,0.958519498 9.41437409,1.43563539 9.275341,1.87263619 L11.8576803,4.45497546 L12.9354116,4.45497546 C14.5164357,4.45497546 15.8102404,5.74878014 15.8102404,7.32980415 L15.8102404,13.6539003 C15.8102404,15.2349243 14.5164357,16.528729 12.9354116,16.528729 L2.87482871,16.528729 C1.28890708,16.524386 0.00434303111,15.2398219 0,13.6539003 L0,7.32980415 C0,5.74878012 1.29380468,4.4558538 2.87482871,4.4558538 L4.09573061,4.45497546 L6.57266824,1.9780378 C6.39251831,1.5347996 6.44478986,1.03097003 6.7120941,0.634154519 C6.97939833,0.237339009 7.42667067,-0.000408770575 7.90512018,5.27616944e-07 L7.90512018,5.27616944e-07 Z M8.04916904,12.2178035 L2.87482871,12.2178035 C2.39974582,12.2192443 2.01470167,12.6035042 2.01229225,13.0785832 C2.01229225,13.5528904 2.40052149,13.941998 2.87482871,13.941998 L8.04829068,13.941998 C8.52259789,13.941998 8.91082712,13.5537688 8.91082712,13.0794616 C8.90938304,12.6040378 8.52459112,12.2188536 8.04916904,12.2169251 L8.04916904,12.2178035 Z M5.46155969,9.63019413 L2.87482871,9.63019413 C2.3994049,9.63163821 2.01422072,10.0164301 2.01229225,10.4918522 C2.01229225,10.9661594 2.40052149,11.3543887 2.87482871,11.3543887 L5.46155969,11.3543887 C5.93586689,11.3543887 6.32409614,10.9661594 6.32409614,10.4918522 C6.32216767,10.0164301 5.93698349,9.63163821 5.46155969,9.63019413 L5.46155969,9.63019413 Z M7.97626626,3.01712192 L6.53841274,4.45497546 L9.41411978,4.45497546 L7.97626626,3.01712192 L7.97626626,3.01712192 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>碳交易平台</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="共性能力平台" transform="translate(-1018, -148)">
<g id="编组-3" transform="translate(226, 132)">
<g id="碳交易平台" transform="translate(792, 16)">
<rect id="close-circle-(Background)" opacity="0" x="0" y="0" width="24" height="24"></rect>
<g id="编组" transform="translate(4, 4)" fill="#666666" fill-rule="nonzero">
<path d="M16.000023,5.42743032 L16.000023,15.1250049 C16.000023,16.0717909 15.232487,16.8392911 14.2857189,16.8392911 L1.71428627,16.8392911 C0.767500247,16.8392911 0,16.0717909 0,15.1250049 L0,5.42857317 L15.8452372,5.42857317 C15.8983623,5.42857317 15.950148,5.42818032 16.000023,5.42743032 Z M11.7142869,12.0000039 L4.28571566,12.0000039 L4.27625137,12.0000753 C3.96814413,12.0050753 3.71930477,12.2539504 3.71428691,12.5620755 L3.71428691,12.580879 C3.71935834,12.8890041 3.96821556,13.1378435 4.27635852,13.1427899 L4.28571566,13.1428614 L10.3347176,13.1428614 L10.1673783,13.3102364 L10.1607354,13.3169686 C9.94423534,13.5406115 9.94644963,13.897433 10.1673783,14.1183438 C10.3882891,14.3392725 10.7451106,14.3414868 10.9687535,14.1249867 L10.9754857,14.1183438 L12.1183432,12.9754863 C12.2255078,12.8683257 12.2857182,12.7229834 12.2857182,12.5714326 C12.2857182,12.2590039 12.0349682,12.0051289 11.7237538,12.0000753 L11.7142869,12.0000039 Z M5.03125162,7.87502039 L5.02451947,7.88166325 L3.88166196,9.02452076 C3.77449738,9.13168139 3.71428691,9.27702364 3.71428691,9.42857446 C3.71428691,9.74100313 3.96503699,9.99487821 4.27625137,9.99993179 L4.28571566,10.0000032 L11.7142869,10.0000032 L11.7237538,9.99993179 C12.031861,9.99493178 12.2807004,9.7460567 12.2857182,9.43793161 L12.2857182,9.41912803 C12.2806468,9.11100293 12.0317896,8.86216356 11.7236466,8.85721713 L11.7142869,8.8571457 L5.66528754,8.8571457 L5.83262687,8.68977065 L5.83926973,8.68303851 C6.0557698,8.45939558 6.05355552,8.10257403 5.83262687,7.88166325 C5.61171609,7.66071675 5.25489455,7.65852032 5.03125162,7.87500253 L5.03125162,7.87502039 Z M12.5714326,0 C12.887022,0 13.1428614,0.255839368 13.1428614,0.571428755 L13.1428614,1.14285751 L14.2857189,1.14285751 C15.2325049,1.14285751 16,1.91035776 16,2.85714378 L16,4.57143004 L0,4.57143004 L0,2.85714378 C0,1.91035776 0.767500247,1.14285751 1.71428627,1.14285751 L2.85714378,1.14285751 L2.85714378,0.571428755 C2.85714378,0.255839368 3.11298314,0 3.42857253,0 C3.74416192,0 4,0.255839368 4,0.571428755 L4,1.14285751 L12,1.14285751 L12,0.571428755 C12,0.255839368 12.2558432,0 12.5714326,0 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>碳认证机构</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="共性能力平台" transform="translate(-774, -148)">
<g id="编组-3" transform="translate(226, 132)">
<g id="碳认证机构" transform="translate(548, 16)">
<rect id="close-circle-(Background)" opacity="0" x="0" y="0" width="24" height="24"></rect>
<g id="编组" transform="translate(4, 4)" fill="#666666" fill-rule="nonzero">
<path d="M16.082993,7.31191726 L14.5130986,5.77175574 L14.5130986,3.82920967 C14.5111164,3.13742541 14.7172642,1.88864579 14.0294443,1.8866636 L10.1602097,1.8866636 L9.19290104,0.431736242 C8.70528233,-0.0558824641 7.82915441,-0.176796046 7.34153571,0.310822661 L6.29097508,1.88864579 L3.38706693,1.88864579 C2.69726486,1.89062798 1.90240672,2.433748 1.90042453,3.12553227 L1.90042453,5.66868186 L0.364227387,7.31389945 C-0.121409129,7.80350035 -0.121409129,8.59637629 0.364227387,9.08597719 L1.90042453,10.7529989 L1.90042453,13.2961485 C1.90240672,13.9879327 2.21361053,14.5112308 2.9034126,14.513213 L5.80533856,14.513213 L7.33955352,16.0870718 C7.82717222,16.5746905 8.61806598,16.5746905 9.10568469,16.0870718 L10.6418818,14.513213 L13.0601535,14.513213 C13.7499555,14.5112308 14.5091343,13.7480877 14.5111164,13.0563035 L14.5111164,10.6281209 L16.0810108,9.08597719 C16.5686295,8.5943941 16.5686295,7.80350035 16.082993,7.31191726 L16.082993,7.31191726 Z M8.23550334,12.0235826 L3.80134461,5.66669967 L6.96888401,5.66669967 L8.2236102,9.45268231 L9.50212266,5.66669967 L12.6696621,5.66669967 L8.23550334,12.0235826 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M8.76771765,5.95670588 L12.272,4 L15.6941176,5.95670588 L12.272,7.91171765 L8.76771765,5.95670588 Z M16.0295529,9.93449412 L13.09364706,8.23698824 L16.3260235,6.43698824 L19.4,8.04047059 L19.4,11.2067765 L16.0295529,13.0847059 L16.0295529,9.93449412 Z M9.21835294,18.3771294 L9.21835294,14.4908235 L12.2,16.1781647 L15.1587765,14.4908235 L15.1587765,18.3771294 L12.1881412,20.0907294 L9.21835294,18.3771294 Z M16.0295529,14.0825412 L19.4,12.2274824 L19.4,16.0502588 L16.0295529,18.1128471 L16.0295529,14.0825412 Z M9.21835294,10.4630588 L12.272,8.77487059 L15.1587765,10.4630588 L15.1587765,13.6293647 L12.2,15.1769412 L9.21835294,13.6285176 L9.21835294,10.4630588 Z M5,16.0384 L5,12.2274824 L8.52207059,14.0825412 L8.52207059,18.0018824 L5,16.0384 Z M5.05929412,8.04047059 L7.98588235,6.43698824 L11.2555294,8.23698824 L8.36282353,9.93449412 L8.36282353,13.0855529 L5,11.2059294 L5.05929412,8.03962353 L5.05929412,8.04047059 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M20.082993,11.3119173 L18.5130986,9.77175574 L18.5130986,7.82920967 C18.5111164,7.13742541 18.7172642,5.88864579 18.0294443,5.8866636 L14.1602097,5.8866636 L13.192901,4.43173624 C12.7052823,3.94411754 11.8291544,3.82320396 11.3415357,4.31082266 L10.2909751,5.88864579 L7.38706693,5.88864579 C6.69726486,5.89062798 5.90240672,6.433748 5.90042453,7.12553227 L5.90042453,9.66868186 L4.36422739,11.3138994 C3.87859087,11.8035003 3.87859087,12.5963763 4.36422739,13.0859772 L5.90042453,14.7529989 L5.90042453,17.2961485 C5.90240672,17.9879327 6.21361053,18.5112308 6.9034126,18.513213 L9.80533856,18.513213 L11.3395535,20.0870718 C11.8271722,20.5746905 12.618066,20.5746905 13.1056847,20.0870718 L14.6418818,18.513213 L17.0601535,18.513213 C17.7499555,18.5112308 18.5091343,17.7480877 18.5111164,17.0563035 L18.5111164,14.6281209 L20.0810108,13.0859772 C20.5686295,12.5943941 20.5686295,11.8035003 20.082993,11.3119173 Z M12.2355033,16.0235826 L7.80134461,9.66669967 L10.968884,9.66669967 L12.2236102,13.4526823 L13.5021227,9.66669967 L16.6696621,9.66669967 L12.2355033,16.0235826 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M20.000023,9.42743032 L20.000023,19.1250049 C20.000023,20.0717909 19.232487,20.8392911 18.2857189,20.8392911 L5.71428627,20.8392911 C4.76750025,20.8392911 4,20.0717909 4,19.1250049 L4,9.42857317 L19.8452372,9.42857317 C19.8983623,9.42857317 19.950148,9.42818032 20.000023,9.42743032 Z M15.7142869,16.0000039 L8.28571566,16.0000039 L8.27625137,16.0000753 C7.96814413,16.0050753 7.71930477,16.2539504 7.71428691,16.5620755 L7.71428691,16.580879 C7.71935834,16.8890041 7.96821556,17.1378435 8.27635852,17.1427899 L8.28571566,17.1428614 L14.3347176,17.1428614 L14.1673783,17.3102364 L14.1607354,17.3169686 C13.9442353,17.5406115 13.9464496,17.897433 14.1673783,18.1183438 C14.3882891,18.3392725 14.7451106,18.3414868 14.9687535,18.1249867 L14.9754857,18.1183438 L16.1183432,16.9754863 C16.2255078,16.8683257 16.2857182,16.7229834 16.2857182,16.5714326 C16.2857182,16.2590039 16.0349682,16.0051289 15.7237538,16.0000753 L15.7142869,16.0000039 Z M9.03125162,11.8750204 L9.02451947,11.8816633 L7.88166196,13.0245208 C7.77449738,13.1316814 7.71428691,13.2770236 7.71428691,13.4285745 C7.71428691,13.7410031 7.96503699,13.9948782 8.27625137,13.9999318 L8.28571566,14.0000032 L15.7142869,14.0000032 L15.7237538,13.9999318 C16.031861,13.9949318 16.2807004,13.7460567 16.2857182,13.4379316 L16.2857182,13.419128 C16.2806468,13.1110029 16.0317896,12.8621636 15.7236466,12.8572171 L15.7142869,12.8571457 L9.66528754,12.8571457 L9.83262687,12.6897706 L9.83926973,12.6830385 C10.0557698,12.4593956 10.0535555,12.102574 9.83262687,11.8816633 C9.61171609,11.6607168 9.25489455,11.6585203 9.03125162,11.8750025 Z M16.5714326,4 C16.887022,4 17.1428614,4.25583937 17.1428614,4.57142876 L17.1428614,5.14285751 L18.2857189,5.14285751 C19.2325049,5.14285751 20,5.91035776 20,6.85714378 L20,8.57143004 L4,8.57143004 L4,6.85714378 C4,5.91035776 4.76750025,5.14285751 5.71428627,5.14285751 L6.85714378,5.14285751 L6.85714378,4.57142876 C6.85714378,4.25583937 7.11298314,4 7.42857253,4 C7.74416192,4 8,4.25583937 8,4.57142876 L8,5.14285751 L16,5.14285751 L16,4.57142876 C16,4.25583937 16.2558432,4 16.5714326,4 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M17.8617052,9.57915475 C19.0526038,10.8332942 19.7835692,12.2746922 19.7835692,13.872139 C19.7835692,18.3121376 16.4654792,20.426188 12.4657025,20.426188 L12.3178668,20.426188 C8.31808998,20.426188 5,18.3121376 5,13.872139 C5,12.2746922 5.73096537,10.8332942 6.921864,9.57915475 C7.37525411,9.09844589 7.87605903,8.66478185 8.4166471,8.28477114 C7.78423887,7.95706869 7.36537107,7.36736854 7.36537107,6.68732436 C7.36537107,5.61387297 8.38379473,4.7950275 9.59111955,4.7950275 C9.87036474,4.7950275 10.1249707,4.84430606 10.3549373,4.9346501 C10.4699206,4.97571557 10.5520515,5.01678104 10.6177563,5.05784651 C10.6506087,5.0742727 10.7409527,5.04963341 10.7738051,5.00856794 C10.8641491,4.86894534 11.0037717,4.70468346 11.200886,4.53220849 C11.543372,4.2357158 11.944171,4.04024416 12.3917846,4 C12.8393982,4.04024416 13.2401972,4.23489449 13.5826832,4.5330298 C13.7797975,4.70550477 13.9194201,4.86894534 14.0097641,5.00774663 C14.0426165,5.0488121 14.1329605,5.07345139 14.1658129,5.0570252 C14.2315177,5.01595973 14.3136486,4.97489426 14.4286319,4.93382879 C14.6585985,4.84348475 14.9132045,4.7950275 15.1924497,4.7950275 C16.3997745,4.7950275 17.4181981,5.61387297 17.4181981,6.68732436 C17.4181981,7.36736854 16.9993303,7.95706869 16.3669221,8.28477114 C16.4326268,8.32583661 16.4983316,8.37511517 16.5722494,8.43260683 C17.0157565,8.76030928 17.4510505,9.14550339 17.8617052,9.57915475 Z M14.5099415,13.8663898 C14.8187539,13.8663898 15.0700746,13.6011069 15.0700746,13.2742257 C15.0700746,12.9473446 14.8187539,12.682883 14.5099415,12.682883 L13.8487875,12.682883 L14.893493,11.5798645 C15.1119915,11.3439924 15.1119915,10.9796436 14.893493,10.7437715 C14.7913531,10.6332522 14.6477007,10.5704078 14.4972113,10.5704078 C14.3467218,10.5704078 14.2030694,10.6332522 14.1009295,10.7437715 L12.4960909,12.4373115 L10.8920736,10.7437715 C10.7899337,10.6332522 10.6462813,10.5704078 10.4957918,10.5704078 C10.3453024,10.5704078 10.20165,10.6332522 10.0995101,10.7437715 C9.88101162,10.9796436 9.88101162,11.3439924 10.0995101,11.5798645 L11.1442156,12.682883 L10.4879894,12.682883 C10.1783558,12.682883 9.9278564,12.9473446 9.9278564,13.2742257 C9.9278564,13.6011069 10.1783558,13.8655685 10.4879894,13.8655685 L11.9359579,13.8655685 L11.9359579,14.4569113 L10.8165132,14.4569113 C10.5068795,14.4569113 10.2563802,14.7213729 10.2563802,15.048254 C10.2563802,15.3751352 10.5068795,15.6395968 10.8165132,15.6395968 L11.9359579,15.6395968 L11.9359579,16.5496076 C11.9359579,16.8764888 12.1872786,17.1409504 12.4960909,17.1409504 C12.8057245,17.1409504 13.0570452,16.8764888 13.0570452,16.5496076 L13.0570452,15.6395968 L14.1272114,15.6395968 C14.436845,15.6395968 14.6873444,15.3751352 14.6873444,15.048254 C14.6873444,14.7213729 14.436845,14.4569113 14.1272114,14.4569113 L13.0570452,14.4569113 L13.0570452,13.8655685 L14.5099415,13.8663898 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M11.9051202,4 C12.3637048,3.99972063 12.7948826,4.21833603 13.0656814,4.58842777 C13.3364803,4.9585195 13.4143741,5.43563539 13.275341,5.87263619 L15.8576803,8.45497546 L16.9354116,8.45497546 C18.5164357,8.45497546 19.8102404,9.74878014 19.8102404,11.3298042 L19.8102404,17.6539003 C19.8102404,19.2349243 18.5164357,20.528729 16.9354116,20.528729 L6.87482871,20.528729 C5.28890708,20.524386 4.00434303,19.2398219 4,17.6539003 L4,11.3298042 C4,9.74878012 5.29380468,8.4558538 6.87482871,8.4558538 L8.09573061,8.45497546 L10.5726682,5.9780378 C10.3925183,5.5347996 10.4447899,5.03097003 10.7120941,4.63415452 C10.9793983,4.23733901 11.4266707,3.99959123 11.9051202,4 Z M12.049169,16.2178035 L6.87482871,16.2178035 C6.39974582,16.2192443 6.01470167,16.6035042 6.01229225,17.0785832 C6.01229225,17.5528904 6.40052149,17.941998 6.87482871,17.941998 L12.0482907,17.941998 C12.5225979,17.941998 12.9108271,17.5537688 12.9108271,17.0794616 C12.909383,16.6040378 12.5245911,16.2188536 12.049169,16.2169251 Z M9.46155969,13.6301941 L6.87482871,13.6301941 C6.3994049,13.6316382 6.01422072,14.0164301 6.01229225,14.4918522 C6.01229225,14.9661594 6.40052149,15.3543887 6.87482871,15.3543887 L9.46155969,15.3543887 C9.93586689,15.3543887 10.3240961,14.9661594 10.3240961,14.4918522 C10.3221677,14.0164301 9.93698349,13.6316382 9.46155969,13.6301941 Z M11.9762663,7.01712192 L10.5384127,8.45497546 L13.4141198,8.45497546 L11.9762663,7.01712192 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,377 @@
# 门户页面边距统一改造说明
| 属性 | 内容 |
| --- | --- |
| 文档版本 | v1.0 |
| 创建日期 | 2026-05-19 |
| 状态 | 已确认,待开发 |
| 适用项目 | txw-mhzc-web |
| 关联需求 | 首页 / 服务中心 / 共性能力 / 企业出海 / 行业专题 五页边距统一 |
---
## 一、文档说明
### 1.1 目的
统一五个门户页面的版心宽度、左右留白gutter与区块上下间距使各板块四向边距格式一致降低维护成本并保证桌面端与移动端视觉对齐。
### 1.2 读者
- 前端开发(实施改造)
- UI / 设计(验收对齐)
- 测试(回归用例)
### 1.3 飞书阅读说明
- 本文档使用标准 Markdown可直接粘贴至飞书文档或导入。
- 表格、待办清单、引用块在飞书中可正常渲染。
- 代码块为 CSS / Less 片段,便于复制到工程。
---
## 二、已确认的设计决策
> **说明**:以下选项已与产品 / 需求方确认,开发阶段不得擅自变更;若需调整须更新本文档版本号。
| 编号 | 决策项 | 确认结果 |
| --- | --- | --- |
| A | 版心最大宽度 | **1300px**(对标政务站版心,`max-width` 非固定 `width` |
| B | 桌面端左右边距gutter | **25px**(与政务站侧栏留白对齐) |
| C | 大区块上下内边距section 级) | **64px**(原首页为 80px需下调对齐 |
| D | 服务中心原 200px 大留白 | **改为版心 gutter25px**,通过 `page-content-wrap` 实现 |
| E | 首页三屏(核心驱动 / 共性能力 / 企业出海) | **保持 100vh 全屏**;仅统一标题区与内容区相对版心的 gutter |
| F | 改造范围 | **仅 5 个页面**,不含服务中心子市场页 |
| G | 文档与代码路径 | 说明文档:`public/docs/`;公共样式建议:`src/pages/index/styles/` |
| H | 语言 | **仅中文** |
---
## 三、设计 Token 规范
### 3.1 CSS 变量定义(建议)
新建文件:`src/pages/index/styles/page-layout.less`
```less
// 页面级布局 Token门户五页共用
:root {
--page-content-max-width: 1300px;
--page-gutter-x: 25px;
--page-section-padding-y: 64px;
--page-block-gap-y: 48px; // 区块内:标题 ↔ 内容
--page-block-margin-bottom: 64px; // 同级模块间距(锚点页多模块)
--page-banner-height: 350px;
--page-offset-top: 60px; // 固定顶栏下的安全区
}
```
### 3.2 响应式 Token
| 断点 | `--page-gutter-x` | `--page-section-padding-y` | 版心 |
| --- | --- | --- | --- |
| ≥ 1280px | 40px | 64px | `max-width: 1400px` |
| 768px ~ 1279px | 24px | 48px | `width: 100%` |
| < 768px | 16px | 40px | `width: 100%` |
媒体查询建议与首页 `home2` 现有断点协调,避免五页断点不一致。
### 3.3 内容区容器(标准写法)
**类名建议**`.page-content-wrap`(全站门户页根级或 section 级复用)
```less
.page-content-wrap {
box-sizing: border-box;
width: 100%;
max-width: var(--page-content-max-width);
margin-left: auto;
margin-right: auto;
padding-left: var(--page-gutter-x);
padding-right: var(--page-gutter-x);
}
.page-section {
box-sizing: border-box;
padding-top: var(--page-section-padding-y);
padding-bottom: var(--page-section-padding-y);
}
```
**板块四向边距统一格式(流式内容区块)**
```
64pxsection-padding-y
64pxsection-padding-y
40pxgutter-x
40pxgutter-x
版心max-width 1400px水平居中
```
### 3.4 全宽 Banner 与内容分离原则
| 类型 | 背景 | 内部文字 / 卡片 |
| --- | --- | --- |
| Banner / Hero 背景 | 宽度 100%,高度见 `--page-banner-height` | 文案、按钮包在 `.page-content-wrap` 内 |
| 内容板块 | 可选全宽背景色 / 图 | 主体必须使用 `.page-content-wrap` |
### 3.5 首页三屏E1 专项规则)
以下三个 section **保持** `height: 100vh` 与现有绝对定位布局,**不改为**普通流式 section
- `#section-core` 核心驱动
- `#section-capability` 共性能力(首页区块)
- `#section-overseas` 企业出海(首页区块)
**仅调整**
1. 标题区(`.section-title` / `.capability-header` / `.overseas2-header`)左右对齐 gutter **40px**,移除 `margin-left: 40px` 等 hack。
2. 内容网格在版心 **1400px** 内水平居中,左右留白 **40px**
3. `--block-title-top` 等内部变量可保留,但与 `--page-gutter-x` 对齐,避免重复偏移。
---
## 四、改造范围清单
### 4.1 纳入改造
| 序号 | 页面 | 路由 | 文件路径 |
| --- | --- | --- | --- |
| 1 | 首页 | `/home`home2 | `src/pages/index/views/home2/index.vue` |
| 2 | 服务中心 | `/fwsc` | `src/pages/index/views/fwsc/index.vue` |
| 3 | 共性能力 | `/gxnlpt` | `src/pages/index/views/gxnlpt/index.vue` |
| 4 | 企业出海 | `/qych` | `src/pages/index/views/qych/index.vue` |
| 5 | 行业专题 | `/hyzt` | `src/pages/index/views/hyzt/index.vue` |
### 4.2 不纳入改造(首轮)
- `/tfwsc`、`/txqsc`、`/tsjsc`、`/tjrsc` 等服务中心子页
- 字体、配色、圆角、动效、业务逻辑
- 卡片内部 padding`24px`、`28px`)除非与版心冲突
---
## 五、现状与目标对照
### 5.1 版心与 gutter
| 页面 | 现状 | 目标 |
| --- | --- | --- |
| 首页 | `1400px` + `40px`;三屏标题有 margin hack | 保持版心section 上下 **80px → 64px**;清理 hack |
| 服务中心 | `padding: 60px 200px 80px` | `64px 40px 64px` + `.page-content-wrap` |
| 共性能力 | `1448px`,无统一 gutter | `1400px` + 左右 **40px** |
| 企业出海 | `width: 1300px` 固定 | `max-width: 1400px` + **40px** |
| 行业专题 | `width: 1300px` 固定 | `max-width: 1400px` + **40px** |
### 5.2 区块垂直间距
| 页面 | 现状(典型) | 目标 |
| --- | --- | --- |
| 首页 section | `80px 0` | `64px 0` |
| 服务中心 | `60px` 上 / `80px` 下 | `64px` 上下 |
| 共性能力 | 模块 `margin-bottom: 70px` | `64px``--page-block-margin-bottom` |
| 企业出海 | `30px` 等零散值 | 模块间距 **64px** |
| 行业专题 | Banner `60px`、列表 `20px 0` | Banner 内容走 wrap列表区 section **64px** |
---
## 六、分页面改造要点
### 6.1 首页home2/index.vue
**模板**
- 为 `.container` 下各 `<section>` 内容区统一包裹或复用 `.page-content-wrap`(已有 `.section-container` 可重命名或映射为同一套 Token
- 新闻、合作伙伴、底部 CTA 等流式区块与 core 系列共用 gutter。
**样式**
| 选择器 / 区域 | 操作 |
| --- | --- |
| `.section-container` | `max-width: 1400px``padding: 0 40px`(改为 CSS 变量) |
| `.core-section` 等 | `padding: 80px 0``padding: 64px 0` |
| `.news-section`、`.partner-section` | 同上 **64px** |
| `.core-section .section-title` 等 | 删除 `margin-left: 40px`;使用 `left` + `width: 100%` + `max-width` + `padding: 0 40px` |
| 移动端 `@media` | `16px` gutter 映射变量 |
**注意**Hero`#section-hero`)全宽保留;搜索区 `6%` / `10%` 可保留百分比,或评估是否改为 `40px`(需 UI 确认,默认 Hero 不强制改百分比)。
---
### 6.2 服务中心fwsc/index.vue
**模板**
- `.banner-content` 外包 `.page-content-wrap`
- `.services-section``.services-grid` 已在 `1400px` 内,改为外层 section 使用统一 padding。
**样式**
| 选择器 | 现状 | 目标 |
| --- | --- | --- |
| `.services-section` | `padding: 60px 200px 80px` | `padding: 64px 0`;内部 wrap 负责左右 40px |
| `.banner-content` | `padding: 0 40px` | 并入 `.page-content-wrap` |
| 响应式 `@media` | `100px` / `40px` / `16px` 多级 | 统一为 **24px / 16px** 两档 |
**保留**`margin-top: -120px` 卡片上浮效果(仅间距体系变化,不改视觉层级)。
---
### 6.3 共性能力gxnlpt/index.vue
**模板**
- `.gxnlpt-main` 增加 `portal-page` + `.page-content-wrap` 结构。
- 锚点 Tab 与 `#anchor-container` 同级置于 wrap 内。
**样式**
| 选择器 | 操作 |
| --- | --- |
| `.gxnlpt-main` | `max-width: 1448px``1400px`;增加左右 padding **40px** |
| `.gxnlpt-tab` | `margin-bottom: 70px`**64px** |
| `.anchor-container-box` | `margin-bottom: 70px`**64px** |
| `.body-main` | `padding-top: 60px` → 使用 `--page-offset-top` |
---
### 6.4 企业出海qych/index.vue
**模板**
- `.header-wrap`、`.top-nav`、各 `.module` 容器统一为 `.page-content-wrap`
**样式**
| 选择器 | 操作 |
| --- | --- |
| `.header-wrap` | `width: 1300px``max-width: 1400px` + gutter |
| `.top-nav` | 同上 |
| `.content-wrapper2` 等 | `max-width: 1300px`**1400px** + **40px** padding |
| `.header` | `padding-top: 120px` 保留或收敛为设计稿一致(与 Banner 视觉相关,不改高度 350px |
| 模块间距 | 零散 `30px`**64px**`--page-block-margin-bottom` |
---
### 6.5 行业专题hyzt/index.vue
**模板**
- Banner 内 `.word``.hyzt-list` 均使用 `.page-content-wrap`
**样式**
| 选择器 | 操作 |
| --- | --- |
| `.banner .word` | `width: 1300px` → wrap + `max-width: 1400px` |
| `.hyzt-list` | `width: 1300px` → 100% + wrap |
| `.banner` | `padding: 60px 0` 可保留;左右由 wrap 提供 **40px** |
| `.hyzt-list-wrap` | 增加 section 级上下 **64px**(按视觉与背景图协调) |
---
## 七、工程实施步骤
### 7.1 阶段划分
| 阶段 | 任务 | 预估工时 |
| --- | --- | --- |
| P0 | 新增 `page-layout.less` 并在入口样式引入 | 0.5h |
| P1 | 改造 fwsc、hyzt、gxnlpt结构相对简单 | 4h |
| P2 | 改造 qych模块多、选择器多 | 4h |
| P3 | 改造 home2三屏 + 响应式 + 清理 hack | 6h |
| P4 | 三端走查 + 修复溢出 | 2h |
### 7.2 开发检查清单
- [ ] 创建 `page-layout.less` 并定义 Token
- [ ] 五页根节点增加 `portal-page` class可选便于 scoped 覆盖)
- [ ] 替换所有 `1300px` / `1448px` 固定宽为 `max-width: 1400px`
- [ ] 替换 `200px` / `100px` 等大留白为 Token
- [ ] 首页 section `80px``64px`
- [ ] 删除首页三屏标题 `margin-left` hack
- [ ] 响应式 gutter 24px / 16px 五页一致
- [ ] 1366px、1920px、768px、375px 无横向滚动条
### 7.3 引入方式示例
`src/pages/index` 入口或各页公共父级引入:
```less
@import '@/pages/index/styles/page-layout.less';
```
各页 scoped 样式中仅保留页面特有样式,版心相关改为:
```less
@import (reference) '@/pages/index/styles/page-layout.less';
// 或直接使用 .page-content-wrap / .page-section
```
---
## 八、测试与验收
### 8.1 验收标准
| 编号 | 标准 | 通过条件 |
| --- | --- | --- |
| AC-01 | 版心对齐 | 五页主内容区在 1920 屏宽下左右边缘对齐 |
| AC-02 | gutter | 桌面端内容距视口边缘均为 **40px**(通过 wrap 实现) |
| AC-03 | section 间距 | 流式大区块上下均为 **64px** |
| AC-04 | 首页三屏 | 仍为 100vh标题与网格不贴边、无双重偏移 |
| AC-05 | 服务中心 | 无 200px 留白;卡片区域与首页视觉宽度一致 |
| AC-06 | 响应式 | 768px、375px 下 gutter 为 24px / 16px |
| AC-07 | 兼容性 | 1366px 宽度无横向滚动条 |
| AC-08 | 范围 | 子市场页样式无意外改动 |
### 8.2 测试用例(手工)
| 用例 ID | 页面 | 分辨率 | 操作 | 预期 |
| --- | --- | --- | --- | --- |
| TC-01 | 五页 | 1920×1080 | 打开首页并依次进入四入口 | 主内容左右对齐,无宽窄不一 |
| TC-02 | fwsc | 1920×1080 | 查看服务卡片区域 | 左右留白约 40px非大留白 |
| TC-03 | home2 | 1920×1080 | 滚动三屏区块 | 每屏标题不漂移、不重复缩进 |
| TC-04 | 五页 | 1366×768 | 全页滚动 | 无横向滚动条 |
| TC-05 | 五页 | 768×1024 | 查看边距 | 左右约 24px |
| TC-06 | 五页 | 375×812 | 查看边距 | 左右约 16px |
| TC-07 | gxnlpt | 1920×1080 | 切换锚点模块 | 模块间距 64px版心 1400px |
### 8.3 回归风险
> **警告**:服务中心由 200px 改为 40px 后,主内容视觉变宽,卡片可能更接近屏幕边缘,需在 1920 与 1366 下重点确认。
> **说明**:首页 section 由 80px 改为 64px 后,区块纵向更紧凑,若设计认为过密,需走变更流程调整 C 项决策。
---
## 九、附录
### 9.1 关键文件路径速查
```
txw-mhzc-web/
├── public/docs/page-layout-margin-refactor.md # 本文档
├── src/pages/index/styles/page-layout.less # 待新建
├── src/pages/index/views/home2/index.vue
├── src/pages/index/views/fwsc/index.vue
├── src/pages/index/views/gxnlpt/index.vue
├── src/pages/index/views/qych/index.vue
└── src/pages/index/views/hyzt/index.vue
```
### 9.2 变更记录
| 版本 | 日期 | 变更说明 | 作者 |
| --- | --- | --- | --- |
| v1.0 | 2026-05-19 | 根据需求确认 A1/B1/C2/D1/E1/F1 编写初版 | — |
---
## 十、后续行动
1. 开发按第七章 checklist 实施改造。
2. 测试按第八章用例验收。
3. 验收通过后更新本文档状态为「已上线」,并注明实际上线日期。
> **待办**:开发启动前由 UI 确认 Hero 区 `6%` / `10%` 是否纳入 gutter 统一(默认保留现状)。

View File

@ -38,7 +38,7 @@
## **三** **、** **环境声明场景**
**环境声明****上链存证,绿色品质一证可见**
**环境声明上链存证,绿色品质一证可见**
**适用对象:** 建材、消费品、绿色产品认证企业等

View File

@ -138,6 +138,10 @@ request.interceptors.response.use(
window.location.href = `/view/mhzc/login`;
return Promise.reject(err);
}
// gtff 错误拦截器对 { code, msg } 体误用 a.Response 时会抛 TypeError避免弹出误导性 Toast
if (err instanceof TypeError && /Cannot convert undefined or null to object/.test(err.message)) {
return Promise.reject(err);
}
let { message } = err;
if (message === 'Network Error') {
message = '后端接口连接异常';
@ -216,4 +220,25 @@ const fetchNoPrefix = (options, custom) => {
);
};
/**
* 401 须在 @gtff/tdesign-gt-vue 错误拦截器之前处理其对 { code, msg } 响应执行
* Object.assign(s(null, a.Response, ), u) Response 缺失时会抛 TypeError
*/
request.interceptors.response.use(
(res) => res,
(err) => {
if (err?.response?.status === 401) {
if (err.reqConfig?.loading || err.config?.loading || SingleLoading.load !== null) {
SingleLoading.endLoading(true);
}
window.location.href = `/view/mhzc/login`;
return Promise.reject(err);
}
return Promise.reject(err);
},
);
const responseHandlers = request.interceptors.response.handlers;
const firstAuthHandler = responseHandlers.pop();
responseHandlers.unshift(firstAuthHandler);
export { fetch, fetchSso, fetchNoPrefix, fetchSso1 };

View File

@ -4,7 +4,7 @@ const basurl = '/mhzc';
export default {
// 获取用户信息(含入驻状态 gxdtRzbz
init(params) {
init(params = {}) {
return fetchSso({
url: `${basurl}/user/init`,
method: 'post',

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M8.76771765,5.95670588 L12.272,4 L15.6941176,5.95670588 L12.272,7.91171765 L8.76771765,5.95670588 Z M16.0295529,9.93449412 L13.09364706,8.23698824 L16.3260235,6.43698824 L19.4,8.04047059 L19.4,11.2067765 L16.0295529,13.0847059 L16.0295529,9.93449412 Z M9.21835294,18.3771294 L9.21835294,14.4908235 L12.2,16.1781647 L15.1587765,14.4908235 L15.1587765,18.3771294 L12.1881412,20.0907294 L9.21835294,18.3771294 Z M16.0295529,14.0825412 L19.4,12.2274824 L19.4,16.0502588 L16.0295529,18.1128471 L16.0295529,14.0825412 Z M9.21835294,10.4630588 L12.272,8.77487059 L15.1587765,10.4630588 L15.1587765,13.6293647 L12.2,15.1769412 L9.21835294,13.6285176 L9.21835294,10.4630588 Z M5,16.0384 L5,12.2274824 L8.52207059,14.0825412 L8.52207059,18.0018824 L5,16.0384 Z M5.05929412,8.04047059 L7.98588235,6.43698824 L11.2555294,8.23698824 L8.36282353,9.93449412 L8.36282353,13.0855529 L5,11.2059294 L5.05929412,8.03962353 L5.05929412,8.04047059 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M20.082993,11.3119173 L18.5130986,9.77175574 L18.5130986,7.82920967 C18.5111164,7.13742541 18.7172642,5.88864579 18.0294443,5.8866636 L14.1602097,5.8866636 L13.192901,4.43173624 C12.7052823,3.94411754 11.8291544,3.82320396 11.3415357,4.31082266 L10.2909751,5.88864579 L7.38706693,5.88864579 C6.69726486,5.89062798 5.90240672,6.433748 5.90042453,7.12553227 L5.90042453,9.66868186 L4.36422739,11.3138994 C3.87859087,11.8035003 3.87859087,12.5963763 4.36422739,13.0859772 L5.90042453,14.7529989 L5.90042453,17.2961485 C5.90240672,17.9879327 6.21361053,18.5112308 6.9034126,18.513213 L9.80533856,18.513213 L11.3395535,20.0870718 C11.8271722,20.5746905 12.618066,20.5746905 13.1056847,20.0870718 L14.6418818,18.513213 L17.0601535,18.513213 C17.7499555,18.5112308 18.5091343,17.7480877 18.5111164,17.0563035 L18.5111164,14.6281209 L20.0810108,13.0859772 C20.5686295,12.5943941 20.5686295,11.8035003 20.082993,11.3119173 Z M12.2355033,16.0235826 L7.80134461,9.66669967 L10.968884,9.66669967 L12.2236102,13.4526823 L13.5021227,9.66669967 L16.6696621,9.66669967 L12.2355033,16.0235826 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M20.000023,9.42743032 L20.000023,19.1250049 C20.000023,20.0717909 19.232487,20.8392911 18.2857189,20.8392911 L5.71428627,20.8392911 C4.76750025,20.8392911 4,20.0717909 4,19.1250049 L4,9.42857317 L19.8452372,9.42857317 C19.8983623,9.42857317 19.950148,9.42818032 20.000023,9.42743032 Z M15.7142869,16.0000039 L8.28571566,16.0000039 L8.27625137,16.0000753 C7.96814413,16.0050753 7.71930477,16.2539504 7.71428691,16.5620755 L7.71428691,16.580879 C7.71935834,16.8890041 7.96821556,17.1378435 8.27635852,17.1427899 L8.28571566,17.1428614 L14.3347176,17.1428614 L14.1673783,17.3102364 L14.1607354,17.3169686 C13.9442353,17.5406115 13.9464496,17.897433 14.1673783,18.1183438 C14.3882891,18.3392725 14.7451106,18.3414868 14.9687535,18.1249867 L14.9754857,18.1183438 L16.1183432,16.9754863 C16.2255078,16.8683257 16.2857182,16.7229834 16.2857182,16.5714326 C16.2857182,16.2590039 16.0349682,16.0051289 15.7237538,16.0000753 L15.7142869,16.0000039 Z M9.03125162,11.8750204 L9.02451947,11.8816633 L7.88166196,13.0245208 C7.77449738,13.1316814 7.71428691,13.2770236 7.71428691,13.4285745 C7.71428691,13.7410031 7.96503699,13.9948782 8.27625137,13.9999318 L8.28571566,14.0000032 L15.7142869,14.0000032 L15.7237538,13.9999318 C16.031861,13.9949318 16.2807004,13.7460567 16.2857182,13.4379316 L16.2857182,13.419128 C16.2806468,13.1110029 16.0317896,12.8621636 15.7236466,12.8572171 L15.7142869,12.8571457 L9.66528754,12.8571457 L9.83262687,12.6897706 L9.83926973,12.6830385 C10.0557698,12.4593956 10.0535555,12.102574 9.83262687,11.8816633 C9.61171609,11.6607168 9.25489455,11.6585203 9.03125162,11.8750025 Z M16.5714326,4 C16.887022,4 17.1428614,4.25583937 17.1428614,4.57142876 L17.1428614,5.14285751 L18.2857189,5.14285751 C19.2325049,5.14285751 20,5.91035776 20,6.85714378 L20,8.57143004 L4,8.57143004 L4,6.85714378 C4,5.91035776 4.76750025,5.14285751 5.71428627,5.14285751 L6.85714378,5.14285751 L6.85714378,4.57142876 C6.85714378,4.25583937 7.11298314,4 7.42857253,4 C7.74416192,4 8,4.25583937 8,4.57142876 L8,5.14285751 L16,5.14285751 L16,4.57142876 C16,4.25583937 16.2558432,4 16.5714326,4 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M17.8617052,9.57915475 C19.0526038,10.8332942 19.7835692,12.2746922 19.7835692,13.872139 C19.7835692,18.3121376 16.4654792,20.426188 12.4657025,20.426188 L12.3178668,20.426188 C8.31808998,20.426188 5,18.3121376 5,13.872139 C5,12.2746922 5.73096537,10.8332942 6.921864,9.57915475 C7.37525411,9.09844589 7.87605903,8.66478185 8.4166471,8.28477114 C7.78423887,7.95706869 7.36537107,7.36736854 7.36537107,6.68732436 C7.36537107,5.61387297 8.38379473,4.7950275 9.59111955,4.7950275 C9.87036474,4.7950275 10.1249707,4.84430606 10.3549373,4.9346501 C10.4699206,4.97571557 10.5520515,5.01678104 10.6177563,5.05784651 C10.6506087,5.0742727 10.7409527,5.04963341 10.7738051,5.00856794 C10.8641491,4.86894534 11.0037717,4.70468346 11.200886,4.53220849 C11.543372,4.2357158 11.944171,4.04024416 12.3917846,4 C12.8393982,4.04024416 13.2401972,4.23489449 13.5826832,4.5330298 C13.7797975,4.70550477 13.9194201,4.86894534 14.0097641,5.00774663 C14.0426165,5.0488121 14.1329605,5.07345139 14.1658129,5.0570252 C14.2315177,5.01595973 14.3136486,4.97489426 14.4286319,4.93382879 C14.6585985,4.84348475 14.9132045,4.7950275 15.1924497,4.7950275 C16.3997745,4.7950275 17.4181981,5.61387297 17.4181981,6.68732436 C17.4181981,7.36736854 16.9993303,7.95706869 16.3669221,8.28477114 C16.4326268,8.32583661 16.4983316,8.37511517 16.5722494,8.43260683 C17.0157565,8.76030928 17.4510505,9.14550339 17.8617052,9.57915475 Z M14.5099415,13.8663898 C14.8187539,13.8663898 15.0700746,13.6011069 15.0700746,13.2742257 C15.0700746,12.9473446 14.8187539,12.682883 14.5099415,12.682883 L13.8487875,12.682883 L14.893493,11.5798645 C15.1119915,11.3439924 15.1119915,10.9796436 14.893493,10.7437715 C14.7913531,10.6332522 14.6477007,10.5704078 14.4972113,10.5704078 C14.3467218,10.5704078 14.2030694,10.6332522 14.1009295,10.7437715 L12.4960909,12.4373115 L10.8920736,10.7437715 C10.7899337,10.6332522 10.6462813,10.5704078 10.4957918,10.5704078 C10.3453024,10.5704078 10.20165,10.6332522 10.0995101,10.7437715 C9.88101162,10.9796436 9.88101162,11.3439924 10.0995101,11.5798645 L11.1442156,12.682883 L10.4879894,12.682883 C10.1783558,12.682883 9.9278564,12.9473446 9.9278564,13.2742257 C9.9278564,13.6011069 10.1783558,13.8655685 10.4879894,13.8655685 L11.9359579,13.8655685 L11.9359579,14.4569113 L10.8165132,14.4569113 C10.5068795,14.4569113 10.2563802,14.7213729 10.2563802,15.048254 C10.2563802,15.3751352 10.5068795,15.6395968 10.8165132,15.6395968 L11.9359579,15.6395968 L11.9359579,16.5496076 C11.9359579,16.8764888 12.1872786,17.1409504 12.4960909,17.1409504 C12.8057245,17.1409504 13.0570452,16.8764888 13.0570452,16.5496076 L13.0570452,15.6395968 L14.1272114,15.6395968 C14.436845,15.6395968 14.6873444,15.3751352 14.6873444,15.048254 C14.6873444,14.7213729 14.436845,14.4569113 14.1272114,14.4569113 L13.0570452,14.4569113 L13.0570452,13.8655685 L14.5099415,13.8663898 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="#666666" fill-rule="nonzero" d="M11.9051202,4 C12.3637048,3.99972063 12.7948826,4.21833603 13.0656814,4.58842777 C13.3364803,4.9585195 13.4143741,5.43563539 13.275341,5.87263619 L15.8576803,8.45497546 L16.9354116,8.45497546 C18.5164357,8.45497546 19.8102404,9.74878014 19.8102404,11.3298042 L19.8102404,17.6539003 C19.8102404,19.2349243 18.5164357,20.528729 16.9354116,20.528729 L6.87482871,20.528729 C5.28890708,20.524386 4.00434303,19.2398219 4,17.6539003 L4,11.3298042 C4,9.74878012 5.29380468,8.4558538 6.87482871,8.4558538 L8.09573061,8.45497546 L10.5726682,5.9780378 C10.3925183,5.5347996 10.4447899,5.03097003 10.7120941,4.63415452 C10.9793983,4.23733901 11.4266707,3.99959123 11.9051202,4 Z M12.049169,16.2178035 L6.87482871,16.2178035 C6.39974582,16.2192443 6.01470167,16.6035042 6.01229225,17.0785832 C6.01229225,17.5528904 6.40052149,17.941998 6.87482871,17.941998 L12.0482907,17.941998 C12.5225979,17.941998 12.9108271,17.5537688 12.9108271,17.0794616 C12.909383,16.6040378 12.5245911,16.2188536 12.049169,16.2169251 Z M9.46155969,13.6301941 L6.87482871,13.6301941 C6.3994049,13.6316382 6.01422072,14.0164301 6.01229225,14.4918522 C6.01229225,14.9661594 6.40052149,15.3543887 6.87482871,15.3543887 L9.46155969,15.3543887 C9.93586689,15.3543887 10.3240961,14.9661594 10.3240961,14.4918522 C10.3221677,14.0164301 9.93698349,13.6316382 9.46155969,13.6301941 Z M11.9762663,7.01712192 L10.5384127,8.45497546 L13.4141198,8.45497546 L11.9762663,7.01712192 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1,75 +1,76 @@
<template>
<footer class="bg-dark text-white" style="background: rgba(240, 247, 242, 1);">
<div class="footer-container">
<!-- 上部信息区 -->
<div class="footer-top">
<!-- 指导单位 -->
<div class="footer-column">
<div class="footer-title">指导单位</div>
<div class="footer-links">
<div class="footer-link-item">上海市数据局</div>
<div class="footer-link-item">宝山区政府</div>
<footer class="site-footer">
<div class="footer-main">
<div class="footer-main-inner page-content-wrap">
<div class="footer-columns">
<div class="footer-column footer-column--guide">
<h3 class="footer-title">指导单位</h3>
<ul class="footer-list">
<li class="footer-text">上海市数据局</li>
<li class="footer-text">宝山区政府</li>
</ul>
</div>
</div>
<!-- 主办单位 -->
<!-- <div class="footer-column">
<div class="footer-title">主办单位</div>
<div class="footer-links">
<div class="footer-link-item">宝山区数据局</div>
<div class="footer-link-item">宝山区发改委</div>
<div class="footer-column footer-column--ops">
<h3 class="footer-title">运营单位</h3>
<ul class="footer-list">
<li class="footer-text">上海浦江数链数字科技有限公司</li>
</ul>
</div>
</div> -->
<!-- 运营单位 -->
<div class="footer-column">
<div class="footer-title">运营单位</div>
<div class="footer-links">
<div class="footer-link-item">上海浦江数链数字科技有限公司</div>
<div class="footer-column footer-column--support">
<h3 class="footer-title">业务支持</h3>
<ul class="footer-list">
<li class="footer-text">上海数字基础设施协会可信碳专委会</li>
</ul>
</div>
</div>
<!-- 业务支持 -->
<div class="footer-column">
<div class="footer-title">业务支持</div>
<div class="footer-links">
<div class="footer-link-item">上海数字基础设施协会可信碳专委会</div>
<div class="footer-column footer-column--links">
<h3 class="footer-title">友情链接</h3>
<ul class="footer-list">
<li>
<a
class="footer-link"
href="https://segg.sh.gov.cn/"
target="_blank"
rel="noopener noreferrer"
>上海市企业走出去综合服务平台</a>
</li>
</ul>
</div>
</div>
<!-- 友情链接 -->
<div class="footer-column">
<div class="footer-title">友情链接</div>
<div class="footer-links">
<a class="footer-link-item" href="https://segg.sh.gov.cn/" target="_blank" rel="noopener">上海市企业走出去综合服务平台</a>
</div>
</div>
<!-- 联系方式 -->
<div class="footer-column contact-column">
<div class="footer-title">联系我们</div>
<div class="footer-links contact-info">
<div class="contact-item">
<span class="contact-icon">📧</span>
<span>{{ contact.email }}</span>
</div>
<div class="contact-item">
<span class="contact-icon">📍</span>
<span>{{ contact.address }}</span>
</div>
<div class="footer-column footer-column--contact">
<h3 class="footer-title">联系我们</h3>
<ul class="footer-list footer-list--contact">
<li class="footer-contact-row">
<span class="footer-contact-icon" aria-hidden="true">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.5 3.5h11v9h-11v-9z" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>
<path d="M2.5 4.5L8 9l5.5-4.5" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"/>
</svg>
</span>
<span class="footer-text">{{ contact.email }}</span>
</li>
<li class="footer-contact-row">
<span class="footer-contact-icon" aria-hidden="true">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 14s4.5-3.2 4.5-7A4.5 4.5 0 1 0 3.5 7c0 3.8 4.5 7 4.5 7z" stroke="currentColor" stroke-width="1.2"/>
<circle cx="8" cy="7" r="1.5" fill="currentColor"/>
</svg>
</span>
<span class="footer-text footer-text--address">{{ contact.address }}</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- 分隔线 -->
<!-- <div class="footer-divider"></div> -->
<!-- 下部版权信息 -->
<div class="footer-bottom">
<!-- <p class="copyright">{{ copyright }}</p> -->
<p class="copyright">© 2025 可信碳信息网 版权所有</p>
<p class="infrastructure">技术支持上海市宝山区大数据中心</p>
<p class="infrastructure">基础设施国家区块链网络基础底座</p>
<div class="footer-bar">
<div class="footer-bar-inner page-content-wrap">
<p class="footer-bar-line">© 2025 可信碳信息网 版权所有</p>
<p class="footer-bar-line">技术支持上海市宝山区大数据中心</p>
<p class="footer-bar-line">基础设施国家区块链网络基础底座</p>
</div>
</div>
</footer>
@ -80,43 +81,72 @@ import { mapState } from 'vuex';
export default {
name: 'Footer',
data() {
return {};
},
computed: {
...mapState('settings', ['APP_NAME', 'contact', 'copyright']),
...mapState('settings', ['contact']),
},
};
</script>
<style lang="less" scoped>
.footer-container {
position: relative;
margin: 0 auto;
background-color: #F0F7F2;
.site-footer {
display: block;
margin-top: 0;
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
}
.footer-top {
padding: 40px 20px 20px;
.footer-main {
background: var(--page-footer-bg);
}
.footer-main-inner {
box-sizing: border-box;
padding-top: var(--page-footer-padding-y);
padding-bottom: var(--page-footer-padding-y);
}
/* Figma五列在 1300 版心内两端对齐,列宽随内容 */
.footer-columns {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
gap: 30px;
width: 100%;
gap: 32px;
}
.footer-column {
max-width: 280px;
min-width: 150px;
flex: 1;
flex: 0 0 auto;
min-width: 0;
}
.footer-column--guide {
width: 120px;
}
.footer-column--ops {
width: 200px;
}
.footer-column--support {
width: 280px;
}
.footer-column--links {
width: 260px;
}
.footer-column--contact {
width: 296px;
flex-shrink: 0;
}
.footer-title {
position: relative;
margin: 0 0 var(--page-footer-title-gap);
padding-left: 12px;
margin-bottom: 16px;
font-size: 16px;
font-weight: 600;
color: rgba(0, 59, 26, 1);
line-height: 24px;
color: var(--page-footer-title-color);
&::before {
position: absolute;
@ -124,139 +154,140 @@ export default {
left: 0;
width: 4px;
height: 16px;
background: linear-gradient(180deg, #4caf50, #2e7d32);
background: linear-gradient(180deg, #4caf50 0%, #2e7d32 100%);
border-radius: 2px;
content: '';
transform: translateY(-50%);
}
}
.footer-links {
.footer-list {
display: flex;
flex-direction: column;
gap: var(--page-footer-link-gap);
margin: 0;
padding: 0;
list-style: none;
}
.footer-text,
.footer-link {
font-size: 14px;
font-weight: 400;
line-height: 22px;
color: var(--page-footer-text-color);
}
.footer-link {
display: inline-block;
text-decoration: none;
transition: color 0.2s ease;
&:hover {
color: #00b96b;
}
}
.footer-list--contact {
gap: 10px;
}
.footer-link-item {
font-size: 14px;
transition: color 0.3s;
color: rgba(85, 102, 89, 1);
cursor: pointer;
&:hover {
color: #4caf50;
}
}
.contact-column {
flex: 1.2;
}
.contact-info {
gap: 12px;
}
.contact-item {
.footer-contact-row {
display: flex;
align-items: flex-start;
gap: 8px;
font-size: 14px;
color: rgba(85, 102, 89, 1);
}
.contact-icon {
.footer-contact-icon {
display: inline-flex;
flex-shrink: 0;
font-size: 14px;
}
.footer-divider {
height: 1px;
margin: 30px 0 20px;
background: rgba(255, 255, 255, 0.15);
}
.footer-bottom {
display: flex;
gap: 20px;
justify-content: center;
align-items: center;
background: rgba(226, 237, 229, 1);
padding: 10px 0px;
justify-content: center;
width: 16px;
height: 22px;
color: var(--page-footer-text-color);
}
.copyright {
.footer-text--address {
word-break: keep-all;
}
.footer-bar {
background: var(--page-footer-bar-bg);
}
.footer-bar-inner {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 6px 32px;
padding: var(--page-footer-bar-padding-y) 0;
box-sizing: border-box;
}
.footer-bar-line {
margin: 0;
font-size: 12px;
color: rgba(85, 102, 89, 1);
font-weight: 400;
line-height: 20px;
color: var(--page-footer-text-color);
white-space: nowrap;
}
.infrastructure {
font-size: 12px;
color: rgba(85, 102, 89, 1);
}
//
@media (max-width: 1024px) {
.footer-top {
gap: 24px;
@media screen and (max-width: 1279px) {
.footer-columns {
flex-wrap: wrap;
justify-content: flex-start;
gap: 28px 48px;
}
.footer-column {
min-width: calc(50% - 12px);
.footer-column--guide,
.footer-column--ops,
.footer-column--support,
.footer-column--links,
.footer-column--contact {
width: auto;
max-width: calc(50% - 24px);
flex: 1 1 220px;
}
.contact-column {
.footer-column--contact {
flex: 1 1 100%;
max-width: none;
}
}
@media (max-width: 768px) {
.footer-container {
padding: 30px 16px 16px;
@media screen and (max-width: 767px) {
.footer-main-inner {
padding-top: 32px;
padding-bottom: 28px;
}
.footer-top {
.footer-columns {
flex-direction: column;
gap: 20px;
gap: 24px;
}
.footer-column {
.footer-column--guide,
.footer-column--ops,
.footer-column--support,
.footer-column--links,
.footer-column--contact {
width: 100%;
max-width: none;
flex: none;
}
.footer-title {
margin-bottom: 12px;
}
.footer-links {
gap: 8px;
}
.footer-link-item {
font-size: 13px;
}
.contact-info {
.footer-bar-inner {
flex-direction: column;
gap: 8px;
gap: 4px;
padding: 10px 0 12px;
}
.contact-item {
font-size: 13px;
}
.footer-divider {
margin: 24px 0 16px;
}
.copyright {
font-size: 12px;
}
.infrastructure {
font-size: 11px;
.footer-bar-line {
white-space: normal;
text-align: center;
}
}
</style>

View File

@ -1,8 +1,12 @@
<template>
<!-- 顶部菜单栏 -->
<div v-show="!isIframeEmbedded" class="nav-box">
<div class="nav-inner page-nav-inner">
<div class="logo-box" @click="goHome">
<img src="@/pages/index/assets/logo-name.png">
<span class="logo-mark">
<img class="logo-icon" :src="logoIconSrc" alt="" />
</span>
<span class="logo-title">可信碳信息网</span>
</div>
<div class="menu-box">
@ -10,12 +14,12 @@
<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>
<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>
<span>{{ menu.title }}</span>
</div>
</div>
@ -26,9 +30,11 @@
<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>
<span class="auth-text">
<span class="auth-link" @click="goyhzx">企业工作台</span>
<span class="auth-divider">&nbsp;&nbsp;|&nbsp;&nbsp;</span>
<span class="auth-link" @click="logoutHandler">退出登录</span>
</span>
</div>
<div v-else class="option-box">
<!-- <div class="gzt">
@ -37,9 +43,10 @@
</div> -->
<!-- <div style="margin-left:20px; cursor: pointer;">激活</div>
<div>|</div> -->
<div style="cursor: pointer;" @click="gologin">登录</div>
<span class="auth-link" @click="gologin">登录</span>
</div>
</div>
</div>
<!-- 移动端汉堡菜单按钮 -->
<div class="hamburger-btn" @click="toggleMobileMenu">
<div :class="['hamburger-icon', { active: mobileMenuOpen }]">
@ -53,7 +60,10 @@
<div class="mobile-menu-overlay" @click="toggleMobileMenu"></div>
<div class="mobile-menu-content">
<div class="mobile-menu-header">
<img src="@/pages/index/assets/logo-name.png">
<div class="mobile-logo" @click="goHome">
<img class="logo-icon" :src="logoIconSrc" alt="" />
<span class="logo-title">可信碳信息网</span>
</div>
<div class="close-btn" @click="toggleMobileMenu">×</div>
</div>
<div class="mobile-menu-list">
@ -100,6 +110,7 @@ export default {
},
data() {
return {
logoIconSrc: require('../../assets/logo-figma-icon.png'),
curPage: "home",
loginFlag: false, //
mobileMenuOpen: false, //
@ -502,45 +513,104 @@ export default {
};
</script>
<style lang="css" scoped>
/* Figma 1:807 / 150512:4221 导航栏 */
.nav-box {
position: fixed;
top: 0px;
width: 100%;
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(20px);
border-radius: 0 0 12px 12px;
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 2fr 1fr;
place-items: center;
color: #003B1A;
top: 0;
z-index: 9999;
width: 100%;
height: var(--page-nav-height);
margin: 0 auto;
color: var(--page-nav-color);
background: #fff;
border-top: 1px solid var(--page-nav-color);
box-sizing: border-box;
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
height: var(--page-nav-height);
min-height: var(--page-nav-height);
}
.logo-box {
text-align: center;
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
flex-shrink: 0;
}
.logo-mark {
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
padding: 1px;
background: #fff;
border-radius: 100px;
}
.logo-icon {
display: block;
width: 32px;
height: 32px;
object-fit: cover;
border-radius: 50%;
}
.logo-title {
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
font-size: 28px;
font-weight: 600;
line-height: 28px;
color: var(--page-nav-color);
white-space: nowrap;
}
.option-wrapper {
display: block;
display: flex;
flex-shrink: 0;
align-items: center;
margin-left: auto;
height: var(--page-nav-height);
}
.option-box {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
gap: 10px;
height: 64px;
font-family: PingFang SC;
font-weight: 400;
font-style: Regular;
justify-content: center;
gap: 24px;
height: var(--page-nav-height);
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
font-size: 16px;
leading-trim: NONE;
letter-spacing: 0%;
font-weight: 400;
line-height: normal;
color: var(--page-nav-color);
}
.auth-link {
cursor: pointer;
white-space: nowrap;
&:hover {
opacity: 0.75;
}
}
.auth-text {
font-size: 16px;
font-weight: 400;
line-height: 24px;
color: var(--page-nav-color);
white-space: nowrap;
}
.auth-divider {
color: var(--page-nav-color);
user-select: none;
}
.option-box .gzt {
@ -555,33 +625,60 @@ export default {
border-radius: 6px;
}
/* 菜单组Figma Frame 3 居中,项间距 16px */
.menu-box {
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
height: 64px;
font-size: 16px;
gap: 10px;
display: flex;
align-items: center;
justify-content: center;
flex: 1;
flex-wrap: nowrap;
gap: var(--page-nav-item-gap);
height: var(--page-nav-height);
margin-left: 0;
min-width: 0;
}
.menu-box > div {
display: flex;
height: 100%;
}
.menu-box :deep(.t-dropdown) {
height: 100%;
}
.menu-title {
width: 96px;
height: 64px;
text-align: center;
line-height: 24px;
display: flex;
justify-content: center;
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
height: 100%;
padding: 0 var(--page-nav-item-padding-x);
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
font-size: 16px;
font-weight: 400;
line-height: 24px;
color: var(--page-nav-color);
white-space: nowrap;
cursor: pointer;
transition: font-weight 0.15s ease;
}
.meun-title-active {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
border-bottom: 2px solid #003B1A;
font-weight: 600;
}
.meun-title-active::after {
position: absolute;
right: var(--page-nav-item-padding-x);
bottom: 0;
left: var(--page-nav-item-padding-x);
height: var(--page-nav-active-bar-height);
background: var(--page-nav-color);
content: '';
}
.meun-title-disable {
cursor: not-allowed !important;
}
@ -689,8 +786,26 @@ export default {
background: rgba(255, 255, 255, 0.9);
}
.mobile-menu-header img {
height: 32px;
.mobile-logo {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.mobile-menu-header .logo-icon {
width: 28px;
height: 28px;
border-radius: 50%;
object-fit: cover;
}
.mobile-menu-header .logo-title {
font-size: 18px;
font-weight: 600;
line-height: 1.2;
color: var(--page-nav-color);
white-space: nowrap;
}
.close-btn {
@ -773,11 +888,16 @@ export default {
/* 移动端适配 */
@media (max-width: 768px) {
.nav-box {
height: 56px;
grid-template-columns: 1fr auto auto;
padding: 0 16px;
border-radius: 0;
background: rgba(255, 255, 255, 0.95);
height: var(--page-nav-height);
background: #fff;
}
.logo-title {
display: none;
}
.nav-inner {
min-height: var(--page-nav-height);
}
.menu-box {
@ -841,22 +961,33 @@ export default {
text-align: left;
}
.logo-box img {
height: 32px;
.logo-title {
font-size: 20px;
line-height: 24px;
}
.logo-icon {
width: 28px;
height: 28px;
}
}
@media (max-width: 480px) {
.nav-box {
padding: 0 12px;
padding: 0;
}
.hamburger-btn {
padding: 10px;
}
.logo-box img {
height: 28px;
.logo-title {
font-size: 18px;
}
.logo-icon {
width: 24px;
height: 24px;
}
}
</style>

View File

@ -2,6 +2,7 @@
<div>
<div class="nav-box-placeholder"></div>
<div class="nav-box">
<div class="nav-inner page-nav-inner">
<!-- Logo 区域 -->
<div class="logo-box">
<img src="@/pages/index/assets/logo-name.png" @click="goHome" style="cursor: pointer;">
@ -67,6 +68,7 @@
<div style="cursor: pointer;" @click="goLogin">登录</div>
</template>
</div>
</div>
</div>
</div>
</template>
@ -142,22 +144,26 @@ export default {
top: 0;
left: 0;
z-index: 9999;
display: flex;
width: 100%;
height: 64px;
max-width: 100%;
padding: 0 20px;
margin: 0 auto;
overflow: visible;
color: #fff;
background: #009a29;
box-sizing: border-box;
justify-content: space-between;
}
.nav-inner {
display: flex;
width: 100%;
height: 64px;
align-items: center;
justify-content: space-between;
}
.logo-box {
flex: 0 0 auto;
text-align: left;
}
.option-box {
@ -277,10 +283,6 @@ export default {
//
@media screen and (max-width: 1200px) {
.nav-box {
padding: 0 10px;
}
.menu-box {
gap: 5px;
}
@ -305,11 +307,6 @@ export default {
}
@media screen and (max-width: 768px) {
.nav-box {
justify-content: space-between;
padding: 0 10px;
}
.menu-box {
display: none;
}

View File

@ -12,6 +12,7 @@ import store from './store';
import { topbarConfig, sideBarConfig } from './config';
import '@fortawesome/fontawesome-free/css/all.min.css';
import './assets/css/theme.css';
import './styles/page-layout.less';
const storeGlobalTypes = Vue.prototype.$storeGlobalTypes;

View File

@ -0,0 +1,95 @@
// 门户页边距:对标政务站(约 1200px 版心 + 自适应留白)
// 企业出海「电池法案」模块已按 1300px 落地,全站导航与内容左缘与之对齐
:root {
--page-content-max-width: 1300px;
--page-gutter-x: 25px;
/* 导航 Logomodule 25px + 标题 padding-left 20px */
--page-nav-padding-left: 22px;
/* 首页区块大标题:比 Logo 再内缩一档 */
--page-section-title-padding-left: 60px;
/* 大标题与下方 UI 间距(与共性能力屏一致) */
--page-block-title-to-content-gap: 45px;
/* 版心内标题相对 gutter 的额外内缩 */
--page-block-title-inset-extra: calc(var(--page-section-title-padding-left) - var(--page-gutter-x));
--page-section-padding-y: 64px;
--page-block-margin-bottom: 64px;
/* Figma 导航栏 1:807高 64px菜单组内间距加宽登录仍靠右 */
--page-nav-height: 64px;
--page-nav-logo-menu-gap: 0px;
--page-nav-item-gap: 16px;
--page-nav-item-padding-x: 12px;
--page-nav-active-bar-height: 3px;
--page-nav-color: #003b1a;
--page-offset-top: var(--page-nav-height);
/* Figma 页脚:主区 #f0f7f2、底栏 #e2ede5与导航/内容版心对齐 */
--page-footer-bg: #f0f7f2;
--page-footer-bar-bg: #e2ede5;
--page-footer-title-color: #003b1a;
--page-footer-text-color: #556659;
--page-footer-padding-y: 40px;
--page-footer-bar-padding-y: 12px;
--page-footer-title-gap: 12px;
--page-footer-link-gap: 8px;
/* 与首屏 .top-title 距顶一致,各屏区块大标题上方留白 */
--page-hero-title-offset-top: 128px;
--page-section-title-top: 128px;
/* 服务中心四宫格单卡尺寸(与版心同宽) */
--portal-services-grid-max: var(--page-content-max-width);
--portal-services-grid-gap: 24px;
--portal-services-fwsc-cols: 4;
/* 1400px 版心下的参考宽度;实际列宽请用 --portal-service-card-col-width随网格 100% 缩放) */
--portal-service-card-width: calc(
(var(--portal-services-grid-max) - (var(--portal-services-fwsc-cols) - 1) * var(--portal-services-grid-gap))
/ var(--portal-services-fwsc-cols)
);
/* 与 fwsc 单卡内容区同高padding 56 + 标题区 72 + 描述 ~76 + 按钮 40 */
--portal-service-card-min-height: 268px;
}
@media screen and (max-width: 1279px) {
:root {
--page-gutter-x: 20px;
--page-nav-padding-left: 40px;
--page-section-title-padding-left: 52px;
--page-section-padding-y: 48px;
--page-nav-height: 64px;
--page-nav-logo-menu-gap: 80px;
--page-nav-item-gap: 28px;
--page-nav-item-padding-x: 10px;
--page-hero-title-offset-top: 96px;
--page-section-title-top: 96px;
}
}
@media screen and (max-width: 767px) {
:root {
--page-gutter-x: 16px;
--page-nav-padding-left: 36px;
--page-section-title-padding-left: 44px;
--page-section-padding-y: 40px;
--page-nav-height: 56px;
--page-hero-title-offset-top: 72px;
--page-section-title-top: 72px;
}
}
.page-content-wrap {
box-sizing: border-box;
width: 100%;
max-width: var(--page-content-max-width);
margin-left: auto;
margin-right: auto;
padding-left: var(--page-gutter-x);
padding-right: var(--page-gutter-x);
}
.page-nav-inner {
box-sizing: border-box;
width: 100%;
max-width: var(--page-content-max-width);
margin-left: auto;
margin-right: auto;
padding-left: var(--page-nav-padding-left);
padding-right: var(--page-gutter-x);
}

View File

@ -180,6 +180,7 @@ import Footer from '@/pages/index/components/footer/index.vue';
import BreadcrumbNav from '@/pages/index/components/breadcrumb/index.vue';
import FwscPublish from './components/FwscPublish.vue';
import api from '@/pages/index/api/fwsc/index.js';
import { hasLogin } from '@/pages/index/api/login';
export default {
name: 'FwscPage',
@ -251,10 +252,13 @@ export default {
}
},
methods: {
//
// init 401
async initUser() {
if (!hasLogin()) {
return;
}
try {
const { data } = await api.init();
const { data } = await api.init({});
this.yhxx = data || {};
window.sessionStorage.setItem('yhxx', JSON.stringify(data));
} catch (error) {

View File

@ -19,7 +19,7 @@
</div>
<!-- 四大服务入口卡片 -->
<div class="services-section">
<div class="services-section page-content-wrap">
<!-- <div class="section-header">
<h2 class="section-title">服务中心</h2>
<span class="section-title-bar"></span>
@ -132,7 +132,7 @@ export default {
display: flex;
align-items: center;
height: 48px;
padding: 0 200px;
padding: 0 var(--page-gutter-x);
background: #fff;
border-bottom: 1px solid #eee;
}
@ -227,7 +227,7 @@ export default {
//
.services-section {
padding: 60px 200px 80px;
padding: 60px 0 80px;
position: relative;
margin-top: -120px;
}
@ -266,19 +266,22 @@ export default {
.services-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
max-width: 1400px;
width: 100%;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--portal-services-grid-gap, 24px);
max-width: var(--portal-services-grid-max, 1300px);
margin: 0 auto;
}
.service-card {
min-height: var(--portal-service-card-min-height, 268px);
cursor: pointer;
border-radius: 16px;
overflow: hidden;
background: #fff;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
transition: all 0.3s ease;
box-sizing: border-box;
&:hover {
transform: translateY(-8px);
@ -290,7 +293,9 @@ export default {
display: flex;
flex-direction: column;
height: 100%;
min-height: var(--portal-service-card-min-height, 268px);
padding: 28px;
box-sizing: border-box;
}
.service-card-header {
@ -357,28 +362,33 @@ export default {
@media (max-width: 1400px) {
.services-grid {
grid-template-columns: repeat(2, 1fr);
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 1200px) {
.services-section {
padding: 40px 100px 60px;
padding: 40px 0 60px;
}
}
@media (max-width: 900px) {
.services-section {
padding: 30px 40px 50px;
padding: 30px 0 50px;
}
.services-grid {
grid-template-columns: 1fr;
grid-template-columns: minmax(0, 1fr);
gap: 16px;
}
.service-card,
.service-card-inner {
min-height: auto;
}
.breadcrumb-box {
padding: 0 40px;
padding: 0 var(--page-gutter-x);
}
.banner-section {
@ -441,6 +451,11 @@ export default {
gap: 12px;
}
.service-card,
.service-card-inner {
min-height: auto;
}
.service-card-inner {
padding: 20px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +1,66 @@
<template>
<div class="hyzt-wrap">
<div class="banner">
<div class="word">行业专题</div>
<!-- <button class="desc">查看绿色低碳政策动态行业碳数据与推荐服务</button> -->
<div class="banner-section">
<div class="banner-visual" aria-hidden="true"></div>
<div class="banner-inner hyzt-page-inner">
<h1 class="banner-title">
<span class="banner-title-main">行业</span>
<span class="banner-title-sub">专题</span>
</h1>
</div>
</div>
<div class="hyzt-list-wrap">
<div class="hyzt-list">
<div class="hyzt-item" v-for="(item, index) in hyztList" :key="index">
<div class="hyzt-head">
<div class="head-item1">
<img :src="getImageUrl(item.icon)" alt="" />
</div>
<div class="head-item2">
<img :src="getImageUrl(item.bgImg)" alt="" />
</div>
</div>
<div class="hyzt-white"></div>
<div class="hyzt-content">
<div class="hyzt-item-title">{{ item.title }}</div>
<div class="hyzt-item-category">
<div class="category-item" v-for="(category, index) in item.category" :key="index">
{{ category }}
</div>
</div>
<div class="hyzt-item-desc">{{ item.desc }}</div>
<div class="hyzt-item-btn" @click="goToHref(item.href)">进入专题</div>
<div class="services-section hyzt-page-inner">
<div class="services-grid">
<div
v-for="(item, index) in hyztList"
:key="item.id || index"
class="service-card"
@click="goToHref(item.href)"
>
<div class="service-card-inner">
<div class="service-card-header" :class="headerClassList[index]">
<h3 class="service-card-title">{{ item.title }}</h3>
</div>
<p class="service-card-desc">{{ item.desc }}</p>
<div class="service-card-buttons">
<t-button theme="primary" @click.stop="goToHref(item.href)">
{{ item.btnText || defaultBtnText(index) }}
</t-button>
</div>
</div>
</div>
</div>
</div>
<Footer />
</div>
</template>
<script>
import { mapState } from 'vuex';
import Footer from '@/pages/index/components/footer/index.vue';
export default {
name: 'hyzt',
components: {
Footer,
},
data() {
return {};
return {
headerClassList: ['blue-header', 'green-header', 'purple-header'],
};
},
computed: {
...mapState('settings', ['hyztList']),
},
methods: {
getImageUrl(img) {
try {
return require(`../../assets/hyzt/${img}`);
} catch (error) {
console.error(`Failed to load image: ${img}`, error);
return ''; // fallback image or empty
}
defaultBtnText(index) {
return index === 2 ? '进入交易大厅' : '进入专题';
},
goToHref(href) {
if (href) {
window.open(href);
window.open(href, '_blank');
} else {
this.$message.info('敬请期待');
}
@ -65,131 +70,263 @@ export default {
</script>
<style lang="less" scoped>
.banner {
display: flex;
.hyzt-wrap {
min-height: 100%;
background: #f6f7fa;
}
/* Figma 1440版心 1300 居中(左右各 70px */
.hyzt-page-inner {
width: 100%;
// height: 300px;
max-width: 1300px;
margin-left: auto;
margin-right: auto;
box-sizing: border-box;
}
/*
* BannerFigma 150581:2545
* - 画框 1440×350clipsContent
* - 轮播背景 150581:25461440×617absolute top -35px比例 -35/1440
* - 分界色线在导出插图内 overflow:hidden 裁切呈现勿另加 CSS 色带
*/
.banner-section {
position: relative;
height: 350px;
padding: 60px 0;
background: url(../../assets/hyzt/banner.png);
background-size: cover;
background-position: center;
flex-direction: column;
align-items: flex-start;
justify-content: space-around;
.word {
font-size: 64px;
font-weight: bold;
color: #000;
margin: 0 auto;
width: 1300px;
box-sizing: border-box;
overflow: hidden;
background: #f6f7fa;
}
.banner-visual {
position: absolute;
left: 0;
z-index: 0;
width: 100%;
height: calc(617 / 1440 * 100vw);
top: calc(-35 / 1440 * 100vw);
background: url(../../assets/hyzt/banner-figma.png) no-repeat center top;
background-size: 100% 100%;
pointer-events: none;
}
.banner-inner {
position: relative;
z-index: 2;
display: flex;
align-items: center;
height: 100%;
/* Figma title 150581:2550padding 20px 0 20px 60px */
padding: 20px 30px 20px 60px;
box-sizing: border-box;
}
.banner-title {
display: flex;
flex-wrap: nowrap;
align-items: baseline;
gap: 0;
margin: 0;
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
font-size: 48px;
font-weight: 600;
line-height: 1;
letter-spacing: 0;
-webkit-font-smoothing: antialiased;
}
/* Figma下划线仅在「行业」下方「专题」与「行业」同一基线 */
.banner-title-main {
display: inline-block;
padding-bottom: 20px;
color: #2e7d32;
border-bottom: 4px solid #2e7d32;
vertical-align: baseline;
}
.banner-title-sub {
display: inline-block;
color: #003b1a;
vertical-align: baseline;
}
/* 卡片区Figma 150581:2644 hyzt_content — x:70 y:3211300×428 */
.services-section {
position: relative;
z-index: 2;
margin-top: -93px;
padding: 60px 30px 80px;
box-sizing: border-box;
.services-grid {
display: grid;
width: 100%;
gap: 24px;
grid-template-columns: repeat(3, minmax(0, 1fr));
align-items: stretch;
}
.desc {
margin-top: 10px;
font-size: 24px;
.service-card {
width: 100%;
min-height: 288px;
cursor: pointer;
border-radius: 16px;
overflow: hidden;
background: #fff;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
transition: transform 0.3s ease, box-shadow 0.3s ease;
box-sizing: border-box;
&:hover {
transform: translateY(-8px);
box-shadow: 0 12px 32px rgba(0, 154, 41, 0.15);
}
}
.service-card-inner {
display: flex;
flex-direction: column;
height: 100%;
min-height: 288px;
padding: 28px;
box-sizing: border-box;
}
.service-card-header {
flex-shrink: 0;
padding-bottom: 20px;
margin-bottom: 0;
border-bottom-width: 1px;
border-bottom-style: solid;
text-align: center;
}
.service-card-title {
margin: 0;
font-size: 22px;
font-weight: 600;
line-height: 1.4;
color: #000;
text-align: center;
}
.service-card-desc {
flex: 1;
margin: 0;
min-height: 63px;
padding-top: 14px;
font-size: 16px;
font-weight: 400;
line-height: 1.6;
color: #666;
text-align: center;
}
.service-card-buttons {
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 10px;
/deep/ .t-button {
width: 100%;
border-radius: 3px;
}
/deep/ .t-button--theme-primary {
background: #1b6d24;
border-color: #1b6d24;
}
}
.service-card-inner:has(.blue-header) /deep/ .t-button--theme-primary {
background: #1d5e20;
border-color: #1d5e20;
}
.blue-header {
border-bottom-color: rgba(33, 150, 243, 0.2);
}
.green-header {
border-bottom-color: rgba(0, 180, 42, 0.2);
}
.purple-header {
border-bottom-color: rgba(114, 46, 209, 0.2);
}
}
.hyzt-list-wrap {
min-height: 600px;
background: url(../../assets/hyzt/banner3.png);
background-size: contain;
.hyzt-list {
display: flex;
width: 1300px;
padding: 20px 0;
margin: 0 auto;
justify-content: space-between;
gap: 20px;
.hyzt-item {
width: 33%;
height: 420px;
// background-color: #b6deff;
background-image: linear-gradient(107deg, #ddfaff 0%, #96e1ee 42%, #a1e1fb 77%, #cff0fa 92%);
.hyzt-head {
display: flex;
height: 35%;
justify-content: space-around;
align-items: flex-end;
padding-bottom: 10px;
.head-item1 {
display: flex;
width: 60px;
height: 60px;
padding: 10px;
background: #fff;
border-radius: 8px;
align-items: center;
justify-content: center;
}
}
.head-item2 {
width: 230px;
height: 133px;
padding: 20px 0 0 31px;
margin-right: -18px;
margin-bottom: -20px;
img {
width: 100%;
}
}
}
.hyzt-white {
height: 5%;
background-image: linear-gradient(
180deg,
rgba(256, 256, 256, 0),
rgba(256, 256, 256, 0.8),
rgba(256, 256, 256, 1)
);
}
.hyzt-content {
display: flex;
height: 60%;
padding: 0 30px 20px;
background: white;
flex-direction: column;
justify-content: space-around;
.hyzt-item-title {
font-size: 30px;
font-weight: 600;
line-height: 44px;
letter-spacing: 0;
color: #1a1b24;
}
.hyzt-item-category {
display: flex;
gap: 10px;
justify-content: flex-start;
flex-direction: row;
.category-item {
padding: 4px 8px;
font-size: 14px;
color: #2e7d32;
background: #e4f4e6;
border-radius: 2px;
}
}
.hyzt-item-desc {
font-size: 14px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0;
color: #1a1b24;
}
.hyzt-item-btn {
padding: 6px;
font-size: 16px;
/* font-weight: 500; */
line-height: 26px;
letter-spacing: 0;
color: #fff;
text-align: center;
background: #2e7d32;
border-radius: 4px;
}
@media (max-width: 1200px) {
.services-section .services-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.services-section {
padding: 40px var(--page-gutter-x, 20px) 60px;
}
}
@media (max-width: 900px) {
.banner-section {
height: 280px;
&::after {
height: 80px;
}
}
.banner-visual {
height: calc(617 / 1440 * 100vw);
top: calc(-35 / 1440 * 100vw);
}
.banner-title {
font-size: 36px;
line-height: 1.3;
}
.banner-title-main {
padding-bottom: 12px;
border-bottom-width: 3px;
}
.banner-inner {
padding: 20px var(--page-gutter-x, 20px);
}
.services-section {
margin-top: -60px;
padding: 40px var(--page-gutter-x, 20px) 60px;
}
.services-section .services-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.services-section .service-card,
.services-section .service-card-inner {
min-height: auto;
}
}
@media (max-width: 768px) {
.banner-inner {
padding: 16px var(--page-gutter-x, 16px);
}
.services-section .service-card-inner {
padding: 20px;
}
.services-section .service-card-title {
font-size: 18px;
}
.services-section .service-card-desc {
font-size: 14px;
min-height: auto;
}
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div>
<Nav @gotoIfreamPage="gotoIfreamPage" @gotoPage="gotoPage" />
<div ref="contentWrap" class="content-wrap" :style="isHomePage ? { 'height': documentClientHeight + 'px','margin-top':'0px' } : { 'height': documentClientHeight-64 + 'px','margin-top':'64px' }">
<div ref="contentWrap" class="content-wrap" :style="isHomePage ? { height: documentClientHeight + 'px', marginTop: '0' } : { height: 'calc(' + documentClientHeight + 'px - var(--page-offset-top))', marginTop: 'var(--page-offset-top)' }">
<!-- <iframe v-if="iframeUrl" :src="iframeUrl" width="100%" height="100%" frameborder="0" scrolling="yes">
</iframe> -->
<keep-alive>

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More