1 Commits

Author SHA1 Message Date
a3da3c3ae4 refactor: 七牛云上传 2025-07-25 17:35:43 +08:00
134 changed files with 637 additions and 5427 deletions

View File

@@ -26,13 +26,6 @@ TTL=3600
REFRESH_TTL=20160
SECRET=b43e6276644ed60e65c50d1b324ba10b
# 七牛云存储配置
[QINIU_CLOUD]
BUCKET = orico-official-website
BASE_URL = //ow.static.f2b211.com
ACCESS_KEY = dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms
SECRET_KEY = KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q
# 后台不需要登录的接口
[ADMIN_AUTH]
WHITE_LIST[] = v1/user/login

View File

@@ -1,26 +0,0 @@
name: Gitea Actions Official-website
run-name: Deploy to ${{ inputs.deploy_target }} by @${{ gitea.actor }}
on:
push:
branches:
- dev
jobs:
deploy-dev:
runs-on: ubuntu-latest
steps:
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts
- name: Deploy application
run: |
ssh ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'EOF'
set -e
cd /www/wwwroot/dev.ow.f2b211.com
# 拉取最新代码
git pull --rebase
EOF

9
.gitignore vendored
View File

@@ -7,18 +7,9 @@ Thumbs.db
.env.dev
.env.local
.env.prod
.htaccess
.user.ini
404.html
index.html
public/dist*
public/opendoc
public/logo.png
public/.well-known
/.idea
/.vscode
/.zed
/vendor
/.settings
/.buildpath

View File

@@ -1,24 +0,0 @@
// Folder-specific settings
//
// For a full list of overridable settings, and general information on folder-specific settings,
// see the documentation: https://zed.dev/docs/configuring-zed#settings-files
{
"languages": {
"PHP": {
"language_servers": ["intelephense","!phpactor"]
}
},
"lsp": {
"intelephense": {
"initialization_options": {
"stubs": [
"wordpress",
"laravel",
"symfony",
"codeigniter",
"thinkphp"
]
}
}
}
}

208
LICENSE
View File

@@ -1,208 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION,
AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution
as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct
or indirect, to cause the direction or management of such entity, whether
by contract or otherwise, or (ii) ownership of fifty percent (50%) or more
of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions
granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation
or translation of a Source form, including but not limited to compiled object
code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form,
made available under the License, as indicated by a copyright notice that
is included in or attached to the work (an example is provided in the Appendix
below).
"Derivative Works" shall mean any work, whether in Source or Object form,
that is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative
Works shall not include works that remain separable from, or merely link (or
bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative
Works thereof, that is intentionally submitted to Licensor for inclusion in
the Work by the copyright owner or by an individual or Legal Entity authorized
to submit on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication
sent to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor
for the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently incorporated
within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this
License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
Derivative Works of, publicly display, publicly perform, sublicense, and distribute
the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License,
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and otherwise
transfer the Work, where such license applies only to those patent claims
licensable by such Contributor that are necessarily infringed by their Contribution(s)
alone or by combination of their Contribution(s) with the Work to which such
Contribution(s) was submitted. If You institute patent litigation against
any entity (including a cross-claim or counterclaim in a lawsuit) alleging
that the Work or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses granted to You
under this License for that Work shall terminate as of the date such litigation
is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or
Derivative Works thereof in any medium, with or without modifications, and
in Source or Object form, provided that You meet the following conditions:
(a) You must give any other recipients of the Work or Derivative Works a copy
of this License; and
(b) You must cause any modified files to carry prominent notices stating that
You changed the files; and
(c) You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source
form of the Work, excluding those notices that do not pertain to any part
of the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its distribution,
then any Derivative Works that You distribute must include a readable copy
of the attribution notices contained within such NOTICE file, excluding those
notices that do not pertain to any part of the Derivative Works, in at least
one of the following places: within a NOTICE text file distributed as part
of the Derivative Works; within the Source form or documentation, if provided
along with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works
that You distribute, alongside or as an addendum to the NOTICE text from the
Work, provided that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction,
or distribution of Your modifications, or for any such Derivative Works as
a whole, provided Your use, reproduction, and distribution of the Work otherwise
complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any
Contribution intentionally submitted for inclusion in the Work by You to the
Licensor shall be under the terms and conditions of this License, without
any additional terms or conditions. Notwithstanding the above, nothing herein
shall supersede or modify the terms of any separate license agreement you
may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names,
trademarks, service marks, or product names of the Licensor, except as required
for reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to
in writing, Licensor provides the Work (and each Contributor provides its
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied, including, without limitation, any warranties
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness
of using or redistributing the Work and assume any risks associated with Your
exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether
in tort (including negligence), contract, or otherwise, unless required by
applicable law (such as deliberate and grossly negligent acts) or agreed to
in writing, shall any Contributor be liable to You for damages, including
any direct, indirect, special, incidental, or consequential damages of any
character arising as a result of this License or out of the use or inability
to use the Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all other commercial
damages or losses), even if such Contributor has been advised of the possibility
of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work
or Derivative Works thereof, You may choose to offer, and charge a fee for,
acceptance of support, warranty, indemnity, or other liability obligations
and/or rights consistent with this License. However, in accepting such obligations,
You may act only on Your own behalf and on Your sole responsibility, not on
behalf of any other Contributor, and only if You agree to indemnify, defend,
and hold each Contributor harmless for any liability incurred by, or claims
asserted against, such Contributor by reason of your accepting any such warranty
or additional liability. END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own identifying
information. (Don't include the brackets!) The text should be enclosed in
the appropriate comment syntax for the file format. We also recommend that
a file or class name and description of purpose be included on the same "printed
page" as the copyright notice for easier identification within third-party
archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -99,7 +99,6 @@ class ReceiveProductSync
}
$category = ProductCategoryModel::language($lang_id)->tcoId($tco_category['id'])->find();
if (!empty($category)) {
$tco_parent = ProductTcoCategoryModel::language($lang_id)->tcoId($tco_category['tco_pid'])->find();
if (!empty($tco_parent)) {
$parent = ProductCategoryModel::language($lang_id)->tcoId($tco_parent['id'])->find();
@@ -110,11 +109,10 @@ class ReceiveProductSync
$category['path'] = $parent['path'] . $parent['pid'];
$category['level'] = $parent['level'] + 1;
}
if (!$category->save()) {
if (!$category->save($category)) {
throw new \Exception('产品分类更新失败');
}
}
}
Db::commit();
} catch (\Throwable $th) {

View File

@@ -228,7 +228,7 @@ class Article
private function getExportArticleData()
{
$server = request()->server();
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
$param = request()->param(['title', 'category_id', 'release_time']);
$data = ArticleModel::field([
'*',
@@ -253,7 +253,7 @@ class Article
])
->bindAttr('category', ['category_name' => 'name'])
->each(function ($item) use($image_host) {
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
$item->image = !empty($item->image) ? $image_host . $item->image : '';
return $item;
});

View File

@@ -101,8 +101,6 @@ class BannerItem
'rel_prod_cate_id',
'title',
'title_txt_color',
'short_title',
'short_title_txt_color',
'desc',
'desc_txt_color',
'type',
@@ -158,8 +156,6 @@ class BannerItem
'rel_prod_cate_id',
'title',
'title_txt_color',
'short_title',
'short_title_txt_color',
'desc',
'desc_txt_color',
'type',
@@ -244,7 +240,6 @@ class BannerItem
'banner_name' => '分类名称',
'title' => '横幅名称',
'title_txt_color' => '横幅名称字体颜色',
'short_title' => '横幅简称',
'desc' => '描述',
'desc_txt_color' => '描述字体颜色',
'type' => '前台显示类型',
@@ -267,16 +262,17 @@ class BannerItem
// 获取导出数据
private function getBannerExportData()
{
$server = request()->server();
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
$param = request()->param(['title', 'banner_id', 'created_at']);
$param = request()->param([
'title',
'banner_id',
'created_at'
]);
return SysBannerItemModel::alias('item')
->field([
'item.id',
'banner.name' => 'banner_name',
'item.title',
'item.title_txt_color',
'item.short_title',
'item.desc',
'item.desc_txt_color',
'item.type',
@@ -315,13 +311,7 @@ class BannerItem
}
})
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
->select()
->each(function($item) use($image_host) {
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
$item->extra_image = !empty($item->extra_image) ? url_join($image_host, $item->extra_image) : '';
$item->video = !empty($item->video) ? url_join($image_host, $item->video) : '';
return $item;
});
->select();
}
// 删除

View File

@@ -346,7 +346,7 @@ class Product
private function getExportProductData()
{
$server = request()->server();
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
$param = request()->param([
'name',
'spu',
@@ -360,10 +360,10 @@ class Product
'spu',
'name',
'short_name',
'cover_image',
'CONCAT("' . $image_host . '", `cover_image`)' => 'cover_image',
'desc',
'video_img',
'video_url',
'CONCAT("' . $image_host . '", `video_img`)' => 'video_img',
'CONCAT("' . $image_host . '", `video_url`)' => 'video_url',
'CASE WHEN is_new = 1 THEN "是" ELSE "否" END' => 'is_new',
'CASE WHEN is_hot = 1 THEN "是" ELSE "否" END' => 'is_hot',
'CASE WHEN is_sale = 1 THEN "是" ELSE "否" END' => 'is_sale',
@@ -390,18 +390,7 @@ class Product
->order(['id' => 'asc'])
->select()
->bindAttr('category', ['category_name' => 'name'])
->hidden(['category_id', 'category'])
->each(function($item) use($image_host) {
if (!empty($item["cover_image"])) {
$item["cover_image"] = url_join($image_host, $item["cover_image"]);
}
if (!empty($item["video_img"])) {
$item["video_img"] = url_join($image_host, $item["video_img"]);
}
if (!empty($item["video_url"])) {
$item["video_url"] = url_join($image_host, $item["video_url"]);
}
});
->hidden(['category_id', 'category']);
if (!$products->isEmpty()) {
// 产品参数

View File

@@ -16,9 +16,8 @@ class ProductTcoCategory
$param = request()->param(['name']);
$categorys = ProductTcoCategoryModel::field([
'id',
'tco_id',
'tco_pid',
'tco_id' => 'id',
'tco_pid' => 'pid',
'name',
])
->withSearch(['name'], [
@@ -26,10 +25,10 @@ class ProductTcoCategory
])
->language(request()->lang_id)
->enabled()
->order(['tco_id' => 'asc'])
->order(['id' => 'asc'])
->select()
->toArray();
return success('获取成功', array_to_tree($categorys, 0, 'tco_pid', false, true, 'tco_id'));
return success('获取成功', array_to_tree($categorys, 0, 'pid', false));
}
}

View File

@@ -342,18 +342,6 @@ class System
'url' => (string)url('/index/topic/nas/download')
]
]
],
[
'id' => 8,
'name' => '电力品线专题',
'url' => '',
'children' => [
[
'id' => 81,
'name' => '首页',
'url' => (string)url('/index/topic/power_prodline/index')
],
]
]
];
}

View File

@@ -209,6 +209,9 @@ class Video
]);
$domain = request()->domain();
$image_path = Config::get('filesystem.disks.image.url');
$video_path = Config::get('filesystem.disks.video.url');
return VideoModel::withoutField([
'language_id',
'updated_at',
@@ -227,9 +230,13 @@ class Video
->select()
->bindAttr('category', ['category_name' => 'name'])
->hidden(['category_id', 'category'])
->each(function ($item) use($domain) {
$item->image = !empty($item->image) ? url_join($domain, $item->image) : '';
$item->video = !empty($item->video) ? url_join($domain, $item->video) : '';
->each(function ($item) use($domain, $image_path, $video_path) {
if (!empty($item->image)) {
$item->image = $domain . $image_path . '/' . $item->image;
}
if (!empty($item->video)) {
$item->video = $domain . $video_path . '/' . $item->video;
}
$item->recommend = $item->recommend == 1 ? '是' : '否';
$item->status = $item->status == 1 ? '启用' : '禁用';
return $item;

View File

@@ -25,7 +25,7 @@ class SysBannerItemValidate extends Validate
'extra_image' => 'max:255',
'video' => 'max:255',
'link_to' => 'requireIf:type,image|max:64|in:article,article_category,product,product_category,system_page,custom',
'link' => 'max:510',
'link' => 'max:255',
'sort' => 'integer',
'status' => 'in:-1,1'
];
@@ -54,7 +54,7 @@ class SysBannerItemValidate extends Validate
'link_to.requireIf' => '链接类型不能为空',
'link_to.max' => '链接类型最多不能超过64个字符',
'link_to.in' => '链接类型必须是article,article_category,product,product_category,system_page,custom中之一',
'link.max' => '链接最多不能超过512个字符',
'link.max' => '链接最多不能超过255个字符',
'sort.integer' => '排序值必须是整数',
'status.in' => '状态必须是-1或1'
];

View File

@@ -17,7 +17,7 @@ class VideoValidate extends Validate
'id' => 'require|integer',
'language_id' => 'require|integer',
'category_id' => 'require|integer',
'name' => 'require|max:128',
'name' => 'require|max:64',
'desc' => 'max:512',
'image' => 'max:125',
'video' => 'max:125',
@@ -43,7 +43,7 @@ class VideoValidate extends Validate
'category_id.require' => '分类不能为空',
'category_id.integer' => '分类参数类型错误',
'name.require' => '名称不能为空',
'name.max' => '名称不能超过128个字符',
'name.max' => '名称不能超过64个字符',
'desc.max' => '描述不能超过512个字符',
'image.max' => '图片不能超过125个字符',
'video.max' => '视频不能超过125个字符',

View File

@@ -1,42 +0,0 @@
<?php
declare (strict_types = 1);
namespace app\command\OpenApiMgr;
use oauth\OAuthStorage;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
class AddClient extends Command
{
protected function configure()
{
// 指令配置
$this->setName('OpenApiMgr:AddClient')
->addArgument('salt', Argument::OPTIONAL, "开放API的client_secret密钥的盐值")
->setDescription('开放API的client管理');
}
protected function execute(Input $input, Output $output)
{
$salt = $input->getArgument('salt');
$salt = empty($salt) ? null : trim($salt);
// 指令输出
$oauth = new OAuthStorage($salt);
$client_id = random_str(13, 'all', 0);
$client_secret = random_str(32, 'all', 0);
$ok = $oauth->addClient($client_id, $client_secret, null);
if (!$ok) {
$output->writeln("添加失败");
return;
}
$output->writeln("添加成功:\nClientID: {$client_id}\nClientSecret: {$client_secret}\n");
}
}

View File

@@ -80,7 +80,7 @@ if (!function_exists('array_to_tree')) {
* @param bool $keep_pid 是否保留pid
* @return array
*/
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true, $with_ref = 'id')
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true)
{
$ret = [];
foreach ($data as $item) {
@@ -93,7 +93,7 @@ if (!function_exists('array_to_tree')) {
if ($keep_pid === false) {
unset($item[$with]);
}
$children = array_to_tree($data, $item[$with_ref], $with, $lv, $keep_pid, $with_ref);
$children = array_to_tree($data, $item['id'], $with, $lv, $keep_pid);
if ($children) {
$item['children'] = $children;
}
@@ -153,13 +153,9 @@ if (!function_exists('get_filesystem_url')) {
* @param string $disk 磁盘配置 key
* @return string
*/
function get_filesystem_url(string|null $url, string $disk): string
function get_filesystem_url(string $url, string $disk): string
{
if (is_null($url)) {
return '';
}
if (\think\helper\Str::startsWith($url, ['http://', 'https://', '//'])) {
if (\think\helper\Str::startsWith($url, ['http://', 'https://'])) {
return $url;
}
if (empty($disk)) {
@@ -175,12 +171,8 @@ if (!function_exists('url_filesystem_detect')) {
* @param string $url 文件地址
* @return string
*/
function url_filesystem_detect(string|null $url): string
function url_filesystem_detect(string $url): string
{
if (is_null($url)) {
return '';
}
$idx = strrpos($url, '.');
if ($idx === false) {
return $url;
@@ -199,36 +191,3 @@ if (!function_exists('url_filesystem_detect')) {
return $url;
}
}
if (!function_exists('url_join')) {
/**
* 合并URL
* @param string $url 基础URL
* @param string $path 路径
* @param bool $remove_slash 是否移除首尾的斜杠
* @return string
*/
function url_join(string $url, string $path, bool $remove_slash = true): string
{
if (empty($url)) {
return $path;
}
if (empty($path)) {
return $url;
}
if (\think\helper\Str::startsWith($path, ['http://', 'https://', '//'])) {
return $path;
}
if ($remove_slash) {
if (str_ends_with($url, '/') && str_starts_with($path, '/')) {
return $url . substr($path, 1);
}
if (!str_ends_with($url, '/') && !str_starts_with($path, '/')) {
return $url . '/' . $path;
}
}
return $url . $path;
}
}

View File

@@ -21,8 +21,6 @@ class SysBannerItemBaseModel extends BaseModel
'banner_id' => 'int',
'title' => 'string',
'title_txt_color' => 'string',
'short_title' => 'string',
'short_title_txt_color' => 'string',
'desc' => 'string',
'desc_txt_color' => 'string',
'type' => 'string',

View File

@@ -192,8 +192,6 @@ class TopicNas extends Common
{
// 获取文章分类及文章数据
$parent = ArticleCategoryModel::uniqueLabel('CATEGORY_681182e0a4529')->language($this->lang_id)->value('id');
$parent_two = ArticleCategoryModel::parent($parent)->language($this->lang_id)->column('id');//二级分类id
array_push($parent_two,$parent);
$article_categorys = ArticleCategoryModel::with(['article' => function($query) {
$query->field(['id', 'title', 'category_id'])
->order(['sort' => 'asc', 'id' => 'desc'])
@@ -201,48 +199,15 @@ class TopicNas extends Common
}])
->field([
'id',
'pid',
'name',
'icon'
])
->language($this->lang_id)
// ->parent($parent)
->parentChild($parent_two)
->parent($parent)
->isShow(true)
->order(['sort' => 'asc', 'id' => 'desc'])
->select();
//查询三级分类
$article_categorys_new = [];
$article_categorys_two = [];
// dump($article_categorys->toArray());exit;
if (!$article_categorys->isEmpty()) {
foreach ($article_categorys->toArray() as $kk=>$vv) {
if ( $parent == $vv['pid'] ) {
array_push($article_categorys_new,$vv);
} else {
$article_categorys_two[$vv['pid']][] = $vv;
}
}
if ( !empty($article_categorys_two) ) {
foreach ($article_categorys_new as &$vvv) {
$articles = $vvv['article'];
if ( isset($article_categorys_two[$vvv['id']]) ) {
foreach ($article_categorys_two[$vvv['id']] as $v) {
foreach ($v['article'] as $av) {
if ( count($articles) < 3 ) {
array_push($articles,$av);
}
}
}
}
$vvv['article'] = $articles;
}
}
}
View::assign('article_categorys', $article_categorys_new);
// View::assign('article_categorys', $article_categorys);
View::assign('article_categorys', $article_categorys);
$contacts = [];
// 获取banner数据
@@ -281,46 +246,20 @@ class TopicNas extends Common
// 获取文章分类及文章数据
$parent = ArticleCategoryModel::uniqueLabel('CATEGORY_681182e0a4529')->language($this->lang_id)->value('id');
$parent_two = ArticleCategoryModel::parent($parent)->language($this->lang_id)->column('id');//二级分类id
array_push($parent_two,$parent);
$article_categorys = ArticleCategoryModel::with(['article' => function ($query) {
$query->field(['id', 'title', 'category_id'])->order(['sort' => 'asc', 'id' => 'desc']);
}])
->field([
'id',
'pid',
'name',
'icon'
])
->language($this->lang_id)
// ->parent($parent)
->parentChild($parent_two)
->parent($parent)
->isShow(true)
->order(['sort' => 'asc', 'id' => 'desc'])
->select();
// dump($article_categorys->toArray());exit;
//查询三级分类
$article_categorys_new = [];
$article_categorys_two = [];
if (!$article_categorys->isEmpty()) {
foreach ($article_categorys->toArray() as $kk=>$vv) {
if ( $parent == $vv['pid'] ) {
$vv['child'] = '';
array_push($article_categorys_new,$vv);
} else {
$article_categorys_two[$vv['pid']][] = $vv;
}
}
if ( !empty($article_categorys_two) ) {
foreach ($article_categorys_new as &$vvv) {
$vvv['child'] = isset($article_categorys_two[$vvv['id']])?$article_categorys_two[$vvv['id']]:'';
}
}
}
// dump($article_categorys_new);exit;
// dump($article_categorys_two);exit;
View::assign('article_categorys', $article_categorys_new);
View::assign('article_categorys', $article_categorys);
return View::fetch('help_detail');
}
@@ -378,18 +317,8 @@ class TopicNas extends Common
->language($this->lang_id)
->where('category_id', 'IN', array_column($categorys, 'id'))
->select();
//查询上级id
$parent_two = ArticleCategoryModel::parentColumn(array_column($categorys, 'id'))->language($this->lang_id)->column('pid','id');//二级分类id
$articles_data = $articles->toArray();
foreach ($articles_data as &$v) {
$v['pid'] = 0;
if ( $parent_two[$v['category_id']] !== $parent ) {
$v['pid'] = $v['category_id'];
$v['category_id'] = $parent_two[$v['category_id']];
}
}
return success('success', $articles_data);
return success('success', $articles->toArray());
}
/**

View File

@@ -1,127 +0,0 @@
<?php
declare(strict_types=1);
namespace app\index\controller;
use app\index\model\SysBannerModel;
use think\facade\View;
use think\Request;
/**
* 专题 - 电力品线控制器
*/
class TopicPowerProdline extends Common
{
/**
* 重写控制器初始化
*/
public function initialize()
{
// 获取国家/语言列表
$languages = $this->getLanguages();
// 输出国家/语言列表
if (get_platform() == 'mobile') {
View::assign('header_languages', $languages);
}
// 获取当前语言
$current_language = $this->getCurrentLanguage($languages);
if (!empty($current_language)) {
$this->lang_id = $current_language['id'];
}
// 获取产品分类
$categorys = $this->getProductCategory($this->lang_id);
// 输出产品分类
View::assign('header_categorys', $categorys);
// 获取系统配置
$configs = $this->getSysConfig($this->lang_id, ['basic', 'contact', 'media']);
$this->basic_config = $configs['basic'];
// 输出系统配置
View::assign('basic_config', $configs['basic']);
View::assign('contact_config', $configs['contact']);
View::assign('media_config', $configs['media']);
// 获取底部导航
$footer_navigation = $this->getNavigation('NAV_67f60be43df8d', $this->lang_id);
// 输出底部导航
View::assign('footer_navigation', $footer_navigation);
}
/**
* 专题 - 电力品线首页
*/
public function index()
{
$banners = SysBannerModel::with([
'items' => function ($query) {
$query->withoutField(['sort', 'created_at', 'updated_at', 'deleted_at'])
->order(['sort' => 'asc', 'id' => 'desc'])
->enabled(true);
}
])
->atPlatform(request()->from)
->uniqueLabel([
'BANNER_691e729f2428d',
'BANNER_691e732e4ad69',
'BANNER_691e752d2bbe2',
'BANNER_691e75561c4d3',
'BANNER_691e75ec9391c',
'BANNER_691e7616545bf',
'BANNER_691e763fc08f4',
'BANNER_691e765a27eba',
'BANNER_691e76b6af393',
])
->language($this->lang_id)
->enabled(true)
->order(['sort' => 'asc', 'id' => 'desc'])
->select();
$data = [];
if (!$banners->isEmpty()) {
$banners_map = [];
foreach ($banners as $banner) {
$banners_map[$banner->unique_label] = $banner;
}
// 焦点轮播图
$focus_image = data_get($banners_map, 'BANNER_691e729f2428d')?->items->toArray();
if (!empty($focus_image)) $data['focus_image'] = $focus_image;
// 分类
$category = data_get($banners_map, 'BANNER_691e732e4ad69')?->items->toArray();
if (!empty($category)) $data['category'] = $category;
// 为什么选择奥睿科相关数据
$why_choose = data_get($banners_map, 'BANNER_691e752d2bbe2')?->items->toArray();
if (!empty($why_choose)) $data['why_choose'] = $why_choose;
// 差旅充
$travel_charger = data_get($banners_map, 'BANNER_691e75561c4d3')?->items->toArray();
if (!empty($travel_charger)) $data['travel_charger'] = $travel_charger;
// 家居充
$home_charger = data_get($banners_map, 'BANNER_691e75ec9391c')?->items->toArray();
if (!empty($home_charger)) $data['home_charger'] = $home_charger;
// 桌面充
$desktop_charger = data_get($banners_map, 'BANNER_691e7616545bf')?->items->toArray();
if (!empty($desktop_charger)) $data['desktop_charger'] = $desktop_charger;
// 墙充
$wall_charger = data_get($banners_map, 'BANNER_691e763fc08f4')?->items->toArray();
if (!empty($wall_charger)) $data['wall_charger'] = $wall_charger;
// 转换器
$converter = data_get($banners_map, 'BANNER_691e765a27eba')?->items->toArray();
if (!empty($converter)) $data['converter'] = $converter;
// 底部介绍
$footer_info = data_get($banners_map, 'BANNER_691e76b6af393')?->items->toArray();
if (!empty($footer_info)) $data['footer_info'] = $footer_info;
}
View::assign('data', $data);
return View::fetch('index');
}
}

View File

@@ -46,27 +46,6 @@ class ArticleCategoryModel extends ArticleCategoryBaseModel
$query->where('pid', '=', $parent);
}
// 所属上级分类范围查询
public function scopeParentChild($query, $parent)
{
if (is_array($parent)) {
$query->where('pid', 'IN', $parent);
return;
}
$query->where('pid', '=', $parent);
}
// 所属上级分类查询
public function scopeParentColumn($query, $parent)
{
if (is_array($parent)) {
$query->where('id', 'IN', $parent);
return;
}
$query->where('id', '=', $parent);
}
// 所属子分类范围查询
public function scopeChild($query, $id, $merge_self = false)
{

View File

@@ -105,12 +105,6 @@ Route::group('topic', function () {
// 专题-Nas软件下载页
Route::get('download', 'TopicNas/download');
});
// 专题 - 电力品线
Route::group("power_prodline", function() {
// 专题 - 电力品线首页
Route::get('index', 'TopicPowerProdline/index');
});
});
// 数据迁移

View File

@@ -14,7 +14,7 @@
<div class="tabs">
{notempty name="video_categorys"}
{volist name="video_categorys" id="va"}
<a href="{:url('attachment/video', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
<a href="{:url('attachment/index', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
{/volist}
{/notempty}
</div>

View File

@@ -22,11 +22,7 @@
<a class="href_01">{:lang_i18n('首页')}</a>
{volist name="product_categorys" id="ca"}
<span class="icon-arrow arrow_address"></span>
{eq name="ca.pid" value="0"}
<a class="href_02" href="{:url('product/category', ['id' => $ca.id])}">{$ca.name}</a>
{else /}
<a class="href_02" href="{:url('product/subcategory', ['id' => $ca.id])}">{$ca.name}</a>
{/eq}
{/volist}
</div>
</div>

View File

@@ -29,13 +29,12 @@
{/notempty}
<li>
<h3>{:lang_i18n('联系方式')}</h3>
{if condition="!empty($contact_config)"}
{volist name="contact_config" id="vo"}
{if condition="$vo.type != 'image'"}
<p>{$vo.value}</p>
{/if}
{/volist}
{/if}
{notempty name="contact_config.website_email"}
<p>{$contact_config.website_email.title} {$contact_config.website_email.value}</p>
{/notempty}
{notempty name="contact_config.website_hotline_office_hours"}
<p>{$contact_config.website_hotline_office_hours.title} {$contact_config.website_hotline_office_hours.value}</p>
{/notempty}
</li>
</ul>
</div>

View File

@@ -57,8 +57,6 @@
<div class="nars-hlpdt-ml">
{notempty name="article_categorys"}
<div class="nav-tree">
{volist name="article_categorys" id="ac" key="idx"}
<div class="categoryhelp">
<div class="categoryhelp-title">
@@ -69,24 +67,6 @@
<span>{$ac.name}</span>
</div>
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>
{volist name="ac.child" id="ad"}
<li class="two-mues">
<a href="#" class="two-a">
<div><img src="__IMAGES__/nars-jt.png"
class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}">
</div>
<span>{$ad.name}</span>
</a>
<ul class="thress-mues" {if condition='$ad.id == $Request.get.pid' }style="display: block;" {/if}>
{volist name="ad.article" id="ae"}
<li>
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id ,'pid' => $ad.id, 'id' => $ae.id])}"
style="margin-left:18%;padding: 0.4rem;">{$ae.title}</a>
</li>
{/volist}
</ul>
</li>
{/volist}
{volist name="ac.article" id="ar"}
<li>
<a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id , 'id' => $ar.id])}"
@@ -98,9 +78,6 @@
</ul>
</div>
{/volist}
</div>
{/notempty}
</div>
@@ -151,17 +128,6 @@
$(this).next('.sub-list').slideToggle();
$(this).find('.arrow').toggleClass('rotate');
});
//分类二三级交互
$('.two-a').click(function(e) {
e.preventDefault();
e.stopPropagation(); // 阻止事件冒泡
// 切换当前二级菜单的箭头方向
$(this).find('.arrow').toggleClass('rotate');
// 切换对应的三级菜单显示/隐藏
$(this).siblings('.thress-mues').slideToggle();
});
// 点击顶部搜索图标-点击取消关闭
$('#ssico').click(function () {
$('.nhlpapp-pagescate').hide();

View File

@@ -1,765 +0,0 @@
{extend name="public/base" /}
{block name="style"}
<!-- 将rem适配JS移到这里确保优先执行 -->
<script type="text/javascript">
(function (doc, win) {
var docEl = doc.documentElement;
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
function setRootFontSize() {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
var fontSize = clientWidth / 7.5; // 750px/7.5=100px375px/7.5=50px
// 直接修改内联样式,优先级最高
docEl.setAttribute('style', 'font-size: ' + fontSize + 'px !important;');
}
setRootFontSize();
win.addEventListener(resizeEvt, setRootFontSize);
doc.addEventListener('DOMContentLoaded', setRootFontSize);
})(document, window);
</script>
<link rel="stylesheet" href="__CSS__/topic_power_prodline/index.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/swiper.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/nav.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/advantage.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/moren.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/mask.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product_list.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product_card.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/footer.css">
{/block}
{block name="header"}
<!-- 重置header头为空 -->
{/block}
{block name="main"}
<a class="header" href="/">
<div class="header-img">
<img src="__IMAGES__/logo.png" alt="">
</div>
</a>
<!-- 轮播核心容器 -->
<div class="swiper-container auto-swiper-container" >
{notempty name="data.focus_image"}
<div class="swiper-wrapper">
{volist name="data.focus_image" id="fo"}
<a class="swiper-slide auto-swiper-slide" href="{$fo.link}">
<img src="{$fo.image}" alt="{$fo.title}" />
</a>
{/volist}
</div>
<div class="swiper-pagination"></div>
{/notempty}
</div>
<!-- 分类 -->
{notempty name="data.category"}
<div class="nav-box">
{volist name="data.category" id="ca"}
<a class="nav-item" href="{$ca.link}">
<img src="{$ca.image}" alt="{$ca.title}">
<p {:style(['color'=>$ca.title_txt_color])}>{$ca.title}</p>
</a>
{/volist}
</div>
{/notempty}
<!-- 500万 -->
{notempty name="data.why_choose"}
<div class="advantage-section">
{assign name="why_choose_title" value=":array_shift($data.why_choose)" /}
<h2 class="advantage-section__title">{$why_choose_title.title|default=''|raw}</h2>
<div class="advantage-section__list">
{volist name="data.why_choose" id="ch"}
<div class="advantage-card-wrap">
<div class="advantage-card" data-target="design">
<img src="{$ch.image}" alt="{$ch.title}:{$ch.short_title}" class="advantage-card__img">
<div class="advantage-card__content">
<!-- 标题+箭头容器:水平+垂直双居中,内部文字左、箭头右 -->
<div class="advantage-card__heading-wrap">
<div class="advantage-card__heading" {:style(['color'=>$ch.title_txt_color])}>{$ch.title}</div>
<img src="__IMAGES__/jiant.png" alt="" class="card-arrow">
</div>
<div class="advantage-card__description" {:style(['color'=>$ch.short_title_txt_color])}>{$ch.short_title}</div>
<div style="display:none;" class="mack-conten-text">{$ch.desc|raw}</div>
</div>
</div>
</div>
{/volist}
</div>
</div>
{/notempty}
<!-- 产品差旅充 -->
{notempty name="data.travel_charger"}
<div class="product-box">
{assign name="tc_title" value=":array_shift($data.travel_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$tc_title.title|default=''}</h2>
<p class="product-title-p">{$tc_title.short_title|default=''}</p>
</div>
<div class="product-container" >
{assign name="tc_first_section_lf" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_first_section_lf"}
<a class="product-left" href="{$tc_first_section_lf.link}">
<img src="{$tc_first_section_lf.image}" alt="{$tc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover top55">
<img src="{$tc_first_section_lf.extra_image}" alt="{$tc_first_section_lf.short_title}" class="img1">
</div>
</a>
{/notempty}
{assign name="tc_first_section_lr" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_first_section_lr"}
<div class="product-right">
<img src="{$tc_first_section_lr.image}" alt="{$tc_first_section_lr.title}" class="right-content right-img">
<video src="{$tc_first_section_lr.video}" class="right-content right-video" muted loop playsinline>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
<button class="video-play-btn">
<span class="play-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<path d="M9 7L16 12L9 17V7Z" fill="white" />
</svg>
</span>
<!-- 暂停图标(默认隐藏) -->
<span class="pause-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<rect x="8" y="7" width="3" height="10" fill="white" />
<rect x="13" y="7" width="3" height="10" fill="white" />
</svg>
</span>
</button>
</div>
{/notempty}
</div>
{assign name="tc_second_section" value=":array_splice($data.travel_charger, 0, 4)" /}
{notempty name="tc_second_section"}
<div class="product-card-box">
<div class="product-card-container">
{volist name="tc_second_section" id="tss"}
<a class="product-card-wrap" href="{$tss.link}">
<div class="product-card" >
<div class="product-card-img">
<img src="{$tss.image}" alt="{$tss.title}">
</div>
<div class="product-card-text">
<div class="product-card-title" {:style(['color'=>$tss.title_txt_color])}>{$tss.title}</div>
<div class="product-card-desc" {:style(['color'=>$tss.short_title_txt_color])}>{$tss.short_title}</div>
</div>
<div class="product-card-link">
<img src="__IMAGES__/ljgd.png" alt="查看更多">
</div>
</div>
</a>
{/volist}
</div>
</div>
{assign name="tc_three_section" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_three_section"}
<a href="{$tc_three_section.link}" class="more">
<div class="more-img">
{$tc_three_section.title}
</div>
</a>
{/notempty}
{/notempty}
</div>
{/notempty}
<!-- 产品 家居充-->
{notempty name="data.home_charger"}
<div class="product-box">
{assign name="hc_title" value=":array_shift($data.home_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$hc_title.title|default=''}</h2>
<p class="product-title-p">{$hc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="hc_first_section_lf" value=":array_shift($data.home_charger)" /}
{notempty name="hc_first_section_lf"}
<a class="product-left" href="{$hc_first_section_lf.link}">
<img src="{$hc_first_section_lf.image}" alt="{$hc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover">
<img src="{$hc_first_section_lf.extra_image}" alt="{$hc_first_section_lf.short_title}" class="img2">
</div>
</a>
{/notempty}
{assign name="hc_first_section_lr" value=":array_shift($data.home_charger)" /}
{notempty name="hc_first_section_lr"}
<div class="product-right">
<img src="{$hc_first_section_lr.image}" alt="{$hc_first_section_lr.title}" class="right-content right-img">
<video src="{$hc_first_section_lr.video}" class="right-content right-video" muted loop playsinline >
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
<button class="video-play-btn">
<span class="play-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<path d="M9 7L16 12L9 17V7Z" fill="white" />
</svg>
</span>
<!-- 暂停图标(默认隐藏) -->
<span class="pause-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<rect x="8" y="7" width="3" height="10" fill="white" />
<rect x="13" y="7" width="3" height="10" fill="white" />
</svg>
</span>
</button>
</div>
{/notempty}
</div>
{assign name="hc_second_section" value=":array_splice($data.home_charger, 0, 4)" /}
{notempty name="hc_second_section"}
<div class="product-card-box">
<div class="product-card-container">
{volist name="hc_second_section" id="hcs"}
<a class="product-card-wrap" href="{$hcs.link}">
<div class="product-card" href="#">
<div class="product-card-img">
<img src="{$hcs.image}" alt="{$hcs.short_title}">
</div>
<div class="product-card-text">
<div class="product-card-title">{$hcs.title}</div>
<div class="product-card-desc">{$hcs.short_title}</div>
</div>
<div class="product-card-link">
<img src="__IMAGES__/ljgd.png" alt="查看更多">
</div>
</div>
</a>
{/volist}
</div>
</div>
{/notempty}
{assign name="hc_three_section" value=":array_shift($data.home_charger)" /}
{notempty name="hc_three_section"}
<a href="{$hc_three_section.link}" class="more">
<div class="more-img">
{$hc_three_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
<!-- 产品 桌面充(悬浮图上右超出)底部列表样式不一样(左文右图) -->
<div class="product-box">
{assign name="dc_title" value=":array_shift($data.desktop_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$dc_title.title|default=''}</h2>
<p class="product-title-p">{$dc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="dc_first_section_lf" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_first_section_lf"}
<a class="product-left" href="{$dc_first_section_lf.link}">
<img src="{$dc_first_section_lf.image}" alt="{$dc_first_section_lf.short_title}" class="product-img">
<!-- 公共类+定位类:尺寸和第一个完全一致,仅定位不同 -->
<div class="product-img-hover right" >
<img src="{$dc_first_section_lf.extra_image}" alt="{$dc_first_section_lf.short_title}" class="img3">
</div>
</a>
{/notempty}
{assign name="dc_first_section_lr" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_first_section_lr"}
<div class="product-right">
<img src="{$dc_first_section_lr.image}"
alt="使用场景" class="right-content right-img">
<!--muted loop playsinline controls-->
<video
src="{$dc_first_section_lr.video}"
class="right-content right-video" muted loop playsinline >
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
<button class="video-play-btn">
<span class="play-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<path d="M9 7L16 12L9 17V7Z" fill="white" />
</svg>
</span>
<!-- 暂停图标(默认隐藏) -->
<span class="pause-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<rect x="8" y="7" width="3" height="10" fill="white" />
<rect x="13" y="7" width="3" height="10" fill="white" />
</svg>
</span>
</button>
</div>
{/notempty}
</div>
{assign name="dc_second_section" value=":array_splice($data.desktop_charger, 0, 2)" /}
{notempty name="dc_second_section"}
<div class="product-card-box">
<div class="product-card-container">
{volist name="dc_second_section" id="dcs"}
<a class="product-card-wrap" href="{$dcs.link}">
<div class="product-card" href="#">
<div class="product-card-img">
<img src="{$dcs.image}" alt="{$dcs.short_title}">
</div>
<div class="product-card-text">
<div class="product-card-title">{$dcs.title}</div>
<div class="product-card-desc">{$dcs.short_title}</div>
</div>
<div class="product-card-link">
<img src="__IMAGES__/ljgd.png" alt="查看更多">
</div>
</div>
</a>
{/volist}
</div>
</div>
{/notempty}
{assign name="dc_three_section" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_three_section"}
<a href="{$dc_three_section.link}" class="more">
<div class="more-img">
{$dc_three_section.title}
</div>
</a>
{/notempty}
</div>
<!-- 墙插 -->
{notempty name="data.wall_charger"}
<div class="product-box">
{assign name="wc_title" value=":array_shift($data.wall_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$wc_title.title|default=''}</h2>
<p class="product-title-p">{$wc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="wc_first_section_lf" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_first_section_lf"}
<a class="product-left" href="{$wc_first_section_lf.link}">
<img src="{$wc_first_section_lf.image}" alt="{$wc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover top70">
<img src="{$wc_first_section_lf.extra_image}" alt="{$wc_first_section_lf.title}" class="img4">
</div>
</a>
{/notempty}
{assign name="wc_first_section_lr" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_first_section_lr"}
<div class="product-right">
<img src="{$wc_first_section_lr.image}" alt="{$wc_first_section_lr.title}" class="right-content right-img">
<video src="{$wc_first_section_lr.video}" class="right-content right-video" muted loop playsinline>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
<button class="video-play-btn">
<span class="play-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<path d="M9 7L16 12L9 17V7Z" fill="white" />
</svg>
</span>
<!-- 暂停图标(默认隐藏) -->
<span class="pause-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<rect x="8" y="7" width="3" height="10" fill="white" />
<rect x="13" y="7" width="3" height="10" fill="white" />
</svg>
</span>
</button>
</div>
{/notempty}
</div>
{assign name="wc_more_section" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_more_section"}
<a href="{$wc_more_section.link}" class="more">
<div class="more-img">
{$wc_more_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
{notempty name="data.converter"}
<!-- 转换器 -->
<div class="product-box">
{assign name="ct_title" value=":array_shift($data.converter)" /}
<div class="product-title">
<h2 class="product-title-h2">{$ct_title.title|default=''}</h2>
<p class="product-title-p">{$ct_title.short_title|default=''}</p>
</div>
{assign name="ct_more_section" value=":array_pop($data.converter)" /}
{assign name="ct_chunk_section" value=":array_chunk($data.converter, 2)" /}
{assign name="ct_chunk_section_len" value=":count($ct_chunk_section)" /}
{volist name="ct_chunk_section" id="cts" key="k"}
<div class="product-container">
{assign name="cts_lf" value=":array_shift($cts)" /}
{notempty name="cts_lf"}
<a class="product-left" href="{$cts_lf.link}">
<img src="{$cts_lf.image}" alt="{$cts_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<!--style="display:flex;justify-content: center;"-->
<div class="product-img-hover top40" >
<!-- style="width:70%"-->
<img src="{$cts_lf.extra_image}" alt="{$cts_lf.title}" class="img5">
</div>
</a>
{/notempty}
{assign name="cts_lr" value=":array_shift($cts)" /}
{notempty name="cts_lr"}
<div class="product-right">
<img src="{$cts_lr.image}" alt="{$cts_lr.title}" class="right-content right-img">
<video src="{$cts_lr.video}" class="right-content right-video" muted loop playsinline>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
<!-- 播放图标 -->
<button class="video-play-btn">
<span class="play-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<path d="M9 7L16 12L9 17V7Z" fill="white" />
</svg>
</span>
<!-- 暂停图标(默认隐藏) -->
<span class="pause-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="10" fill="rgba(0,0,0,0.5)" />
<rect x="8" y="7" width="3" height="10" fill="white" />
<rect x="13" y="7" width="3" height="10" fill="white" />
</svg>
</span>
</button>
</div>
{/notempty}
</div>
{neq name="k" value="$ct_chunk_section_len"}
<div class="line"></div>
{/neq}
{/volist}
{notempty name="ct_more_section"}
<a href="{$ct_more_section.link}" class="more">
<div class="more-img">
{$ct_more_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
{notempty name="data.footer_info"}
<!-- 底部 -->
<div class="prodline-footer-box">
<div class="prodline-footer-box-img">
<img src="{$data.footer_info.0.image}" alt="">
</div>
</div>
{/notempty}
<!-- 蒙版 -->
<div class="mask" id="mask">
<div class="mask-content" >
<span class="close-btn">&times;</span>
<div class="mask-scroll-content"></div>
</div>
</div>
{/block}
{block name="script"}
<script type="text/javascript">
let swiper=null;
const advantageItems = document.querySelectorAll('.advantage-card');
let scrollTop = 0; // 保存页面滚动位置
let closeBtnHtml = null; // 关闭按钮元素(全局变量,避免重复创建)
const mask = document.getElementById('mask');
const maskContent = document.querySelector('.mask-content');
const maskScrollContent = document.querySelector('.mask-scroll-content'); // 滚动容器(关键!)
const closeBtn = document.querySelector('.close-btn')
// 初始化:确保 maskScrollContent 存在于 maskContent 中(避免被清空)
if (!maskScrollContent) {
// 如果页面没有 mask-scroll-content动态创建确保结构稳定
const scrollContent = document.createElement('div');
scrollContent.className = 'mask-scroll-content';
maskContent.appendChild(scrollContent);
}
function createCloseBtn() {
if (closeBtnHtml) {
closeBtnHtml.remove();
}
closeBtnHtml = document.createElement('span');
closeBtnHtml.className = 'close-btn';
closeBtnHtml.innerHTML = '&times;';
closeBtnHtml.addEventListener('click', hideMask);
// 挂载到 maskContent而非 scrollContent避免被滚动影响位置
maskContent.prepend(closeBtnHtml);
}
function showMask(contentHtml) {
// 保存页面滚动位置
scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
// 关键:将内容填充到 scrollContent 中(而非直接替换 maskContent
maskScrollContent.innerHTML = contentHtml;
createCloseBtn();
// 显示蒙版
mask.style.display = 'flex';
// 禁止滚动(复用你的逻辑)
document.documentElement.classList.add('no-scroll');
document.body.classList.add('no-scroll');
document.body.style.top = `-${scrollTop}px`;
// 额外:打开蒙版时就重置滚动位置(避免残留上次滚动状态)
maskScrollContent.scrollTop = 0;
}
function hideMask() {
// 关键步骤 1先重置 scrollContent 的滚动位置(此时元素还未被销毁)
maskScrollContent.scrollTop = 0;
// 关键步骤 2清空 scrollContent 的内容(而非 maskContent
maskScrollContent.innerHTML = "";
// 隐藏蒙版
mask.style.display = 'none';
// 恢复滚动(复用你的逻辑)
document.documentElement.classList.remove('no-scroll');
document.body.classList.remove('no-scroll');
document.body.style.top = '';
// 还原页面滚动位置
window.scrollTo(0, scrollTop);
// 移除关闭按钮(可选,避免残留)
if (closeBtnHtml) {
closeBtnHtml.remove();
closeBtnHtml = null;
}
}
// 点击卡片显示详情
advantageItems.forEach((item) => {
item.addEventListener('click', (e) => {
// 获取当前点击卡片内的.mack-conten-text元素
const currentMackContent = e.currentTarget.querySelector('.mack-conten-text');
if (currentMackContent) {
// 关键修改获取该元素的子内容innerHTML 本身就是内部HTML不含当前元素标签
// 若想更彻底,可遍历子节点拼接内容(兼容特殊场景)
let contentHtml = '';
Array.from(currentMackContent.childNodes).forEach(child => {
// 只保留元素节点和文本节点(过滤空节点)
if (child.nodeType === 1 || child.nodeType === 3) {
contentHtml += child.outerHTML || child.textContent;
}
});
// 显示蒙版并传入纯净的子内容
showMask(contentHtml);
}
});
});
// 关闭按钮事件
closeBtn.addEventListener('click', hideMask);
// 点击蒙版背景关闭(可选)
mask.addEventListener('click', (e) => {
if (e.target === mask) hideMask();
});
// ESC 键关闭(可选)
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && mask.style.display === 'flex') hideMask();
});
// 关键:拦截蒙版的 touchmove 事件,阻止滚动穿透(移动端核心)
mask.addEventListener(
'touchmove',
(e) => {
// 只有点击蒙版背景(不是内容区域)才阻止滚动
if (e.target === mask) {
e.preventDefault(); // 阻止默认触摸滚动行为
e.stopPropagation(); // 阻止事件冒泡
}
},
{ passive: false }
); // passive: false 必须,否则 preventDefault 无效
document.addEventListener('DOMContentLoaded', () => {
// 初始化所有视频容器
function initVideoContainers() {
const productRights = document.querySelectorAll('.product-right');
// 支持的视频格式
const supportedVideoFormats = ['.mp4', '.webm', '.ogg', '.mov', '.avi', '.mkv', '.flv', '.wmv'];
productRights.forEach((container, index) => {
const video = container.querySelector('.right-video');
const btn = container.querySelector('.video-play-btn');
const img = container.querySelector('.right-img');
if (!video || !btn || !img) return;
const videoSrc = video.src.trim()
console.log(videoSrc,'=videoSrc=')
// 修复:正确检测有效视频地址
// 排除空字符串、null、undefined
const hasValidVideo = !!videoSrc && videoSrc.trim() !== '' && videoSrc !== 'undefined' && videoSrc !== 'null';
// 验证视频格式是否有效
const isValidFormat = supportedVideoFormats.some(format =>
videoSrc.toLowerCase().endsWith(format) ||
(videoSrc.includes('?') && videoSrc.toLowerCase().split('?')[0].endsWith(format))
);
// 初始化状态:无视频或格式无效则保持图片显示,永不切换
if (!hasValidVideo || !isValidFormat) {
img.style.display = 'block';
video.style.display = 'none';
btn.style.display = 'none';
// 绑定空方法,防止调用报错
video.switchMedia = function() {};
console.log(`容器${index}:无有效视频(src="${videoSrc}"),保持图片显示`);
return;
}
// 有有效视频的情况
console.log(`容器${index}:有有效视频(src="${videoSrc}"),初始化播放逻辑`);
// 初始状态
video.style.display = 'none';
video.pause();
img.style.display = 'block';
btn.style.display = 'none';
btn.style.opacity = '0';
// 同步状态函数
function syncMediaState() {
if (img.style.display === 'block') {
btn.style.display = 'none';
btn.style.opacity = '0';
} else {
btn.style.display = 'block';
btn.style.opacity = '1';
btn.classList.toggle('paused', !video.paused && !video.ended);
}
}
// 按钮点击事件
btn.addEventListener('click', () => {
if (video.paused) {
video.play().catch(() => syncMediaState());
} else {
video.pause();
}
syncMediaState();
});
// 视频事件监听
['play', 'pause', 'ended', 'playing', 'waiting'].forEach(event => {
video.addEventListener(event, syncMediaState);
});
// 滚动切换函数
video.switchMedia = function(showVideo) {
// 只处理有有效视频的情况
if (showVideo) {
img.style.display = 'none';
video.style.display = 'block';
video.play().catch(() => {
console.log(`容器${index}:自动播放失败,需要用户交互`);
syncMediaState();
});
} else {
video.pause();
img.style.display = 'block';
video.style.display = 'none';
}
syncMediaState();
};
// 初始同步
syncMediaState();
});
}
// 滚动监听 - 优化版
function setupScrollWatcher() {
let ticking = false;
function updateVideoVisibility() {
const productRights = document.querySelectorAll('.product-right');
productRights.forEach(container => {
const video = container.querySelector('.right-video');
if (!video || !video.switchMedia) return;
// 检查是否在视口中
const rect = container.getBoundingClientRect();
const viewHeight = window.innerHeight || document.documentElement.clientHeight;
const isInView = rect.top < viewHeight * 0.7 && rect.bottom > viewHeight * 0.3;
// 只对有有效视频的元素调用switchMedia
video.switchMedia(isInView);
});
ticking = false;
}
// 使用requestAnimationFrame优化性能
window.addEventListener('scroll', () => {
if (!ticking) {
requestAnimationFrame(updateVideoVisibility);
ticking = true;
}
});
}
// 初始化
initVideoContainers();
setupScrollWatcher();
// 初始检查一次
setTimeout(() => {
const event = new Event('scroll');
window.dispatchEvent(event);
}, 300);
});
window.onload = function () {
if (typeof Swiper === 'undefined') {
console.error('Swiper加载失败请刷新页面重试');
return;
}
swiper = new Swiper('.auto-swiper-container', {
autoplay: {
delay: 3000, // 3秒切换
disableOnInteraction: false,
},
loop: false,
slidesPerView: 1,
spaceBetween: 0,
// 启用分页指示标(核心配置)
pagination: {
el: '.swiper-pagination', // 对应 HTML 中的指示标容器
clickable: true, // 允许点击指示标切换
// dynamicBullets: true, // 动态指示标(当前激活放大)
//dynamicMainBullets: 3, // 动态模式显示3个核心指示标
},
navigation: false,
scrollbar: false,
on: {
resize: function () {
this.update();
},
},
});
window.addEventListener('resize', function () {
swiper.update();
});
// 初始化时触发滚动事件,确保状态正确
window.dispatchEvent(new Event('scroll'));
};
</script>
{/block}

View File

@@ -24,9 +24,7 @@
<p>{$detail.release_time|date_format_i18n}</p>
</div>
<!-- 文本渲染-->
<div class="ql-container">
<div class="blog_content ql-editor">{$detail.content|raw}</div>
</div>
<div class="blog_content">{$detail.content|raw}</div>
</div>
<!-- 评论只显示前面五条--->
{notempty name="comments"}

View File

@@ -117,8 +117,8 @@
<p class="subtitle" {notempty name="scene.desc_txt_color" }style="color:{$scene.desc_txt_color};" {/notempty}>
{$scene.desc|raw}</p>
<a class="sceneMore" href="{$scene.link}">{:lang_i18n('了解更多')} ></a> -->
<div style="background-image: url('{$scene.image}');" class="sceneimg"></div>
</a>
<div style="background-image: url('{$scene.image}');" class="sceneimg"></div>
</div>
{/volist}
</div>

View File

@@ -22,11 +22,7 @@
<a class="pathname" href="/">{:lang_i18n('首页')}</a>
{volist name="product_categorys" id="ca"}
<div class="arrow"></div>
{eq name="ca.pid" value="0"}
<a class="pathname" href="{:url('product/category', ['id' => $ca.id])}">{$ca.name}</a>
{else /}
<a class="pathname" href="{:url('product/subcategory', ['id' => $ca.id])}">{$ca.name}</a>
{/eq}
{/volist}
</div>
<!-- 产品主图切换和参数详情-->
@@ -133,12 +129,10 @@
{/notempty}
</div>
<!-- 富文本渲染-->
<div class="ql-container">
<div class="products_des ql-editor" id="detail">
<div class="products_des" id="detail">
{$product.detail|default=''|raw}
</div>
</div>
</div>
<!-- 关联产品 -->
{notempty name="product_related"}
<div class="glcpmain" id="related">

View File

@@ -32,7 +32,7 @@
</div>
<div class="nhlp-tx-list">
{volist name="vo.article" id="va" key="index"}
<a class="txrow" href="{:url('/index/topic/nas/help_detail', ['pid' => $va.category_id,'cid' => $vo.id, 'id' => $va.id])}">
<a class="txrow" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => $va.id])}">
<div class="nhlp-point"></div>
<span class="nhlpsp">{$va.title}</span>
<span class="narhelpgoimg">
@@ -41,7 +41,7 @@
</a>
{/volist}
{if condition="count($vo.article) >= 3"}
<a class="ckgdbt" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => isset($vo.article[0])?$vo.article[0]['id']:0,'pid' => isset($vo.article[0])?$vo.article[0]['category_id']:0])}">
<a class="ckgdbt" href="{:url('/index/topic/nas/help_detail', ['cid' => $vo.id, 'id' => isset($vo.article[0])?$vo.article[0]['id']:0])}">
{:lang_i18n('查看更多')} >
</a>
{/if}

View File

@@ -1,17 +1,17 @@
{extend name="public/nas_base" /}
{block name="title"}
{notempty name="article.seo_title"}<title>{$article.seo_title}</title>{else /}{__BLOCK__}{/notempty}
{notempty name="article.seo_title"}<title>{$article.seo_title}</title>{else /}{__BLOCK__}{/notempty}
{/block}
{block name="seo"}
{notempty name="article.seo_keywords"}
<meta name="keywords" content="{$article.seo_keywords}" />
<meta name="description" content="{$article.seo_desc}" />
{else /}
{__BLOCK__}
{/notempty}
{notempty name="article.seo_keywords"}
<meta name="keywords" content="{$article.seo_keywords}" />
<meta name="description" content="{$article.seo_desc}" />
{else /}
{__BLOCK__}
{/notempty}
{/block}
{block name="style"}
<link rel="stylesheet" href="__CSS__/topic_nas_help-detail.css" />
<link rel="stylesheet" href="__CSS__/topic_nas_help-detail.css"/>
{/block}
{block name="main"}
<div class="orico_Page_index">
@@ -32,42 +32,28 @@
<div class="nars-hlpdt-ml">
{notempty name="article_categorys"}
<div class="nav-tree">
<!-- start 三级菜单 -->
{volist name="article_categorys" id="ac"}
<div class="category">
<!-- 一级 -->
<div class="category-title">
<div class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}"><img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}" /></div>
<div class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}">
<img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ac.id == $Request.get.cid'}rotate{/if}" />
</div>
<span>{$ac.name}</span>
</div>
<!-- 二级-->
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid' }style="display: block;" {/if}>
{volist name="ac.child" id="ad"}
<li class="two-mues">
<a href="#" class="two-a">
<div class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}"><img src="__IMAGES__/nas-jt.png" class="arrow {if condition='$ad.id == $Request.get.pid'}rotate{/if}" /></div>
<span>{$ad.name}</span>
<ul class="sub-list" {if condition='$ac.id == $Request.get.cid'}style="display: block;"{/if}>
{volist name="ac.article" id="ar"}
<li>
<a
href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}"
{eq name="ar.id" value="$Request.get.id"}class="active"{/eq}
>
{$ar.title}
</a>
<ul class="thress-mues" {if condition='$ad.id == $Request.get.pid' }style="display: block;" {/if}>
{volist name="ad.article" id="ae"}
<li style="margin-left: 30px;"><a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id,'pid' => $ad.id, 'id' => $ae.id])}" style="padding-top: 6px;" {eq
name="ae.id" value="$Request.get.id" }class="active" {/eq}>{$ae.title}</a></li>
{/volist}
</ul>
<!-- 三级-->
</li>
{/volist}
{volist name="ac.article" id="ar"}
<li><a href="{:url('/index/topic/nas/help_detail', ['cid' => $ac.id, 'id' => $ar.id])}" style="padding-top: 6px;" {eq
name="ar.id" value="$Request.get.id" }class="active" {/eq}>{$ar.title}</a></li>
{/volist}
</ul>
</div>
{/volist}
<!-- end 三级菜单 -->
</div>
{/notempty}
</div>
@@ -89,22 +75,10 @@
{block name="script"}
<script type="text/javascript">
$(document).ready(function () {
// 一级菜单点击事件
$('.category-title').click(function () {
$(this).next('.sub-list').slideToggle();
$(this).find('.arrow').toggleClass('rotate');
});
// 二级菜单点击事件
$('.two-a').click(function(e) {
e.preventDefault();
e.stopPropagation(); // 阻止事件冒泡
// 切换当前二级菜单的箭头方向
$(this).find('.arrow').toggleClass('rotate');
// 切换对应的三级菜单显示/隐藏
$(this).siblings('.thress-mues').slideToggle();
});
// 搜索
$(document).on('click', function (e) {
var target = $(e.target);
@@ -135,7 +109,7 @@
html = '<ul>'
$.each(r.data, function (k, v) {
html +=
'<li><a href="{:url(\'/index/topic/nas/help_detail\')}?cid=' + v.category_id + '&id=' + v.id + '&pid=' + v.pid + '">' + v.title + '</a></li>'
'<li><a href="{:url(\'/index/topic/nas/help_detail\')}?cid=' + v.category_id + '&id=' + v.id + '">' + v.title + '</a></li>'
})
html += '</ul>'
}

View File

@@ -1,581 +0,0 @@
{extend name="public/nas_base" /}
{block name="style"}
<link rel="stylesheet" href="__CSS__/topic_power_prodline/index.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/swiper.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/nav.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/advantage.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/mask.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product_list.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/product_card.css">
<link rel="stylesheet" href="__CSS__/topic_power_prodline/footer.css">
{/block}
{block name="header"}
<!-- 重置header头为空 -->
{/block}
{block name="main"}
<a class="header" href="/">
<div class="header-img">
<img src="__IMAGES__/logo.png" alt="">
</div>
</a>
<!-- 轮播核心容器 -->
<div class="swiper-container auto-swiper-container" >
{notempty name="data.focus_image"}
<div class="swiper-wrapper">
{volist name="data.focus_image" id="fo"}
<a class="swiper-slide auto-swiper-slide" href="{$fo.link}">
<img src="{$fo.image}" alt="{$fo.title}" />
</a>
{/volist}
</div>
<div class="swiper-pagination"></div>
{/notempty}
</div>
<!-- 分类 -->
{notempty name="data.category"}
<div class="nav-box">
{volist name="data.category" id="ca"}
<a class="nav-item" href="{$ca.link}">
<img src="{$ca.image}" alt="{$ca.title}">
<p {:style(['color'=>$ca.title_txt_color])}>{$ca.title}</p>
</a>
{/volist}
</div>
{/notempty}
<!-- 500万 -->
{notempty name="data.why_choose"}
<div class="advantage-section">
{assign name="why_choose_title" value=":array_shift($data.why_choose)" /}
<h2 class="advantage-section__title">{$why_choose_title.title|default=''|raw}</h2>
<div class="advantage-section__list">
{volist name="data.why_choose" id="ch"}
<div class="advantage-card-wrap">
<div class="advantage-card" data-target="design">
<img src="{$ch.image}" alt="{$ch.title}:{$ch.short_title}" class="advantage-card__img">
<div class="advantage-card__content">
<!-- 标题+箭头容器:水平+垂直双居中,内部文字左、箭头右 -->
<div class="advantage-card__heading-wrap">
<div class="advantage-card__heading" {:style(['color'=>$ch.title_txt_color])}>{$ch.title}</div>
<img src="__IMAGES__/jiant.png" alt="" class="card-arrow">
</div>
<div class="advantage-card__description" {:style(['color'=>$ch.short_title_txt_color])}>{$ch.short_title}</div>
<div style="display:none;" class="mack-conten-text">{$ch.desc|raw}</div>
</div>
</div>
</div>
{/volist}
</div>
</div>
{/notempty}
<!-- 产品差旅充 -->
{notempty name="data.travel_charger"}
<div class="product-box">
{assign name="tc_title" value=":array_shift($data.travel_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$tc_title.title|default=''}</h2>
<p class="product-title-p">{$tc_title.short_title|default=''}</p>
</div>
<div class="product-container" >
{assign name="tc_first_section_lf" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_first_section_lf"}
<a class="product-left" href="{$tc_first_section_lf.link}">
<img src="{$tc_first_section_lf.image}" alt="{$tc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover product-img-1">
<img src="{$tc_first_section_lf.extra_image}" alt="{$tc_first_section_lf.short_title}">
</div>
</a>
{/notempty}
{assign name="tc_first_section_lr" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_first_section_lr"}
<div class="product-right">
<img src="{$tc_first_section_lr.image}" alt="{$tc_first_section_lr.title}" class="right-content right-img">
<video src="{$tc_first_section_lr.video}" class="right-content right-video" muted loop playsinline controls>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
</div>
{/notempty}
</div>
{assign name="tc_second_section" value=":array_splice($data.travel_charger, 0, 4)" /}
{notempty name="tc_second_section"}
<div class="product-card-box">
<div class="product-card-container">
{volist name="tc_second_section" id="tss"}
<a class="product-card-wrap" href="{$tss.link}">
<div class="product-card" >
<div class="product-card-img">
<img src="{$tss.image}" alt="{$tss.title}">
</div>
<div class="product-card-text">
<div class="product-card-title" {:style(['color'=>$tss.title_txt_color])}>{$tss.title}</div>
<div class="product-card-desc" {:style(['color'=>$tss.short_title_txt_color])}>{$tss.short_title}</div>
</div>
<div class="product-card-link">
<img src="__IMAGES__/ljgd.png" alt="查看更多">
</div>
</div>
</a>
{/volist}
</div>
</div>
{assign name="tc_three_section" value=":array_shift($data.travel_charger)" /}
{notempty name="tc_three_section"}
<a href="{$tc_three_section.link}" class="more">
<div class="more-img">
{$tc_three_section.title}
</div>
</a>
{/notempty}
{/notempty}
</div>
{/notempty}
<!-- 产品 家居充-->
{notempty name="data.home_charger"}
<div class="product-box">
{assign name="hc_title" value=":array_shift($data.home_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$hc_title.title|default=''}</h2>
<p class="product-title-p">{$hc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="hc_first_section_lf" value=":array_shift($data.home_charger)" /}
{notempty name="hc_first_section_lf"}
<a class="product-left" href="{$hc_first_section_lf.link}">
<img src="{$hc_first_section_lf.image}" alt="{$hc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover product-img-1">
<img src="{$hc_first_section_lf.extra_image}" alt="{$hc_first_section_lf.short_title}">
</div>
</a>
{/notempty}
{assign name="hc_first_section_lr" value=":array_shift($data.home_charger)" /}
{notempty name="hc_first_section_lr"}
<div class="product-right">
<img src="{$hc_first_section_lr.image}" alt="{$hc_first_section_lr.title}" class="right-content right-img">
<video src="{$hc_first_section_lr.video}" class="right-content right-video" muted loop playsinline controls>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
</div>
{/notempty}
</div>
{assign name="hc_second_section" value=":array_splice($data.home_charger, 0, 4)" /}
{notempty name="hc_second_section"}
<div class="product-card-box">
<div class="product-card-container">
{volist name="hc_second_section" id="hcs"}
<a class="product-card-wrap" href="{$hcs.link}">
<div class="product-card" href="#">
<div class="product-card-img">
<img src="{$hcs.image}" alt="{$hcs.short_title}">
</div>
<div class="product-card-text">
<div class="product-card-title">{$hcs.title}</div>
<div class="product-card-desc">{$hcs.short_title}</div>
</div>
<div class="product-card-link">
<img src="__IMAGES__/ljgd.png" alt="查看更多">
</div>
</div>
</a>
{/volist}
</div>
</div>
{/notempty}
{assign name="hc_three_section" value=":array_shift($data.home_charger)" /}
{notempty name="hc_three_section"}
<a href="{$hc_three_section.link}" class="more">
<div class="more-img">
{$hc_three_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
<!-- 产品 桌面充(悬浮图上右超出)底部列表样式不一样(左文右图) -->
<div class="product-box">
{assign name="dc_title" value=":array_shift($data.desktop_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$dc_title.title|default=''}</h2>
<p class="product-title-p">{$dc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="dc_first_section_lf" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_first_section_lf"}
<a class="product-left" href="{$dc_first_section_lf.link}">
<img src="{$dc_first_section_lf.image}" alt="{$dc_first_section_lf.short_title}" class="product-img">
<!-- 公共类+定位类:尺寸和第一个完全一致,仅定位不同 -->
<div class="product-img-hover product-img-2" >
<img src="{$dc_first_section_lf.extra_image}" alt="{$dc_first_section_lf.short_title}">
</div>
</a>
{/notempty}
{assign name="dc_first_section_lr" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_first_section_lr"}
<div class="product-right">
<img src="{$dc_first_section_lr.image}"
alt="使用场景" class="right-content right-img">
<!--muted loop playsinline controls-->
<video
src="{$dc_first_section_lr.video}"
class="right-content right-video" muted loop playsinline controls>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
</div>
{/notempty}
</div>
{assign name="dc_second_section" value=":array_splice($data.desktop_charger, 0, 2)" /}
{notempty name="dc_second_section"}
<div class="product-card-box">
<div class="product-card-container2">
{volist name="dc_second_section" id="dcs"}
<a class="product-card2" href="{$dcs.link}">
<div class="product-text2">
<!-- 新增内部容器,确保所有内容左对齐一致性 -->
<div class="product-text-content2">
<div class="product-card-title2">{$dcs.title}</div> <!-- 测试超出一行省略 -->
<div class="product-card-desc2">{$dcs.short_title}</div> <!-- 测试超出2行省略 -->
<div class="product-card-link2">
<img src="__IMAGES__/ljgd.png" alt="了解更多">
</div>
</div>
</div>
<div class="product-card-img2">
<img src="{$dcs.image}" alt="{$dcs.title}">
</div>
</a>
{/volist}
</div>
</div>
{/notempty}
{assign name="dc_three_section" value=":array_shift($data.desktop_charger)" /}
{notempty name="dc_three_section"}
<a href="{$dc_three_section.link}" class="more">
<div class="more-img">
{$dc_three_section.title}
</div>
</a>
{/notempty}
</div>
<!-- 墙插 -->
{notempty name="data.wall_charger"}
<div class="product-box">
{assign name="wc_title" value=":array_shift($data.wall_charger)" /}
<div class="product-title">
<h2 class="product-title-h2">{$wc_title.title|default=''}</h2>
<p class="product-title-p">{$wc_title.short_title|default=''}</p>
</div>
<div class="product-container">
{assign name="wc_first_section_lf" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_first_section_lf"}
<a class="product-left" href="{$wc_first_section_lf.link}">
<img src="{$wc_first_section_lf.image}" alt="{$wc_first_section_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<div class="product-img-hover product-img-1">
<img src="{$wc_first_section_lf.extra_image}" alt="{$wc_first_section_lf.title}">
</div>
</a>
{/notempty}
{assign name="wc_first_section_lr" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_first_section_lr"}
<div class="product-right">
<img src="{$wc_first_section_lr.image}" alt="{$wc_first_section_lr.title}" class="right-content right-img">
<video src="{$wc_first_section_lr.video}" class="right-content right-video" muted loop playsinline controls>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
</div>
{/notempty}
</div>
{assign name="wc_more_section" value=":array_shift($data.wall_charger)" /}
{notempty name="wc_more_section"}
<a href="{$wc_more_section.link}" class="more">
<div class="more-img">
{$wc_more_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
{notempty name="data.converter"}
<!-- 转换器 -->
<div class="product-box">
{assign name="ct_title" value=":array_shift($data.converter)" /}
<div class="product-title">
<h2 class="product-title-h2">{$ct_title.title|default=''}</h2>
<p class="product-title-p">{$ct_title.short_title|default=''}</p>
</div>
{assign name="ct_more_section" value=":array_pop($data.converter)" /}
{assign name="ct_chunk_section" value=":array_chunk($data.converter, 2)" /}
{assign name="ct_chunk_section_len" value=":count($ct_chunk_section)" /}
{volist name="ct_chunk_section" id="cts" key="k"}
<div class="product-container">
{assign name="cts_lf" value=":array_shift($cts)" /}
{notempty name="cts_lf"}
<a class="product-left" href="{$cts_lf.link}">
<img src="{$cts_lf.image}" alt="{$cts_lf.title}" class="product-img">
<!-- 公共类+定位类:尺寸统一,定位不同 -->
<!--style="display:flex;justify-content: center;"-->
<div class="product-img-hover product-img-1" >
<!-- style="width:70%"-->
<img src="{$cts_lf.extra_image}" alt="{$cts_lf.title}">
</div>
</a>
{/notempty}
{assign name="cts_lr" value=":array_shift($cts)" /}
{notempty name="cts_lr"}
<div class="product-right">
<img src="{$cts_lr.image}" alt="{$cts_lr.title}" class="right-content right-img">
<video src="{$cts_lr.video}" class="right-content right-video" muted loop playsinline controls>
您的浏览器不支持HTML5视频播放请升级浏览器
</video>
</div>
{/notempty}
</div>
{neq name="k" value="$ct_chunk_section_len"}
<div class="line"></div>
{/neq}
{/volist}
{notempty name="ct_more_section"}
<a href="{$ct_more_section.link}" class="more" style="padding: clamp(1.5rem, 3vw, 3rem) 0">
<div class="more-img">
{$ct_more_section.title}
</div>
</a>
{/notempty}
</div>
{/notempty}
{notempty name="data.footer_info"}
<!-- 底部 -->
<div class="prodline-footer-box">
<div class="prodline-footer-box-img">
<img src="{$data.footer_info.0.image}" alt="">
</div>
</div>
{/notempty}
<!-- 蒙版 -->
<div class="mask" id="mask">
<div class="mask-content" >
<span class="close-btn">&times;</span>
<div class="mask-scroll-content"></div>
</div>
</div>
{/block}
{block name="script"}
<script type="text/javascript">
let swiper=null;
const advantageItems = document.querySelectorAll('.advantage-card');
let scrollTop = 0; // 保存页面滚动位置
let closeBtnHtml = null; // 关闭按钮元素(全局变量,避免重复创建)
const mask = document.getElementById('mask');
const maskContent = document.querySelector('.mask-content');
const maskScrollContent = document.querySelector('.mask-scroll-content'); // 滚动容器(关键!)
const closeBtn = document.querySelector('.close-btn')
// 初始化:确保 maskScrollContent 存在于 maskContent 中(避免被清空)
if (!maskScrollContent) {
// 如果页面没有 mask-scroll-content动态创建确保结构稳定
const scrollContent = document.createElement('div');
scrollContent.className = 'mask-scroll-content';
maskContent.appendChild(scrollContent);
}
function createCloseBtn() {
if (closeBtnHtml) {
closeBtnHtml.remove();
}
closeBtnHtml = document.createElement('span');
closeBtnHtml.className = 'close-btn';
closeBtnHtml.innerHTML = '&times;';
closeBtnHtml.addEventListener('click', hideMask);
// 挂载到 maskContent而非 scrollContent避免被滚动影响位置
maskContent.prepend(closeBtnHtml);
}
function showMask(contentHtml) {
// 保存页面滚动位置
scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
// 关键:将内容填充到 scrollContent 中(而非直接替换 maskContent
maskScrollContent.innerHTML = contentHtml;
createCloseBtn();
// 显示蒙版
mask.style.display = 'flex';
// 禁止滚动(复用你的逻辑)
document.documentElement.classList.add('no-scroll');
document.body.classList.add('no-scroll');
document.body.style.top = `-${scrollTop}px`;
// 额外:打开蒙版时就重置滚动位置(避免残留上次滚动状态)
maskScrollContent.scrollTop = 0;
}
function hideMask() {
// 关键步骤 1先重置 scrollContent 的滚动位置(此时元素还未被销毁)
maskScrollContent.scrollTop = 0;
// 关键步骤 2清空 scrollContent 的内容(而非 maskContent
maskScrollContent.innerHTML = "";
// 隐藏蒙版
mask.style.display = 'none';
// 恢复滚动(复用你的逻辑)
document.documentElement.classList.remove('no-scroll');
document.body.classList.remove('no-scroll');
document.body.style.top = '';
// 还原页面滚动位置
window.scrollTo(0, scrollTop);
// 移除关闭按钮(可选,避免残留)
if (closeBtnHtml) {
closeBtnHtml.remove();
closeBtnHtml = null;
}
}
// 点击卡片显示详情
advantageItems.forEach((item) => {
item.addEventListener('click', (e) => {
// 获取当前点击卡片内的.mack-conten-text元素
const currentMackContent = e.currentTarget.querySelector('.mack-conten-text');
if (currentMackContent) {
// 关键修改获取该元素的子内容innerHTML 本身就是内部HTML不含当前元素标签
// 若想更彻底,可遍历子节点拼接内容(兼容特殊场景)
let contentHtml = '';
Array.from(currentMackContent.childNodes).forEach(child => {
// 只保留元素节点和文本节点(过滤空节点)
if (child.nodeType === 1 || child.nodeType === 3) {
contentHtml += child.outerHTML || child.textContent;
}
});
// 显示蒙版并传入纯净的子内容
showMask(contentHtml);
}
});
});
// 关闭按钮事件
closeBtn.addEventListener('click', hideMask);
// 点击蒙版背景关闭(可选)
mask.addEventListener('click', (e) => {
if (e.target === mask) hideMask();
});
// ESC 键关闭(可选)
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && mask.style.display === 'flex') hideMask();
});
// 关键:拦截蒙版的 touchmove 事件,阻止滚动穿透(移动端核心)
mask.addEventListener(
'touchmove',
(e) => {
// 只有点击蒙版背景(不是内容区域)才阻止滚动
if (e.target === mask) {
e.preventDefault(); // 阻止默认触摸滚动行为
e.stopPropagation(); // 阻止事件冒泡
}
},
{ passive: false }
); // passive: false 必须,否则 preventDefault 无效
const allVideos = document.querySelectorAll('.right-video');
// 停止所有视频播放
function stopAllVideos() {
allVideos.forEach((video) => {
video.pause();
video.style.display = 'none';
// 显示对应图片
const img = video.parentElement.querySelector('.right-img');
if (img) img.style.display = 'block';
});
}
// 滚动切换图片/视频(核心逻辑)
window.addEventListener('scroll', function () {
const productRights = document.querySelectorAll('.product-right');
let activeVideo = null;
// 找出当前在视口中的视频容器
productRights.forEach((rightContainer) => {
const img = rightContainer.querySelector('.right-img');
const video = rightContainer.querySelector('.right-video');
const videoSrc = video.src.trim()
if (!img || !video) return;
if(!videoSrc) return;
const rect = rightContainer.getBoundingClientRect();
// 视口判断容器进入视口50%以上视为活跃
const isInView =
rect.top < window.innerHeight * 0.7 &&
rect.bottom > window.innerHeight * 0.3;
if (isInView) {
activeVideo = video;
}
});
// 处理活跃视频
if (activeVideo) {
stopAllVideos(); // 先停止其他视频
const img = activeVideo.parentElement.querySelector('.right-img');
img.style.display = 'none';
activeVideo.style.display = 'block';
// 自动播放(兼容原生控制栏,用户手动暂停后不会强制播放)
if (activeVideo.paused) {
activeVideo.play().catch((err) => {
console.log('视频播放失败(浏览器限制):', err);
// 播放失败时回退到图片
activeVideo.style.display = 'none';
img.style.display = 'block';
});
}
} else {
stopAllVideos(); // 无活跃视频时停止所有播放
}
});
window.onload = function () {
if (typeof Swiper === 'undefined') {
console.error('Swiper加载失败请刷新页面重试');
return;
}
swiper = new Swiper('.auto-swiper-container', {
autoplay: {
delay: 3000, // 3秒切换
disableOnInteraction: false,
},
loop: false,
slidesPerView: 1,
spaceBetween: 0,
// 启用分页指示标(核心配置)
pagination: {
el: '.swiper-pagination', // 对应 HTML 中的指示标容器
clickable: true, // 允许点击指示标切换
// dynamicBullets: true, // 动态指示标(当前激活放大)
//dynamicMainBullets: 3, // 动态模式显示3个核心指示标
},
navigation: false,
scrollbar: false,
on: {
resize: function () {
this.update();
},
},
});
window.addEventListener('resize', function () {
swiper.update();
});
// 初始化时触发滚动事件,确保状态正确
window.dispatchEvent(new Event('scroll'));
};
</script>
{/block}

View File

@@ -18,7 +18,7 @@ if (!function_exists('image_domain_concat')) {
return $path;
}
return url_join($domain, $path);
return rtrim($domain, '/') . '/' . ltrim($path, '/');
}
}
@@ -39,7 +39,7 @@ if (!function_exists('video_domain_concat')) {
return $path;
}
return url_join($domain, $path);
return rtrim($domain, '/') . '/' . ltrim($path, '/');
}
}

View File

@@ -21,7 +21,7 @@
],
"require": {
"php": ">=8.0.0",
"topthink/framework": "8.1.2",
"topthink/framework": "^8.0",
"topthink/think-orm": "v3.0.34",
"topthink/think-filesystem": "^3.0",
"topthink/think-multi-app": "^1.1",

View File

@@ -2,12 +2,9 @@
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
// 指令定义
'commands' => [
'data:migrate' => \app\command\DataMigration::class,
'openapi:addclient' => \app\command\OpenApiMgr\AddClient::class,
],
];

View File

@@ -43,13 +43,13 @@ return [
// 磁盘类型
'type' => \filesystem\driver\Qiniu::class,
// bucker 名称
'bucket' => env('QINIU_CLOUD.BUCKET', 'orico-official-website'),
'bucket' => 'orico-official-website',
// 访问密钥
'access_key' => env('QINIU_CLOUD.ACCESS_KEY', 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms'),
'access_key' => 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms',
// 密钥
'secret_key' => env('QINIU_CLOUD.SECRET_KEY', 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q'),
'secret_key' => 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q',
// 外部URL
'base_url' => env('QINIU_CLOUD.BASE_URL', '//szw73dlk3.hn-bkt.clouddn.com'),
'base_url' => '//szw73dlk3.hn-bkt.clouddn.com',
// 路径
'path_prefix' => '/storage',
// 文件名称回调,可为文件名添加特定标志,以便可以在后续识别
@@ -70,13 +70,13 @@ return [
// 磁盘类型
'type' => \filesystem\driver\Qiniu::class,
// bucker 名称
'bucket' => env('QINIU_CLOUD.BUCKET', 'orico-official-website'),
'bucket' => 'orico-official-website',
// 访问密钥
'access_key' => env('QINIU_CLOUD.ACCESS_KEY', 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms'),
'access_key' => 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms',
// 密钥
'secret_key' => env('QINIU_CLOUD.SECRET_KEY', 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q'),
'secret_key' => 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q',
// 外部URL
'base_url' => env('QINIU_CLOUD.BASE_URL', '//szw73dlk3.hn-bkt.clouddn.com'),
'base_url' => '//szw73dlk3.hn-bkt.clouddn.com',
// 路径
'path_prefix' => '/storage/videos',
// 文件名称回调,可为文件名添加特定标志,以便可以在后续识别

View File

@@ -31,7 +31,7 @@ class CreateVideo extends Migrator
$table = $this->table('video', ['engine' => 'MyISAM', 'comment' => '视频表']);
$table->addColumn('language_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '语言ID'])
->addColumn('category_id', 'integer', ['signed' => false , 'null' => false, 'comment' => '分类ID'])
->addColumn('name', 'string', ['limit' => 128 , 'null' => false, 'comment' => '名称'])
->addColumn('name', 'string', ['limit' => 64 , 'null' => false, 'comment' => '名称'])
->addColumn('desc', 'string', ['limit' => 512, 'null' => true, 'default' => null, 'comment' => '描述信息'])
->addColumn('image', 'string', ['limit' => 125, 'null' => true, 'default' => null, 'comment' => '封面图片'])
->addColumn('video', 'string', ['limit' => 125, 'null' => true, 'default' => null, 'comment' => '视频地址'])

View File

@@ -32,8 +32,6 @@ class CreateSysBannerItem extends Migrator
$table->addColumn('banner_id', 'integer', ['null' => false, 'comment' => '所属Banner ID'])
->addColumn('title', 'string', ['limit' => 256, 'null' => false, 'comment' => '标题'])
->addColumn('title_txt_color', 'string', ['limit' => 7, 'null' => false, 'default' => '', 'comment' => '标题文本颜色'])
->addColumn('short_title', 'string', ['limit' => 255, 'null' => true, 'comment' => 'banner简称'])
->addColumn('short_title_txt_color', 'string', ['limit' => 7, 'null' => true, 'comment' => 'banner简称文本颜色'])
->addColumn('desc', MysqlAdapter::PHINX_TYPE_TEXT, ['null' => true, 'default' => null, 'comment' => '描述'])
->addColumn('desc_txt_color', 'string', ['limit' => 7, 'null' => false, 'default' => '', 'comment' => '描述文本颜色'])
->addColumn('type', 'string', ['limit' => 16, 'null' => false, 'comment' => '类型: image为图片, video为视频'])
@@ -41,7 +39,7 @@ class CreateSysBannerItem extends Migrator
->addColumn('extra_image', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '额外的图片'])
->addColumn('video', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '视频'])
->addColumn('link_to', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '链接到(类型): article:文章, article_category:文章分类, product:产品, product_category:产品分类, custom:自定义链接'])
->addColumn('link', 'string', ['limit' => 510, 'null' => true, 'default' => null, 'comment' => '链接'])
->addColumn('link', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '链接'])
->addColumn('sort', 'integer', ['limit' => 11, 'null' => false, 'default' => 0, 'comment' => '排序'])
->addColumn('status', 'boolean', ['limit' => 1, 'null' => false, 'default' => 1, 'comment' => '-1为禁用, 1为启用'])
->addColumn('created_at', 'timestamp', ['null' => false, 'default' =>'CURRENT_TIMESTAMP', 'comment' => '创建时间'])

View File

@@ -73,8 +73,8 @@ class SysConfigInit extends Seeder
["id" => 56, "group_id" => 12, "title" => "Instagram URL新窗口打开", "name" => "article_share_to_instagram.is_blank", "value" => "1", "extra" => "1:是\n0:否", "type" => "radio", "sort" => 6, "remark" => "", "created_at" => "2025-04-23 17:49:12", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 57, "group_id" => 12, "title" => "Twitter URL新窗口打开", "name" => "article_share_to_twitter.is_blank", "value" => "1", "extra" => "1:是\n0:否", "type" => "radio", "sort" => 9, "remark" => "", "created_at" => "2025-04-23 17:49:12", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 58, "group_id" => 12, "title" => "Reddit URL新窗口打开", "name" => "article_share_to_reddit.is_blank", "value" => "1", "extra" => "1:是\n0:否", "type" => "radio", "sort" => 12, "remark" => "", "created_at" => "2025-04-23 17:49:12", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 59, "group_id" => 1, "title" => "产品询盘可选国家", "name" => "optional_country_for_product_inquiry", "value" => "Afghanistan\nAlbania\nAlgeria\nAmerican Samoa\nAndorra\nAngola\nAnguilla\nAntigua and Barbuda\nArgentina\nArmenia\nAruba\nAustralia\nAustria\nAzerbaijan\nAzores\nBahamas\nBahrain\nBangladesh\nBarbados\nBelarus\nBelgium\nBelize\nBenin\nBermuda\nBhutan\nBolivia\nBosnia and Herzegovina\nBotswana\nBrazil\nBrunei\nBulgaria\nBurkina Faso\nBurundi\nCambodia\nCameroon\nCanada\nCanarias\nCape Verde\nCayman\nCentral African Republic\nChad\nChile\nChina\nColombia\nComoros\nCongo (Congo-Kinshasa)\nCongo\nCook Islands\nCosta Rica\nCote D'Ivoire\nCroatia\nCuba\nCyprus\nCzech\nDenmark\nDjibouti\nDominica\nDominican\nEcuador\nEgypt\nEl Salvador\nEquatorial Guinea\nEritrea\nEstonia\nEthiopia\nFiji\nFinland\nFrance\nFrench Guiana\nFrench Polynesia\nGabon\nGambia\nGeorgia\nGermany\nGhana\nGreece\nGreenland\nGrenada\nGuadeloupe\nGuam\nGuatemala\nGuinea\nGuinea-Bissau\nGuyana\nHaiti\nHonduras\nHungary\nIceland\nIndia\nIndonesia\nIran\nIraq\nIreland\nIsrael\nItaly\nJamaica\nJapan\nJordan\nKazakhstan\nKenya\nKiribati\nKorea (North)\nKorea (South)\nKuwait\nKyrgyzstan\nLaos\nLatvia\nLebanon\nLesotho\nLiberia\nLibya\nLiechtenstein\nLithuania\nLuxembourg\nMacedonia\nMadagascar\nMadeira\nMalawi\nMalaysia\nMaldives\nMali\nMalta\nMarshall Islands\nMartinique\nMauritania\nMauritius\nMexico\nMicronesia\nMoldova\nMonaco\nMongolia\nMetropolis\nMorocco\nMozambique\nMyanmar\nNamibia\nNauru\nNepal\nNetherlands Antilles\nNetherlands\nNew Caledonia\nNew Zealand\nNicaragua\nNiger\nNiue\nNorthern Mariana\nNorway\nOman\nPakistan\nPalau\nPalestine\nPanama\nPapua New Guinea\nParaguay\nPeru\nPhilippines\nPitcairn Islands\nPoland\nPortugal\nPuerto Rico\nQatar\nReunion\nRomania\nRussian Federation\nRwanda\nSaint Helena\nSaint Kitts-Nevis\nSaint Lucia\nSaint Vincent and the Grenadines\nSamoa\nSan Marino\nSao Tome and Principe\nSaudi Arabia\nSenegal\nSerbia\nSeychelles\nSierra Leone\nSingapore\nSlovakia\nSlovenia\nSolomon Islands\nSomalia\nSouth Africa\nSpain\nSri Lanka\nSudan\nSuriname\nSwaziland\nSweden\nSwitzerland\nSyria\nTajikistan\nTanzania\nThailand\nThe British Virgin Islands\nThe United States Virgin Islands\nTimor-Leste\nTogo\nTokelau\nTonga\nTrinidad and Tobago\nTunisia\nTurkey\nTurkmenistan\nTurks and Caicos Islands\nTuvalu\nUganda\nUkraine\nUnited Arab Emirates\nUnited Kingdom\nUnited States\nUruguay\nUzbekistan\nVanuatu\nVatican City\nVenezuela\nVietnam\nWallis and Futuna\nWestern Sahara\nYemen\nZambia\nZimbabwe", "extra" => "", "type" => "textarea", "sort" => 7, "remark" => "", "created_at" => "2025-04-27 11:10:22", "updated_at" => "2025-06-11 17:09:13", "deleted_at" => null],
["id" => 60, "group_id" => 4, "title" => "产品询盘可选国家", "name" => "optional_country_for_product_inquiry", "value" => "Afghanistan\nAlbania\nAlgeria\nAmerican Samoa\nAndorra\nAngola\nAnguilla\nAntigua and Barbuda\nArgentina\nArmenia\nAruba\nAustralia\nAustria\nAzerbaijan\nAzores\nBahamas\nBahrain\nBangladesh\nBarbados\nBelarus\nBelgium\nBelize\nBenin\nBermuda\nBhutan\nBolivia\nBosnia and Herzegovina\nBotswana\nBrazil\nBrunei\nBulgaria\nBurkina Faso\nBurundi\nCambodia\nCameroon\nCanada\nCanarias\nCape Verde\nCayman\nCentral African Republic\nChad\nChile\nChina\nColombia\nComoros\nCongo (Congo-Kinshasa)\nCongo\nCook Islands\nCosta Rica\nCote D'Ivoire\nCroatia\nCuba\nCyprus\nCzech\nDenmark\nDjibouti\nDominica\nDominican\nEcuador\nEgypt\nEl Salvador\nEquatorial Guinea\nEritrea\nEstonia\nEthiopia\nFiji\nFinland\nFrance\nFrench Guiana\nFrench Polynesia\nGabon\nGambia\nGeorgia\nGermany\nGhana\nGreece\nGreenland\nGrenada\nGuadeloupe\nGuam\nGuatemala\nGuinea\nGuinea-Bissau\nGuyana\nHaiti\nHonduras\nHungary\nIceland\nIndia\nIndonesia\nIran\nIraq\nIreland\nIsrael\nItaly\nJamaica\nJapan\nJordan\nKazakhstan\nKenya\nKiribati\nKorea (North)\nKorea (South)\nKuwait\nKyrgyzstan\nLaos\nLatvia\nLebanon\nLesotho\nLiberia\nLibya\nLiechtenstein\nLithuania\nLuxembourg\nMacedonia\nMadagascar\nMadeira\nMalawi\nMalaysia\nMaldives\nMali\nMalta\nMarshall Islands\nMartinique\nMauritania\nMauritius\nMexico\nMicronesia\nMoldova\nMonaco\nMongolia\nMetropolis\nMorocco\nMozambique\nMyanmar\nNamibia\nNauru\nNepal\nNetherlands Antilles\nNetherlands\nNew Caledonia\nNew Zealand\nNicaragua\nNiger\nNiue\nNorthern Mariana\nNorway\nOman\nPakistan\nPalau\nPalestine\nPanama\nPapua New Guinea\nParaguay\nPeru\nPhilippines\nPitcairn Islands\nPoland\nPortugal\nPuerto Rico\nQatar\nReunion\nRomania\nRussian Federation\nRwanda\nSaint Helena\nSaint Kitts-Nevis\nSaint Lucia\nSaint Vincent and the Grenadines\nSamoa\nSan Marino\nSao Tome and Principe\nSaudi Arabia\nSenegal\nSerbia\nSeychelles\nSierra Leone\nSingapore\nSlovakia\nSlovenia\nSolomon Islands\nSomalia\nSouth Africa\nSpain\nSri Lanka\nSudan\nSuriname\nSwaziland\nSweden\nSwitzerland\nSyria\nTajikistan\nTanzania\nThailand\nThe British Virgin Islands\nThe United States Virgin Islands\nTimor-Leste\nTogo\nTokelau\nTonga\nTrinidad and Tobago\nTunisia\nTurkey\nTurkmenistan\nTurks and Caicos Islands\nTuvalu\nUganda\nUkraine\nUnited Arab Emirates\nUnited Kingdom\nUnited States\nUruguay\nUzbekistan\nVanuatu\nVatican City\nVenezuela\nVietnam\nWallis and Futuna\nWestern Sahara\nYemen\nZambia\nZimbabwe", "extra" => null, "type" => "textarea", "sort" => 7, "remark" => null, "created_at" => "2025-04-27 11:23:25", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 59, "group_id" => 1, "title" => "产品询盘可选国家", "name" => "optional_country_for_product_inquiry", "value" => "Afghanistan\nAlbania\nAlgeria\nAmerican Samoa\nAndorra\nAngola\nAnguilla\nAntigua and Barbuda\nArgentina\nArmenia\nAruba\nAustralia\nAustria\nAzerbaijan\nAzores\nBahamas\nBahrain\nBangladesh\nBarbados\nBelarus\nBelgium\nBelize\nBenin\nBermuda\nBhutan\nBolivia\nBosnia and Herzegovina\nBotswana\nBrazil\nBrunei\nBulgaria\nBurkina Faso\nBurundi\nCambodia\nCameroon\nCanada\nCanarias\nCape Verde\nCayman\nCentral African Republic\nChad\nChile\nChina\nColombia\nComoros\nCongo (Congo-Kinshasa)\nCongo\nCook Islands\nCosta Rica\nCote D'Ivoire\nCroatia\nCuba\nCyprus\nCzech\nDenmark\nDjibouti\nDominica\nDominican\nEcuador\nEgypt\nEl Salvador\nEquatorial Guinea\nEritrea\nEstonia\nEthiopia\nFiji\nFinland\nFrance\nFrench Guiana\nFrench Polynesia\nGabon\nGambia\nGeorgia\nGermany\nGhana\nGreece\nGreenland\nGrenada\nGuadeloupe\nGuam\nGuatemala\nGuinea\nGuinea-Bissau\nGuyana\nHaiti\nHonduras\nHungary\nIceland\nIndia\nIndonesia\nIran\nIraq\nIreland\nIsrael\nItaly\nJamaica\nJapan\nJordan\nKazakhstan\nKenya\nKiribati\nKorea (North)\nKorea (South)\nKuwait\nKyrgyzstan\nLaos\nLatvia\nLebanon\nLesotho\nLiberia\nLibya\nLiechtenstein\nLithuania\nLuxembourg\nMacedonia\nMadagascar\nMadeira\nMalawi\nMalaysia\nMaldives\nMali\nMalta\nMarshall Islands\nMartinique\nMauritania\nMauritius\nMexico\nMicronesia\nMoldova\nMonaco\nMongolia\nMontserrat\nMorocco\nMozambique\nMyanmar\nNamibia\nNauru\nNepal\nNetherlands Antilles\nNetherlands\nNew Caledonia\nNew Zealand\nNicaragua\nNiger\nNiue\nNorthern Mariana\nNorway\nOman\nPakistan\nPalau\nPalestine\nPanama\nPapua New Guinea\nParaguay\nPeru\nPhilippines\nPitcairn Islands\nPoland\nPortugal\nPuerto Rico\nQatar\nReunion\nRomania\nRussian Federation\nRwanda\nSaint Helena\nSaint Kitts-Nevis\nSaint Lucia\nSaint Vincent and the Grenadines\nSamoa\nSan Marino\nSao Tome and Principe\nSaudi Arabia\nSenegal\nSerbia\nSeychelles\nSierra Leone\nSingapore\nSlovakia\nSlovenia\nSolomon Islands\nSomalia\nSouth Africa\nSpain\nSri Lanka\nSudan\nSuriname\nSwaziland\nSweden\nSwitzerland\nSyria\nTajikistan\nTanzania\nThailand\nThe British Virgin Islands\nThe United States Virgin Islands\nTimor-Leste\nTogo\nTokelau\nTonga\nTrinidad and Tobago\nTunisia\nTurkey\nTurkmenistan\nTurks and Caicos Islands\nTuvalu\nUganda\nUkraine\nUnited Arab Emirates\nUnited Kingdom\nUnited States\nUruguay\nUzbekistan\nVanuatu\nVatican City\nVenezuela\nVietnam\nWallis and Futuna\nWestern Sahara\nYemen\nZambia\nZimbabwe", "extra" => "", "type" => "textarea", "sort" => 7, "remark" => "", "created_at" => "2025-04-27 11:10:22", "updated_at" => "2025-06-11 17:09:13", "deleted_at" => null],
["id" => 60, "group_id" => 4, "title" => "产品询盘可选国家", "name" => "optional_country_for_product_inquiry", "value" => "Afghanistan\nAlbania\nAlgeria\nAmerican Samoa\nAndorra\nAngola\nAnguilla\nAntigua and Barbuda\nArgentina\nArmenia\nAruba\nAustralia\nAustria\nAzerbaijan\nAzores\nBahamas\nBahrain\nBangladesh\nBarbados\nBelarus\nBelgium\nBelize\nBenin\nBermuda\nBhutan\nBolivia\nBosnia and Herzegovina\nBotswana\nBrazil\nBrunei\nBulgaria\nBurkina Faso\nBurundi\nCambodia\nCameroon\nCanada\nCanarias\nCape Verde\nCayman\nCentral African Republic\nChad\nChile\nChina\nColombia\nComoros\nCongo (Congo-Kinshasa)\nCongo\nCook Islands\nCosta Rica\nCote D'Ivoire\nCroatia\nCuba\nCyprus\nCzech\nDenmark\nDjibouti\nDominica\nDominican\nEcuador\nEgypt\nEl Salvador\nEquatorial Guinea\nEritrea\nEstonia\nEthiopia\nFiji\nFinland\nFrance\nFrench Guiana\nFrench Polynesia\nGabon\nGambia\nGeorgia\nGermany\nGhana\nGreece\nGreenland\nGrenada\nGuadeloupe\nGuam\nGuatemala\nGuinea\nGuinea-Bissau\nGuyana\nHaiti\nHonduras\nHungary\nIceland\nIndia\nIndonesia\nIran\nIraq\nIreland\nIsrael\nItaly\nJamaica\nJapan\nJordan\nKazakhstan\nKenya\nKiribati\nKorea (North)\nKorea (South)\nKuwait\nKyrgyzstan\nLaos\nLatvia\nLebanon\nLesotho\nLiberia\nLibya\nLiechtenstein\nLithuania\nLuxembourg\nMacedonia\nMadagascar\nMadeira\nMalawi\nMalaysia\nMaldives\nMali\nMalta\nMarshall Islands\nMartinique\nMauritania\nMauritius\nMexico\nMicronesia\nMoldova\nMonaco\nMongolia\nMontserrat\nMorocco\nMozambique\nMyanmar\nNamibia\nNauru\nNepal\nNetherlands Antilles\nNetherlands\nNew Caledonia\nNew Zealand\nNicaragua\nNiger\nNiue\nNorthern Mariana\nNorway\nOman\nPakistan\nPalau\nPalestine\nPanama\nPapua New Guinea\nParaguay\nPeru\nPhilippines\nPitcairn Islands\nPoland\nPortugal\nPuerto Rico\nQatar\nReunion\nRomania\nRussian Federation\nRwanda\nSaint Helena\nSaint Kitts-Nevis\nSaint Lucia\nSaint Vincent and the Grenadines\nSamoa\nSan Marino\nSao Tome and Principe\nSaudi Arabia\nSenegal\nSerbia\nSeychelles\nSierra Leone\nSingapore\nSlovakia\nSlovenia\nSolomon Islands\nSomalia\nSouth Africa\nSpain\nSri Lanka\nSudan\nSuriname\nSwaziland\nSweden\nSwitzerland\nSyria\nTajikistan\nTanzania\nThailand\nThe British Virgin Islands\nThe United States Virgin Islands\nTimor-Leste\nTogo\nTokelau\nTonga\nTrinidad and Tobago\nTunisia\nTurkey\nTurkmenistan\nTurks and Caicos Islands\nTuvalu\nUganda\nUkraine\nUnited Arab Emirates\nUnited Kingdom\nUnited States\nUruguay\nUzbekistan\nVanuatu\nVatican City\nVenezuela\nVietnam\nWallis and Futuna\nWestern Sahara\nYemen\nZambia\nZimbabwe", "extra" => null, "type" => "textarea", "sort" => 7, "remark" => null, "created_at" => "2025-04-27 11:23:25", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 61, "group_id" => 1, "title" => "导航位置店铺URL", "name" => "navigation_store_url", "value" => "https://oricotechs.com/", "extra" => null, "type" => "text", "sort" => 6, "remark" => null, "created_at" => "2025-05-13 17:45:46", "updated_at" => "2025-06-11 17:09:13", "deleted_at" => null],
["id" => 62, "group_id" => 4, "title" => "导航位置店铺URL", "name" => "navigation_store_url", "value" => "https://oricotechs.com/", "extra" => null, "type" => "text", "sort" => 6, "remark" => null, "created_at" => "2025-05-13 17:45:46", "updated_at" => "2025-06-12 09:55:21", "deleted_at" => null],
["id" => 63, "group_id" => 7, "title" => "邮箱", "name" => "website_email", "value" => "supports@orico.com.cn", "extra" => null, "type" => "text", "sort" => 1, "remark" => null, "created_at" => "2025-05-23 17:06:53", "updated_at" => "2025-06-11 17:09:13", "deleted_at" => null],
@@ -119,10 +119,6 @@ class SysConfigInit extends Seeder
["id" => 102, "group_id" => 13, "title" => "视频 - 唯一性保持", "name" => "upload_video.filemd5_unique", "value" => "1", "extra" => "0:否\n1:是", "type" => "radio", "sort" => 5, "remark" => "如果保持视频文件唯一,重复视频上传时将立即返回已存在的地址;如果不保持,则同模块同一天上传的文件根据原文件名覆盖。", "created_at" => "2025-06-12 11:24:24", "updated_at" => "2025-06-12 11:25:18", "deleted_at" => NULL],
["id" => 103, "group_id" => 13, "title" => "附件 - 保留原文件名", "name" => "upload_attachment.filename_keep", "value" => NULL, "extra" => "0:否\n1:是", "type" => "radio", "sort" => 6, "remark" => "默认为否", "created_at" => "2025-06-12 11:27:08", "updated_at" => "2025-06-12 11:27:08", "deleted_at" => NULL],
["id" => 104, "group_id" => 13, "title" => "附件 - 唯一性保持", "name" => "upload_attachment.filemd5_unique", "value" => "1", "extra" => "0:否\n1:是", "type" => "radio", "sort" => 7, "remark" => "如果保持附件文件唯一,重复附件上传时将立即返回已存在的地址;如果不保持,则同模块同一天上传的文件根据原文件名覆盖。", "created_at" => "2025-06-12 11:28:22", "updated_at" => "2025-06-12 11:28:22", "deleted_at" => NULL],
['id' => 105, 'group_id' => 13, 'title' => '视频 - 保存到', 'name' => 'upload_video.save_to', 'value' => 'qiniu_cloud', 'extra' => 'local:本地\nqiniu_cloud:七牛云', 'type' => 'radio', 'sort' => 6, 'remark' => '视频保存位置,默认为“本地” - [本地为本站点服务器;七牛云为七牛云对象存储,上传经这本站点服务器中转,上传耗时稍慢于“本地”]', 'created_at' => '2025-07-25 10:46:24', 'updated_at' => '2025-07-25 16:41:53', 'deleted_at' => NULL],
['id' => 106, 'group_id' => 13, 'title' => '附件 - 保存到', 'name' => 'upload_attachment.save_to', 'value' => 'local', 'extra' => 'local:本地\nqiniu_cloud:七牛云', 'type' => 'radio', 'sort' => 9, 'remark' => '附件保存位置,默认为“本地” - [本地为本站点服务器;七牛云为七牛云对象存储,上传经这本站点服务器中转,上传耗时稍慢于“本地”]', 'created_at' => '2025-07-25 10:51:34', 'updated_at' => '2025-07-25 16:41:53', 'deleted_at' => NULL],
['id' => 107, 'group_id' => 14, 'title' => '视频 - 保存到', 'name' => 'upload_video.save_to', 'value' => 'qiniu_cloud', 'extra' => 'local:本地\nqiniu_cloud:七牛云', 'type' => 'radio', 'sort' => 6, 'remark' => '视频保存位置,默认为“本地” - [本地为本站点服务器;七牛云为七牛云对象存储,上传经这本站点服务器中转,上传耗时稍慢于“本地”]', 'created_at' => '2025-07-25 10:46:24', 'updated_at' => '2025-07-25 16:41:53', 'deleted_at' => NULL],
['id' => 108, 'group_id' => 14, 'title' => '附件 - 保存到', 'name' => 'upload_attachment.save_to', 'value' => 'local', 'extra' => 'local:本地\nqiniu_cloud:七牛云', 'type' => 'radio', 'sort' => 9, 'remark' => '附件保存位置,默认为“本地” - [本地为本站点服务器;七牛云为七牛云对象存储,上传经这本站点服务器中转,上传耗时稍慢于“本地”]', 'created_at' => '2025-07-25 10:51:34', 'updated_at' => '2025-07-25 16:41:53', 'deleted_at' => NULL],
];
$table = $this->table('sys_config');

54
public/gitea_webhook.php Normal file
View File

@@ -0,0 +1,54 @@
<?php
try {
$secret_key = 'Aa-1221';
// check for POST request
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
throw new \Exception('FAILED - not POST - '. $_SERVER['REQUEST_METHOD']);
}
// get content type
$content_type = isset($_SERVER['CONTENT_TYPE']) ? strtolower(trim($_SERVER['CONTENT_TYPE'])) : '';
if ($content_type != 'application/json') {
throw new \Exception('FAILED - not application/json - '. $content_type);
}
// get payload
$payload = trim(file_get_contents("php://input"));
if (empty($payload)) {
throw new \Exception('FAILED - no payload');
}
// get header signature
$header_signature = isset($_SERVER['HTTP_X_GITEA_SIGNATURE']) ? $_SERVER['HTTP_X_GITEA_SIGNATURE'] : '';
if (empty($header_signature)) {
throw new \Exception('FAILED - header signature missing');
}
// calculate payload signature
$payload_signature = hash_hmac('sha256', $payload, $secret_key, false);
// check payload signature against header signature
if ($header_signature !== $payload_signature) {
throw new \Exception('FAILED - payload signature');
}
// convert json to array
$decoded = json_decode($payload, true);
// check for json decode errors
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \Exception('FAILED - json decode - '. json_last_error());
}
exec('git pull origin dev --rebase 2>&1', $result);
var_export($result);exit;
} catch (\Throwable $th) {
var_export($th->getMessage());
}

2
public/migrate_temp_images/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*
!.gitignore

View File

@@ -23,7 +23,7 @@
.iotbt1 {
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
padding-bottom: 24px;
padding-top: 40px;
font-weight: 700;
@@ -60,7 +60,7 @@
.iotbtp1 {
font-size: 14px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 11px;
word-break: break-word;
@@ -69,7 +69,7 @@
.iotbts1 {
text-align: center;
font-size: 12px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
color: #9e9e9f;
word-break: break-word;
}
@@ -140,7 +140,7 @@
font-size: 14px;
padding-top: 12px;
text-align: center;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
overflow-wrap: break-word;
word-break: break-word;
}
@@ -152,7 +152,7 @@
.sfbt1 {
text-align: center;
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 24px;
padding-top: 24px;
@@ -183,7 +183,7 @@
.cit {
width: 100%;
font-size: 14px;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
color: #000;
display: flex;
flex-direction: row;
@@ -237,7 +237,7 @@
.wcu_s1 {
color: #000;
font: 16px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
padding: 20px 24px;
}

View File

@@ -598,7 +598,7 @@
margin: auto;
font-size: 1rem;
color: #707070;
font-family: "HarmonyOS-Medium";
font-family: "Montserrat-Medium";
}
.oricoCnLc .gallery-thumbs .swiper-slide-thumb-active {
@@ -632,14 +632,14 @@
.oricoCnLc .info h5 {
font-size: #000;
font-size: 1rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
padding: 2rem 2rem 0 1rem;
margin: 0;
}
.oricoCnLc .info p {
color: #707070;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
padding: 1rem;
}
@@ -651,7 +651,7 @@
.oricoCnLc .m_ach-b .title {
font-size: 1.125rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
width: 98%;
margin: auto;
position: relative;
@@ -660,7 +660,7 @@
.oricoCnLc .m_ach-b .chtitle {
font-size: 1.125rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
width: 98%;
margin: auto;
position: relative;
@@ -677,7 +677,7 @@
.oricoCnLc .m_ch-title {
font-size: 1rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
width: 98%;
margin: 1rem auto 0;
padding: 1rem 0 0;
@@ -690,7 +690,7 @@
font-size: 0.875;
line-height: 1.5rem;
color: #707070;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
width: 98%;
margin: 1rem auto;
padding: 0;

View File

@@ -156,7 +156,7 @@
border-radius: 8px;
height: 48px;
box-shadow: none;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
}
.oricoEGapp-articledetail .content .share_box .comment .comment_form>div input {

View File

@@ -33,7 +33,7 @@
border-radius: 1rem;
background-color: #fff;
color: #6b6c6e;
font-family: "HarmonyOS-Medium";
font-family: "Montserrat-Medium";
font-size: 0.875rem;
display: inline-block;
margin-bottom: 0.5rem;

View File

@@ -16,7 +16,7 @@
font-size: 18px;
color: #004bfa;
text-align: left;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
@@ -27,7 +27,7 @@
color: #707070;
text-align: center;
text-align: left;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
}
@@ -83,7 +83,7 @@
.itlable {
font-size: 12.5px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
color: #000000;
font-weight: bold;
padding-bottom: 5px;
@@ -106,7 +106,7 @@
height: 48px;
border: none;
box-shadow: none;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
}
.itselectopen {
@@ -130,12 +130,12 @@
padding: 15px;
background: #f2f2f2;
border-radius: 8px;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
}
.bttj {
font-size: 14px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
/* width: 212px; */
/* height: 48px; */
@@ -173,7 +173,7 @@
.iotbt1 {
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
padding-bottom: 24px;
padding-top: 40px;
font-weight: 700;
@@ -210,7 +210,7 @@
.iotbtp1 {
font-size: 14px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 11px;
word-break: break-word;
@@ -219,7 +219,7 @@
.iotbts1 {
text-align: center;
font-size: 12px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
color: #9e9e9f;
word-break: break-word;
}
@@ -290,7 +290,7 @@
font-size: 14px;
padding-top: 12px;
text-align: center;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
overflow-wrap: break-word;
word-break: break-word;
}
@@ -302,7 +302,7 @@
.sfbt1 {
text-align: center;
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 24px;
padding-top: 24px;
@@ -333,7 +333,7 @@
.cit {
width: 100%;
font-size: 14px;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
color: #000;
display: flex;
flex-direction: row;
@@ -388,7 +388,7 @@
.wcu_s1 {
color: #000;
font-size: 16px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
padding: 20px 24px;
}

View File

@@ -16,7 +16,7 @@
font-size: 18px;
color: #004bfa;
text-align: left;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
@@ -27,7 +27,7 @@
color: #707070;
text-align: center;
text-align: left;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
}
@@ -83,7 +83,7 @@
.itlable {
font-size: 12.5px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
color: #000000;
font-weight: bold;
padding-bottom: 5px;
@@ -106,7 +106,7 @@
height: 48px;
border: none;
box-shadow: none;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
}
.itselectopen {
@@ -130,13 +130,13 @@
padding: 15px;
background: #f2f2f2;
border-radius: 8px;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
border: 0;
}
.bttj {
font-size: 14px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
/* width: 212px; */
padding: 15px 60px;
@@ -173,7 +173,7 @@
.iotbt1 {
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
padding-bottom: 24px;
padding-top: 40px;
font-weight: 700;
@@ -210,7 +210,7 @@
.iotbtp1 {
font-size: 14px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 11px;
word-break: break-word;
@@ -219,7 +219,7 @@
.iotbts1 {
text-align: center;
font-size: 12px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
color: #9e9e9f;
word-break: break-word;
}
@@ -290,7 +290,7 @@
font-size: 14px;
padding-top: 12px;
text-align: center;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
overflow-wrap: break-word;
word-break: break-word;
}
@@ -302,7 +302,7 @@
.sfbt1 {
text-align: center;
font-size: 18px;
font-family: HarmonyOS-Bold, HarmonyOS;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 24px;
padding-top: 24px;
@@ -333,7 +333,7 @@
.cit {
width: 100%;
font-size: 14px;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
color: #000;
display: flex;
flex-direction: row;
@@ -387,7 +387,7 @@
.wcu_s1 {
color: #000;
font: 16px;
font-family: HarmonyOS-Medium, HarmonyOS;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
padding: 20px 24px;
}

View File

@@ -7,7 +7,7 @@
margin-top: 3.3rem;
}
.oricoEGapp-Contact .banner_title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 1.5rem;
position: absolute;
top: 50%;
@@ -24,7 +24,7 @@
color: #000;
}
.oricoEGapp-Contact .title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 1rem;
}
.oricoEGapp-Contact .info {
@@ -43,12 +43,12 @@
height: 3rem;
}
.oricoEGapp-Contact .info .right .des {
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
font-size: 0.875rem;
line-height: 1.25rem;
}
.oricoEGapp-Contact .info_title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
line-height: 1.25rem;
margin-bottom: 0.22rem;
@@ -61,7 +61,7 @@
}
.oricoEGapp-Contact .question .title {
margin-top: 0.5rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
line-height: 1.25rem;
}
@@ -86,7 +86,7 @@
.oricoEGapp-Contact .send {
display: block;
background-color: #004bfa;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
padding: 0.75rem 1.5rem;
color: #fff;
@@ -98,7 +98,7 @@
color: #ee2f53;
}
.oricoEGapp-Contact .contact_b {
font-family: "HarmonyOS-SemiBold";
font-family: "Montserrat-SemiBold";
font-size: 1rem;
padding-top: 1.125rem;
padding-bottom: 1.125rem;
@@ -119,42 +119,42 @@
.oricoEGapp-Contact input::-webkit-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input:-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input::-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input:-ms-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea::-webkit-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea:-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea::-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea:-ms-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact .narskfPage {
width: 100%;

View File

@@ -7,7 +7,7 @@
margin-top: 3.3rem;
}
.oricoEGapp-Contact .banner_title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 1.5rem;
position: absolute;
top: 50%;
@@ -24,7 +24,7 @@
color: #000;
}
.oricoEGapp-Contact .title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 1rem;
}
.oricoEGapp-Contact .info {
@@ -46,12 +46,12 @@
width: 88% !important;
}
.oricoEGapp-Contact .info .right .des {
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
font-size: 0.875rem;
line-height: 1.25rem;
}
.oricoEGapp-Contact .info_title {
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
line-height: 1.25rem;
margin-bottom: 0.22rem;
@@ -64,7 +64,7 @@
}
.oricoEGapp-Contact .question .title {
margin-top: 0.5rem;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
line-height: 1.25rem;
}
@@ -89,7 +89,7 @@
.oricoEGapp-Contact .send {
display: block;
background-color: #004bfa;
font-family: "HarmonyOS-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
padding: 0.75rem 1.5rem;
color: #fff;
@@ -101,7 +101,7 @@
color: #ee2f53;
}
.oricoEGapp-Contact .contact_b {
font-family: "HarmonyOS-SemiBold";
font-family: "Montserrat-SemiBold";
font-size: 1rem;
padding-top: 1.125rem;
padding-bottom: 1.125rem;
@@ -122,40 +122,40 @@
.oricoEGapp-Contact input::-webkit-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input:-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input::-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact input:-ms-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea::-webkit-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea:-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea::-moz-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}
.oricoEGapp-Contact textarea:-ms-input-placeholder {
color: #9e9e9f;
font-size: 0.875rem;
font-family: "HarmonyOS-Regular";
font-family: "Montserrat-Regular";
}

View File

@@ -1,7 +1,7 @@
@font-face {
font-family: 'icomoon';
src: url('../fonts/icomoon/icomoon.eot?11cuay');
src: url('../fonts/icomoon/icomoon.eot?11cuay#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?11cuay') format('opentype'),
src: url('../fonts/icomoon/icomoon.eot?11cuay#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?11cuay') format('truetype'),
url('../fonts/icomoon/icomoon.woff?11cuay') format('woff'), url('../fonts/icomoon/icomoon.svg?11cuay#icomoon') format('svg');
font-weight: normal;
font-style: normal;
@@ -54,7 +54,7 @@
font-family: 'colleciton';
src: url('../fonts/icomoon/colleciton/icomoon.eot?11cuay');
src: url('../fonts/icomoon/colleciton/icomoon.eot?11cuay#iefix') format('embedded-opentype'),
url('../fonts/icomoon/colleciton/icomoon.ttf?11cuay') format('opentype'), url('../fonts/icomoon/colleciton/icomoon.woff?11cuay') format('woff'),
url('../fonts/icomoon/colleciton/icomoon.ttf?11cuay') format('truetype'), url('../fonts/icomoon/colleciton/icomoon.woff?11cuay') format('woff'),
url('../fonts/icomoon/colleciton/icomoon.svg?11cuay#icomoon') format('svg');
font-weight: normal;
font-style: normal;
@@ -83,7 +83,7 @@
@font-face {
font-family: 'icomoon';
src: url('../fonts/icomoon/icomoona.eot?c46hgi');
src: url('../fonts/icomoon/icomoona.eot?c46hgi#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoona.ttf?c46hgi') format('opentype'),
src: url('../fonts/icomoon/icomoona.eot?c46hgi#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoona.ttf?c46hgi') format('truetype'),
url('../fonts/icomoon/icomoona.woff?c46hgi') format('woff'), url('../fonts/icomoon/icomoona.svg?c46hgi#icomoon') format('svg');
font-weight: normal;
font-style: normal;

View File

@@ -1,7 +1,7 @@
@font-face {
font-family: 'icomoon';
src: url('../fonts/icomoon/icomoon.eot?ujw7hy');
src: url('../fonts/icomoon/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?ujw7hy') format('opentype'),
src: url('../fonts/icomoon/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?ujw7hy') format('truetype'),
url('../fonts/icomoon/icomoon.woff?ujw7hy') format('woff'), url('../fonts/icomoon/icomoon.svg?ujw7hy#icomoon') format('svg');
font-weight: normal;
font-style: normal;
@@ -114,7 +114,7 @@
font-family: 'icomoon01';
src: url('fonts-20190124/icomoon.eot?ll2528');
src: url('fonts-20190124/icomoon.eot?ll2528#iefix') format('embedded-opentype'),
url('fonts-20190124/icomoon.ttf?ll2528') format('opentype'), url('fonts-20190124/icomoon.woff?ll2528') format('woff'),
url('fonts-20190124/icomoon.ttf?ll2528') format('truetype'), url('fonts-20190124/icomoon.woff?ll2528') format('woff'),
url('fonts-20190124/icomoon.svg?ll2528#icomoon') format('svg');
font-weight: normal;
font-style: normal;
@@ -161,7 +161,7 @@
@font-face {
font-family: 'icomoon02';
src: url('fonts/other/icomoon.eot?ujw7hy');
src: url('fonts/other/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('fonts/other/icomoon.ttf?ujw7hy') format('opentype'),
src: url('fonts/other/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('fonts/other/icomoon.ttf?ujw7hy') format('truetype'),
url('fonts/other/icomoon.woff?ujw7hy') format('woff'), url('fonts/other/icomoon.svg?ujw7hy#icomoon') format('svg');
font-weight: normal;
font-style: normal;
@@ -189,7 +189,7 @@
font-family: 'icomoon05';
src: url('fonts-20220322/icomoon.eot?cdcz43');
src: url('fonts-20220322/icomoon.eot?cdcz43#iefix') format('embedded-opentype'),
url('fonts-20220322/icomoon.ttf?cdcz43') format('opentype'), url('fonts-20220322/icomoon.woff?cdcz43') format('woff'),
url('fonts-20220322/icomoon.ttf?cdcz43') format('truetype'), url('fonts-20220322/icomoon.woff?cdcz43') format('woff'),
url('fonts-20220322/icomoon.svg?cdcz43#icomoon') format('svg');
font-weight: normal;
font-style: normal;

View File

@@ -29,7 +29,7 @@
display: none;
}
.oircoEgapp-head .top-menu .it-ct {
font-family: "HarmonyOS-SemiBold";
font-family: "Montserrat-SemiBold";
font-weight: bold;
}
.oircoEgapp-head .top-menu .it-ct .it-1 {

View File

@@ -1,20 +1,20 @@
@font-face {
font-family: "HarmonyOS";
src: url("../fonts/HarmonyOS-Regular.otf") format("opentype");
font-family: "Montserrat";
src: url("../fonts/Montserrat-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "HarmonyOS-Bold";
src: url("../fonts/HarmonyOS-Bold.otf") format("opentype");
font-family: "Montserrat-Bold";
src: url("../fonts/Montserrat-Bold.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "HarmonyOS-Medium";
src: url("../fonts/HarmonyOS-Medium.otf") format("opentype");
font-family: "Montserrat-Medium";
src: url("../fonts/Montserrat-Medium.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
@@ -22,7 +22,7 @@
* {
margin: 0;
padding: 0;
/* font-family: 'HarmonyOS'; */
/* font-family: 'Montserrat'; */
-ms-overflow-style: none;
/* IE 和 Edge */
scrollbar-width: none;
@@ -88,7 +88,7 @@ a {
}
body {
font-family: 'HarmonyOS-SemiBold';
font-family: 'Montserrat-SemiBold';
}
/* 分页样式 */
@@ -161,9 +161,7 @@ body {
.ql-editor>* {
cursor: text
}
.ql-editor video{
max-width: 100% !important;
}
.ql-editor p,.ql-editor ol,.ql-editor ul,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6 {
margin: 0;
padding: 0;

View File

@@ -1,30 +1,29 @@
@font-face {
font-family: "HarmonyOS";
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Regular.woff2") format("woff2");
font-family: "Montserrat";
src: url("../fonts/Montserrat-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "HarmonyOS-Bold";
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Bold.woff2") format("woff2");
font-family: "Montserrat-Bold";
src: url("../fonts/Montserrat-Bold.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "HarmonyOS-Medium";
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Medium.woff2") format("woff2");
font-family: "Montserrat-Medium";
src: url("../fonts/Montserrat-Medium.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
/* HarmonyOS-SemiBold1 */
@font-face {
font-family: "HarmonyOS-SemiBold";
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Bold.woff2") format("woff2");
font-family: "Montserrat-SemiBold";
src: url("../fonts/Montserrat-SemiBold.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
body {
font-family: 'HarmonyOS-SemiBold';
font-family: 'Montserrat-SemiBold';
margin: auto;
background-color: #f5f5f5;
max-width: 750px;
@@ -592,7 +591,7 @@ button.swiper-pagination-bullet {
.Innew-text .title {
font-size: 2.5rem;
padding-bottom: 1rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.Inpro-text {
padding: 2rem 0 0.8rem;
@@ -601,7 +600,7 @@ button.swiper-pagination-bullet {
.Inpro-text .title {
font-size: 1.5rem;
padding-bottom: 1rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.Innew-text .more {
@@ -636,7 +635,7 @@ video img {
font-size: 1.2rem;
max-height: 3rem;
overflow: hidden;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.inprotext .t-f16 {
font-size: 1rem;
@@ -958,12 +957,12 @@ video img {
margin: auto;
line-height: 2rem;
padding: 0 3rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.ban-t {
padding: 0.5rem 3rem;
font-size: 1.125rem;
font-family: 'HarmonyOS-Regular';
font-family: 'Montserrat-Regular';
}
.btn-more {
background: transparent;
@@ -980,7 +979,7 @@ video img {
margin: auto;
font-size: 1rem;
font-weight: 600;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
/*类别*/
.category {
@@ -1096,11 +1095,11 @@ video img {
padding: 0.2rem 0;
text-align: center;
margin: 0;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.num-bg li p {
font-size: 0.8rem;
font-family: 'HarmonyOS-Regular';
font-family: 'Montserrat-Regular';
}
/*标题*/
.Tech-text {
@@ -1116,7 +1115,7 @@ video img {
.Tech-text p {
padding: 1rem 0;
font-size: 0.875rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
.pos-text {
@@ -1126,7 +1125,7 @@ video img {
color: #fff;
font-size: 0.825rem;
margin: 0 auto;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
height: 2rem;
overflow: hidden;
text-overflow: ellipsis;
@@ -1158,7 +1157,7 @@ video img {
font-size: 0.9rem;
padding: 1rem 0;
line-height: 1.3em;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
word-break: break-all;
}
.faq span {
@@ -1173,7 +1172,7 @@ video img {
font-size: 0.875rem;
line-height: 1.75em;
color: #666;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
.faq i {
position: absolute;
@@ -1210,7 +1209,7 @@ video img {
word-wrap: break-word;
overflow: hidden;
height: 1.5rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
font-weight: 400;
word-break: break-all;
}
@@ -1218,7 +1217,7 @@ video img {
font-size: 1.125rem;
color: #7f7f7f;
padding-bottom: 1rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
font-weight: 400;
}
/*foot */
@@ -1250,7 +1249,7 @@ video img {
}
.foot-in h3 {
font-size: 1.25rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
font-weight: 100;
}
.logo-input {
@@ -1279,7 +1278,7 @@ video img {
margin-left: 1rem;
}
.foot-cate li {
min-width: 50%;
width: 50%;
display: inline-block;
float: left;
color: #fff;
@@ -1293,7 +1292,7 @@ video img {
.foot-cate li p {
font-size: 0.7rem;
line-height: 2.5rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
word-wrap: break-word;
}
.foot-wei {
@@ -1328,7 +1327,7 @@ video img {
width: 100%;
height: 1.2rem;
cursor: pointer;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
/*下拉*/
.m_footer .left {
@@ -1376,7 +1375,7 @@ video img {
text-align: center;
font-size: 12px;
padding-bottom: 0.5rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
/*下拉*/
.mask-up {
@@ -1986,7 +1985,7 @@ video img {
}
.swiper-slide a {
color: #000;
font-family: 'HarmonyOS-SemiBold';
font-family: 'Montserrat-SemiBold';
}
.swiper-slide img {
max-width: 100%;
@@ -2343,59 +2342,6 @@ video img {
margin-bottom: 1.3rem;
}
.products_des {
width: 100%;
margin-bottom: 50px;
}
.products_des img {
width: 100%;
}
.de_t_n {
font-size: 1.5em;
color: #333;
}
.detail_title {
text-align: center;
padding: 2% 0;
}
.detail_title p {
line-height: 2em;
}
.detail_con_a {
margin: auto;
overflow: hidden;
}
.lj_detail_text,
.lj_detail_texts {
font-size: 0.875em;
}
.lj_detail_text p {
line-height: 1.6em;
padding: 0.5% 0;
}
/*seo-pro*/
.seo-pro h3 {
font-size: 1.5em;
text-align: center;
color: #333;
margin: 2% 0 1%;
line-height: 1.2;
font-weight: 400;
}
.seo-pro p {
text-align: center;
margin: 0 0 11px;
}
.seo-pro a {
color: #333;
text-decoration: none;
}
.sa_blue,
.sa_blue a,
.seo-pro a:hover {
color: #009fdf;
}
/*两列*/
.list_two {
width: 100%;
@@ -2492,7 +2438,7 @@ video img {
margin-right: 0px;
line-height: 40px;
font-weight: 600;
font-family: HarmonyOS !important;
font-family: Montserrat !important;
color: #666;
text-align: left;
}
@@ -3480,26 +3426,26 @@ video img {
font-size: 1.5rem;
width: 90%;
margin: 4rem auto 0;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
}
.timedesin {
font-size: 0.875rem;
padding: 0.5rem 1rem;
line-height: 1.3rem;
width: 90%;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
.timeblue {
color: #004bfa;
font-size: 1.125rem;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
.timeblue img {
vertical-align: middle;
}
.timeblue a {
color: #004bfa;
font-family: 'HarmonyOS-Medium';
font-family: 'Montserrat-Medium';
}
/*视频*/
.video-youtu {
@@ -3559,7 +3505,7 @@ video img {
}
.vision-title {
font-size: 1rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
width: 98%;
margin: 1rem auto 0;
}
@@ -3567,7 +3513,7 @@ video img {
font-size: 0.875;
line-height: 1.5rem;
color: #707070;
font-family: 'HarmonyOS-Regular';
font-family: 'Montserrat-Regular';
width: 98%;
margin: 1rem auto;
}
@@ -3585,7 +3531,7 @@ video img {
}
.brand_title {
font-size: 1.125rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
width: 98%;
margin: 1rem auto 0;
position: relative;
@@ -3603,7 +3549,7 @@ video img {
font-size: 0.875;
line-height: 1.5rem;
color: #000000;
font-family: 'HarmonyOS-Regular';
font-family: 'Montserrat-Regular';
width: 98%;
margin: 1rem auto;
}
@@ -3656,7 +3602,7 @@ video::-webkit-media-controls-current-time-display {
}
.m_ach .title {
font-size: 1.125rem;
font-family: 'HarmonyOS-Bold';
font-family: 'Montserrat-Bold';
width: 98%;
margin: 1rem auto 0;
position: relative;
@@ -3681,7 +3627,7 @@ video::-webkit-media-controls-current-time-display {
}
.m_ach .list-num li p {
color: #707070;
font-family: 'HarmonyOS-Regular';
font-family: 'Montserrat-Regular';
}
/*新闻评测*/
.news-vertu {
@@ -3977,7 +3923,7 @@ video::-webkit-media-controls-current-time-display {
border-radius: 8px;
height: 48px;
box-shadow: none;
font-family: HarmonyOS-Regular, HarmonyOS;
font-family: Montserrat-Regular, Montserrat;
}
.comment_area {
width: 100% !important;

View File

@@ -220,31 +220,3 @@
color: #1f2635;
border-bottom: 1px solid #1f2635;
}
/*9.18 添加三级样式*/
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues {
position: relative;
}
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues .two-a {
position: relative;
padding-top: 6px;
display: flex;
font-size: 0.95rem !important;
flex-direction: row;
}
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .two-mues .two-a:hover {
border-bottom: none;
}
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .thress-mues {
display: none;
}
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list .thress-mues a {
padding-top: 0.375rem;
padding-left: 1.875rem;
}

View File

@@ -1,143 +0,0 @@
/* 核心模块固定90%宽度PC端优化移动端边距 */
.advantage-section {
width: 93.5%;
margin: 0 auto;
padding-top:0.99rem;
position: relative;
z-index: 1;
height: auto !important;
min-height: auto !important;
margin-bottom: 0.51rem;
}
/* 标题容器:恢复原有居中样式 */
.advantage-section__title {
font-size: 0.46rem;
font-weight: 700;
text-align: center;
color: #101010;
margin:0 auto;
margin-bottom: 0.51rem;
width: 80%;
}
/* 列表容器改为wrap换行实现2+3布局间距设为0.08rem8px */
.advantage-section__list {
display: flex;
justify-content: flex-start; /* 左对齐排列 */
align-items: flex-start;
gap: 0.08rem; /* 列间距设计稿8px=0.08rem */
row-gap: 0.08rem; /* 行间距设计稿8px=0.08rem */
width: 100% !important;
flex-wrap: wrap; /* 允许换行 */
overflow: visible !important;
padding: 0 !important;
height: auto !important;
min-height: 1px !important;
position: relative !important;
}
/* 卡片包裹容器:动态宽度控制 */
.advantage-card-wrap {
display: block !important;
height: auto !important;
min-height: 1px !important;
}
/* 第一行2个卡片宽度=(100% - 1个间距)/2 */
.advantage-card-wrap:nth-child(1),
.advantage-card-wrap:nth-child(2) {
width: calc((100% - 0.08rem) / 2) !important;
}
/* 第二行3个卡片宽度=(100% - 2个间距)/3 */
.advantage-card-wrap:nth-child(3),
.advantage-card-wrap:nth-child(4),
.advantage-card-wrap:nth-child(5) {
width: calc((100% - 2 * 0.08rem) / 3) !important;
}
/* 卡片核心:宽度继承父容器,高度自适应 */
.advantage-card {
width: 100% !important;
overflow: hidden;
box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease;
cursor: pointer;
background: #fff;
position: relative;
z-index: 1;
height: auto !important;
display: flex;
flex-direction: column;
border-radius: 0.1rem 0.1rem 0 0 !important;
}
/* 图片容器保持1:1比例 */
.advantage-card__img {
width: 100%;
aspect-ratio: 1 / 1; /* 1:1比例 */
object-fit: cover;
background-color: #f9f9f9;
display: block;
flex-shrink: 0;
}
/* 文字区域保持内边距和布局内部间距也调整为0.08rem */
.advantage-card__content {
width: 100%;
padding: 0.4rem 0.23rem 0.31rem 0.2rem; /* 上下内边距 */
gap: 0.08rem; /* 内部元素间距设计稿8px=0.08rem */
}
/* 标题容器间距设为0.08rem8px */
.advantage-card__heading-wrap {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.08rem; /* 设计稿8px=0.08rem */
width: 100%;
}
/* 卡片标题:字体大小调整 */
.advantage-card__heading {
font-size: 0.34rem;
font-weight: 600;
color: #101010;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; /* 强制不换行 */
overflow: hidden; /* 超出隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
}
/* 描述文字样式 */
.advantage-card__description {
font-size: 0.24rem;
color:#666666;
margin-top: 0.08rem; /* 与标题间距设计稿8px=0.08rem */
white-space: nowrap; /* 强制不换行 */
overflow: hidden; /* 超出隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
}
/* 箭头大小 */
.card-arrow {
transition: transform 0.3s ease;
display: inline-flex;
align-items: center;
justify-content: center;
width: 0.33rem;
height: 0.33rem;
}
/* 卡片hover效果 */
/* .advantage-card:hover {
transform: scale(1.03);
} */
/* 箭头hover位移 */
.advantage-card:hover .card-arrow {
transform: translateX(0.03rem);
}

View File

@@ -1,11 +0,0 @@
.prodline-footer-box{
width: 100%;
/* padding: 3rem 0; */
}
.prodline-footer-box-img {
width: 93.5%;
margin: 0 auto;
}
.prodline-footer-box-img img {
width: 100%;
}

View File

@@ -1,165 +0,0 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 1. 根字体适配限制最小根字体为14px从源头避免文字过小 */
/* html {
font-size: 16px;
} */
/* 平板端768px~1023px15px→16px过渡最小15px */
@media (max-width: 1024px) and (min-width: 768px) {
/* html {
font-size: calc(15px + (16 - 15) * (100vw - 768px) / (1023 - 768));
} */
html body {
margin: 0 !important;
padding: 0 !important;
width:100vw !important;
max-width: 100vw !important;
}
}
/* 移动端320px~767px固定14px不随屏幕缩小而变小避免文字<12px */
@media (max-width: 767px) {
/* html {
font-size: 14px;
} */
html body {
margin: 0 !important;
padding: 0 !important;
width:100vw !important;
max-width: 100vw !important;
}
}
/* 超小屏≤320px仍固定14px彻底杜绝文字过小 */
@media (max-width: 320px) {
/* html {
font-size: 14px;
} */
html body {
margin: 0 !important;
padding: 0 !important;
width:100vw !important;
max-width: 100vw !important;
}
}
body {
background: rgb(242, 243, 245);
/* margin:0 !important; */
}
a {
text-decoration: none;
display: block;
}
.header {
width: 100%;
background: #fff;
height: 60px;
display: flex;
align-items: center;
}
.header-img {
margin: 0 auto;
width: 90%;
display: flex;
align-items: center;
}
/* 强制设置根元素font-size优先级最高!important确保覆盖所有冲突 */
html {
font-size: inherit !important; /* 继承内联样式的50px而非浏览器默认值 */
-webkit-text-size-adjust: none !important; /* 禁止iOS自动调整字体大小 */
}
.oircoEgapp-foot .logo-white img {
margin: 0 auto;
}
.oircoEgapp-foot .m_footer {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.oircoEgapp-foot .m_footer .left,
.oircoEgapp-foot .foot-con {
display: flex;
flex-direction: row;
align-items: center;
}
.oircoEgapp-foot .m_footer .right {
max-width: 55%;
}
.oircoEgapp-foot .m_footer .left {
max-width: 40%;
justify-content: end;
margin-right: 4%;
}
.oircoEgapp-foot .foot-con span {
width: auto;
padding: 0 0.625rem;
}
.oircoEgapp-foot .foot-cate .clearfix li h3 {
margin-bottom: 10px;
}
.oircoEgapp-foot .foot-cate .clearfix li p,
.oircoEgapp-foot .foot-cate .clearfix li p a {
font-size: 12px;
}
.logo-white {
text-align: center;
padding: 1rem 0 0;
display: flex;
align-items: center;
}
.foot-cate {
padding: 0 0.16rem;
}
.foot-cate h3 {
font-size: 0.28rem;
}
.foot-cate li {
padding: 0.7rem 0;
min-height: 1.8rem;
}
.foot-cate li p {
line-height: 0.8rem;
}
.m_footer .right {
float: right;
width: 57%;
text-align: left;
}
.foot-con span {
font-size:0.28rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 1;
width: 100%;
height: auto;
cursor: pointer;
font-family: 'HarmonyOS-Medium';
}
.oircoEgapp-foot .foot-con span {
width: auto;
padding: 0 0.125rem;
}
.m_footer .left a{
display: flex;
align-items: center;
}
.m_footer .left img {
width: 0.7rem;
padding-right: 0.2rem;
padding-top: 0;
}
.oircoEgapp-foot .m_footer .right {
max-width: 50%;
}

View File

@@ -1,79 +0,0 @@
/* 蒙版样式 - 新增触摸事件禁止 */
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
overflow: hidden; /* 阻止蒙版自身滚动 */
touch-action: none; /* 禁止触摸行为 */
pointer-events: auto; /* 确保蒙版能接收事件 */
}
/* 蒙版内容容器 - 新增触摸事件传递控制 */
.mask-content {
width: 80%;
height: 100%;
background: rgb(242, 243, 245);
border-radius: 12px;
overflow: hidden; /* 内容容器不滚动 */
position: relative;
animation: popIn 0.3s ease;
max-height: 90vh;
display: flex;
flex-direction: column;
pointer-events: auto; /* 确保内容区域能正常交互 */
}
/* 滚动内容容器 - 保持不变 */
.mask-scroll-content {
flex: 1;
overflow-y: auto;
padding: 20px;
-webkit-overflow-scrolling: touch; /* 移动端顺滑滚动 */
}
/* 升级:同时禁止 html 和 body 滚动(关键兼容) */
.no-scroll {
overflow: hidden !important;
position: fixed !important;
width: 100% !important;
height: 100% !important;
}
/* 其他原有样式保持不变 */
@keyframes popIn {
from {
transform: scale(0.8);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
.close-btn {
position: absolute;
top: 20px;
right: 20px;
width: 40px;
height: 40px;
background-color: rgba(0, 0, 0, 0.3);
border-radius: 50%;
color: #fff;
font-size: 20px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
transition: background-color 0.3s ease;
z-index: 10;
}
.close-btn:hover {
background-color: #ff4d4f;
}

View File

@@ -1,27 +0,0 @@
.more {
width: 93.5%;
margin: 0 auto;
display: flex;
justify-content: center;
padding-top: 0.33rem;
}
.more:nth-child(5) {
padding-top: 0.33rem;
padding-bottom: 0.79rem;
}
.more-img {
background: #000;
color: #fff;
font-size: 0.21rem;
width: 1.54rem;
height: 0.5rem;
display: flex;
justify-content: center;
align-items: center;
border-radius: 0.5rem;
}
.line {
width: 100%;
height:0.14rem;
}

View File

@@ -1,43 +0,0 @@
/* 设计稿750px → 1rem=100px所有尺寸按设计稿÷100换算 */
.nav-box {
display: flex;
justify-content: space-around;
width: 93.5%;
margin: 0 auto;
background-color: #fff;
border-radius: 3.125rem; /* 设计稿312.5px */
box-shadow: 0 0.125rem 0.9375rem rgba(0, 0, 0, 0.05); /* 设计稿12.5px/93.75px */
position: relative;
z-index: 1;
overflow: visible;
padding: 0 0.42rem; /* 设计稿42px左右内边距取中间值 */
/* min-height: fit-content; */
/* height:0.86rem; */
box-sizing: border-box;
padding-bottom: 0.2rem;
}
.nav-item {
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
flex: 1;
margin-top: -0.5rem;
text-align: center;
align-self: flex-start;
}
.nav-item img {
width: 0.94rem; /* 设计稿80px示例图片尺寸可按实际调整 */
height: 0.94rem;
margin-bottom: 0.15rem; /* 设计稿10px图片与文字间距 */
}
.nav-item p {
font-size: 0.22rem; /* 设计稿16px文字大小 */
margin: 0;
}

View File

@@ -1,149 +0,0 @@
/* 设计稿750px → 1rem=100px所有尺寸按设计稿÷100换算 */
.product-box {
background: #fff;
padding-top: 0.93rem;
}
.product-title {
width: 93.5%;
margin: 0 auto;
padding-bottom: 0.83rem;
}
.product-title-h2 {
font-size: 0.46rem;
}
.product-title-p {
font-size: 0.24rem;
color: #646464;
margin-top: 0.21rem;
}
/* 容器布局:改为上下结构(右侧在上,左侧在下) */
.product-container {
display: flex;
flex-direction: column-reverse;
gap: 0.1rem; /* 上下间距 */
margin: 0 auto;
width: 93.5%;
align-items: stretch; /* 宽度铺满 */
}
/* 右侧容器:移到上方 */
.product-right {
flex: none; /* 取消flex比例自适应高度 */
position: relative;
border-radius: 0.1rem;
overflow: hidden;
width: 100%;
background-color: #f5f5f5;
min-height: 1.94rem;
aspect-ratio: 16/9;
}
/* 左侧容器:移到下方 */
.product-left {
flex: none; /* 取消flex比例自适应高度 */
position: relative;
width: 100%;
}
.product-img {
width: 100%;
height: auto;
border-radius: 0.1rem;
display: block;
}
/* 第二个产品:悬浮图位置调整(适配下方布局) */
.product-img-2 {
top: auto; /* 取消顶部定位 */
bottom: -0.8rem; /* 底部超出 */
transform: none;
width: 1.08rem;
position: absolute;
right: 0;
}
.right-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: opacity 0.3s ease;
}
.right-video {
display: none;
}
.video-play-btn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: none;
border: none;
cursor: pointer;
opacity: 0;
transition: opacity 0.3s ease;
z-index: 2;
display: none;
}
.play-icon {
display: inline-block;
}
.pause-icon {
display: none;
}
.video-play-btn.paused .play-icon {
display: none;
}
.video-play-btn.paused .pause-icon {
display: inline-block;
}
.right-video[playing] ~ .video-play-btn,
.product-right:hover .video-play-btn {
opacity: 1;
display: block;
}
/* 悬浮图容器:适配下方布局 */
.product-img-hover {
width: auto;
position: absolute;
right: 0;
bottom: 0;
z-index: 33;
}
.right {
right: -0.3rem;
}
/* 图片尺寸统一用rem */
.img1, .img2, .img3, .img4, .img5 {
width: 3.56rem;
max-width: 3.56rem;
}
.img1 {
max-width: 2.76rem;
}
.img2 {
max-width: 2.7rem;
}
.img3 {
max-width: 2.84rem;
}
.img4 {
max-width: 2.5rem;
}
.img5 {
max-width: 2.68rem;
}

View File

@@ -1,206 +0,0 @@
.product-card-container2 {
display: flex;
flex-wrap: nowrap;
gap: 10px;
align-items: stretch;
}
/* 产品卡片样式 */
.product-card2 {
box-sizing: border-box;
background: rgb(242, 243, 245);
border-radius: 8px;
cursor: pointer;
flex: 1 1 50%;
/* 一行2个 */
min-width: 180px;
/* 保证图片显示 */
/* max-width: calc(50% - 10px); */
/* 适配gap */
height: 240px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
display: flex;
text-decoration: none;
transition: transform 0.3s ease, box-shadow 0.3s ease;
overflow: hidden;
}
/* 核心修改:文字区域相对于父盒子居中,内部内容左对齐 */
.product-text2 {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
/* 文字区域整体水平居中相对于product-card1 */
justify-content: center;
/* 文字区域整体垂直居中相对于product-card1 */
text-align: left;
/* 内部文字左对齐 */
min-width: 70px;
box-sizing: border-box;
width: 100%;
}
/* 内部内容容器:统一承载标题、描述、链接,确保左对齐一致性 */
.product-text-content2 {
width: 100%;
/* 继承product-text的宽度确保左对齐范围完整 */
max-width: 280px;
/* 新增限制最大宽度避免PC端父容器过宽时内容排版松散 */
}
/* 标题:超出一行显示省略号(左对齐) */
.product-card-title2 {
font-size: clamp(16px, 2vw, 19px);
font-weight: 600;
color: #333;
margin-bottom: 5px;
letter-spacing: 0.2px;
/* 超出一行省略号核心样式 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
/* 基于内部容器左对齐,省略号生效 */
}
/* 描述超出2行显示省略号左对齐 */
.product-card-desc2 {
font-size: clamp(12px, 1.8vw, 14px);
color: #656565;
margin-bottom: 15px;
letter-spacing: 0.1px;
/* 超出2行显示省略号核心样式 */
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
white-space: normal;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
/* 基于内部容器左对齐 */
line-height: 1.4;
/* 优化行高2行高度适中 */
}
/* 图片容器:确保移动端显示 */
.product-card-img2 {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
min-width: 70px;
/* 强制保留图片区域,避免被挤压 */
}
.product-card-img2 img {
width: 100%;
height: auto;
max-height: 144px;
min-height: 80px;
object-fit: contain;
/* 保持图片比例完整,不拉伸 */
}
/* 链接图标:左对齐(基于内部容器) */
.product-card-link2 {
width: 100%;
display: flex;
justify-content: flex-start;
/* 图标左对齐 */
}
.product-card-link2 img {
width: clamp(60px, 4vw, 76px);
margin: 0;
/* 清除居中margin */
}
/* hover效果 */
.product-card2:hover {
transform: scale(1.03);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12);
}
/* 媒体查询平板端768px ~ 1023px */
@media (max-width: 1023px) and (min-width: 768px) {
.product-card2 {
height: 224px;
min-width: 170px;
}
.product-text2 {
padding-left: 20px;
}
.product-card-img2 img {
max-height: 128px;
}
}
/* 媒体查询移动端≤767px */
@media (max-width: 767px) {
.product-card-box2 {
margin-top: 19px;
}
.product-card2 {
padding: 0 8px;
}
.product-card-container2 {
gap: 8px;
}
.product-card2 {
height: 208px;
min-width: 160px;
}
.product-card-img2 img {
max-height: 120px;
min-height: 72px;
}
}
/* 媒体查询小屏手机≤375px */
@media (max-width: 375px) {
.product-card2 {
height: 192px;
min-width: 140px;
}
/* 强制文字最小12px保证可读性 */
.product-card-title2,
.product-card-desc2 {
font-size: 12px;
}
.product-card-img2 img {
max-height: 104px;
min-height: 64px;
}
.product-card2 {
padding: 0 5px;
}
.product-card-link2 img {
width: 40px;
/* 固定图标尺寸,节省空间 */
}
}
/* 媒体查询超小屏手机≤320px */
@media (max-width: 320px) {
.product-card2 {
min-width: 120px;
}
.product-text2 {
padding: 0 5px;
}
.product-card-img2 {
min-width: 60px;
/* 缩小图片区域最小宽度,平衡文字空间 */
}
}

View File

@@ -1,124 +0,0 @@
/* 设计稿750px → 1rem=100px所有尺寸按设计稿÷100换算 */
/* 容器布局:通用基础样式 */
.product-card-box {
width: 93.5%;
margin: 0.12rem auto 0;
padding: 0;
}
.product-card-container {
width: 100%;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
overflow: visible !important;
height: auto !important;
gap: 0.12rem; /* 间距调整为0.12rem */
justify-content: space-between; /* 两端对齐,确保铺满 */
align-items: flex-start;
}
/* 卡片包裹容器强制一行2个并铺满 */
.product-card-wrap {
display: block !important;
width: calc(50% - 0.06rem) !important; /* 50%宽度 - 间距的一半0.12rem/2=0.06rem */
height: auto !important;
margin: 0 !important; /* 移除额外margin */
}
/* 卡片核心:通用样式 */
.product-card {
background: rgb(242, 243, 245);
cursor: pointer;
width: 100% !important;
flex: none;
box-shadow: 0 0.1125rem 0.4rem rgba(0, 0, 0, 0.05);
margin: 0 !important;
box-shadow: 0 0.05rem 0.15rem rgba(0, 0, 0, 0.08); /* 包裹容器阴影 */
display: flex;
flex-direction: column;
height: auto !important;
transition: transform 0.3s ease;
border-radius: 0.07rem;
}
/* 卡片hover效果通用 */
.product-card:hover {
transform: scale(1.02);
}
/* 图片容器:通用样式 */
.product-card-img {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
flex: 0 0 auto;
aspect-ratio: 3 / 2.8;
overflow: hidden;
}
/* 产品图片:通用样式 */
.product-card img {
width: 100%;
height: 100%;
object-fit: contain;
object-position: center;
}
/* 文字容器:通用样式(居中对齐) */
.product-card-text {
flex: 1 1 auto;
display: flex;
flex-direction: column;
justify-content: center;
height: auto !important;
align-items: center;
text-align: center;
}
/* 标题样式:通用 */
.product-card-title {
font-size: 0.3rem;
font-weight: 600;
color: #333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
height: auto !important;
margin-bottom: 0.21rem;
}
/* 描述样式通用2行截断 */
.product-card-desc {
font-size: 0.24rem;
color: #656565;
word-break: break-word;
height: auto !important;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
line-height: 1.4;
}
/* 链接图标容器:通用样式(居中) */
.product-card-link {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
padding: 0.35rem 0 0.4rem;
height: auto !important;
text-align: center;
}
/* 链接图标:通用样式 */
.product-card-link img {
width: 1.54rem;
height: auto;
object-fit: contain;
}

View File

@@ -1,75 +0,0 @@
.swiper-container {
padding: 0 !important;
}
/* 轮播容器 - 核心:基于视口高度自适应 */
.auto-swiper-container {
width: 100%;
/* 关键:高度 = 视口高度的百分比可调整如60vh=屏幕高度60% */
margin-bottom:1.5rem;
/* max-height: 900px; */
min-height: 300px;
position: relative;
margin-top:60px;
}
/* 轮播项 - 填充容器高度 */
.auto-swiper-slide {
width: 100%;
/*height: 100%;*/
display: flex;
align-items: center;
justify-content: center;
}
/* 图片自适应核心:填充屏幕比例高度,保持比例 */
.auto-swiper-slide img {
width: 100%;
height: 100%;
object-fit: contain; /* 替换 cover 为 contain完整显示图片 */
display: block;
}
/* 轮播容器保持相对定位 */
.auto-swiper-container {
position: relative;
width: 100%;
}
/* 轮播容器保持相对定位 */
.auto-swiper-container {
position: relative;
width: 100%;
}
/* 指示标容器:居中排列 */
.swiper-pagination {
position: absolute;
bottom: 10%; /* 距离底部的距离,可调整 */
left: 50%;
transform: translateX(-50%);
/* width:100%;
display: flex; */
/* justify-content: center; */
z-index: 10;
}
/* 激活状态:白色长条 */
.swiper-pagination-bullet-active {
background:#fff !important;
}
/* 未激活状态:黑色透明圆点(可调整透明度) */
.swiper-pagination-bullet {
display: inline-block;
width: 16px !important;
height: 16px !important;
border-radius: 8px;
/*background: #555;*/
margin: 0 5px;
/*opacity: 0.8;*/
border: 1px solid #fff;
/*cursor: pointer;*/
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -66,7 +66,7 @@
.orico_Page_productxc .productxcMain .culture_top .culture_bril_con .culture_bril_div .title {
font-size: 1.125rem;
font-weight: 600;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
margin-top: 2rem;
width: 90%;
margin-left: 5%;
@@ -75,7 +75,7 @@
width: 80%;
font-size: 0.875rem;
color: #707070;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
margin-top: 1.375rem;
margin-left: 10%;
}
@@ -93,7 +93,7 @@
line-height: 2em;
margin-bottom: 2%;
font-weight: 600;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
}
.orico_Page_productxc .productxcMain .culture_vision .swt-Container {
width: 80%;
@@ -138,14 +138,14 @@
color: #101010;
line-height: 2em;
margin-bottom: 2%;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
margin-right: 10%;
}
.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .right .des {
font-size: 16px;
color: #737373;
line-height: 1.6rem;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
}
.orico_Page_productxc .productxcMain .culture_vision .swt-Container .swt-Table .Table-Row .Table-Cell {
display: table-cell;
@@ -159,7 +159,7 @@
font-size: 1rem;
color: #737373;
line-height: 1.6rem;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
}
.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 .des,
.orico_Page_productxc .productxcMain .culture_vision .swt-Container .culture_vision_02 .subtitle {

View File

@@ -30,7 +30,7 @@
}
.orico_Page_introduction .introductionMain .iotbpage .iotb_bgw .iotbt1 {
font-size: 32px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
padding-bottom: 65px;
padding-top: 88px;
font-weight: 700;
@@ -57,14 +57,14 @@
}
.orico_Page_introduction .introductionMain .iotbpage .iotb_bgw .iotb_part1 .iotb_p1_item .iotbtp1 {
font-size: 18px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
padding-bottom: 18px;
}
.orico_Page_introduction .introductionMain .iotbpage .iotb_bgw .iotb_part1 .iotb_p1_item .iotbts1 {
text-align: center;
font-size: 16px;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
color: #9e9e9f;
}
.orico_Page_introduction .introductionMain .iotb_part2 {
@@ -78,7 +78,7 @@
}
.orico_Page_introduction .introductionMain .iotb_part2 .iotbt1 {
font-size: 32px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
padding-bottom: 65px;
padding-top: 88px;
font-weight: 700;

View File

@@ -30,7 +30,7 @@
height: 11.25rem;
line-height: 11.25rem;
font-size: 2rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
text-align: center;
@@ -52,7 +52,7 @@
.orico_Page_achievement .achievementMain .achInfo .achNums .achive_shuju .title1 {
margin-top: 2.5rem;
font-size: 2rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
}
@@ -62,7 +62,7 @@
.orico_Page_achievement .achievementMain .achInfo .achNums .achive_shuju .subtitle1 {
margin-top: 1rem;
font-size: 1.125rem;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
font-weight: 400;
color: #707070;
}
@@ -71,7 +71,7 @@
height: auto;
position: relative;
background: #f2f2f2;
font-family: Metropolis;
font-family: Montserrat;
padding-bottom: 10%;
}
.orico_Page_achievement .achievementMain .achTimes .timecontent {
@@ -83,7 +83,7 @@
height: 11.25rem;
line-height: 11.25rem;
font-size: 2rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
text-align: center;
@@ -142,7 +142,7 @@
background: url(/static/index/pc/images/greyyuandian.png) 3px 3px no-repeat;
height: 2.375rem;
font-size: 1.25rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
line-height: 1.875rem;
@@ -153,7 +153,7 @@
.orico_Page_achievement .achievementMain .achTimes .timecontent .timelist .timeline-con .con_event_list .event_list div li {
display: inline-block;
width: 94%;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
line-height: 1.5625rem;
font-size: 1rem;
font-weight: 500;
@@ -181,7 +181,7 @@
height: 11.25rem;
line-height: 11.25rem;
font-size: 2rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
text-align: center;
@@ -211,7 +211,7 @@
margin-left: 4.0625rem;
margin-top: 2.5rem;
font-size: 1.75rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
color: #000000;
line-height: 1.625rem;
@@ -220,7 +220,7 @@
margin-left: 65px;
width: 80%;
font-size: 16px;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
font-weight: 500;
color: #707070;
line-height: 26px;

View File

@@ -52,10 +52,10 @@
font-weight: 600;
color: #000000;
line-height: 20px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
}
.orico_Page_brand .brandMain .our_brand_con .our_brand_bg .vtext .Table-Cell p {
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
font-size: 14px;
color: #707070;
line-height: 22px;
@@ -100,17 +100,17 @@
margin-top: 2.5rem;
}
.orico_Page_brand .brandMain .dis_bril_bg .dis_bril_con .title p {
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
}
.orico_Page_brand .brandMain .dis_bril_bg .dis_bril_con .subtitle {
width: 80%;
font-size: 0.875rem;
color: #707070;
font-family: Metropolis-Medium, Metropolis;
font-family: Montserrat-Medium, Montserrat;
margin-top: 2.5rem;
margin-left: 10%;
}
.orico_Page_brand .brandMain .dis_bril_bg .dis_bril_con .subtitle p {
font-family: Metropolis-Medium;
font-family: Montserrat-Medium;
line-height: 22px;
}

View File

@@ -153,7 +153,7 @@
border-radius: 8px;
height: 48px;
box-shadow: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_articleDetail .articleDetailMain .atmright .repply form {
width: auto;

View File

@@ -32,7 +32,7 @@
height: 56px;
line-height: 56px;
margin-top: -28px;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
}
.orico_Page_download .downloadMain .contact_c {
width: 82%;
@@ -43,7 +43,7 @@
border-radius: 1.5rem;
margin: auto;
display: flex;
font-family: "Metropolis-Medium";
font-family: "Montserrat-Medium";
color: #9e9e9f;
z-index: 9;
position: relative;
@@ -86,7 +86,7 @@
font-size: 1.125rem;
padding-top: 1.5625rem;
padding-bottom: 1.5625rem;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
text-align: center;
border-radius: 0.75rem;
cursor: pointer;
@@ -137,20 +137,20 @@
}
.orico_Page_download .downloadMain .contact_c .softlist .softit .title {
font-size: 1.125rem;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
color: #000;
}
.orico_Page_download .downloadMain .contact_c .softlist .softit .sub_title {
font-size: 0.875rem;
margin-top: 0.875rem;
font-family: "Metropolis-Regular";
font-family: "Montserrat-Regular";
color: #9e9e9f;
}
.orico_Page_download .downloadMain .contact_c .softlist .softit .des {
line-height: 20px;
margin-top: 8px;
font-size: 16px;
font-family: "Metropolis-Medium";
font-family: "Montserrat-Medium";
color: #000;
}
.orico_Page_download .downloadMain .contact_c .softlist .softit .l_button {
@@ -158,7 +158,7 @@
padding: 15px 40px;
margin-top: 74px;
display: inline-block;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
color: #004bfa;
background-color: rgba(0, 75, 250, 0.05);
cursor: pointer;
@@ -212,7 +212,7 @@
font-size: 16px;
position: relative;
cursor: pointer;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
color: #000;
}
.orico_Page_download .downloadMain .contact_c .vidotabs .hd ul li a{
@@ -257,7 +257,7 @@
height: 114px;
}
.orico_Page_download .downloadMain .contact_c .vidotabs .bdconten .video_hotul dd .htit .htit1 {
font-family: "Metropolis-Regular";
font-family: "Montserrat-Regular";
color: #000;
font-size: 16px;
margin-top: 40px;
@@ -266,7 +266,7 @@
white-space: nowrap;
}
.orico_Page_download .downloadMain .contact_c .vidotabs .bdconten .video_hotul dd .htit .htit2 {
font-family: "Metropolis-Regular";
font-family: "Montserrat-Regular";
color: #9e9e9f;
display: -webkit-box;
-webkit-box-orient: vertical;

View File

@@ -21,7 +21,7 @@
}
.orico_Page_bussiness .bussinessMain .bd_main .sfbt1 {
font-size: 24px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
text-align: center;
padding-bottom: 55px;
@@ -52,7 +52,7 @@
}
.orico_Page_bussiness .bussinessMain .bd_main .bd_ct .bd_from .theit .bditem .itlable {
font-size: 14px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
color: #000000;
font-weight: bold;
padding-bottom: 10px;
@@ -74,7 +74,7 @@
height: 48px;
border: none;
box-shadow: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_bussiness .bussinessMain .bd_main .bd_ct .bd_from .theit .bditem .form-control {
display: block;
@@ -97,7 +97,7 @@
.orico_Page_bussiness .bussinessMain .bd_main .bd_ct .bd_from .theit .bditem .sfbchecks .sfbcheckboxlist .cit {
width: 100%;
font-size: 14px;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
color: #000;
display: flex;
flex-direction: row;
@@ -119,11 +119,11 @@
background: #f2f2f2;
border: none;
border-radius: 8px;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_bussiness .bussinessMain .bd_main .bttj {
font-size: 14px;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
width: 212px;
padding: 15px 15px;

View File

@@ -25,7 +25,7 @@
color: #004bfa;
padding-bottom: 1rem;
text-align: center;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: 700;
}
.orico_Page_distributor .distributorMain .s1 {
@@ -72,7 +72,7 @@
}
.orico_Page_distributor .distributorMain .bd_from .theit .bditem .itlable {
font-size: 0.875rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
color: #000000;
font-weight: bold;
padding-bottom: 0.625rem;
@@ -99,7 +99,7 @@
border-radius: 0.5rem;
height: 3rem;
box-shadow: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_distributor .distributorMain .ittextarea {
height: 6.25rem;
@@ -108,11 +108,11 @@
border: none;
border-radius: 0.5rem;
resize: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_distributor .distributorMain .bttj {
font-size: 0.875rem;
font-family: Metropolis-Bold, Metropolis;
font-family: Montserrat-Bold, Montserrat;
font-weight: bold;
width: 10rem;
padding: 1.2rem 3.75rem;

View File

@@ -38,7 +38,7 @@
color: #000;
display: block;
width: 100%;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
font-size: 1.5rem;
}
.orico_Page_contact .contactMain .contact_c .all_contact .info .info_all {
@@ -77,7 +77,7 @@
}
.orico_Page_contact .contactMain .contact_c .all_contact .info .info_all .list .sub_list .title {
font-size: 0.875rem;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
}
.orico_Page_contact .contactMain .contact_c .all_contact .info .info_all .list .sub_list .des {
font-size: 0.875rem;
@@ -92,14 +92,14 @@
color: #000;
display: block;
width: 100%;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
}
.orico_Page_contact .contactMain .contact_c .all_contact .question .question_form .list {
margin-top: 1.5rem;
font-size: 1.5rem;
}
.orico_Page_contact .contactMain .contact_c .all_contact .question .question_form .list .title {
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
font-size: 0.875rem;
padding-bottom: 0.3125rem;
}
@@ -110,13 +110,13 @@
background: #f2f2f2;
box-shadow: none;
border: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
}
.orico_Page_contact .contactMain .contact_c .all_contact .question .question_form .list .ittextarea {
height: 100px;
background: #f2f2f2;
border: none;
font-family: Metropolis-Regular, Metropolis;
font-family: Montserrat-Regular, Montserrat;
resize: none;
}
.orico_Page_contact .contactMain .contact_c .all_contact .question .question_form .list .form_input input,
@@ -143,7 +143,7 @@
font-size: 0.875rem;
background-color: #004bfa;
color: #fff;
font-family: "Metropolis-Bold";
font-family: "Montserrat-Bold";
display: inline-block;
cursor: pointer;
}
@@ -157,7 +157,7 @@
background-color: #fff;
border-radius: 0.75rem;
margin-top: 1.5rem;
font-family: "Metropolis-SemiBold";
font-family: "Montserrat-SemiBold";
}
.orico_Page_contact .contactMain .contact_c .become_dis .text_blue {
color: #004bfa;

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