Compare commits

..

10 Commits

Author SHA1 Message Date
ea40fb16b7 update 2025-07-07 15:39:46 +08:00
2e30723576 update 2025-07-07 10:01:13 +08:00
626fbc077d updaate 2025-07-04 21:29:18 +08:00
bfbf940322 update 2025-07-04 18:08:59 +08:00
00a754d8f6 update 2025-07-04 17:25:22 +08:00
32291f3866 update 2025-07-04 16:53:40 +08:00
d723be397f update 2025-07-04 09:49:52 +08:00
bcf7b3a25a update 2025-07-03 18:00:22 +08:00
9c6d804a18 update 2025-07-03 17:25:30 +08:00
f61f0bcc6f update 2025-07-03 17:24:35 +08:00
35 changed files with 1763 additions and 2084 deletions

View File

@ -12,7 +12,13 @@
"@astrojs/node": "^9.2.2",
"@tailwindcss/vite": "^4.1.8",
"astro": "^5.10.1",
"cssnano": "^7.0.7",
"postcss": "^8.5.6",
"swiper": "^11.2.10",
"tailwindcss": "^4.1.8"
},
"devDependencies": {
"@fullhuman/postcss-purgecss": "^7.0.2",
"autoprefixer": "^10.4.21"
}
}

6
postcss.config.cjs Normal file
View File

@ -0,0 +1,6 @@
module.exports = {
plugins: [
// require('autoprefixer'),
// require('cssnano'),
],
};

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1751524741029" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4814" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M955.757714 955.977143c-68.315429 68.022857-136.557714 68.022857-256 68.022857H324.242286c-119.442286 0-187.684571 0-256-68.022857S0 819.2 0 699.977143V324.022857C0 204.8 0.731429 136.777143 68.242286 68.022857S204.8 0 324.242286 0h375.515428c119.442286 0 187.684571 0 256 68.022857S1024 204.8 1024 324.022857v375.954286c0 119.222857 0 187.245714-68.242286 256zM802.669714 191.634286c-20.553143-13.165714-42.130286-24.137143-62.025143-38.034286a24.137143 24.137143 0 0 0-37.229714 2.925714 58.002286 58.002286 0 0 1-48.347428 18.285715c-121.124571-0.731429-242.249143 0-363.446858-0.731429H146.285714v8.777143a8.557714 8.557714 0 0 1 2.121143 0.731428 32.841143 32.841143 0 0 0 40.813714 25.6c65.243429-1.462857 130.56-0.731429 195.876572-0.731428h16.310857l-17.188571 106.788571c-2.194286 13.165714-4.973714 26.331429-6.509715 40.228572a10.093714 10.093714 0 0 1-12.361143 10.24 620.836571 620.836571 0 0 1-127.268571-13.165715 1250.742857 1250.742857 0 0 0-24.283429-2.194285V877.714286h122.002286c0-11.702857 0.804571-23.405714 0-35.108572s2.779429-14.628571 13.092572-14.628571c54.491429 0.731429 108.982857 0 163.474285 0h105.033143l4.096 49.737143h119.442286V614.4a449.389714 449.389714 0 0 1-115.712 64.365714 15.798857 15.798857 0 0 0-6.070857 11.702857c-0.585143 19.017143 0 38.034286 0 57.051429v47.542857a92.598857 92.598857 0 0 1-13.312 0.731429c-86.089143 0.731429-172.178286 0-258.267429 0.731428-9.362286 0-11.410286-3.657143-11.410286-13.897143V400.091429h283.282286v31.451428c1.682286 0.731429 2.194286 1.462857 2.486857 1.462857a387.657143 387.657143 0 0 1 114.614857-41.691428 24.210286 24.210286 0 0 0 4.096-14.628572 12.580571 12.580571 0 0 0-5.485714-10.24q-55.881143-8.777143-111.689143-15.36a4.022857 4.022857 0 0 0-3.584 1.462857l-1.682285 11.702858H453.193143c26.843429-49.005714 52.809143-96.548571 78.189714-143.36a18.944 18.944 0 0 1 19.529143-12.434286c82.651429 0.731429 165.229714 0 247.881143 0a28.672 28.672 0 0 0 12.068571-5.12 59.318857 59.318857 0 0 0-8.192-11.702857zM511.268571 547.108571a597.942857 597.942857 0 0 0-151.259428 231.862858 38.619429 38.619429 0 0 0 9.581714-8.045715c23.698286-27.794286 47.250286-56.32 71.314286-84.114285a21.065143 21.065143 0 0 1 13.677714-8.045715 236.909714 236.909714 0 0 0 143.36-19.748571c15.140571-6.582857 29.257143-15.36 46.884572-24.868572-16.603429-8.777143-28.745143-15.36-40.96-21.211428a222.208 222.208 0 0 0 190.537142-77.531429c-18.212571-2.925714-33.133714-5.851429-47.981714-8.045714 0-1.462857 0-2.194286-0.512-3.657143a154.038857 154.038857 0 0 0 131.657143-108.251428 480.768 480.768 0 0 0-366.299429 131.657142z" fill="#353535" p-id="4815"></path></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<svg t="1751618266477" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5252" width="200" height="200"><path d="M512 1024C229.23 1024 0 794.77 0 512S229.23 0 512 0s512 229.23 512 512-229.23 512-512 512z m193.521-701.437c0.01 0.013 0.025 0.02 0.036 0.034-0.008-0.01-0.027-0.024-0.036-0.032-34.1-22.232-58.708-57.808-66.386-99.27h0.002c-1.661-8.96-2.57-18.182-2.57-27.616H527.742l-0.177 436.135c-1.682 44.941-35.851 81.72-79.69 87.304h-23.172c-11.02-1.41-21.424-4.8-30.875-9.774 2.443 3.385 2.441 3.385-0.002 0-29.115-15.322-49.043-45.845-49.043-80.97 0-50.441 41.04-91.482 91.48-91.482 9.417 0 18.448 1.553 26.99 4.232l0.003-111.099c-8.841-1.205-17.825-1.959-26.994-1.959-110.452 0-200.302 89.86-200.302 200.309 0 67.767 33.856 127.737 85.512 164.003l-0.002-0.003c32.536 22.84 72.11 36.304 114.794 36.304 110.447 0 200.302-89.853 200.302-200.304V407.216c42.682 30.637 94.977 48.689 151.405 48.689V347.08c-30.396 0-58.709-9.037-82.45-24.518z" fill="#333333" p-id="5253"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@ -1,7 +1,22 @@
---
import { getConfig } from "../../../utils/config";
import { TP2_COLUMN_NEWS, TP2_COLUMN_NEWS_URL, TP2_COLUMN_ABOUT_US, TP2_COLUMN_ABOUT_US_URL, TP2_COLUMN_CONTACT_US, TP2_COLUMN_CONTACT_US_URL, TP2_COLUMN_PROTECT, TP2_COLUMN_PROTECT_URL } from "../../../utils/const";
import { getConfig, getExtra } from "../../../utils/config";
import BaijiahaoLogo from '../../../public/template_2/baijiahao.svg'
import Toutiaohao from '../../../public/template_2/toutiaohao.svg'
import Douyin from '../../../public/template_2/douyin.svg'
import {
TP2_COLUMN_NEWS,
TP2_COLUMN_NEWS_URL,
TP2_COLUMN_ABOUT_US,
TP2_COLUMN_ABOUT_US_URL,
TP2_COLUMN_CONTACT_US,
TP2_COLUMN_CONTACT_US_URL,
TP2_COLUMN_PROTECT,
TP2_COLUMN_PROTECT_URL,
TP2_COLUMN_REFUND,
TP2_COLUMN_REFUND_URL
} from "../../../utils/const";
const config = getConfig(Astro)
const extra = getExtra(config.app_extra_tag)
const { path = [] } = Astro.props
---
<footer class="v4 n09-footer footer" data-component="n09-footer">
@ -21,147 +36,28 @@ const { path = [] } = Astro.props
<div class="usp-wrap"></div>
<div class="footer-links">
<div class="row">
<div class="col-xl-2 col-lg-4">
<div class="footer-links__block">
<div class="heading footer-links__title heading-06 js-footer-accordion-btn">
购买产品
</div>
<ul class="footer-links__list" role="menubar">
<li class="footer-links__item" role="menuitem">
<a title="手机" data-title="手机" class="footer-links__link" href="/cn/phones/">
手机
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="穿戴" data-title="穿戴" class="footer-links__link" href="/cn/wearables/">
穿戴
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="鸿蒙电脑" data-title="鸿蒙电脑" class="footer-links__link" href="/cn/harmonyos-computer/">
鸿蒙电脑
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="笔记本" data-title="笔记本" class="footer-links__link" href="/cn/laptops/">
笔记本
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="显示器" data-title="显示器" class="footer-links__link" href="/cn/monitors/">
显示器
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="打印机" data-title="打印机" class="footer-links__link" href="/cn/printers/">
打印机
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="平板" data-title="平板" class="footer-links__link" href="/cn/tablets/">
平板
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="智慧屏" data-title="智慧屏" class="footer-links__link" href="/cn/visions/">
智慧屏
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="耳机音箱" data-title="耳机音箱" class="footer-links__link" href="/cn/audio/">
耳机音箱
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="路由器" data-title="路由器" class="footer-links__link" href="/cn/routers/">
路由器
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="配件" data-title="配件" class="footer-links__link" href="/cn/accessories/overview/">
配件
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="商用产品" data-title="商用产品" class="footer-links__link" href="https://qingyun.huawei.com/products-and-solutions/?utm_medium=referral&utm_source=consumer.huawei.com" target="_blank" rel="noopener noreferrer">
商用产品
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="教育商店" data-title="教育商店" class="footer-links__link" href="https://www.vmall.com/portal/activity/index.html?pn=educationcenterpc" target="_blank" rel="noopener noreferrer">
教育商店
</a>
</li>
</ul>
</div>
</div>
<div class="col-xl-2 col-lg-4">
<div class="footer-links__block">
<div class="heading footer-links__title heading-06 js-footer-accordion-btn">服务支持</div>
<ul class="footer-links__list" role="menubar">
<li class="footer-links__item" role="menuitem">
<a title="保修政策" data-title="保修政策" class="footer-links__link" href="/cn/support/warranty-policy/">
保修政策
<a title={TP2_COLUMN_PROTECT} class="footer-links__link" href={TP2_COLUMN_PROTECT_URL}>
{TP2_COLUMN_PROTECT}
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="上门安装" data-title="上门安装" class="footer-links__link" href="/cn/support/install/">
上门安装
<a title={TP2_COLUMN_REFUND} class="footer-links__link" href={TP2_COLUMN_REFUND_URL}>
{TP2_COLUMN_REFUND}
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="维修服务" data-title="维修服务" class="footer-links__link" href="/cn/support/break-fix/">
维修服务
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="保修期及权益查询" data-title="保修期及权益查询" class="footer-links__link" href="/cn/support/warranty-query/">
保修期及权益查询
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="维修备件价格" data-title="维修备件价格" class="footer-links__link" href="/cn/support/sparepart-price/">
维修备件价格
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="服务进度查询" data-title="服务进度查询" class="footer-links__link" href="/cn/support/inquiry/">
服务进度查询
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title={TP2_COLUMN_CONTACT_US} class="footer-links__link" href={TP2_COLUMN_CONTACT_US_URL}>
{TP2_COLUMN_CONTACT_US}
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="服务隐私声明" data-title="服务隐私声明" class="footer-links__link" href="/cn/support/service-privacy-notice/">
服务隐私声明
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="商用服务" data-title="商用服务" class="footer-links__link" href="https://bsupport.huawei.com/" target="_blank" rel="noopener noreferrer">
商用服务
</a>
</li>
</ul>
</div>
</div>
@ -171,53 +67,15 @@ const { path = [] } = Astro.props
应用与下载
</div>
<ul class="footer-links__list" role="menubar">
<li class="footer-links__item" role="menuitem">
<a title="终端云服务" data-title="终端云服务" class="footer-links__link" href="/cn/mobileservices/">
终端云服务
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为商城 APP" data-title="华为商城 APP" class="footer-links__link" href="https://m.vmall.com/app/download?cid=1457312" target="_blank" rel="noopener noreferrer">
华为商城 APP
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="我的华为 APP " data-title="我的华为 APP " class="footer-links__link" href="/cn/myhuawei-app/">
我的华为 APP
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为手机助手" data-title="华为手机助手" class="footer-links__link" href="https://consumer.huawei.com/cn/support/hisuite/">
华为手机助手
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为电脑管家" data-title="华为电脑管家" class="footer-links__link" href="https://consumer.huawei.com/cn/support/pc-manager/">
华为电脑管家
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="HarmonyOS 5" data-title="HarmonyOS 5" class="footer-links__link" href="/cn/harmonyos-next/">
HarmonyOS 5
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="预置应用公示" data-title="预置应用公示" class="footer-links__link" href="/cn/support/apk/">
预置应用公示
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="HUAWEI HiCar" data-title="HUAWEI HiCar" class="footer-links__link" href="/cn/phones/hicar/">
HUAWEI HiCar
</a>
</li>
{
extra?.app_store.map(item => {
return <li class="footer-links__item" role="menuitem">
<a title={`${item.name}下载地址`} rel="nofollow" class="footer-links__link" href={item.url}>
{item.name}
</a>
</li>
})
}
</ul>
</div>
</div>
@ -233,12 +91,6 @@ const { path = [] } = Astro.props
{TP2_COLUMN_NEWS}
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为活动" class="footer-links__link" href="/cn/press/events/">
华为活动
</a>
</li>
</ul>
</div>
</div>
@ -255,66 +107,11 @@ const { path = [] } = Astro.props
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="可持续发展" data-title="可持续发展" class="footer-links__link" href="/cn/sustainability/">
可持续发展
</a>
</li>
<li class="footer-links__item" role="menuitem">
<!-- <li class="footer-links__item" role="menuitem">
<a title="隐私" data-title="隐私" class="footer-links__link" href="/cn/privacy/privacy-statement-huawei/">
隐私
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为商城" data-title="华为商城" class="footer-links__link" href="https://www.vmall.com/index.html?cid=27629229" target="_blank" rel="noopener noreferrer">
华为商城
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="HarmonyOS 开发者" data-title="HarmonyOS 开发者" class="footer-links__link" href="https://developer.huawei.com/consumer/cn/" target="_blank" rel="noopener noreferrer">
HarmonyOS 开发者
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为云" data-title="华为云" class="footer-links__link" href="https://www.huaweicloud.com/" target="_blank" rel="noopener noreferrer">
华为云
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="企业业务" data-title="企业业务" class="footer-links__link" href="https://e.huawei.com/cn/" target="_blank" rel="noopener noreferrer">
企业业务
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="运营商网络" data-title="运营商网络" class="footer-links__link" href="https://carrier.huawei.com/cn/" target="_blank" rel="noopener noreferrer">
运营商网络
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="华为集团" data-title="华为集团" class="footer-links__link" href="https://www.huawei.com/cn/" target="_blank" rel="noopener noreferrer">
华为集团
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="加入华为" data-title="加入华为" class="footer-links__link" href="https://career.huawei.com/reccampportal/campus4_index.html#campus4/content.html" target="_blank" rel="noopener noreferrer">
加入华为
</a>
</li>
<li class="footer-links__item" role="menuitem">
<a title="内容举报" data-title="内容举报" class="footer-links__link
goto-complaint-page" href="/cn/complaint-page/" target="_blank" rel="noopener noreferrer">
内容举报
</a>
</li>
</li> -->
</ul>
</div>
</div>
@ -328,71 +125,82 @@ const { path = [] } = Astro.props
</div>
<p class="contact__text">
<a title="消费者服务热线">消费者服务热线</a>
</p>
<p class="contact__text phone-icon">950800</p>
<p class="contact__text">
<a title="7*24小时 | 普通话">7*24小时 | 普通话</a>
</p>
<p class="contact__text phone-icon">950801</p>
<p class="contact__text">
<a href="https://celia.consumer.huawei.com/official/#/?businessUUID=fe8192189f0a40e8a883ab8bdf1ba8ea" title="在线客服 | 7*24小时" target="_blank" rel="noopener noreferrer">在线客服 | 7*24小时</a>
<span>7*24小时服务热线</span>
{
extra?.contact_us?.telephone.map(item => {
return <div style="font-size: 1.5rem;font-weight: bold">
<a title="24小时服务热线" href={`tel:${item.number}`}>{item.number}</a>
</div>
})
}
</p>
</div>
<div class="contact__block col-xl-2 col-md-6">
<div class="heading contact__title heading-06">
线下支持
</div>
<p class="contact__text">
<a href="/cn/support/service-center/" title="服务店查询">服务店查询</a>
</p>
<p class="contact__text">
<a href="/cn/retail/" title="零售店查询">零售店查询</a>
</p>
</div>
<!-- <div class="contact__block col-xl-4 col-md-6">
<div class="contact__block col-xl-6 col-md-6">
<div class="heading contact__title heading-06">
关注我们
</div>
<ul class="contact__social-links lazyload-target">
<li class="contact__social-item">
<a title="微信" class="contact__social-link" data-social="weixin">
<span class="icon-lazy" data-name="font-ico-weixin"></span>
<span class="contact__social-qrcode">
<picture>
<source class="lazyload-img" media="(max-width: 1199.98px)" data-srcset="//consumer-img.huawei.com/content/dam/huawei-cbg-site/greate-china/cn/mkt/v4/footer/weixin-mob.jpg" />
<img class="lazyload-img" data-src="//consumer-img.huawei.com/content/dam/huawei-cbg-site/greate-china/cn/mkt/v4/footer/weixin.jpg" alt="weixin" srcset="" />
</picture>
</span>
</a>
</li>
<li class="contact__social-item">
<a title="微博" class="contact__social-link" data-social="weibo" href="http://t.sina.com.cn/huaweidevice" target="_blank" rel="noopener noreferrer">
<span class="icon-lazy" data-name="font-ico-weibo"></span>
</a>
</li>
{
extra.weibo_offical.address ?
<li class="contact__social-item">
<a title={extra.weibo_offical.name} class="contact__social-link" href={extra.weibo_offical.address} target="_blank" rel="noreferrer">
<span class="icon-lazy font-ico-weibo" data-name="font-ico-weibo"></span>
</a>
</li> : ''
}
{
extra.gongzhonghao_offical.address ?
<li class="contact__social-item">
<a title={extra.gongzhonghao_offical.name} class="contact__social-link" href={extra.gongzhonghao_offical.address} target="_blank" rel="noreferrer">
<span class="icon-lazy font-ico-weixin" data-name="font-ico-weixin"></span>
<span class="contact__social-qrcode"></span>
</a>
</li> : ''
}
{
extra.baijiahao_offical.address.trim() ?
<li class="contact__social-item">
<a title={extra.baijiahao_offical.name} class="contact__social-link" href={extra.baijiahao_offical.address} target="_blank" rel="noreferrer">
<BaijiahaoLogo class="icon-lazy" />
</a>
</li> : ''
}
{
extra.toutiaohao_offical.address ?
<li class="contact__social-item">
<a title={extra.toutiaohao_offical.name} class="contact__social-link" href={extra.toutiaohao_offical.address} target="_blank" rel="noreferrer">
<Toutiaohao class="icon-lazy" />
</a>
</li> : ''
}
{
extra.douyin_offical.address ?
<li class="contact__social-item">
<a title={extra.douyin_offical.name} class="contact__social-link" href={extra.douyin_offical.address} target="_blank" rel="noreferrer">
<Douyin class="icon-lazy" />
</a>
</li> : ''
}
</ul>
</div> -->
</div>
</div>
</div>
<div class="footer-legals">
<div class="row">
<div class="copyright col-xl-4 col-md-8">
<small class="copyright__text">版权所有 © {config.app_company}
。保留一切权利。{config.app_biling}</small>
。保留一切权利。<a href={config.app_filing_url}>{config.app_filing}</a></small>
</div>
<div class="bottom-links col-xl-5">
<!-- <div class="bottom-links col-xl-5">
<ul class="bottom-links__list">
<li class="bottom-links__item">
<a title="资质主体" class="bottom-links__link" href="/cn/legal/terms-of-use/">
资质主体
</a>
</li>
<li class="bottom-links__item">
<a title="使用条款" class="bottom-links__link" href="/cn/legal/terms-of-use/">
使用条款
@ -410,21 +218,27 @@ const { path = [] } = Astro.props
法律信息
</a>
</li>
<li class="bottom-links__item">
<a title={TP2_COLUMN_PROTECT} class="bottom-links__link" href={TP2_COLUMN_PROTECT_URL}>
{TP2_COLUMN_PROTECT}
</a>
</li>
</ul>
</div>
</div> -->
</div>
</div>
</div>
</footer>
<style>
a {
color: #7f7f7f !important;
}
.footer-legals .row {
justify-content: space-between;
}
.icon-lazy {
width: 24px;
height: 24px;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {

View File

@ -1,7 +1,7 @@
---
import { getConfig } from "../../../utils/config";
import { Image } from 'astro:assets';
import { TP2_COLUMN_NEWS, TP2_COLUMN_NEWS_URL } from "../../../utils/const";
import { TP2_COLUMN_ABOUT_US, TP2_COLUMN_ABOUT_US_URL, TP2_COLUMN_CONTACT_US, TP2_COLUMN_CONTACT_US_URL, TP2_COLUMN_NEWS, TP2_COLUMN_NEWS_URL } from "../../../utils/const";
const config = getConfig(Astro)
---
<div class="v4 header slide-down-corporation nav-v2 scroll-with-screen" id="header-v4" data-component="header" role="navigation">
@ -21,20 +21,17 @@ const config = getConfig(Astro)
<nav class="main-nav" role="presentation">
<div class="lf-nav nav-zone">
<ul class="main-nav__list" role="menubar">
<li class="main-nav__item" role="menuitem">
<a title={TP2_COLUMN_NEWS} class="main-nav__link unhover title-hide-v5" href={TP2_COLUMN_NEWS_URL}>{TP2_COLUMN_NEWS}</a>
</li>
<!-- <li class="main-nav__item" role="menuitem">
<a title="企业文化" data-navicon="企业文化" class="main-nav__link unhover title-hide-v5" href="/cn/phones/">企业文化</a>
<li class="main-nav__item" role="menuitem">
<a title={TP2_COLUMN_ABOUT_US} class="main-nav__link unhover title-hide-v5" href={TP2_COLUMN_ABOUT_US_URL}>{TP2_COLUMN_ABOUT_US}</a>
</li>
<li class="main-nav__item" role="menuitem">
<a title="产品介绍" data-navicon="产品介绍" class="main-nav__link unhover title-hide-v5" href="/cn/harmonyos-computer/">产品介绍</a>
</li> -->
<li class="main-nav__item" role="menuitem">
<a title="联系方式(888-888)" data-navicon="联系方式" class="main-nav__link unhover title-hide-v5" href="/cn/harmonyos-computer/">联系方式(888-888)</a>
<a title={TP2_COLUMN_CONTACT_US} class="main-nav__link unhover title-hide-v5" href={TP2_COLUMN_CONTACT_US_URL}>{TP2_COLUMN_CONTACT_US}</a>
</li>
</ul>
</div>
@ -135,6 +132,7 @@ const config = getConfig(Astro)
.company_name {
font-weight: bold;
margin-left: 0.5rem;
}
}
</style>

View File

@ -2,7 +2,6 @@
import Footer from '../components/template_2/Footer.astro'
import Header from '../components/template_2/Header.astro'
import '../styles/template_2/common-v4-nav-v2.css'
import '../styles/template_2/banner.css'
import '../styles/template_2/style.css'
import '../styles/template_2/nav.css'
const { description = '', title = '', keywords = '', breadcrumb = [] } = Astro.props;
@ -21,7 +20,7 @@ const config = getConfig(Astro)
<meta name="baidu-site-verification" content="codeva-kLMUXYuoiO" />
<!-- <link href="https://fonts.googleapis.com/css2?family=Graphik:wght@400;500;600;700&display=swap" rel="stylesheet"> -->
</head>
<body class="huawei-v4 huawei-cn page-name-books none-ecommerce">
<body class="app-v4 page-name-books none-ecommerce">
<Header />
<!-- <main> -->
<slot />

View File

@ -8,10 +8,10 @@ export async function onRequest (context: any, next: any) {
// 可选地修改 `locals` 中的属性
const host = await getHost(context.request);
console.log(host)
if (host == 'www.zhishihuisheng.com' || host == 'zhishihuisheng.com') {
return next();
}
// console.log(host)
// if (host == 'www.zhishihuisheng.com' || host == 'zhishihuisheng.com') {
// return next();
// }
// 防止无线跳转
if (context.locals.is_write) {

View File

@ -3,7 +3,9 @@ import Layout from '../layouts/Layout.astro';
import { APP_NAME } from '../config/app';
import { newsIndex } from '../../utils/rpc';
import Breadcrumb from '../components/Breadcrumb.astro';
import { getConfig } from '../../utils/config';
const config = getConfig(Astro)
const {code, data} = await newsIndex();

View File

@ -1,13 +1,16 @@
---
import Layout from "../../../layouts/Layout_2.astro";
import { getConfig } from "../../../../utils/config";
import { getConfig, getExtra } from "../../../../utils/config";
import {
TP2_COLUMN_ABOUT_US,
TP2_COLUMN_ABOUT_US_URL,
TP2_COLUMN_INDEX,
TP2_COLUMN_INDEX_URL,
} from "../../../../utils/const";
const config = getConfig(Astro);
const extra = getExtra('');
const breadcrumb = [
{ title: "主页", url: "/" },
{ title: TP2_COLUMN_INDEX, url: TP2_COLUMN_INDEX_URL },
{ title: TP2_COLUMN_ABOUT_US, url: TP2_COLUMN_ABOUT_US_URL },
];
---
@ -15,104 +18,68 @@ const breadcrumb = [
<Layout
title={TP2_COLUMN_ABOUT_US + ` - ${config.app_name}`}
breadcrumb={breadcrumb}
description={`关于我们 - ${config.app_name}`}
keywords={config.app_keywords}
>
<div id="content" class="main" data-site="中国">
<div>
<main>
<div>
<!-- 活动与新闻-->
<div class="hcomponent-page-info">
<div class="news-detail-title">
<div class="container-custom fix-p-color">
<h1><span>华为责任矿产尽职管理声明</span></h1>
<h1><span>{extra.about_us.title}{config.app_name}</span></h1>
</div>
</div>
</div>
</div>
<!-- <div data-mod-id="eff0ddd73dbb4d069e65086c4339ccd5"> -->
<div
data-mod-name-pc="@cloud/hcomponent-share-bar/pc/index"
data-mod-name-m="@cloud/hcomponent-share-bar/m/index"
data-mod-name="hcomponent-share-bar"
data-loaded="true"
>
<!-- 活动与新闻-->
<div>
<!-- 社交分享栏 -->
<div class="container-custom hcomponent-share-bar">
<div class="container-custom">
<ul class="share-box list-unstyled hasLine">
<li class="line"></li>
</ul>
</div>
</div>
<div class="container-custom hcomponent-share-bar">
<div class="container-custom">
<ul class="share-box list-unstyled hasLine">
<li class="line"></li>
</ul>
</div>
</div>
<!-- </div> -->
<div
data-mod-id="hcomponent-news-detail-content_920738a0bc3049d489a293983eb596d8"
>
<div
data-mod-name-pc="@cloud/hcomponent-news-detail-content/pc/index"
data-mod-name-m="@cloud/hcomponent-news-detail-content/m/index"
data-mod-name="hcomponent-news-detail-content"
data-loaded="true"
>
<!-- 活动与新闻-->
<div >
<div class="hcomponent-news-detail-content">
<div class="news-detail-box container-custom clearfix">
<div class="news-detail-content">
<p>
作为联合国全球契约、GeSI、RBA、RMI组织的成员华为公司一直坚持把全球社会责任作为我们的目标实施道德采购促进产业链可持续发展。
</p>
<p>
华为承诺并致力于以负责任的方式采购产品中使用的锡、钽、钨、金、钴、云母等矿产原料,并参照《经济合作与发展组织关于来自受冲突影响和高风险区域的矿石的负责任供应链尽职调查指南》、《中国负责任矿产供应链尽责管理指南》(以下统称“指南”)等要求,推动供应商制定政策以防范和降低其制造产品中所含的矿产以直接或间接的方式为高风险地区中,可能助长严重侵犯人权、严重环境危害、严重健康安全隐患、严重腐败等的团体提供资金或利益的风险,要求供应商对其采购的产品中使用到矿产
产品进行来源追踪和责任矿产尽职调查,并与客户分享尽责调查信息,以确保供应链政策与指南要求保持一致,逐步提高供应链透明度和供应链治理能力。
</p>
<p>
供应链的责任矿产尽责管理是一个持续改进的过程,需要企业、政府和非政府组织的承诺和合作才能解决。华为公司支持通过行业合作来处理矿产供应链中的社会责任问题,我们将持续参与行业组织的活动,与客户和供应商一起寻求可持续的解决方案,推动矿产供应链的可持续发展。
</p>
<p style="text-align: right;">华为技术有限公司</p>
<Fragment set:html={extra.about_us.content} />
<p style="text-align: right;">{config.app_company}</p>
</div>
</div>
</div>
<link
rel="stylesheet"
href="/-/media/hcomponent-news-detail-content/1.0.1.20250530113357/component/corp/2020/js/lib/vendor/katex/katex.min.css?ver=202410101545"
/>
</div>
</div>
</main>
</div>
</Layout>
<style>
.main {
padding-top: 10rem;
h1 {
span {
font-weight: bold;
}
margin-top: 0;
text-align: center;
font-size: 2rem;
}
.container-custom {
margin-left: auto;
margin-right: auto;
padding-left: 15px;
padding-right: 15px
.main {
padding-top: 5rem;
h1 {
span {
font-weight: bold;
}
margin-top: 0;
text-align: center;
font-size: 2rem;
}
p {
color: #666;
font-size: 1em;
line-height: 1.95em;
margin: 0
.container-custom {
margin-left: auto;
margin-right: auto;
padding-left: 15px;
padding-right: 15px
}
}
p {
color: #666;
font-size: 1em;
line-height: 1.95em;
margin: 0
}
@media (max-width:767px) {
.container-custom>.container-custom {
@ -139,14 +106,6 @@ const breadcrumb = [
.share-box.list-unstyled:not(.hasLine){
margin-bottom: 0;
}
.main .hasLine li {
padding: 0 22px;
margin: 0;
background: #fff;
position: relative;
z-index: 2;
margin: 0 -2px;
}
.main .share-box li .wechat-qrcode {
top: 30px;
@ -177,108 +136,8 @@ const breadcrumb = [
margin: 20px auto 0 auto;
}
.news-detail-box {
margin-top: 5rem;
}
@media (min-width: 768px) {
.container {
width:100%
}
}
@media (min-width: 992px) {
body,html {
font-size:16px
}
.container-custom {
max-width: 1430px;
width: 85.652%;
}
.container {
max-width: 1799.136px;
width: 93.705%
}
}
@media (min-width: 1440px) {
body,html {
font-size:17px
}
}
@media (min-width: 1680px) {
body,html {
font-size:18px
}
}
@media (min-width: 1500px) {
.col-ls-4 {
width:33.33333333%
}
.col-ls-3 {
width: 25%
}
}
.news-detail-box .news-detail-content {
text-align: center;
padding: 0 8.5%;
}
.news-detail-box p {
margin-bottom: 20px;
}
.news-detail-box p {
text-align: left;
margin-bottom: 20px;
text-indent: 0em;
word-break: break-word;
word-wrap: break-word;
}
.news-detail-box .content-text {
text-align: left;
}
.news-detail-box .content-text p {
padding: 0;
}
.news-detail-box .news-detail-content {
text-align: center;
padding: 0 8.5%;
}
.news-detail-box .news-detail-content a {
color: #666;
-webkit-text-decoration: underline;
text-decoration: underline;
}
.news-detail-box .news-detail-content a:hover {
color: #000;
}
.news-detail-box .news-detail-content a.link-submit:hover {
color: #fff;
}
.news-detail-box .news-detail-content a.btn-rect {
-webkit-text-decoration: none;
text-decoration: none;
}
@media (min-width: 768px) {
.news-detail-box .news-detail-content>h2 {
padding: 0;
}
.news-detail-box {
margin-top: 5rem;
}
</style>

View File

@ -1,90 +1,205 @@
---
import Layout from "../../../layouts/Layout_2.astro";
import { getConfig } from "../../../../utils/config";
import { TP2_COLUMN_CONTACT_US, TP2_COLUMN_CONTACT_US_URL } from "../../../../utils/const";
import Dianhua from "../../../../public/template_2/contact-us/dianhua.svg";
import Youxiang from "../../../../public/template_2/contact-us/youxiang.svg";
import { Image } from "astro:assets";
import { getConfig, getExtra } from "../../../../utils/config";
import {
TP2_COLUMN_CONTACT_US,
TP2_COLUMN_CONTACT_US_URL,
TP2_COLUMN_INDEX,
TP2_COLUMN_INDEX_URL,
} from "../../../../utils/const";
import BaijiahaoLogo from '../../../../public/template_2/baijiahao.svg'
import Toutiaohao from '../../../../public/template_2/toutiaohao.svg'
import Douyin from '../../../../public/template_2/douyin.svg'
const config = getConfig(Astro);
const extra = getExtra(config.app_extra_tag)
const breadcrumb = [
{ title: '主页', url: '/' },
{ title: TP2_COLUMN_INDEX, url: TP2_COLUMN_INDEX_URL },
{ title: TP2_COLUMN_CONTACT_US, url: TP2_COLUMN_CONTACT_US_URL }
];
// 页面描述
const desc = extra.contact_us.telephone.map(item => item.number).join('; ');
---
<Layout title={TP2_COLUMN_CONTACT_US + ` - ${config.app_name}`} breadcrumb={breadcrumb}>
<div id="csr">
<!-- sec conta -->
<section class="sec_conta">
<div class="look_mainTit conta_title">如对本报告有任何建议和意见,请通过以下方式与华为<span class="nr">联系:</span></div>
<Layout
title={TP2_COLUMN_CONTACT_US + ` - ${config.app_name}`}
description={`${config.app_name}24小时客服电话 - ${desc}`}
keywords={config.app_keywords}
breadcrumb={breadcrumb}
>
<main>
<div class="contact-container">
<h1 style="font-size: 5rem;margin-bottom: 5rem;">{extra.contact_us.title}</h1>
<!-- <Fragment set:html={extra.contact_us.content}/> -->
<section class="list-box">
<h2 class="list-title">在线客服</h2>
<ul>
{
extra.contact_us.telephone.map(e => {
return <li class="list-item">
<a href={`tel:${e.number}`}>
<div class="item-content">
<Image height={50} width={50} src="/template_2/contact-us/hotline.png" alt="联系热线"/>
<div class="txt">
<h3 style="margin-left: 1rem;font-weight: bold;">{e.number}</h3>
<h4 style="margin-left: 1rem;">24小时全国热线</h4>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li>
})
}
</ul>
<div class="conta_lists">
<div class="conta_list">
<div class="conta_ti">
<Dianhua class="conta_svg" />
<span class="look_smalTit conta_span sec_both">电话</span>
</div>
<div class="look_mainTit text_color conta_tx">+86-(0)755-28780808</div>
<div class="look_mainTit text_color conta_tx">+86-(0)755-28780808</div>
<div class="look_mainTit text_color conta_tx">+86-(0)755-28780808</div>
</div>
<h2 class="list-title">联系邮箱</h2>
<ul>
{
extra.contact_us.email.map(e => {
return <li class="list-item">
<a href={`tel:${e.address}`}>
<div class="item-content">
<Image height={50} width={50} src="/template_2/contact-us/hotline.png" alt="联系邮箱"/>
<div class="txt">
<h3 style="margin-left: 1rem;font-weight: bold;">{e.address}</h3>
<h4 style="margin-left: 1rem;"></h4>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li>
})
}
</ul>
<div class="conta_list">
<div class="conta_ti">
<Youxiang class="conta_svg" />
<span class="look_smalTit conta_span sec_both">电子邮箱!!</span>
</div>
<div class="look_mainTit text_color conta_tx">
<a class="a-btn-link4 text_color" data-pagename="ConsumerCSD@Huawei.com" data-linkname="ConsumerCSD@Huawei.com" href="mailto:ConsumerCSD@Huawei.com">ConsumerCSD@Huawei.com
</a>
</div>
</div>
</div>
</section>
</div>
<h2 class="list-title">官方媒体平台</h2>
<ul>
{
extra.weibo_offical.address ?
<li class="list-item">
<a href={extra.weibo_offical.address} target="blank">
<div class="item-content">
<span class="icon-lazy font-ico-weibo" data-name="font-ico-weibo"></span>
<div class="txt">
<h3>{extra.weibo_offical.name}</h3>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li> : ''
}
{
extra.gongzhonghao_offical.address ?
<li class="list-item">
<a href={extra.gongzhonghao_offical.address} target="blank">
<div class="item-content">
<span class="icon-lazy font-ico-weixin" data-name="font-ico-weixin"></span>
<div class="txt">
<h3>{extra.gongzhonghao_offical.name}</h3>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li> : ''
}
{
extra.baijiahao_offical.address ?
<li class="list-item">
<a href={extra.baijiahao_offical.address} target="blank">
<div class="item-content">
<BaijiahaoLogo class="icon-lazy" />
<div class="txt">
<h3>{extra.baijiahao_offical.name}</h3>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li> : ''
}
{
extra.toutiaohao_offical.address ?
<li class="list-item">
<a href={extra.toutiaohao_offical.address} target="blank">
<div class="item-content">
<Toutiaohao class="icon-lazy"/>
<div class="txt">
<h3>{extra.toutiaohao_offical.name}</h3>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li> : ''
}
{
extra.douyin_offical.address ?
<li class="list-item">
<a href={extra.douyin_offical.address} target="blank">
<div class="item-content">
<Douyin class="icon-lazy"/>
<div class="txt">
<h3>{extra.douyin_offical.name}</h3>
</div>
</div>
<i class="fas fa-chevron-right"></i>
</a>
</li> : ''
}
</ul>
</section>
</div>
</main>
</Layout>
<style>
#csr {
.sec_conta {
margin-left: auto;
margin-right: auto;
width: 68.22917vw;
margin-top: 10rem;
}
.sec_conta .conta_ti {
width: 100%;
height: 3.64583vw;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
.sec_conta .conta_list {
width: 33.59375vw;
border-radius: 1.04167vw;
overflow: hidden;
background-color: #f5f5f7;
/* padding: 4.6875vw 0 1.82292vw; */
text-align: center;
}
.fa-chevron-right:before {
content: ">"
}
.sec_conta .conta_svg {
width: 3.39583vw;
}
h2 {
font-size: 2rem ;
margin-top: 4rem;
margin-bottom: 1rem;
}
.sec_conta .conta_lists {
margin-top: 3rem;
width: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
}
h3 {
margin-left: 1rem;
font-weight: bold;
}
h4 {
margin-left: 1rem;
color: #7f7f7f;
}
.icon-lazy {
width: 50px;
height: 50px;
}
.contact-container {
padding-top: 5rem;
}
.list-item {
border-top: 0.01rem solid #d8d8d8;
}
.item-content{
display: flex;
justify-content: center;
}
.txt {
display: flex;
justify-content: center;
align-items: center;
}
.list-box .list-item>a {
padding: 1.5rem;
display: -ms-flexbox;
display: flex;
-ms-flex-pack: justify;
justify-content: space-between;
-ms-flex-align: center;
align-items: center;
/* height: 1.08rem; */
}
</style>

View File

@ -4,26 +4,21 @@ import Layout from "../../../layouts/Layout_2.astro";
import ImageXiazai from '../../../../public/template_2/xiazai.svg';
import { Image } from 'astro:assets';
import { getConfig, getExtra } from "../../../../utils/config";
import { TP2_COLUMN_ABOUT_US, TP2_COLUMN_INDEX, TP2_COLUMN_INDEX_URL } from "../../../../utils/const";
const config = getConfig(Astro)
const extra = getExtra().index
const sc1Homepage = config?.extra?.sc1?.img_homepage || '/template_2/index/homepage.webp'
// swiper 数据
const swiper = extra.sc3.swiper;
console.log(extra)
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-chenai.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-daming.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-fancui.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-qiren.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-wenhua.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-yuanze.webp'
// const sc2BookCover = config?.extra?.index?.sc2?.book1 || '/template_2/index/book-cover-zero.webp'
const extra = getExtra(config.app_extra_tag)
const breadcrumb = [{
title: '主页',
url: '/'
title: TP2_COLUMN_INDEX,
url: TP2_COLUMN_INDEX_URL
}]
---
<Layout title={`${config.app_name}`} breadcrumb={breadcrumb} description={config.app_description} keywords={config.app_keywords}>
<Layout
title={`${config.app_name}`}
description={config.app_description}
keywords={config.app_keywords}
breadcrumb={breadcrumb}
>
<div class="v4 header-placeholder nav-v2" id="header-placeholder"></div>
<main class="content-v4">
<div>
@ -42,14 +37,14 @@ const breadcrumb = [{
<div class="product-tabs__heading">
<div class="product-tabs__title body-medium">
<a title={config.app_name} href="/" class="product-link product-link__active" data-title="华为阅读">{config.app_name}</a>
<a class="btn erweimaBTN a-btn-install-ga" href="https://appgallery.huawei.com/#/app/C100259315" target="_blank">点击下载
<a class="btn erweimaBTN a-btn-install-ga" href={extra.app_download} target="_blank" rel="nofollow">点击下载
<ImageXiazai style="margin-left:10px;width: 11px;height: 11px;" alt="下载按钮" />
</a>
</div>
<div class="product-tabs__links-container" style="margin-right: -20px;">
<ul class="product-tabs__links">
<li class="product-tabs__links-item">
<a class="btn erweimaBTN a-btn-install-ga" href="https://appgallery.huawei.com/#/app/C100259315" style="position: relative;">
<a class="btn erweimaBTN a-btn-install-ga" href={extra.app_download} style="position: relative;" rel="nofollow">
点击下载<ImageXiazai style="margin-left:10px;width: 11px;height: 11px;" alt="下载按钮" />
</a>
</li>
@ -60,33 +55,34 @@ const breadcrumb = [{
</div>
</div>
<div class="app-read-container">
<div class="app-read-sc1-kv">
<div class="app-read-sc1-kv sc1">
<div class="sc1-mkt-text">
<h1>{config.app_name}</h1>
<h1 class="mkt-title">遇见更好的自己</h1>
<div class="mkt-info">
<Image src={config.app_logo} alt="logo" width="25" height="25" loading="eager"/>
<h1 class="app-name">{config.app_name}</h1>
</div>
<h1 class="mkt-title">{extra.index.sc1.mkt_title}</h1>
<p class="mkt-text">
百万优质图书和精品有声内容;精巧微动效、精美排版,媲美精装纸质书;精品音色、定制人声,享受沉浸悦听;超
50
种语言一键翻译;跨设备流转,无缝续读;丰富的会员权益,各种福利活动持续<span class="text-nowrap">上新。</span>
<Fragment set:html={extra.index.sc1.mkt_text}/>
</p>
</div>
<div class="sc1-mkt-img">
<Image style="height:100%;width:100%" src={sc1Homepage} alt="app首页" width={100} height={100} loading="eager"/>
<Image style="height:100%;width:100%" src={extra.index.sc1.img_box} alt="app首页" width={100} height={100} loading="eager"/>
</div>
</div>
<div class="app-read-sc2">
<div class="text-box">
<div class="read-title">
{extra.sc2.reaad_title}
{extra.index.sc2.reaad_title}
</div>
<p class="read-text">
{extra.sc2.reaad_text}
{extra.index.sc2.reaad_text}
</p>
</div>
<div class="sc2-swiper-box">
<div class="swiper-wrapper sc2-swiper-container">
{
extra.sc3.swiper.map(item => {
extra.index.sc3.swiper.map(item => {
return <div class="sc2-swiper-silde swiper-slide">
<Image class="h-auto" src={item.url} height={100} width={100} alt={`${item.name}封面`}/>
<span class="book-name">{item.name}</span>
@ -99,17 +95,17 @@ const breadcrumb = [{
<div class="app-read-sc5" id="sc5Scene">
<div class="sc5-animation-box">
<div class="sc5-book-container img-box" id="sc5ZdpScene">
<Image class="h-full" src={extra.sc5.img_box} alt="背景" width={100} height={100} />
<Image class="h-full" src={extra.index.sc5.img_box} alt="背景" width={100} height={100} />
</div>
<div class="text-box">
<div class="read-subtitle">
{extra.sc5.read_subtitle}
{extra.index.sc5.read_subtitle}
</div>
<div class="read-title">
{extra.sc5.read_title}
{extra.index.sc5.read_title}
</div>
<p class="read-text">
<Fragment set:html={extra.sc5.read_text}></Fragment>
<Fragment set:html={extra.index.sc5.read_text}></Fragment>
</p>
</div>
</div>
@ -118,36 +114,36 @@ const breadcrumb = [{
<div class="sc6-animation-container">
<div class="text-box">
<div class="read-title">
{extra.sc6.read_title}
{extra.index.sc6.read_title}
</div>
<p class="read-text">
<Fragment set:html={extra.sc6.read_text} />
<Fragment set:html={extra.index.sc6.read_text} />
</p>
</div>
<div class="sc6-animation-box img-box" id="sc6ZdpScene">
<Image src={extra.sc6.img_box} class="h-full" alt="" width={100} height={100}/>
<Image src={extra.index.sc6.img_box} class="h-full" alt="" width={100} height={100}/>
</div>
</div>
</div>
<div class="app-read-sc7">
<div class="text-box">
<div class="read-title">
{extra.sc7.read_title}
{extra.index.sc7.read_title}
</div>
<p class="read-text">
<Fragment set:html={extra.sc7.read_text}>
<Fragment set:html={extra.index.sc7.read_text}>
</p>
</div>
<div class="sc7-img-box">
<Image class="h-auto" src={extra.sc7.img_box} alt="背景图" width={100} height={100} />
<Image class="h-auto" src={extra.index.sc7.img_box} alt="背景图" width={100} height={100} />
</div>
</div>
<div class="app-read-sc8">
<Image class="h-full" src={extra.sc8.img_box} alt="背景" height={100} width={100}/>
<Image class="h-full" src={extra.index.sc8.img_box} alt="背景" height={100} width={100}/>
<div class="sc8-content-wrapper">
<div class="text-box">
<div class="read-title">
{extra.sc8.read_title}
{extra.index.sc8.read_title}
</div>
</div>
<div class="icon-container">
@ -155,28 +151,28 @@ const breadcrumb = [{
<div class="icon-warpper2">
<div class="icon-top">
<div class="icon-item">
<Image class="h-full" src={extra.sc8.icon1} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.sc8.icon1_text}</span>
<Image class="h-full" src={extra.index.sc8.icon1} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.index.sc8.icon1_text}</span>
</div>
<div class="icon-item">
<Image class="h-full" src={extra.sc8.icon2} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.sc8.icon2_text}</span>
<Image class="h-full" src={extra.index.sc8.icon2} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.index.sc8.icon2_text}</span>
</div>
</div>
<div class="icon-center">
<div class="icon-item icon-item2">
<Image class="h-full" src={extra.sc8.icon3} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.sc8.icon3_text}</span>
<Image class="h-full" src={extra.index.sc8.icon3} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.index.sc8.icon3_text}</span>
</div>
</div>
<div class="icon-bottom">
<div class="icon-item">
<Image class="h-full" src={extra.sc8.icon4} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.sc8.icon4_text}</span>
<Image class="h-full" src={extra.index.sc8.icon4} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.index.sc8.icon4_text}</span>
</div>
<div class="icon-item">
<Image class="h-full" src={extra.sc8.icon5} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.sc8.icon5_text}</span>
<Image class="h-full" src={extra.index.sc8.icon5} alt="icon" height={100} width={100} />
<span class="icon-desc">{extra.index.sc8.icon5_text}</span>
</div>
</div>
</div>
@ -192,6 +188,17 @@ const breadcrumb = [{
</Layout>
<style>
.mkt-info {
display: flex;
justify-content: flex-start;
align-items: center;
img {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
}
.sc2-swiper-box {
img {
height: 100%;
@ -263,6 +270,17 @@ const breadcrumb = [{
.v4.n06-news-second-navigation .product-tabs__title .btn {
display: none !important;
}
.mkt-info {
img {
width: 30px;
height: 30px;
}
}
.sc1 .app-name {
font-size: 2rem;
}
}
@media (max-width: 1100px) {

View File

@ -2,26 +2,31 @@
import Layout from '../../../layouts/Layout_2.astro';
import { newsIndex } from '../../../../utils/rpc';
import { getConfig } from '../../../../utils/config';
import { TP2_COLUMN_NEWS, TP2_COLUMN_NEWS_URL } from '../../../../utils/const';
import { TP2_COLUMN_NEWS, TP2_COLUMN_NEWS_URL, TP2_COLUMN_INDEX, TP2_COLUMN_INDEX_URL } from '../../../../utils/const';
const config = getConfig(Astro)
const {code, data} = await newsIndex();
const {code, data} = await newsIndex(config.id);
const breadcrumb = [
{
title: '主页',
url: '/'
title: TP2_COLUMN_INDEX,
url: TP2_COLUMN_INDEX_URL
}, {
title: TP2_COLUMN_NEWS,
url: TP2_COLUMN_NEWS_URL
}
]
---
<Layout title={TP2_COLUMN_NEWS + `- ${config.app_name}`} breadcrumb={breadcrumb}>
<Layout
title={TP2_COLUMN_NEWS + `- ${config.app_name}`}
description={`新闻专栏 - ${config.app_name}`}
keywords={config.app_keywords}
breadcrumb={breadcrumb}
>
<main class="v4 main page-news">
<div class="news-list-component">
<div class="v4 h05-hero-text-only no-margin centered" data-component="h05-hero-text-only" data-video-width="0" data-video-height="0">
<div class="container">
<div class="wrap">
<h1 class="columns-name">新闻</h1>
<h1 class="columns-name">新闻专栏</h1>
</div>
</div>
</div>
@ -51,6 +56,7 @@ const breadcrumb = [
</main>
</Layout>
<style>
.page-news {
background-color: #fff !important;
padding-top: 5rem;
@ -63,6 +69,14 @@ const breadcrumb = [
padding: 3rem;
}
@media only screen and (max-width: 767.98px) {
.columns-name {
font-size: 2rem;
padding: 1rem;
}
}
.result-product__media {
-webkit-box-flex: 0;
-webkit-flex: 0 0 260px;

View File

@ -1,14 +1,24 @@
---
import Layout from "../../../layouts/Layout_2.astro";
import { getConfig } from "../../../../utils/config";
import { TP2_COLUMN_PROTECT, TP2_COLUMN_PROTECT_URL } from "../../../../utils/const";
import {
TP2_COLUMN_PROTECT,
TP2_COLUMN_PROTECT_URL,
TP2_COLUMN_INDEX,
TP2_COLUMN_INDEX_URL,
} from "../../../../utils/const";
const config = getConfig(Astro);
const breadcrumb = [
{ title: '主页', url: '/' },
{ title: TP2_COLUMN_INDEX, url: TP2_COLUMN_INDEX_URL },
{ title: TP2_COLUMN_PROTECT, url: TP2_COLUMN_PROTECT_URL }
];
---
<Layout title={TP2_COLUMN_PROTECT + ` - ${config.app_name}`} breadcrumb={breadcrumb}>
<Layout
title={TP2_COLUMN_PROTECT + ` - ${config.app_name}`}
description={`未成年人及老年人保护 - ${config.app_name}`}
keywords={config.app_keywords}
breadcrumb={breadcrumb}
>
<main>
<article id="protect" class="protect-article">
<header>

View File

@ -0,0 +1,246 @@
---
import Layout from "../../../layouts/Layout_2.astro";
import { getConfig, getExtra } from "../../../../utils/config";
import {
TP2_COLUMN_ABOUT_US,
TP2_COLUMN_ABOUT_US_URL,
TP2_COLUMN_INDEX,
TP2_COLUMN_INDEX_URL,
} from "../../../../utils/const";
const config = getConfig(Astro);
const extra = getExtra('');
const breadcrumb = [
{ title: TP2_COLUMN_INDEX, url: TP2_COLUMN_INDEX_URL },
{ title: TP2_COLUMN_ABOUT_US, url: TP2_COLUMN_ABOUT_US_URL },
];
---
<Layout
title={TP2_COLUMN_ABOUT_US + ` - ${config.app_name}`}
description={`退款条例 - ${config.app_name}`}
keywords={config.app_keywords}
breadcrumb={breadcrumb}
>
<div id="content" class="main" data-site="中国">
<div>
<!-- 活动与新闻-->
<div class="hcomponent-page-info">
<div class="news-detail-title">
<div class="container-custom fix-p-color">
<h1><span>{config.app_name}{extra.refund.title}</span></h1>
</div>
</div>
</div>
</div>
<div class="container-custom hcomponent-share-bar">
<div class="container-custom">
<ul class="share-box list-unstyled hasLine">
<li class="line"></li>
</ul>
</div>
</div>
<div >
<div class="hcomponent-news-detail-content">
<div class="news-detail-box container-custom clearfix">
<div class="news-detail-content">
<Fragment set:html={extra.refund.content} />
<p style="text-align: right;">{config.app_company}</p>
</div>
</div>
</div>
</div>
</div>
</Layout>
<style>
.main {
padding-top: 10rem;
h1 {
span {
font-weight: bold;
}
margin-top: 0;
text-align: center;
font-size: 2rem;
}
.container-custom {
margin-left: auto;
margin-right: auto;
padding-left: 15px;
padding-right: 15px
}
}
p {
color: #666;
font-size: 1em;
line-height: 1.95em;
margin: 0
}
@media (max-width:767px) {
.container-custom>.container-custom {
padding: 0;
}
}
.mt20{
margin-top: 20px;
}
.main .bottom-box .share-box {
margin: 20px auto 0 auto;
}
.main .share-box {
padding-left: 0;
padding-right: 0;
text-align: center;
margin-bottom: 30px;
width: 100%;
position: relative;
z-index: 99;
}
.share-box.list-unstyled:not(.hasLine){
margin-bottom: 0;
}
.main .hasLine li {
padding: 0 22px;
margin: 0;
background: #fff;
position: relative;
z-index: 2;
margin: 0 -2px;
}
.main .share-box li .wechat-qrcode {
top: 30px;
height: 240px;
}
.main .share-box li .wechat-qrcode p {
text-align: center;
margin: 0;
padding: 0;
}
.main .hasLine .line {
position: absolute;
width: 100%;
height: 1px;
background: #dddddd;
top: 0;
left: 0;
top: 50%;
margin-top: -1px;
}
.main .share-box.s-bottom {
border-bottom: 1px solid #ddd;
padding-top: 40px;
padding-bottom: 40px;
margin: 20px auto 0 auto;
}
.news-detail-box {
margin-top: 5rem;
}
@media (min-width: 768px) {
.container {
width:100%
}
}
@media (min-width: 992px) {
body,html {
font-size:16px
}
.container-custom {
max-width: 1430px;
width: 85.652%;
}
.container {
max-width: 1799.136px;
width: 93.705%
}
}
@media (min-width: 1440px) {
body,html {
font-size:17px
}
}
@media (min-width: 1680px) {
body,html {
font-size:18px
}
}
@media (min-width: 1500px) {
.col-ls-4 {
width:33.33333333%
}
.col-ls-3 {
width: 25%
}
}
.news-detail-box .news-detail-content {
text-align: center;
padding: 0 8.5%;
}
.news-detail-box p {
margin-bottom: 20px;
}
.news-detail-box p {
text-align: left;
margin-bottom: 20px;
text-indent: 0em;
word-break: break-word;
word-wrap: break-word;
}
.news-detail-box .content-text {
text-align: left;
}
.news-detail-box .content-text p {
padding: 0;
}
.news-detail-box .news-detail-content {
text-align: center;
padding: 0 8.5%;
}
.news-detail-box .news-detail-content a {
color: #666;
-webkit-text-decoration: underline;
text-decoration: underline;
}
.news-detail-box .news-detail-content a:hover {
color: #000;
}
.news-detail-box .news-detail-content a.link-submit:hover {
color: #fff;
}
.news-detail-box .news-detail-content a.btn-rect {
-webkit-text-decoration: none;
text-decoration: none;
}
@media (min-width: 768px) {
.news-detail-box .news-detail-content>h2 {
padding: 0;
}
}
</style>

View File

@ -1,48 +0,0 @@
.v4.h06-in-page-banner .banner-item{position:relative;margin-bottom:80px}
.v4.h06-in-page-banner .banner-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:736px;background-color:#ddd;padding:3vw 5.3vw 80px;margin-bottom:16px}
.v4.h06-in-page-banner .banner-block__in{width:58%;display:flex;display:-webkit-flex;flex-direction:column;justify-content:center}
.v4.h06-in-page-banner .banner-block__heading{letter-spacing:1px;line-height:1.09;margin-bottom:20px;font-size:64px;max-height:146px;overflow:hidden}
.v4.h06-in-page-banner .banner-block__text{margin-bottom:40px;font-weight:700;font-size:18px;max-height:50px;overflow:hidden}
@media only screen and (min-width:1920px){.v4.h06-in-page-banner .banner-block__text{font-size:24px;line-height:1.2;max-height:58px}
}
@media only screen and (min-width:1200px) and (max-width:1600px){.v4.h06-in-page-banner .banner-block__text{margin-bottom:20px}
}
.v4.h06-in-page-banner .banner-block--centered{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}
.v4.h06-in-page-banner .banner-block--centered .banner-block__in{text-align:center}
.v4.h06-in-page-banner .banner-block--right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}
.v4.h06-in-page-banner .banner-block--dark-theme{color:#fff}
.v4.h06-in-page-banner .banner-block--dark-theme .banner-block__heading,.v4.h06-in-page-banner .banner-block--dark-theme .banner-block__text{color:#fff}
.v4.h06-in-page-banner .banner-block--dark-theme .banner-block__btn{background-color:#fff;color:#000;border-color:#fff}
.v4.h06-in-page-banner .banner-item__text{font-size:12px;font-weight:400;line-height:1.6;color:#000;max-width:880px;display:none}
.v4.h06-in-page-banner .banner-block--image{background-position:center center;background-repeat:no-repeat;background-size:cover}
@media only screen and (max-width:1199.98px){.huawei-v4 .v4.h06-in-page-banner:last-of-type{margin-bottom:0}
.huawei-v4 .v4.h06-in-page-banner:last-of-type .banner-item{margin-bottom:0}
.v4.h06-in-page-banner{margin-bottom:40px}
.v4.h06-in-page-banner .banner-block--right{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}
.v4.h06-in-page-banner .container{padding:0}
.v4.h06-in-page-banner .banner-item__text{padding:0 20px}
.v4.h06-in-page-banner .banner-item{margin-bottom:64px}
.v4.h06-in-page-banner .banner-block{padding:40px 20px;height:640px}
.v4.h06-in-page-banner .banner-block__in{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}
.v4.h06-in-page-banner .banner-block__heading{font-size:48px;margin-bottom:20px;max-height:110px}
.v4.h06-in-page-banner .banner-block__text{margin-bottom:28px}
.v4.h06-in-page-banner .banner-block__btns{margin-bottom:10px}
.v4.h06-in-page-banner .banner-block__in{justify-content:flex-start;max-width:860px;width:auto}
}
@media only screen and (width:1600px){.v4.h06-in-page-banner .banner-block{height:690px}
}
@media only screen and (min-width:1200px) and (max-width:1599.98px){.v4.h06-in-page-banner .banner-block__heading{font-size:48px;max-height:110px}
.v4.h06-in-page-banner .banner-block{height:45vw}
}
@media only screen and (min-width:922px) and (max-width:1199.98px){.v4.h06-in-page-banner .banner-block{height:840px}
}
@media only screen and (min-width:768px) and (max-width:921px){.v4.h06-in-page-banner .banner-block{height:740px}
.v4.h06-in-page-banner .banner-block__heading{font-size:30px;max-height:66px}
.v4.h06-in-page-banner .banner-block__text{font-size:16px;max-height:50px}
}
@media only screen and (max-width:767px){.v4.h06-in-page-banner .banner-block{height:640px}
}
@media only screen and (max-width:767.98px){.v4.h06-in-page-banner .banner-block__heading{font-size:30px;max-height:66px;margin-bottom:10px}
.v4.h06-in-page-banner .banner-block__text{font-size:14px;max-height:72px;margin-bottom:12px}
.v4.h06-in-page-banner .banner-block__in{max-width:100%}
}

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,12 @@ main {
/* background: var(--background-light); */
}
@media only screen and (max-width: 767.98px) {
main {
padding: 1rem;
}
}
.h-full {
height: 100%;
}
@ -125,9 +131,9 @@ main {
margin-top: 4.302083333vw;
}
.app-read-sc1-kv .sc1-mkt-text img {
/* .app-read-sc1-kv .sc1-mkt-text img {
width: 10.625vw;
}
} */
.app-read-sc1-kv .mkt-title {
width: 34.5vw;
@ -476,6 +482,17 @@ main {
margin-top: 3vw;
}
.app-read-sc1-kv .mkt-info {
img {
width: 20px;
height: 20px;
}
}
.app-name {
font-size: 1.3rem;
}
.app-read-sc1-kv .mkt-text {
width: 82.333333vw;
font-size: 3.3333333vw;

View File

@ -1,4 +1,5 @@
import type { IWebsiteConfig } from "./rpc";
import {EXTRA_DEFAULT, EXTRA_HONGTIXIANYUE, EXTRA_MINGWUZHITANG, EXTRA_ZHISHIHUISHENG} from './extra.ts'
export function getConfig(Astro: any):IWebsiteConfig
{
@ -6,77 +7,16 @@ export function getConfig(Astro: any):IWebsiteConfig
}
// 取默认的配置
export function getExtra()
export function getExtra(extraTag: string = '')
{
return {
index: {
sc1: {
homepage: ''
},
sc2: {
reaad_title: '全球 220 万 + 册优质图书和精品有声内容',
reaad_text: '覆盖经典出版物、爆款原创网文、热门有声书、独家大咖精品课等全品类阅读内容,满足用户多元化阅读需求,持续、快速更新海量内容库,定期推出不同的免费内容',
},
sc3: {
// swiper
swiper: [
{
url: '/template_2/index/book-cover-chenai.webp',
name: '尘埃落定',
},{
url: '/template_2/index/book-cover-chali.webp',
name: '穷查理宝典'
},{
url: '/template_2/index/book-cover-daming.webp',
name: '大明王朝',
},{
url: '/template_2/index/book-cover-fancui.webp',
name: '反脆弱',
},{
url: '/template_2/index/book-cover-qiren.webp',
name: '俗世奇人',
},{
url: '/template_2/index/book-cover-wenhua.webp',
name: '文化苦旅',
},{
url: '/template_2/index/book-cover-yuanze.webp',
name: '原则',
},{
url: '/template_2/index/book-cover-zero.webp',
name: '从0到1',
}
]
},
sc5: {
img_box: '/template_2/index/paper-translation.webp',
read_subtitle: '墨水平板 沉浸专注 跃然纸上',
read_title: '超 50 种语言一键翻译,原文 + 译文对照阅读',
read_text: '支持简繁字转换及超 50 种外文语言<br />互译,为用户打破阅读屏障',
},
sc6: {
read_title: '纸感阅读健康护眼,落笔生花记录灵感',
read_text: '还原真实自然的纸质书籍阅读体验,<br class="show-pc" />自适应环境调节背光亮度;边看边记,<br class="show-pc" />随时记录阅读灵感<br class="show-mob" />和精彩片段,<br class="show-pc" />笔记分类,便捷<span class="text-nowrap">高效</span>',
img_box: '/template_2/index/paper-notation-eyecare.webp'
},
sc7: {
read_title: '跨设备自由流转,阅读进度无缝接续',
read_text: '手机、平板、穿戴等设备阅、听无缝链接,让体验更畅快',
img_box: '/template_2/index/bookshelf-pc.webp'
},
sc8: {
read_title: '海量书籍、专享折扣、各种福利活动持续上新,让用户畅读好书',
img_box: '/template_2/index/opening-pc.webp',
icon1: '/template_2/index/opening-id-icon.svg',
icon1_text: 'VIP 身份标识',
icon2: '/template_2/index/opening-fiction-icon.svg',
icon2_text: 'VIP 网络小说',
icon3: '/template_2/index/opening-welfare-icon.svg',
icon3_text: 'VIP 专属福利',
icon4: '/template_2/index/opening-book1-icon.svg',
icon4_text: 'VIP 出版书籍',
icon5: '/template_2/index/opening-book2-icon.svg',
icon5_text: 'VIP 有声书籍',
}
}
console.log(extraTag)
if (extraTag == 'HONGTIXIANYUE') {
return EXTRA_HONGTIXIANYUE;
} else if (extraTag == 'ZHISHIHUISHENG') {
return EXTRA_ZHISHIHUISHENG;
} else if (extraTag == 'ZHISHIHUISHENG') {
return EXTRA_MINGWUZHITANG;
}
return EXTRA_DEFAULT;
}

View File

@ -1,5 +1,9 @@
// ----- 栏目 -----
export const TP2_COLUMN_INDEX = '首页'
export const TP2_COLUMN_INDEX_URL = '/'
export const TP2_COLUMN_NEWS = '新闻专栏'
export const TP2_COLUMN_NEWS_URL = '/news'
@ -11,3 +15,6 @@ export const TP2_COLUMN_CONTACT_US_URL = '/contact-us'
export const TP2_COLUMN_PROTECT = '未成年人及老年人保护'
export const TP2_COLUMN_PROTECT_URL = '/protect'
export const TP2_COLUMN_REFUND = '退款规则'
export const TP2_COLUMN_REFUND_URL = '/refund'

486
utils/extra.ts Normal file

File diff suppressed because one or more lines are too long

View File

@ -33,7 +33,7 @@ export class JsonRpcClient {
params,
id: Date.now(),
}
console.log(req)
const message = JSON.stringify(req) + '\n'

View File

@ -31,9 +31,12 @@ export interface InewsIndex {
created_at: string
updated_at: string
}
export async function newsIndex():Promise<result<InewsIndex[]>>{
export async function newsIndex(websiteId:number = 0):Promise<result<InewsIndex[]>>{
console.log(websiteId)
const client = getRpcClient()
const result = await client.call('news/index', {})
const result = await client.call('news/index', {
id:websiteId
})
return result
}
@ -72,6 +75,8 @@ export async function newsDetail(id:string):Promise<result<InewsDetail>>{
// 网站配置
export interface IWebsiteConfig {
id: number
app_extra_tag: string
app_name: string
app_description: string
app_keywords: string
@ -80,7 +85,8 @@ export interface IWebsiteConfig {
app_favicon: string
app_copyright: string
app_icp: string
app_biling: string
app_filing: string
app_filing_url: string
}
export async function websiteConfig(host:string):Promise<result<IWebsiteConfig>>{
const client = getRpcClient()