Compare commits
220 Commits
qiniu
...
49240893b5
| Author | SHA1 | Date | |
|---|---|---|---|
| 49240893b5 | |||
| 61728434d3 | |||
| 5736d09dbe | |||
| f4646f1e3a | |||
| 5b3e505e9b | |||
| 624d7fde2f | |||
| a85f2c1b3a | |||
| 7ec97c39a7 | |||
| 67016c4e9a | |||
| 69c3634731 | |||
| 12bc6aeee7 | |||
| 2ca25e083e | |||
| df37a7c00d | |||
| 11e2c4f457 | |||
| edfc27b06a | |||
| fdc9064739 | |||
| 55a75b56b1 | |||
| 005457e13e | |||
| 3664861ef0 | |||
| b1b59a96f2 | |||
| 954ddbf8ba | |||
| 48f3c2b312 | |||
| 48e3d7f846 | |||
| 24e5554bc4 | |||
| 33929b8284 | |||
| c49c3b40d8 | |||
| 2eb7a41732 | |||
| 60177fe0b4 | |||
| c767c20641 | |||
| 64e5c4fe26 | |||
| 77e84f1086 | |||
| 128fb60bad | |||
| 3976ee745d | |||
| e5ccd8d031 | |||
| 991ca5b61c | |||
| d9000fbe1c | |||
| b7e09aeb04 | |||
| 91661b6bb4 | |||
| ded748ca87 | |||
| e4f509a9e5 | |||
| ae51682afe | |||
| be33b21b43 | |||
| db1ad0f88a | |||
| 4d34d76c4f | |||
| 276d901875 | |||
| c9bc2022e6 | |||
| 2c85df4a98 | |||
| 8311181967 | |||
| 99d49ee8a2 | |||
| 4035fe4751 | |||
| 634a758aff | |||
| 8ea03656d9 | |||
| 37023c6949 | |||
| 4fa32b56fe | |||
| 06078cf312 | |||
| 578ad475b7 | |||
| 8ced45364b | |||
| 88a91f3136 | |||
| 5fd603cbc6 | |||
| b92753c822 | |||
| ddd578eb08 | |||
| 9db66b7429 | |||
| c91895f57f | |||
| 42d9efdc02 | |||
| e16b8b6b41 | |||
| 8e4befc0ea | |||
| 1a43ad30fb | |||
| 1cdd0536b9 | |||
| c28b945858 | |||
| 9cc6dc3cd9 | |||
| 9845883d8e | |||
| 4d25f6fec8 | |||
| 5d44c45c13 | |||
| 2764ce3b86 | |||
| 7f472b0351 | |||
| 7cb270b313 | |||
| 14df140847 | |||
| 86ffcb99ac | |||
| 13e58c33a2 | |||
| c476193002 | |||
| 88e307a10e | |||
| 5643faad94 | |||
| 989f6c25a0 | |||
| 2e5103b19a | |||
| ca3c00f396 | |||
| c8d5661856 | |||
| 288c86ffbc | |||
| ccc551dcba | |||
| b6e8aa7880 | |||
| cc2bb999c0 | |||
| e7009c8a49 | |||
| 2a8f88637c | |||
| 1fc6f9067c | |||
| ffa6f29af8 | |||
| 476a238d27 | |||
| 18862c584f | |||
| ee9174e801 | |||
| 4c13d31cb9 | |||
| 3ed8e1f8fc | |||
| 1c998a4be1 | |||
| c3c67c9e59 | |||
| ef5d2c6ab9 | |||
| 80678c23e2 | |||
| 53e56b4649 | |||
|
|
75977040f1 | ||
|
|
cf5a1280ee | ||
|
|
30d99619b2 | ||
|
|
7e877920ee | ||
|
|
04ede65c93 | ||
|
|
7524a9d572 | ||
|
|
9b5cf2147d | ||
| 9d898b1be3 | |||
| 834114261c | |||
|
|
2dc787bbfd | ||
|
|
5d61b4995f | ||
|
|
6800332b5b | ||
|
|
1c1d075f5e | ||
|
|
34821fd0bc | ||
|
|
3492d55707 | ||
|
|
5b901fe43c | ||
|
|
e6d299df83 | ||
|
|
5d5a338b55 | ||
|
|
4cd2f4ad26 | ||
|
|
14f899bf62 | ||
|
|
f82888c8e3 | ||
|
|
43c61a1ab5 | ||
|
|
4f2edf5d30 | ||
|
|
4ca59e81e3 | ||
|
|
9cd7b4f508 | ||
|
|
e02ad39620 | ||
|
|
0ce0c0a27a | ||
|
|
db72a5643c | ||
|
|
60fb6a5336 | ||
|
|
987e98279a | ||
|
|
9b926f1bf8 | ||
|
|
810b581d87 | ||
|
|
6bbc7c55c9 | ||
|
|
36de45c2e8 | ||
|
|
fd7e136c3a | ||
|
|
c9987373a4 | ||
|
|
5386610bf9 | ||
|
|
f1696a88d2 | ||
|
|
7e96a0e538 | ||
|
|
1f1cc6145d | ||
|
|
610377172a | ||
|
|
0d5593e173 | ||
|
|
6dbeb59b36 | ||
|
|
e54fccca65 | ||
|
|
1a92627ab9 | ||
|
|
88a7f06499 | ||
|
|
d6e58c78d4 | ||
|
|
46e78cff08 | ||
|
|
48c589babf | ||
|
|
72f974c083 | ||
| 9def4960c4 | |||
| 622f9f1665 | |||
| db7c34f4ad | |||
| f79dbc1121 | |||
| f3de8b4a26 | |||
| 85ccecb5bf | |||
| fa60ec4fcb | |||
| cb128a32a8 | |||
| 705566b376 | |||
| 0b13ec05dc | |||
| 7f765f40ee | |||
| 2a9c3332f7 | |||
| 12822ccb6b | |||
| 4872574eb0 | |||
| fa893d6b53 | |||
| f9445b6f49 | |||
| fea5f233a9 | |||
| e2b65856d2 | |||
| 3733ce720d | |||
| 0b82dbbf5f | |||
| 74d70fe815 | |||
| 0f2dc12752 | |||
| 499e86f52b | |||
| b24987fbd2 | |||
| 19aecea497 | |||
| 9060ed8274 | |||
| 54d15595ce | |||
| 101c1ae807 | |||
| ed7f274c6e | |||
| 1288ffd51b | |||
| 62e43375ab | |||
| 9f01db7d54 | |||
| ac06090792 | |||
| 6e6e4ac47c | |||
| 8ccc4b0cd5 | |||
| 55cd7f2b62 | |||
| 43e1ae0422 | |||
| 7fcb78dde0 | |||
| 6872a13141 | |||
| 234658f443 | |||
| 9f9a384075 | |||
| 047d7979ff | |||
| 3544c08005 | |||
| 2ff6d274d9 | |||
| d31d2359c6 | |||
| 6f9c89da7b | |||
| 9c6659830c | |||
| 4c906723df | |||
| d93aa62fbf | |||
| f216ba82b4 | |||
| bcd537ef25 | |||
| 589a099cdd | |||
| e13b30bbb2 | |||
| eb924d42d4 | |||
| 9378efe401 | |||
| 84dd8ea84b | |||
| 4c2441b1b6 | |||
| db8e0803c1 | |||
| 72b8230d5a | |||
| 5a8f32e0f8 | |||
| 517c2e954b | |||
| eee40e6010 | |||
| a7882da734 | |||
| 64ea309b30 | |||
| 708fee0490 | |||
| 5623c4160e |
@@ -26,6 +26,13 @@ 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
|
||||
|
||||
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -1,12 +1,10 @@
|
||||
*.eot filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.woff filter=lfs diff=lfs merge=lfs -text
|
||||
*.woff2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.svg filter=lfs diff=lfs merge=lfs -text
|
||||
*.tff filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.gzip filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.otf filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
26
.gitea/workflows/dev-ci.yaml
Normal file
26
.gitea/workflows/dev-ci.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
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
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -7,10 +7,19 @@ 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
|
||||
/.project
|
||||
/.project
|
||||
|
||||
24
.zed/settings.json
Normal file
24
.zed/settings.json
Normal file
@@ -0,0 +1,24 @@
|
||||
// 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
Normal file
208
LICENSE
Normal file
@@ -0,0 +1,208 @@
|
||||
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.
|
||||
@@ -99,18 +99,20 @@ class ReceiveProductSync
|
||||
}
|
||||
|
||||
$category = ProductCategoryModel::language($lang_id)->tcoId($tco_category['id'])->find();
|
||||
$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();
|
||||
if ($parent->isEmpty()) {
|
||||
throw new \Exception('产品分类父级不存在');
|
||||
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();
|
||||
if ($parent->isEmpty()) {
|
||||
throw new \Exception('产品分类父级不存在');
|
||||
}
|
||||
$category['pid'] = $parent['id'];
|
||||
$category['path'] = $parent['path'] . $parent['pid'];
|
||||
$category['level'] = $parent['level'] + 1;
|
||||
}
|
||||
if (!$category->save()) {
|
||||
throw new \Exception('产品分类更新失败');
|
||||
}
|
||||
$category['pid'] = $parent['id'];
|
||||
$category['path'] = $parent['path'] . $parent['pid'];
|
||||
$category['level'] = $parent['level'] + 1;
|
||||
}
|
||||
if (!$category->save($category)) {
|
||||
throw new \Exception('产品分类更新失败');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,15 +201,16 @@ class ReceiveProductSync
|
||||
throw new \Exception('产品创建失败');
|
||||
}
|
||||
}
|
||||
else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
||||
$product->spu = $data['spu'];
|
||||
$product->name = $data['name'];
|
||||
$product->category_id = $product_category['id'];
|
||||
$product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
||||
if (!$product->save()) {
|
||||
throw new \Exception('产品更新失败');
|
||||
}
|
||||
}
|
||||
// 注释更新同步,防止tco同步修改官网手动调整数据
|
||||
// else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
||||
// $product->spu = $data['spu'];
|
||||
// $product->name = $data['name'];
|
||||
// $product->category_id = $product_category['id'];
|
||||
// $product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
||||
// if (!$product->save()) {
|
||||
// throw new \Exception('产品更新失败');
|
||||
// }
|
||||
// }
|
||||
} catch (\Throwable $th) {
|
||||
return error(sprintf('%s %s:%d', $th->getMessage(), $th->getFile(), $th->getLine()));
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ class Article
|
||||
private function getExportArticleData()
|
||||
{
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$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) ? $image_host . $item->image : '';
|
||||
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
|
||||
return $item;
|
||||
});
|
||||
|
||||
|
||||
@@ -101,6 +101,8 @@ class BannerItem
|
||||
'rel_prod_cate_id',
|
||||
'title',
|
||||
'title_txt_color',
|
||||
'short_title',
|
||||
'short_title_txt_color',
|
||||
'desc',
|
||||
'desc_txt_color',
|
||||
'type',
|
||||
@@ -156,6 +158,8 @@ class BannerItem
|
||||
'rel_prod_cate_id',
|
||||
'title',
|
||||
'title_txt_color',
|
||||
'short_title',
|
||||
'short_title_txt_color',
|
||||
'desc',
|
||||
'desc_txt_color',
|
||||
'type',
|
||||
@@ -208,7 +212,7 @@ class BannerItem
|
||||
Log::error(sprintf('%s:%s %s', $th->getFile(), $th->getLine(), $th->getMessage()));
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
|
||||
return success('操作成功');
|
||||
}
|
||||
|
||||
@@ -240,6 +244,7 @@ class BannerItem
|
||||
'banner_name' => '分类名称',
|
||||
'title' => '横幅名称',
|
||||
'title_txt_color' => '横幅名称字体颜色',
|
||||
'short_title' => '横幅简称',
|
||||
'desc' => '描述',
|
||||
'desc_txt_color' => '描述字体颜色',
|
||||
'type' => '前台显示类型',
|
||||
@@ -262,17 +267,16 @@ class BannerItem
|
||||
// 获取导出数据
|
||||
private function getBannerExportData()
|
||||
{
|
||||
$param = request()->param([
|
||||
'title',
|
||||
'banner_id',
|
||||
'created_at'
|
||||
]);
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$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',
|
||||
@@ -311,7 +315,13 @@ class BannerItem
|
||||
}
|
||||
})
|
||||
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
|
||||
->select();
|
||||
->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;
|
||||
});
|
||||
}
|
||||
|
||||
// 删除
|
||||
|
||||
@@ -346,7 +346,7 @@ class Product
|
||||
private function getExportProductData()
|
||||
{
|
||||
$server = request()->server();
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||
$param = request()->param([
|
||||
'name',
|
||||
'spu',
|
||||
@@ -360,10 +360,10 @@ class Product
|
||||
'spu',
|
||||
'name',
|
||||
'short_name',
|
||||
'CONCAT("' . $image_host . '", `cover_image`)' => 'cover_image',
|
||||
'cover_image',
|
||||
'desc',
|
||||
'CONCAT("' . $image_host . '", `video_img`)' => 'video_img',
|
||||
'CONCAT("' . $image_host . '", `video_url`)' => 'video_url',
|
||||
'video_img',
|
||||
'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,7 +390,18 @@ class Product
|
||||
->order(['id' => 'asc'])
|
||||
->select()
|
||||
->bindAttr('category', ['category_name' => 'name'])
|
||||
->hidden(['category_id', 'category']);
|
||||
->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"]);
|
||||
}
|
||||
});
|
||||
|
||||
if (!$products->isEmpty()) {
|
||||
// 产品参数
|
||||
|
||||
@@ -16,8 +16,9 @@ class ProductTcoCategory
|
||||
$param = request()->param(['name']);
|
||||
|
||||
$categorys = ProductTcoCategoryModel::field([
|
||||
'tco_id' => 'id',
|
||||
'tco_pid' => 'pid',
|
||||
'id',
|
||||
'tco_id',
|
||||
'tco_pid',
|
||||
'name',
|
||||
])
|
||||
->withSearch(['name'], [
|
||||
@@ -25,10 +26,10 @@ class ProductTcoCategory
|
||||
])
|
||||
->language(request()->lang_id)
|
||||
->enabled()
|
||||
->order(['id' => 'asc'])
|
||||
->order(['tco_id' => 'asc'])
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
return success('获取成功', array_to_tree($categorys, 0, 'pid', false));
|
||||
return success('获取成功', array_to_tree($categorys, 0, 'tco_pid', false, true, 'tco_id'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,6 +342,30 @@ 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')
|
||||
],
|
||||
]
|
||||
],
|
||||
[
|
||||
'id' => 9,
|
||||
'name' => '笔记本(AI PC)专题',
|
||||
'url' => '',
|
||||
'children' => [
|
||||
[
|
||||
'id' => 91,
|
||||
'name' => '首页',
|
||||
'url' => (string)url('/index/topic/laptop/index')
|
||||
],
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
@@ -209,9 +209,6 @@ 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',
|
||||
@@ -230,13 +227,9 @@ class Video
|
||||
->select()
|
||||
->bindAttr('category', ['category_name' => 'name'])
|
||||
->hidden(['category_id', 'category'])
|
||||
->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;
|
||||
}
|
||||
->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) : '';
|
||||
$item->recommend = $item->recommend == 1 ? '是' : '否';
|
||||
$item->status = $item->status == 1 ? '启用' : '禁用';
|
||||
return $item;
|
||||
|
||||
@@ -32,7 +32,8 @@ class ProductCategoryModel extends ProductCategoryBaseModel
|
||||
// 所属产品目录分类id查询
|
||||
public function scopeTcoId($query, $value)
|
||||
{
|
||||
$query->where('related_tco_category', '=', $value);
|
||||
// $query->where('related_tco_category', '=', $value);
|
||||
$query->whereRaw('FIND_IN_SET(:ref_id, related_tco_category)', ['ref_id' => $value]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,7 +23,7 @@ class ProductCategoryValidate extends Validate
|
||||
'name' => 'require|max:64',
|
||||
'icon' => 'max:125',
|
||||
'desc' => 'max:255',
|
||||
'related_tco_category' => 'integer',
|
||||
'related_tco_category' => 'string|checkRelatedTcoCategory',
|
||||
'sort' => 'integer',
|
||||
'level' => 'integer',
|
||||
'is_show' => 'in:0,1',
|
||||
@@ -39,25 +39,26 @@ class ProductCategoryValidate extends Validate
|
||||
* @var array
|
||||
*/
|
||||
protected $message = [
|
||||
'id.require' => 'ID不能为空',
|
||||
'id.integer' => 'ID必须为整数',
|
||||
'language_id.require' => '语言ID不能为空',
|
||||
'language_id.integer' => '语言ID必须为整数',
|
||||
'unique_id.require' => '唯一标识不能为空',
|
||||
'pid.different' => '父级ID不能为自身',
|
||||
'pid.checkPidNotBeChildren' => '父级ID不能为自身的子分类',
|
||||
'pid.integer' => '父级ID必须为整数',
|
||||
'name.require' => '名称不能为空',
|
||||
'name.max' => '名称最多不能超过64个字符',
|
||||
'icon.max' => '图标最多不能超过125个字符',
|
||||
'desc.max' => '描述最多不能超过255个字符',
|
||||
'related_tco_category.integer' => '关联TCO分类格式错误',
|
||||
'sort.integer' => '排序格式错误',
|
||||
'level.integer' => '级别格式错误',
|
||||
'is_show.in' => '是否显示格式错误',
|
||||
'seo_title.max' => 'SEO标题最多不能超过255个字符',
|
||||
'seo_keywords.max' => 'SEO关键字最多不能超过255个字符',
|
||||
'seo_desc.max' => 'SEO描述最多不能超过255个字符',
|
||||
'id.require' => 'ID不能为空',
|
||||
'id.integer' => 'ID必须为整数',
|
||||
'language_id.require' => '语言ID不能为空',
|
||||
'language_id.integer' => '语言ID必须为整数',
|
||||
'unique_id.require' => '唯一标识不能为空',
|
||||
'pid.different' => '父级ID不能为自身',
|
||||
'pid.checkPidNotBeChildren' => '父级ID不能为自身的子分类',
|
||||
'pid.integer' => '父级ID必须为整数',
|
||||
'name.require' => '名称不能为空',
|
||||
'name.max' => '名称最多不能超过64个字符',
|
||||
'icon.max' => '图标最多不能超过125个字符',
|
||||
'desc.max' => '描述最多不能超过255个字符',
|
||||
'related_tco_category.string' => '关联TCO分类格式错误',
|
||||
'related_tco_category.checkRelatedTcoCategory' => '该TCO分类已绑定',
|
||||
'sort.integer' => '排序格式错误',
|
||||
'level.integer' => '级别格式错误',
|
||||
'is_show.in' => '是否显示格式错误',
|
||||
'seo_title.max' => 'SEO标题最多不能超过255个字符',
|
||||
'seo_keywords.max' => 'SEO关键字最多不能超过255个字符',
|
||||
'seo_desc.max' => 'SEO描述最多不能超过255个字符',
|
||||
];
|
||||
|
||||
// 验证pid
|
||||
@@ -84,4 +85,32 @@ class ProductCategoryValidate extends Validate
|
||||
{
|
||||
return $this->remove('id', 'require|integer')->remove('pid', 'different|checkPidNotBeChildren');
|
||||
}
|
||||
|
||||
// 验证related_tco_category
|
||||
protected function checkRelatedTcoCategory($value, $rule, $data = [])
|
||||
{
|
||||
if (empty($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$val = ProductCategoryModel::where(function($query) use($value) {
|
||||
$arr = explode(",", $value);
|
||||
foreach ($arr as $v) {
|
||||
$query->whereFindInSet('related_tco_category', $v, 'OR');
|
||||
}
|
||||
})->column('id');
|
||||
if (!empty($val)) {
|
||||
$size = count($val);
|
||||
// 如果存在超过一个,直接验证失败
|
||||
if ($size > 1) {
|
||||
return false;
|
||||
}
|
||||
// 如果存在一个,并存在的id不为自身,验证失败(考虑更新场景查到自身情况)
|
||||
if ($size == 1 && $val[0] != $data['id']) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,14 +18,14 @@ class SysBannerItemValidate extends Validate
|
||||
'banner_id' => 'require|integer|gt:0',
|
||||
'title' => 'require|max:256',
|
||||
'title_txt_color' => 'max:7',
|
||||
'desc' => 'max:1024',
|
||||
'desc' => 'max:2048',
|
||||
'desc_txt_color' => 'max:7',
|
||||
'type' => 'in:image,video',
|
||||
'image' => 'max:255',
|
||||
'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:255',
|
||||
'link' => 'max:510',
|
||||
'sort' => 'integer',
|
||||
'status' => 'in:-1,1'
|
||||
];
|
||||
@@ -45,7 +45,7 @@ class SysBannerItemValidate extends Validate
|
||||
'title.require' => '名称不能为空',
|
||||
'title.max' => '名称最多不能超过256个字符',
|
||||
'title_txt_color.max' => '名称字体颜色最多不能超过7个字符',
|
||||
'desc.max' => '描述最多不能超过1024个字符',
|
||||
'desc.max' => '描述最多不能超过2048个字符',
|
||||
'desc_txt_color.max' => '描述字体颜色最多不能超过7个字符',
|
||||
'type.in' => '显示类型必须是image或video',
|
||||
'image.max' => '图片地址最多不能超过255个字符',
|
||||
@@ -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' => '链接最多不能超过255个字符',
|
||||
'link.max' => '链接最多不能超过512个字符',
|
||||
'sort.integer' => '排序值必须是整数',
|
||||
'status.in' => '状态必须是-1或1'
|
||||
];
|
||||
|
||||
@@ -17,7 +17,7 @@ class VideoValidate extends Validate
|
||||
'id' => 'require|integer',
|
||||
'language_id' => 'require|integer',
|
||||
'category_id' => 'require|integer',
|
||||
'name' => 'require|max:64',
|
||||
'name' => 'require|max:128',
|
||||
'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' => '名称不能超过64个字符',
|
||||
'name.max' => '名称不能超过128个字符',
|
||||
'desc.max' => '描述不能超过512个字符',
|
||||
'image.max' => '图片不能超过125个字符',
|
||||
'video.max' => '视频不能超过125个字符',
|
||||
|
||||
42
app/command/OpenApiMgr/AddClient.php
Normal file
42
app/command/OpenApiMgr/AddClient.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?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");
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true, $with_ref = 'id')
|
||||
{
|
||||
$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['id'], $with, $lv, $keep_pid);
|
||||
$children = array_to_tree($data, $item[$with_ref], $with, $lv, $keep_pid, $with_ref);
|
||||
if ($children) {
|
||||
$item['children'] = $children;
|
||||
}
|
||||
@@ -153,9 +153,13 @@ if (!function_exists('get_filesystem_url')) {
|
||||
* @param string $disk 磁盘配置 key
|
||||
* @return string
|
||||
*/
|
||||
function get_filesystem_url(string $url, string $disk): string
|
||||
function get_filesystem_url(string|null $url, string $disk): string
|
||||
{
|
||||
if (\think\helper\Str::startsWith($url, ['http://', 'https://'])) {
|
||||
if (is_null($url)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (\think\helper\Str::startsWith($url, ['http://', 'https://', '//'])) {
|
||||
return $url;
|
||||
}
|
||||
if (empty($disk)) {
|
||||
@@ -171,16 +175,20 @@ if (!function_exists('url_filesystem_detect')) {
|
||||
* @param string $url 文件地址
|
||||
* @return string
|
||||
*/
|
||||
function url_filesystem_detect(string $url): string
|
||||
function url_filesystem_detect(string|null $url): string
|
||||
{
|
||||
if (is_null($url)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$idx = strrpos($url, '.');
|
||||
if ($idx === false) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
$disks = [
|
||||
'public_qiniu' => '_' . base64_encode('public_qiniu'),
|
||||
'video_qiniu' => '_' . base64_encode('video_qiniu')
|
||||
'public_qiniu' => '_' . base64_encode('public_qiniu'),
|
||||
'video_qiniu' => '_' . base64_encode('video_qiniu')
|
||||
];
|
||||
foreach ($disks as $disk => $marker) {
|
||||
if (str_ends_with(mb_substr($url, 0, $idx), $marker)) {
|
||||
@@ -190,4 +198,37 @@ 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;
|
||||
}
|
||||
}
|
||||
@@ -17,22 +17,24 @@ class SysBannerItemBaseModel extends BaseModel
|
||||
|
||||
// 字段信息
|
||||
protected $schema = [
|
||||
'id' => 'int',
|
||||
'banner_id' => 'int',
|
||||
'title' => 'string',
|
||||
'title_txt_color' => 'string',
|
||||
'desc' => 'string',
|
||||
'desc_txt_color' => 'string',
|
||||
'type' => 'string',
|
||||
'image' => 'string',
|
||||
'extra_image' => 'string',
|
||||
'video' => 'string',
|
||||
'link_to' => 'string',
|
||||
'link' => 'string',
|
||||
'sort' => 'int',
|
||||
'status' => 'int',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
'deleted_at' => 'datetime'
|
||||
'id' => 'int',
|
||||
'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',
|
||||
'image' => 'string',
|
||||
'extra_image' => 'string',
|
||||
'video' => 'string',
|
||||
'link_to' => 'string',
|
||||
'link' => 'string',
|
||||
'sort' => 'int',
|
||||
'status' => 'int',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
'deleted_at' => 'datetime'
|
||||
];
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ abstract class Common extends BaseController
|
||||
];
|
||||
}
|
||||
unset($current);
|
||||
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
104
app/index/controller/TopicLaptop.php
Normal file
104
app/index/controller/TopicLaptop.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\index\model\SysBannerModel;
|
||||
use think\facade\View;
|
||||
|
||||
class TopicLaptop extends Common
|
||||
{
|
||||
/**
|
||||
* 专题 - 笔记本电脑首页
|
||||
*/
|
||||
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_693a268c8aa5f', // 专题 - 笔记本首页 - 焦点图
|
||||
'BANNER_693a26b1ad252', // 专题 - 笔记本首页 - 性能介绍
|
||||
'BANNER_693a27b767c8c', // 专题 - 笔记本首页 - CPU介绍
|
||||
'BANNER_693a28740b8a7', // 专题 - 笔记本首页 - 显卡介绍
|
||||
'BANNER_693a28aa8412d', // 专题 - 笔记本首页 - 运行内存介绍
|
||||
'BANNER_693a29009fa72', // 专题 - 笔记本首页 - 硬盘介绍
|
||||
'BANNER_693a29263c609', // 专题 - 笔记本首页 - 散热系统介绍
|
||||
'BANNER_693a2959958bc', // 专题 - 笔记本首页 - 行业App运行介绍
|
||||
'BANNER_693a298342b38', // 专题 - 笔记本首页 - 柔光屏介绍
|
||||
'BANNER_693a2ad31fbe8', // 专题 - 笔记本首页 - 色域介绍
|
||||
'BANNER_693a2b0327ac3', // 专题 - 笔记本首页 - 防眩光介绍
|
||||
'BANNER_693a2cc70c762', // 专题 - 笔记本首页 - 外形质感介绍
|
||||
'BANNER_693a2d3113d14', // 专题 - 笔记本首页 - 网卡介绍
|
||||
'BANNER_693a2d53ac247', // 专题 - 笔记本首页 - 电池续航介绍
|
||||
'BANNER_693a2d7f5fa21', // 专题 - 笔记本首页 - 接口介绍
|
||||
'BANNER_693a2f2114eb3', // 专题 - 笔记本首页 - 使用场景焦点图
|
||||
'BANNER_693a2f92baaa3', // 专题 - 笔记本首页 - 摄像头/麦克风/安全介绍
|
||||
'BANNER_693a2fad26f55', // 专题 - 笔记本首页 - 系统预装介绍
|
||||
'BANNER_693a2ff4629bd', // 专题 - 笔记本首页 - 产品检测介绍
|
||||
'BANNER_693a30e9e4572', // 专题 - 笔记本首页 - 网页脚注
|
||||
])
|
||||
->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;
|
||||
}
|
||||
|
||||
// 焦点图轮播图
|
||||
$data['top_focus_images'] = data_get($banners_map, 'BANNER_693a268c8aa5f')?->items->toArray();
|
||||
// 性能介绍
|
||||
$data['perf'] = data_get($banners_map, 'BANNER_693a26b1ad252')?->items->toArray();
|
||||
// CPU介绍
|
||||
$data['cpu'] = data_get($banners_map, 'BANNER_693a27b767c8c')?->items->toArray();
|
||||
// 显卡介绍
|
||||
$data['gpu'] = data_get($banners_map, 'BANNER_693a28740b8a7')?->items->toArray();
|
||||
// 运行内存介绍
|
||||
$data['ram'] = data_get($banners_map, 'BANNER_693a28aa8412d')?->items->first()?->toArray();
|
||||
// 硬盘介绍
|
||||
$data['hard_drive'] = data_get($banners_map, 'BANNER_693a29009fa72')?->items->toArray();
|
||||
// 散热系统介绍
|
||||
$data['cooling_system'] = data_get($banners_map, 'BANNER_693a29263c609')?->items->toArray();
|
||||
// 行业App运行介绍
|
||||
$data['apps'] = data_get($banners_map, 'BANNER_693a2959958bc')?->items->first()?->toArray();
|
||||
// 柔光屏介绍
|
||||
$data['screen_soft_light'] = data_get($banners_map, 'BANNER_693a298342b38')?->items->toArray();
|
||||
// 色域介绍
|
||||
$data['screen_color_gamut'] = data_get($banners_map, 'BANNER_693a2ad31fbe8')?->items->toArray();
|
||||
// 防眩光介绍
|
||||
$data['screen_anti_glare'] = data_get($banners_map, 'BANNER_693a2b0327ac3')?->items->toArray();
|
||||
// 外形质感介绍
|
||||
$data['exterior_texture'] = data_get($banners_map, 'BANNER_693a2cc70c762')?->items->toArray();
|
||||
// 网卡介绍
|
||||
$data['network_card'] = data_get($banners_map, 'BANNER_693a2d3113d14')?->items->toArray();
|
||||
// 电池续航介绍
|
||||
$data['battery_life'] = data_get($banners_map, 'BANNER_693a2d53ac247')?->items->toArray();
|
||||
// 接口介绍
|
||||
$data['interface'] = data_get($banners_map, 'BANNER_693a2d7f5fa21')?->items->toArray();
|
||||
// 使用场景焦点图
|
||||
$data['scene_focus_images'] = data_get($banners_map, 'BANNER_693a2f2114eb3')?->items->toArray();
|
||||
// 摄像头/麦克风/安全介绍
|
||||
$data['camare_microphone_security'] = data_get($banners_map, 'BANNER_693a2f92baaa3')?->items->toArray();
|
||||
// 系统预装介绍
|
||||
$data['unified_preinstall'] = data_get($banners_map, 'BANNER_693a2fad26f55')?->items->first()?->toArray();
|
||||
// 产品检测介绍
|
||||
$data['product_testing'] = data_get($banners_map, 'BANNER_693a2ff4629bd')?->items->toArray();
|
||||
// 网页脚注
|
||||
$data['webpage_footnotes'] = data_get($banners_map, 'BANNER_693a30e9e4572')?->items->first()?->toArray();
|
||||
}
|
||||
View::assign('data', $data);
|
||||
|
||||
return View::fetch('index');
|
||||
}
|
||||
}
|
||||
@@ -192,6 +192,8 @@ 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'])
|
||||
@@ -199,15 +201,48 @@ class TopicNas extends Common
|
||||
}])
|
||||
->field([
|
||||
'id',
|
||||
'pid',
|
||||
'name',
|
||||
'icon'
|
||||
])
|
||||
->language($this->lang_id)
|
||||
->parent($parent)
|
||||
// ->parent($parent)
|
||||
->parentChild($parent_two)
|
||||
->isShow(true)
|
||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||
->select();
|
||||
View::assign('article_categorys', $article_categorys);
|
||||
//查询三级分类
|
||||
$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);
|
||||
|
||||
$contacts = [];
|
||||
// 获取banner数据
|
||||
@@ -246,20 +281,46 @@ 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)
|
||||
// ->parent($parent)
|
||||
->parentChild($parent_two)
|
||||
->isShow(true)
|
||||
->order(['sort' => 'asc', 'id' => 'desc'])
|
||||
->select();
|
||||
View::assign('article_categorys', $article_categorys);
|
||||
// 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);
|
||||
|
||||
return View::fetch('help_detail');
|
||||
}
|
||||
@@ -317,8 +378,18 @@ 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->toArray());
|
||||
return success('success', $articles_data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
90
app/index/controller/TopicPowerProdline.php
Normal file
90
app/index/controller/TopicPowerProdline.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?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 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');
|
||||
}
|
||||
}
|
||||
@@ -92,9 +92,9 @@ return [
|
||||
],
|
||||
'attachment/video' => [
|
||||
'软件和驱动程序' => 'Software and Drivers',
|
||||
'您的浏览器不支持 video 标签。' => 'Your browser does not support HTML5 video.',
|
||||
'您的浏览器不支持 video 标签。' => 'Your browser does not support HTML5 video.',
|
||||
],
|
||||
|
||||
|
||||
// 联系我们批量购买页面
|
||||
'contactus/bulkbuy' => [
|
||||
'批量购买' => 'Bulk Buy',
|
||||
@@ -219,4 +219,21 @@ return [
|
||||
'联系我们' => 'Contact US',
|
||||
'目录' => 'Content'
|
||||
],
|
||||
];
|
||||
|
||||
// 笔记本专题 - 首页
|
||||
'topiclaptop/index' => [
|
||||
'CineBench R23 多核跑分' => 'Outperforms Ryzen 5 & Intel i5',
|
||||
'*此跑分为ORICO实验室测定所得,请以实际使用为准' => '*Data measured by ORICO Lab. Actual performance may vary.',
|
||||
'3DMARK Time Spy显卡得分' => 'Handles Office & Gaming with Ease',
|
||||
'肯辛通锁孔' => 'Kensington <br/> Lock Slot',
|
||||
'千兆网口' => 'Gigabit <br/> Ethernet',
|
||||
'USB-A<br/>(5Gbps)' => 'USB-A <br/> (5Gbps)',
|
||||
'3.5mm<br/>耳麦合一' => '3.5mm <br/> Combo Audio',
|
||||
'TF口3.0' => 'TF 3.0 <br/> Card Slot',
|
||||
'全功能<br/>USB-C' => 'All-in-One <br/> USB-C',
|
||||
"接口大满贯" => "Full-Featured Ports",
|
||||
"酷睿i5-12450H" => "Core i5-12450H",
|
||||
"锐龙9 6900HX" => "Ryzen9 6900HX",
|
||||
"标配多种接口,会议室连接电脑、</br>U盘传输文件、TF卡读取等,全都轻松搞定" => "Versatile Ports for Easy Connectivity. Effortlessly</br> link to projectors, U disks, TF cards, and more.",
|
||||
],
|
||||
];
|
||||
|
||||
@@ -224,4 +224,21 @@ return [
|
||||
'联系我们' => 'Contact US',
|
||||
'目录' => 'Content'
|
||||
],
|
||||
];
|
||||
|
||||
// 笔记本专题 - 首页
|
||||
'topiclaptop/index' => [
|
||||
'CineBench R23 多核跑分' => 'Outperforms Ryzen 5 & Intel i5',
|
||||
'*此跑分为ORICO实验室测定所得,请以实际使用为准' => '*Data measured by ORICO Lab. Actual performance may vary.',
|
||||
'3DMARK Time Spy显卡得分' => 'Handles Office & Gaming with Ease',
|
||||
'肯辛通锁孔' => 'Kensington <br/> Lock Slot',
|
||||
'千兆网口' => 'Gigabit <br/> Ethernet',
|
||||
'USB-A<br/>(5Gbps)' => 'USB-A <br/> (5Gbps)',
|
||||
'3.5mm<br/>耳麦合一' => '3.5mm <br/> Combo Audio',
|
||||
'TF口3.0' => 'TF 3.0 <br/> Card Slot',
|
||||
'全功能<br/>USB-C' => 'All-in-One <br/> USB-C',
|
||||
"接口大满贯" => "Full-Featured Ports",
|
||||
"酷睿i5-12450H" => "Core i5-12450H",
|
||||
"锐龙9 6900HX" => "Ryzen9 6900HX",
|
||||
"标配多种接口,会议室连接电脑、U盘传输文件、TF卡读取等,全都轻松搞定" => "Versatile Ports for Easy Connectivity. Effortlessly link to pro",
|
||||
],
|
||||
];
|
||||
|
||||
@@ -46,6 +46,27 @@ 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)
|
||||
{
|
||||
|
||||
@@ -105,6 +105,18 @@ Route::group('topic', function () {
|
||||
// 专题-Nas软件下载页
|
||||
Route::get('download', 'TopicNas/download');
|
||||
});
|
||||
|
||||
// 专题 - 电力品线
|
||||
Route::group('power_prodline', function() {
|
||||
// 专题 - 电力品线首页
|
||||
Route::get('index', 'TopicPowerProdline/index');
|
||||
});
|
||||
|
||||
// 专题 - 笔记本电脑
|
||||
Route::group('laptop', function() {
|
||||
// 专题 - 笔记本电脑首页
|
||||
Route::get('index', 'TopicLaptop/index');
|
||||
});
|
||||
});
|
||||
|
||||
// 数据迁移
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="tabs">
|
||||
{notempty name="video_categorys"}
|
||||
{volist name="video_categorys" id="va"}
|
||||
<a href="{:url('attachment/index', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
||||
<a href="{:url('attachment/video', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,11 @@
|
||||
<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>
|
||||
|
||||
@@ -29,12 +29,13 @@
|
||||
{/notempty}
|
||||
<li>
|
||||
<h3>{:lang_i18n('联系方式')}</h3>
|
||||
{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}
|
||||
{if condition="!empty($contact_config)"}
|
||||
{volist name="contact_config" id="vo"}
|
||||
{if condition="$vo.type != 'image'"}
|
||||
<p>{$vo.value}</p>
|
||||
{/if}
|
||||
{/volist}
|
||||
{/if}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
1270
app/index/view/mobile/topic_laptop/index.html
Normal file
1270
app/index/view/mobile/topic_laptop/index.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -57,6 +57,8 @@
|
||||
<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">
|
||||
@@ -67,6 +69,24 @@
|
||||
<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])}"
|
||||
@@ -78,6 +98,9 @@
|
||||
</ul>
|
||||
</div>
|
||||
{/volist}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
{/notempty}
|
||||
</div>
|
||||
@@ -128,6 +151,17 @@
|
||||
$(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();
|
||||
|
||||
765
app/index/view/mobile/topic_power_prodline/index.html
Normal file
765
app/index/view/mobile/topic_power_prodline/index.html
Normal file
@@ -0,0 +1,765 @@
|
||||
{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=100px,375px/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">×</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 = '×';
|
||||
|
||||
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}
|
||||
@@ -24,7 +24,9 @@
|
||||
<p>{$detail.release_time|date_format_i18n}</p>
|
||||
</div>
|
||||
<!-- 文本渲染-->
|
||||
<div class="blog_content">{$detail.content|raw}</div>
|
||||
<div class="ql-container">
|
||||
<div class="blog_content ql-editor">{$detail.content|raw}</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 评论只显示前面五条--->
|
||||
{notempty name="comments"}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -22,7 +22,11 @@
|
||||
<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>
|
||||
<!-- 产品主图切换和参数详情-->
|
||||
@@ -129,8 +133,10 @@
|
||||
{/notempty}
|
||||
</div>
|
||||
<!-- 富文本渲染-->
|
||||
<div class="products_des" id="detail">
|
||||
{$product.detail|default=''|raw}
|
||||
<div class="ql-container">
|
||||
<div class="products_des ql-editor" id="detail">
|
||||
{$product.detail|default=''|raw}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 关联产品 -->
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
{else/}
|
||||
<a href="javascript:void(0);" class="fline">
|
||||
{$vo.value}
|
||||
{/if}
|
||||
{/if}
|
||||
</a>
|
||||
</li>
|
||||
{/volist}
|
||||
|
||||
@@ -125,6 +125,43 @@
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$('.header-PC #header .navItem>a').each(function(idx, item) {
|
||||
var _item = $(item);
|
||||
_item.removeClass('active');
|
||||
if (_item.attr('href') && compareUrls(location.href, _item.get(0).href)) {
|
||||
_item.addClass('active').siblings();
|
||||
}
|
||||
});
|
||||
|
||||
// 比较两个URL是否相等(支持只有path的情况,并处理有无.html后缀的情况)
|
||||
function compareUrls(url1, url2) {
|
||||
// 如果输入的是相对路径,添加当前域名
|
||||
if (!url1.startsWith('http')) {
|
||||
url1 = window.location.origin + (url1.startsWith('/') ? '' : '/') + url1;
|
||||
}
|
||||
if (!url2.startsWith('http')) {
|
||||
url2 = window.location.origin + (url2.startsWith('/') ? '' : '/') + url2;
|
||||
}
|
||||
|
||||
// 将两个URL转换为URL对象
|
||||
const urlObj1 = new URL(url1);
|
||||
const urlObj2 = new URL(url2);
|
||||
|
||||
// 获取路径名并移除末尾的斜杠
|
||||
let path1 = urlObj1.pathname.replace(/\/$/, '');
|
||||
let path2 = urlObj2.pathname.replace(/\/$/, '');
|
||||
|
||||
// 移除.html后缀
|
||||
path1 = path1.replace(/\.html$/, '');
|
||||
path2 = path2.replace(/\.html$/, '');
|
||||
|
||||
// 比较处理后的路径
|
||||
return path1 === path2;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
// 搜索历史记录处理
|
||||
@@ -247,4 +284,4 @@
|
||||
$('#top-country').hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
1499
app/index/view/pc/topic_laptop/index.html
Normal file
1499
app/index/view/pc/topic_laptop/index.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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', ['cid' => $vo.id, 'id' => $va.id])}">
|
||||
<a class="txrow" href="{:url('/index/topic/nas/help_detail', ['pid' => $va.category_id,'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])}">
|
||||
<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])}">
|
||||
{:lang_i18n('查看更多')} >
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
@@ -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,28 +32,42 @@
|
||||
<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.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}
|
||||
<!-- 二级-->
|
||||
<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>
|
||||
</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>
|
||||
@@ -75,10 +89,22 @@
|
||||
{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);
|
||||
@@ -109,7 +135,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 + '">' + v.title + '</a></li>'
|
||||
'<li><a href="{:url(\'/index/topic/nas/help_detail\')}?cid=' + v.category_id + '&id=' + v.id + '&pid=' + v.pid + '">' + v.title + '</a></li>'
|
||||
})
|
||||
html += '</ul>'
|
||||
}
|
||||
|
||||
573
app/index/view/pc/topic_power_prodline/index.html
Normal file
573
app/index/view/pc/topic_power_prodline/index.html
Normal file
@@ -0,0 +1,573 @@
|
||||
{extend name="public/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="main"}
|
||||
<!-- 轮播核心容器 -->
|
||||
<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">×</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 = '×';
|
||||
|
||||
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}
|
||||
@@ -18,7 +18,7 @@ if (!function_exists('image_domain_concat')) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
||||
return url_join($domain, $path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ if (!function_exists('video_domain_concat')) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
||||
return url_join($domain, $path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
],
|
||||
"require": {
|
||||
"php": ">=8.0.0",
|
||||
"topthink/framework": "^8.0",
|
||||
"topthink/framework": "8.1.2",
|
||||
"topthink/think-orm": "v3.0.34",
|
||||
"topthink/think-filesystem": "^3.0",
|
||||
"topthink/think-multi-app": "^1.1",
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
// +----------------------------------------------------------------------
|
||||
// | 控制台配置
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
|
||||
return [
|
||||
// 指令定义
|
||||
'commands' => [
|
||||
'data:migrate' => \app\command\DataMigration::class,
|
||||
'openapi:addclient' => \app\command\OpenApiMgr\AddClient::class,
|
||||
],
|
||||
];
|
||||
|
||||
@@ -43,13 +43,13 @@ return [
|
||||
// 磁盘类型
|
||||
'type' => \filesystem\driver\Qiniu::class,
|
||||
// bucker 名称
|
||||
'bucket' => 'orico-official-website',
|
||||
'bucket' => env('QINIU_CLOUD.BUCKET', 'orico-official-website'),
|
||||
// 访问密钥
|
||||
'access_key' => 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms',
|
||||
'access_key' => env('QINIU_CLOUD.ACCESS_KEY', 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms'),
|
||||
// 密钥
|
||||
'secret_key' => 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q',
|
||||
'secret_key' => env('QINIU_CLOUD.SECRET_KEY', 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q'),
|
||||
// 外部URL
|
||||
'base_url' => '//szw73dlk3.hn-bkt.clouddn.com',
|
||||
'base_url' => env('QINIU_CLOUD.BASE_URL', '//szw73dlk3.hn-bkt.clouddn.com'),
|
||||
// 路径
|
||||
'path_prefix' => '/storage',
|
||||
// 文件名称回调,可为文件名添加特定标志,以便可以在后续识别
|
||||
@@ -70,13 +70,13 @@ return [
|
||||
// 磁盘类型
|
||||
'type' => \filesystem\driver\Qiniu::class,
|
||||
// bucker 名称
|
||||
'bucket' => 'orico-official-website',
|
||||
'bucket' => env('QINIU_CLOUD.BUCKET', 'orico-official-website'),
|
||||
// 访问密钥
|
||||
'access_key' => 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms',
|
||||
'access_key' => env('QINIU_CLOUD.ACCESS_KEY', 'dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms'),
|
||||
// 密钥
|
||||
'secret_key' => 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q',
|
||||
'secret_key' => env('QINIU_CLOUD.SECRET_KEY', 'KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q'),
|
||||
// 外部URL
|
||||
'base_url' => '//szw73dlk3.hn-bkt.clouddn.com',
|
||||
'base_url' => env('QINIU_CLOUD.BASE_URL', '//szw73dlk3.hn-bkt.clouddn.com'),
|
||||
// 路径
|
||||
'path_prefix' => '/storage/videos',
|
||||
// 文件名称回调,可为文件名添加特定标志,以便可以在后续识别
|
||||
|
||||
@@ -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' => 64 , 'null' => false, 'comment' => '名称'])
|
||||
->addColumn('name', 'string', ['limit' => 128 , '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' => '视频地址'])
|
||||
|
||||
@@ -32,6 +32,8 @@ 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为视频'])
|
||||
@@ -39,7 +41,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' => 255, 'null' => true, 'default' => null, 'comment' => '链接'])
|
||||
->addColumn('link', 'string', ['limit' => 510, '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' => '创建时间'])
|
||||
|
||||
@@ -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\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" => 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\nHarmonyOS\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\nHarmonyOS\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,6 +119,10 @@ 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');
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
<?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
2
public/migrate_temp_images/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
.iotbt1 {
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 40px;
|
||||
font-weight: 700;
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
.iotbtp1 {
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 11px;
|
||||
word-break: break-word;
|
||||
@@ -69,7 +69,7 @@
|
||||
.iotbts1 {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
color: #9e9e9f;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -140,7 +140,7 @@
|
||||
font-size: 14px;
|
||||
padding-top: 12px;
|
||||
text-align: center;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -152,7 +152,7 @@
|
||||
.sfbt1 {
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 24px;
|
||||
@@ -183,7 +183,7 @@
|
||||
.cit {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
color: #000;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -237,7 +237,7 @@
|
||||
.wcu_s1 {
|
||||
color: #000;
|
||||
font: 16px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
font-weight: 500;
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
margin: auto;
|
||||
font-size: 1rem;
|
||||
color: #707070;
|
||||
font-family: "Montserrat-Medium";
|
||||
font-family: "HarmonyOS-Medium";
|
||||
}
|
||||
|
||||
.oricoCnLc .gallery-thumbs .swiper-slide-thumb-active {
|
||||
@@ -632,14 +632,14 @@
|
||||
.oricoCnLc .info h5 {
|
||||
font-size: #000;
|
||||
font-size: 1rem;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
padding: 2rem 2rem 0 1rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.oricoCnLc .info p {
|
||||
color: #707070;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
@@ -651,7 +651,7 @@
|
||||
|
||||
.oricoCnLc .m_ach-b .title {
|
||||
font-size: 1.125rem;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
width: 98%;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
@@ -660,7 +660,7 @@
|
||||
|
||||
.oricoCnLc .m_ach-b .chtitle {
|
||||
font-size: 1.125rem;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
width: 98%;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
@@ -677,7 +677,7 @@
|
||||
|
||||
.oricoCnLc .m_ch-title {
|
||||
font-size: 1rem;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-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: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
width: 98%;
|
||||
margin: 1rem auto;
|
||||
padding: 0;
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
border-radius: 8px;
|
||||
height: 48px;
|
||||
box-shadow: none;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
}
|
||||
|
||||
.oricoEGapp-articledetail .content .share_box .comment .comment_form>div input {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
border-radius: 1rem;
|
||||
background-color: #fff;
|
||||
color: #6b6c6e;
|
||||
font-family: "Montserrat-Medium";
|
||||
font-family: "HarmonyOS-Medium";
|
||||
font-size: 0.875rem;
|
||||
display: inline-block;
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
font-size: 18px;
|
||||
color: #004bfa;
|
||||
text-align: left;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: 700;
|
||||
margin-top: 0;
|
||||
margin-bottom: 12px;
|
||||
@@ -27,7 +27,7 @@
|
||||
color: #707070;
|
||||
text-align: center;
|
||||
text-align: left;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
.itlable {
|
||||
font-size: 12.5px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
padding-bottom: 5px;
|
||||
@@ -106,7 +106,7 @@
|
||||
height: 48px;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
}
|
||||
|
||||
.itselectopen {
|
||||
@@ -130,12 +130,12 @@
|
||||
padding: 15px;
|
||||
background: #f2f2f2;
|
||||
border-radius: 8px;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
}
|
||||
|
||||
.bttj {
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
/* width: 212px; */
|
||||
/* height: 48px; */
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
.iotbt1 {
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 40px;
|
||||
font-weight: 700;
|
||||
@@ -210,7 +210,7 @@
|
||||
|
||||
.iotbtp1 {
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 11px;
|
||||
word-break: break-word;
|
||||
@@ -219,7 +219,7 @@
|
||||
.iotbts1 {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
color: #9e9e9f;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -290,7 +290,7 @@
|
||||
font-size: 14px;
|
||||
padding-top: 12px;
|
||||
text-align: center;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -302,7 +302,7 @@
|
||||
.sfbt1 {
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 24px;
|
||||
@@ -333,7 +333,7 @@
|
||||
.cit {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
color: #000;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -388,7 +388,7 @@
|
||||
.wcu_s1 {
|
||||
color: #000;
|
||||
font-size: 16px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
font-weight: 500;
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
font-size: 18px;
|
||||
color: #004bfa;
|
||||
text-align: left;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: 700;
|
||||
margin-top: 0;
|
||||
margin-bottom: 12px;
|
||||
@@ -27,7 +27,7 @@
|
||||
color: #707070;
|
||||
text-align: center;
|
||||
text-align: left;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
.itlable {
|
||||
font-size: 12.5px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
padding-bottom: 5px;
|
||||
@@ -106,7 +106,7 @@
|
||||
height: 48px;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
}
|
||||
|
||||
.itselectopen {
|
||||
@@ -130,13 +130,13 @@
|
||||
padding: 15px;
|
||||
background: #f2f2f2;
|
||||
border-radius: 8px;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.bttj {
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
/* width: 212px; */
|
||||
padding: 15px 60px;
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
.iotbt1 {
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 40px;
|
||||
font-weight: 700;
|
||||
@@ -210,7 +210,7 @@
|
||||
|
||||
.iotbtp1 {
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 11px;
|
||||
word-break: break-word;
|
||||
@@ -219,7 +219,7 @@
|
||||
.iotbts1 {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
color: #9e9e9f;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -290,7 +290,7 @@
|
||||
font-size: 14px;
|
||||
padding-top: 12px;
|
||||
text-align: center;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-word;
|
||||
}
|
||||
@@ -302,7 +302,7 @@
|
||||
.sfbt1 {
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
font-family: HarmonyOS-Bold, HarmonyOS;
|
||||
font-weight: bold;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 24px;
|
||||
@@ -333,7 +333,7 @@
|
||||
.cit {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
color: #000;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -387,7 +387,7 @@
|
||||
.wcu_s1 {
|
||||
color: #000;
|
||||
font: 16px;
|
||||
font-family: Montserrat-Medium, Montserrat;
|
||||
font-family: HarmonyOS-Medium, HarmonyOS;
|
||||
font-weight: 500;
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
margin-top: 3.3rem;
|
||||
}
|
||||
.oricoEGapp-Contact .banner_title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 1.5rem;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
@@ -24,7 +24,7 @@
|
||||
color: #000;
|
||||
}
|
||||
.oricoEGapp-Contact .title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 1rem;
|
||||
}
|
||||
.oricoEGapp-Contact .info {
|
||||
@@ -43,12 +43,12 @@
|
||||
height: 3rem;
|
||||
}
|
||||
.oricoEGapp-Contact .info .right .des {
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
.oricoEGapp-Contact .info_title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-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: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
@@ -86,7 +86,7 @@
|
||||
.oricoEGapp-Contact .send {
|
||||
display: block;
|
||||
background-color: #004bfa;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 0.875rem;
|
||||
padding: 0.75rem 1.5rem;
|
||||
color: #fff;
|
||||
@@ -98,7 +98,7 @@
|
||||
color: #ee2f53;
|
||||
}
|
||||
.oricoEGapp-Contact .contact_b {
|
||||
font-family: "Montserrat-SemiBold";
|
||||
font-family: "HarmonyOS-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: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input:-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input::-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input:-ms-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea::-webkit-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea:-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea::-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea:-ms-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact .narskfPage {
|
||||
width: 100%;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
margin-top: 3.3rem;
|
||||
}
|
||||
.oricoEGapp-Contact .banner_title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 1.5rem;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
@@ -24,7 +24,7 @@
|
||||
color: #000;
|
||||
}
|
||||
.oricoEGapp-Contact .title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 1rem;
|
||||
}
|
||||
.oricoEGapp-Contact .info {
|
||||
@@ -46,12 +46,12 @@
|
||||
width: 88% !important;
|
||||
}
|
||||
.oricoEGapp-Contact .info .right .des {
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
.oricoEGapp-Contact .info_title {
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-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: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
@@ -89,7 +89,7 @@
|
||||
.oricoEGapp-Contact .send {
|
||||
display: block;
|
||||
background-color: #004bfa;
|
||||
font-family: "Montserrat-Bold";
|
||||
font-family: "HarmonyOS-Bold";
|
||||
font-size: 0.875rem;
|
||||
padding: 0.75rem 1.5rem;
|
||||
color: #fff;
|
||||
@@ -101,7 +101,7 @@
|
||||
color: #ee2f53;
|
||||
}
|
||||
.oricoEGapp-Contact .contact_b {
|
||||
font-family: "Montserrat-SemiBold";
|
||||
font-family: "HarmonyOS-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: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input:-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input::-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact input:-ms-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea::-webkit-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea:-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea::-moz-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
.oricoEGapp-Contact textarea:-ms-input-placeholder {
|
||||
color: #9e9e9f;
|
||||
font-size: 0.875rem;
|
||||
font-family: "Montserrat-Regular";
|
||||
font-family: "HarmonyOS-Regular";
|
||||
}
|
||||
|
||||
@@ -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('truetype'),
|
||||
src: url('../fonts/icomoon/icomoon.eot?11cuay#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?11cuay') format('opentype'),
|
||||
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('truetype'), url('../fonts/icomoon/colleciton/icomoon.woff?11cuay') format('woff'),
|
||||
url('../fonts/icomoon/colleciton/icomoon.ttf?11cuay') format('opentype'), 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('truetype'),
|
||||
src: url('../fonts/icomoon/icomoona.eot?c46hgi#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoona.ttf?c46hgi') format('opentype'),
|
||||
url('../fonts/icomoon/icomoona.woff?c46hgi') format('woff'), url('../fonts/icomoon/icomoona.svg?c46hgi#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
@@ -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('truetype'),
|
||||
src: url('../fonts/icomoon/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('../fonts/icomoon/icomoon.ttf?ujw7hy') format('opentype'),
|
||||
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('truetype'), url('fonts-20190124/icomoon.woff?ll2528') format('woff'),
|
||||
url('fonts-20190124/icomoon.ttf?ll2528') format('opentype'), 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('truetype'),
|
||||
src: url('fonts/other/icomoon.eot?ujw7hy#iefix') format('embedded-opentype'), url('fonts/other/icomoon.ttf?ujw7hy') format('opentype'),
|
||||
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('truetype'), url('fonts-20220322/icomoon.woff?cdcz43') format('woff'),
|
||||
url('fonts-20220322/icomoon.ttf?cdcz43') format('opentype'), url('fonts-20220322/icomoon.woff?cdcz43') format('woff'),
|
||||
url('fonts-20220322/icomoon.svg?cdcz43#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
display: none;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct {
|
||||
font-family: "Montserrat-SemiBold";
|
||||
font-family: "HarmonyOS-SemiBold";
|
||||
font-weight: bold;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1 {
|
||||
|
||||
@@ -1,28 +1,45 @@
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat";
|
||||
src: url("../fonts/Montserrat-Regular.ttf") format("truetype");
|
||||
font-family: "HarmonyOS";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Regular.ttf") format("opentype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat-Bold";
|
||||
src: url("../fonts/Montserrat-Bold.ttf") format("truetype");
|
||||
font-family: "HarmonyOS-Regular";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Regular.ttf") format("opentype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat-Medium";
|
||||
src: url("../fonts/Montserrat-Medium.ttf") format("truetype");
|
||||
font-family: "HarmonyOS-Bold";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Bold.ttf") format("opentype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS-Medium";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Medium.ttf") format("opentype");
|
||||
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.ttf") format("opentype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS-Light";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Light.ttf") format("opentype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
/* font-family: 'Montserrat'; */
|
||||
font-family: 'HarmonyOS';
|
||||
-ms-overflow-style: none;
|
||||
/* IE 和 Edge */
|
||||
scrollbar-width: none;
|
||||
@@ -88,7 +105,7 @@ a {
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Montserrat-SemiBold';
|
||||
font-family: 'HarmonyOS-SemiBold';
|
||||
}
|
||||
|
||||
/* 分页样式 */
|
||||
@@ -161,7 +178,9 @@ 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;
|
||||
|
||||
@@ -1,29 +1,30 @@
|
||||
@font-face {
|
||||
font-family: "Montserrat";
|
||||
src: url("../fonts/Montserrat-Regular.ttf") format("truetype");
|
||||
font-family: "HarmonyOS";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Regular.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "Montserrat-Bold";
|
||||
src: url("../fonts/Montserrat-Bold.ttf") format("truetype");
|
||||
font-family: "HarmonyOS-Bold";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Bold.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "Montserrat-Medium";
|
||||
src: url("../fonts/Montserrat-Medium.ttf") format("truetype");
|
||||
font-family: "HarmonyOS-Medium";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Medium.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* HarmonyOS-SemiBold1 */
|
||||
@font-face {
|
||||
font-family: "Montserrat-SemiBold";
|
||||
src: url("../fonts/Montserrat-SemiBold.ttf") format("truetype");
|
||||
font-family: "HarmonyOS-SemiBold";
|
||||
src: url("//ow.static.f2b211.com/static/fonts/HarmonyOS_Sans_SC_Bold.woff2") format("woff2");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
body {
|
||||
font-family: 'Montserrat-SemiBold';
|
||||
font-family: 'HarmonyOS-SemiBold';
|
||||
margin: auto;
|
||||
background-color: #f5f5f5;
|
||||
max-width: 750px;
|
||||
@@ -591,7 +592,7 @@ button.swiper-pagination-bullet {
|
||||
.Innew-text .title {
|
||||
font-size: 2.5rem;
|
||||
padding-bottom: 1rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
.Inpro-text {
|
||||
padding: 2rem 0 0.8rem;
|
||||
@@ -600,7 +601,7 @@ button.swiper-pagination-bullet {
|
||||
.Inpro-text .title {
|
||||
font-size: 1.5rem;
|
||||
padding-bottom: 1rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
|
||||
.Innew-text .more {
|
||||
@@ -635,7 +636,7 @@ video img {
|
||||
font-size: 1.2rem;
|
||||
max-height: 3rem;
|
||||
overflow: hidden;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
.inprotext .t-f16 {
|
||||
font-size: 1rem;
|
||||
@@ -957,12 +958,12 @@ video img {
|
||||
margin: auto;
|
||||
line-height: 2rem;
|
||||
padding: 0 3rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
.ban-t {
|
||||
padding: 0.5rem 3rem;
|
||||
font-size: 1.125rem;
|
||||
font-family: 'Montserrat-Regular';
|
||||
font-family: 'HarmonyOS-Regular';
|
||||
}
|
||||
.btn-more {
|
||||
background: transparent;
|
||||
@@ -979,7 +980,7 @@ video img {
|
||||
margin: auto;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
/*类别*/
|
||||
.category {
|
||||
@@ -1095,11 +1096,11 @@ video img {
|
||||
padding: 0.2rem 0;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
.num-bg li p {
|
||||
font-size: 0.8rem;
|
||||
font-family: 'Montserrat-Regular';
|
||||
font-family: 'HarmonyOS-Regular';
|
||||
}
|
||||
/*标题*/
|
||||
.Tech-text {
|
||||
@@ -1115,7 +1116,7 @@ video img {
|
||||
.Tech-text p {
|
||||
padding: 1rem 0;
|
||||
font-size: 0.875rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
|
||||
.pos-text {
|
||||
@@ -1125,7 +1126,7 @@ video img {
|
||||
color: #fff;
|
||||
font-size: 0.825rem;
|
||||
margin: 0 auto;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
height: 2rem;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -1157,7 +1158,7 @@ video img {
|
||||
font-size: 0.9rem;
|
||||
padding: 1rem 0;
|
||||
line-height: 1.3em;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
word-break: break-all;
|
||||
}
|
||||
.faq span {
|
||||
@@ -1172,7 +1173,7 @@ video img {
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.75em;
|
||||
color: #666;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
.faq i {
|
||||
position: absolute;
|
||||
@@ -1209,7 +1210,7 @@ video img {
|
||||
word-wrap: break-word;
|
||||
overflow: hidden;
|
||||
height: 1.5rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
font-weight: 400;
|
||||
word-break: break-all;
|
||||
}
|
||||
@@ -1217,7 +1218,7 @@ video img {
|
||||
font-size: 1.125rem;
|
||||
color: #7f7f7f;
|
||||
padding-bottom: 1rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
font-weight: 400;
|
||||
}
|
||||
/*foot */
|
||||
@@ -1249,7 +1250,7 @@ video img {
|
||||
}
|
||||
.foot-in h3 {
|
||||
font-size: 1.25rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
font-weight: 100;
|
||||
}
|
||||
.logo-input {
|
||||
@@ -1278,7 +1279,7 @@ video img {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
.foot-cate li {
|
||||
width: 50%;
|
||||
min-width: 50%;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
color: #fff;
|
||||
@@ -1292,7 +1293,7 @@ video img {
|
||||
.foot-cate li p {
|
||||
font-size: 0.7rem;
|
||||
line-height: 2.5rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.foot-wei {
|
||||
@@ -1327,7 +1328,7 @@ video img {
|
||||
width: 100%;
|
||||
height: 1.2rem;
|
||||
cursor: pointer;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
/*下拉*/
|
||||
.m_footer .left {
|
||||
@@ -1375,7 +1376,7 @@ video img {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
padding-bottom: 0.5rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
/*下拉*/
|
||||
.mask-up {
|
||||
@@ -1985,7 +1986,7 @@ video img {
|
||||
}
|
||||
.swiper-slide a {
|
||||
color: #000;
|
||||
font-family: 'Montserrat-SemiBold';
|
||||
font-family: 'HarmonyOS-SemiBold';
|
||||
}
|
||||
.swiper-slide img {
|
||||
max-width: 100%;
|
||||
@@ -2342,6 +2343,59 @@ 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%;
|
||||
@@ -2438,7 +2492,7 @@ video img {
|
||||
margin-right: 0px;
|
||||
line-height: 40px;
|
||||
font-weight: 600;
|
||||
font-family: Montserrat !important;
|
||||
font-family: HarmonyOS !important;
|
||||
color: #666;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -3426,26 +3480,26 @@ video img {
|
||||
font-size: 1.5rem;
|
||||
width: 90%;
|
||||
margin: 4rem auto 0;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
}
|
||||
.timedesin {
|
||||
font-size: 0.875rem;
|
||||
padding: 0.5rem 1rem;
|
||||
line-height: 1.3rem;
|
||||
width: 90%;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
.timeblue {
|
||||
color: #004bfa;
|
||||
font-size: 1.125rem;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
.timeblue img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.timeblue a {
|
||||
color: #004bfa;
|
||||
font-family: 'Montserrat-Medium';
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
/*视频*/
|
||||
.video-youtu {
|
||||
@@ -3505,7 +3559,7 @@ video img {
|
||||
}
|
||||
.vision-title {
|
||||
font-size: 1rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
width: 98%;
|
||||
margin: 1rem auto 0;
|
||||
}
|
||||
@@ -3513,7 +3567,7 @@ video img {
|
||||
font-size: 0.875;
|
||||
line-height: 1.5rem;
|
||||
color: #707070;
|
||||
font-family: 'Montserrat-Regular';
|
||||
font-family: 'HarmonyOS-Regular';
|
||||
width: 98%;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
@@ -3531,7 +3585,7 @@ video img {
|
||||
}
|
||||
.brand_title {
|
||||
font-size: 1.125rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
width: 98%;
|
||||
margin: 1rem auto 0;
|
||||
position: relative;
|
||||
@@ -3549,7 +3603,7 @@ video img {
|
||||
font-size: 0.875;
|
||||
line-height: 1.5rem;
|
||||
color: #000000;
|
||||
font-family: 'Montserrat-Regular';
|
||||
font-family: 'HarmonyOS-Regular';
|
||||
width: 98%;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
@@ -3602,7 +3656,7 @@ video::-webkit-media-controls-current-time-display {
|
||||
}
|
||||
.m_ach .title {
|
||||
font-size: 1.125rem;
|
||||
font-family: 'Montserrat-Bold';
|
||||
font-family: 'HarmonyOS-Bold';
|
||||
width: 98%;
|
||||
margin: 1rem auto 0;
|
||||
position: relative;
|
||||
@@ -3627,7 +3681,7 @@ video::-webkit-media-controls-current-time-display {
|
||||
}
|
||||
.m_ach .list-num li p {
|
||||
color: #707070;
|
||||
font-family: 'Montserrat-Regular';
|
||||
font-family: 'HarmonyOS-Regular';
|
||||
}
|
||||
/*新闻评测*/
|
||||
.news-vertu {
|
||||
@@ -3923,7 +3977,7 @@ video::-webkit-media-controls-current-time-display {
|
||||
border-radius: 8px;
|
||||
height: 48px;
|
||||
box-shadow: none;
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
font-family: HarmonyOS-Regular, HarmonyOS;
|
||||
}
|
||||
.comment_area {
|
||||
width: 100% !important;
|
||||
|
||||
40
public/static/index/mobile/css/topic_laptop/amd.css
Normal file
40
public/static/index/mobile/css/topic_laptop/amd.css
Normal file
@@ -0,0 +1,40 @@
|
||||
.amd-box {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
max-width: 6.82rem;
|
||||
margin: 0 auto;
|
||||
margin-top: -0.86rem;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.amd-img-header,
|
||||
.amd-img-main,
|
||||
.amd-img-footer {
|
||||
width: 100%;
|
||||
max-width: 6.82rem;
|
||||
}
|
||||
.amd-img-main {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.amd-img-main-left,
|
||||
.amd-img-main-right {
|
||||
flex: 1;
|
||||
max-width: 3.36rem;
|
||||
display: block;
|
||||
}
|
||||
.amd-img-main-left img,
|
||||
.amd-img-main-right img {
|
||||
width: 3.36rem;
|
||||
display: block;
|
||||
margin-top: 0.1rem;
|
||||
}
|
||||
.amd-img-header img {
|
||||
width: 6.82rem;
|
||||
display: block;
|
||||
}
|
||||
.amd-img-footer img {
|
||||
width: 6.82rem;
|
||||
margin-top: 0.1rem;
|
||||
display: block;
|
||||
}
|
||||
50
public/static/index/mobile/css/topic_laptop/bly.css
Normal file
50
public/static/index/mobile/css/topic_laptop/bly.css
Normal file
@@ -0,0 +1,50 @@
|
||||
.bly {
|
||||
margin: 0 0.34rem;
|
||||
aspect-ratio: 682/338;
|
||||
/* max-height: 6.97rem; */
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
|
||||
.bly .ba-slider .handle:after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
/* 1. 缩小宽高:从48px改为32px(可根据需求再调,比如28px/30px) */
|
||||
width: 0.32rem;
|
||||
height: 0.32rem;
|
||||
/* 2. 同步调整margin:宽高的一半,保证居中(48px对应-24px,32px对应-16px) */
|
||||
margin: -0.16rem 0 0 -0.16rem;
|
||||
content: '';
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #fff
|
||||
url('https://dev.ow.f2b211.com/static/index/pc/images/ba-arrow.png')
|
||||
/* 3. 缩小背景箭头:从22px改为16px(匹配整体尺寸) */ center center /
|
||||
0.16rem 0.16rem no-repeat;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 50%;
|
||||
transition: all 0.3s ease;
|
||||
transform: scale(1);
|
||||
z-index: 5;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.bly .ba-slider .handle.ba-draggable:after {
|
||||
transform: scale(0.8);
|
||||
}
|
||||
.bly-t {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
.bly-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
padding-top: 0.37rem;
|
||||
padding-bottom: 0.56rem;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
line-height: 1.5;
|
||||
}
|
||||
50
public/static/index/mobile/css/topic_laptop/cpu.css
Normal file
50
public/static/index/mobile/css/topic_laptop/cpu.css
Normal file
@@ -0,0 +1,50 @@
|
||||
.cpu {
|
||||
margin-top: 1.5rem;
|
||||
width: 100%;
|
||||
aspect-ratio: 750/882;
|
||||
position: relative;
|
||||
}
|
||||
.cpu-main {
|
||||
width: 100%;
|
||||
aspect-ratio: 750/882;
|
||||
}
|
||||
.cpu-texts-t {
|
||||
color: #fff;
|
||||
font-size: 0.48rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
padding-top: 0.19rem;
|
||||
}
|
||||
.cpu-texts-p {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.20rem;
|
||||
margin-top: 0.37rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cpu-footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.cpu-footer-img {
|
||||
display: flex;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
.cpu-footer img {
|
||||
width: 100%;
|
||||
max-width: 1.48rem;
|
||||
display: block;
|
||||
}
|
||||
.cpu-footer-desc {
|
||||
font-size: 0.16rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
margin-top: 0.38rem;
|
||||
margin-bottom: 0.51rem;
|
||||
width: 100%;
|
||||
}
|
||||
59
public/static/index/mobile/css/topic_laptop/endurance.css
Normal file
59
public/static/index/mobile/css/topic_laptop/endurance.css
Normal file
@@ -0,0 +1,59 @@
|
||||
.endurance {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-top: 1.78rem;
|
||||
aspect-ratio: 750/778;
|
||||
}
|
||||
.endurance-texts {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
top: -0.4rem;
|
||||
}
|
||||
.endurance-t {
|
||||
width: 100%;
|
||||
font-size: 0.5rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
.endurance-t span:nth-child(1) {
|
||||
font-size: 0.4rem;
|
||||
line-height: 1;
|
||||
}
|
||||
.endurance-t span:nth-child(2) {
|
||||
font-size: 0.48rem;
|
||||
margin-left: 0.11rem;
|
||||
line-height: 1;
|
||||
}
|
||||
.endurance-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
}
|
||||
.endurance-img {
|
||||
width: 100%;
|
||||
|
||||
position: absolute;
|
||||
bottom: 0.62rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
.endurance-img img {
|
||||
width: 2.46rem;
|
||||
display: block;
|
||||
}
|
||||
.endurance-footer-p {
|
||||
color: #ffffff;
|
||||
font-size: 0.18rem;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
text-align: center;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 100%;
|
||||
}
|
||||
161
public/static/index/mobile/css/topic_laptop/footer.css
Normal file
161
public/static/index/mobile/css/topic_laptop/footer.css
Normal file
@@ -0,0 +1,161 @@
|
||||
.footer-imgs {
|
||||
width: 6.8rem;
|
||||
margin: 0 auto;
|
||||
margin-top: 1.5rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.footer-imgs img {
|
||||
width: 2.22rem;
|
||||
}
|
||||
.footer-imgs img:nth-child(4),
|
||||
.footer-imgs img:nth-child(5),
|
||||
.footer-imgs img:nth-child(6) {
|
||||
margin-top: 0.09rem;
|
||||
}
|
||||
|
||||
.footer-texts {
|
||||
width: 6.8rem;
|
||||
margin: 1.5rem 0.35rem;
|
||||
/* font-size: 0.16rem; */
|
||||
color: #909399;
|
||||
/* white-space: normal; */
|
||||
/* margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem; */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.footer-texts p {
|
||||
width: 6.8rem;
|
||||
font-size: 0.16rem;
|
||||
padding-left: 0.1rem;
|
||||
text-indent: -0.2rem;
|
||||
/* line-height: 1.5;
|
||||
margin-bottom: 0.1rem; */
|
||||
font-family: 'HarmonyOS-Light';
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
|
||||
.footer-texts-en {
|
||||
width: 6.8rem;
|
||||
margin: 1.5rem 0.35rem;
|
||||
/* font-size: 0.16rem; */
|
||||
color: #909399;
|
||||
/* white-space: normal; */
|
||||
/* margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem; */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.footer-texts-en p {
|
||||
width: 6.8rem;
|
||||
font-size: 0.16rem;
|
||||
padding-left: 0.1rem;
|
||||
text-indent: -0.1rem;
|
||||
/* line-height: 1.5;
|
||||
margin-bottom: 0.1rem; */
|
||||
font-family: 'HarmonyOS-Light';
|
||||
/* letter-spacing: 1px; */
|
||||
}
|
||||
|
||||
|
||||
.oircoEgapp-foot .logo-white img {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.oircoEgapp-foot .m_footer {
|
||||
display: flex;
|
||||
/* flex-direction: row; */
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin:0 4%;
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
/* .oircoEgapp-foot .m_footer .left,
|
||||
.oircoEgapp-foot .foot-con {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
} */
|
||||
.oircoEgapp-foot .m_footer .right {
|
||||
flex:1;
|
||||
width: 50% !important;
|
||||
display: flex !important;
|
||||
justify-content: end !important;
|
||||
/* max-width: 55%; */
|
||||
}
|
||||
.oircoEgapp-foot .m_footer .left {
|
||||
flex:1 !important;
|
||||
/* max-width: 40%;
|
||||
justify-content: end;
|
||||
margin-right: 4%; */
|
||||
width: 50% !important;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.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.16rem;
|
||||
}
|
||||
.foot-cate h3 {
|
||||
font-size: 0.28rem;
|
||||
}
|
||||
.foot-cate li {
|
||||
padding: 0.16rem 0;
|
||||
min-height: 276px;
|
||||
|
||||
}
|
||||
.foot-cate li p {
|
||||
line-height: 40px;
|
||||
}
|
||||
.m_footer .right {
|
||||
float: right;
|
||||
width: 57%;
|
||||
text-align: left;
|
||||
}
|
||||
.foot-con span {
|
||||
font-size:14px;
|
||||
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: 30px;
|
||||
padding-right:0 !important;
|
||||
padding-top: 0;
|
||||
}
|
||||
/* .oircoEgapp-foot .m_footer .right {
|
||||
max-width: 50%;
|
||||
} */
|
||||
.m_footer .right {
|
||||
padding: 0 !important;
|
||||
}
|
||||
69
public/static/index/mobile/css/topic_laptop/fs.css
Normal file
69
public/static/index/mobile/css/topic_laptop/fs.css
Normal file
@@ -0,0 +1,69 @@
|
||||
.fs {
|
||||
width: 100%;
|
||||
}
|
||||
.fs-box {
|
||||
width: 100%;
|
||||
aspect-ratio: 16/9;
|
||||
}
|
||||
.fs-img,
|
||||
.fs-video {
|
||||
backface-visibility: hidden; /* 开启硬件加速 */
|
||||
transform: translateZ(0); /* 硬件加速 */
|
||||
}
|
||||
.fs-box img {
|
||||
width: 100%;
|
||||
}
|
||||
.fs-box-img {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.fs-h-img {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.11rem;
|
||||
|
||||
}
|
||||
.fs-h-img img {
|
||||
width: 3.35rem;
|
||||
aspect-ratio: 335/95;
|
||||
|
||||
}
|
||||
.fs-b-img {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 0.1rem;
|
||||
aspect-ratio: 681/122;
|
||||
}
|
||||
.fs-b-img img {
|
||||
width: 6.81rem;
|
||||
}
|
||||
.fs-ts {
|
||||
font-size: 0.18rem;
|
||||
text-align: center;
|
||||
color: #cbcfd8;
|
||||
padding: 0.4rem 0;
|
||||
}
|
||||
.dl {
|
||||
width: 100%;
|
||||
padding-top: 1.01rem;
|
||||
}
|
||||
.dl-t {
|
||||
color: #fff;
|
||||
font-size: 0.48rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.dl-p {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.20rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
/* padding-bottom: 0.37rem; */
|
||||
line-height: 1.5;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
}
|
||||
44
public/static/index/mobile/css/topic_laptop/gpu.css
Normal file
44
public/static/index/mobile/css/topic_laptop/gpu.css
Normal file
@@ -0,0 +1,44 @@
|
||||
.gpu {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.gpu-texts {
|
||||
color: #fff;
|
||||
font-size: 0.48rem;
|
||||
margin: 0 0.34rem;
|
||||
}
|
||||
.gpu-texts-t {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.gpu-texts-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
margin-top: 0.37rem;
|
||||
}
|
||||
.gpu-main-img {
|
||||
width: 100%;
|
||||
aspect-ratio: 750/780;
|
||||
}
|
||||
.gpu-amd-img {
|
||||
width: 100%;
|
||||
}
|
||||
.gpu-amd-img img {
|
||||
max-width: 2.26rem;
|
||||
width: 100%;
|
||||
margin-top: 2.39rem;
|
||||
margin-left: 0.45rem;
|
||||
}
|
||||
.gpu-footer-imgs {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
bottom: 0.61rem;
|
||||
gap: 0.1rem;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.gpu-footer-imgs img {
|
||||
max-width: 1.63rem;
|
||||
}
|
||||
233
public/static/index/mobile/css/topic_laptop/header.css
Normal file
233
public/static/index/mobile/css/topic_laptop/header.css
Normal file
@@ -0,0 +1,233 @@
|
||||
.oircoEgapp-head {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
width: -webkit-fill-available;
|
||||
}
|
||||
.oircoEgapp-head .headtop {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0 0.16rem;
|
||||
height:60px;
|
||||
background: #fff;
|
||||
}
|
||||
.oircoEgapp-head .headtop .headerlogimg {
|
||||
|
||||
max-width: 140px;
|
||||
min-width: 123px;
|
||||
height: auto !important;
|
||||
display: block;
|
||||
/* height: 2.25rem; */
|
||||
}
|
||||
.oircoEgapp-head .top-menu {
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
color: #000;
|
||||
display: none;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct {
|
||||
font-family: "HarmonyOS-SemiBold";
|
||||
font-weight: bold;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1 {
|
||||
padding: 0.16rem 3.5% 0.2rem;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
font-size: 14px;
|
||||
position: relative;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1-more {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 1.5%;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1-more i {
|
||||
font-weight: bold;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1-2 {
|
||||
padding-left: 0.16rem;
|
||||
font-size: 13px;
|
||||
line-height: 1.8;
|
||||
font-weight: 100;
|
||||
font-weight: bold;
|
||||
display: none;
|
||||
}
|
||||
.oircoEgapp-head .top-menu .it-ct .it-1-2 a {
|
||||
color: #666;
|
||||
}
|
||||
.cursor_p span {
|
||||
font-size: 22px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-line-clamp: 1;
|
||||
width: 100%;
|
||||
/* height: 1.2rem; */
|
||||
padding-left: 0.2rem;
|
||||
}
|
||||
.cursor_p span:hover {
|
||||
font-size:22px;
|
||||
white-space: normal;
|
||||
width: 100%;
|
||||
overflow: inherit;
|
||||
line-height: 1.5;
|
||||
}
|
||||
/* .cursor_p {
|
||||
height: 0.38rem !important;
|
||||
} */
|
||||
.img-responsive {
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
align-items: center !important;
|
||||
}
|
||||
.img-responsive span {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
}
|
||||
.action-sheet {
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
display: none;
|
||||
background: #fff;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
z-index: 11111;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.menu-name {
|
||||
text-indent: 0.2rem;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #000;
|
||||
}
|
||||
.action-sheet ul li {
|
||||
margin: 0 10px;
|
||||
color: #333;
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
.action-sheet ul li a {
|
||||
color: #333;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
.action-sheet ul li img {
|
||||
margin-right: 14px;
|
||||
}
|
||||
.menu-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0 10px;
|
||||
justify-content: space-between;
|
||||
background: #fff;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius:6px;
|
||||
padding: 5px 0;
|
||||
}
|
||||
.close-icon {
|
||||
width: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.close-icon img {
|
||||
width: 24px !important;
|
||||
}
|
||||
.title-text {
|
||||
padding-top: 0.24rem;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
}
|
||||
.title-text p {
|
||||
line-height: 2;
|
||||
}
|
||||
.title-text p a {
|
||||
color: #989898;
|
||||
|
||||
}
|
||||
.title-text p a:hover {
|
||||
color: #989898;
|
||||
}
|
||||
.marsk-container {
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
display: none;
|
||||
position: absolute;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
z-index: 9999;
|
||||
}
|
||||
.marsk-container-detail {
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
display: none;
|
||||
position: absolute;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
z-index: 9999;
|
||||
}
|
||||
.search-in {
|
||||
margin-top:0.8rem;
|
||||
}
|
||||
.search-in input {
|
||||
width: 70% !important;
|
||||
height: 0.8rem;
|
||||
background: #ffffff;
|
||||
border: 1px solid #d6d6d6;
|
||||
opacity: 1;
|
||||
border-radius: 20px;
|
||||
padding: 0 14px;
|
||||
font-size: 14px;
|
||||
}
|
||||
::-webkit-input-placeholder {
|
||||
color: #989898;
|
||||
}
|
||||
.search-button {
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
cursor: pointer;
|
||||
background: #0060ff;
|
||||
height:0.7rem;
|
||||
border-radius: 20px;
|
||||
padding: 0 14px;
|
||||
width: 22%;
|
||||
}
|
||||
.search-in form{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
.search-in .title-text p a{
|
||||
font-size: 14px;
|
||||
}
|
||||
/*头部搜索弹窗*/
|
||||
.popup-quick {
|
||||
width: 86%;
|
||||
background-color: #fff;
|
||||
z-index: 9999;
|
||||
box-shadow: 0px 2px 5px rgba(255, 255, 255, 0.2);
|
||||
color: #333;
|
||||
padding: 14px;
|
||||
border-radius: 5px;
|
||||
margin: 14px auto 0;
|
||||
position: relative;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
42
public/static/index/mobile/css/topic_laptop/index.css
Normal file
42
public/static/index/mobile/css/topic_laptop/index.css
Normal file
@@ -0,0 +1,42 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
html {
|
||||
width: 100% !important;
|
||||
overflow-x: hidden;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
max-width: 100vw !important;
|
||||
}
|
||||
body {
|
||||
width: 100%;
|
||||
background: #000;
|
||||
overflow-x: hidden;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
max-width: 100vw !important;
|
||||
}
|
||||
|
||||
.f36{
|
||||
font-size: 0.36rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
/* line-height: 1 !important; */
|
||||
}
|
||||
.f18{
|
||||
font-size: 0.18rem !important;
|
||||
line-height: 1.5 !important;
|
||||
}
|
||||
.lh1 {
|
||||
line-height: 1 !important;
|
||||
}
|
||||
.f28 {
|
||||
font-size: 0.28rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
}
|
||||
.f48 {
|
||||
font-size: 0.48rem !important;
|
||||
line-height: 1 !important;
|
||||
margin-bottom: 0.6rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
}
|
||||
43
public/static/index/mobile/css/topic_laptop/ips.css
Normal file
43
public/static/index/mobile/css/topic_laptop/ips.css
Normal file
@@ -0,0 +1,43 @@
|
||||
.ips {
|
||||
position: relative;
|
||||
}
|
||||
.ips-t {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
line-height: 1.5;
|
||||
margin-top: 1.5rem;
|
||||
margin-left: 0.38rem;
|
||||
margin-right: 0.38rem;
|
||||
margin-bottom: 0.46rem;
|
||||
}
|
||||
.ips-bg {
|
||||
aspect-ratio: 750/678;
|
||||
position: relative;
|
||||
}
|
||||
.ips-bg p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
margin-left: 0.38rem;
|
||||
margin-right: 0.38rem;
|
||||
position: absolute;
|
||||
top: -0.3rem;
|
||||
}
|
||||
.ips-imgs {
|
||||
width: 6.8rem;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.1rem;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: -3rem;
|
||||
display: flex;
|
||||
}
|
||||
.ips-imgs img {
|
||||
width: 3.35rem;
|
||||
display: block;
|
||||
}
|
||||
/* .ips-imgs img:nth-child(3),
|
||||
.ips-imgs img:nth-child(4) {
|
||||
margin-top: 0.1rem;
|
||||
} */
|
||||
37
public/static/index/mobile/css/topic_laptop/m2.css
Normal file
37
public/static/index/mobile/css/topic_laptop/m2.css
Normal file
@@ -0,0 +1,37 @@
|
||||
.m2 {
|
||||
width: 100%;
|
||||
margin-top: 1.09rem;
|
||||
}
|
||||
.m2-bg {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
aspect-ratio: 750/846;
|
||||
}
|
||||
|
||||
.m2-bg-t1 {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
padding-top: 1.3rem;
|
||||
}
|
||||
.m2-bg-p {
|
||||
color: #CBCFD8ff;
|
||||
font-size: 0.18rem;
|
||||
padding-top:0.37rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
.m2-img-box {
|
||||
position: absolute;
|
||||
bottom: 0.66rem;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.11rem;
|
||||
}
|
||||
.m2-img-box img {
|
||||
width: 2.22rem;
|
||||
}
|
||||
39
public/static/index/mobile/css/topic_laptop/memory.css
Normal file
39
public/static/index/mobile/css/topic_laptop/memory.css
Normal file
@@ -0,0 +1,39 @@
|
||||
.memory {
|
||||
width: 100%;
|
||||
}
|
||||
.memory-t {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding-bottom: 0.37rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.memory-img {
|
||||
width: 100%;
|
||||
aspect-ratio: 750/727;
|
||||
position: relative;
|
||||
}
|
||||
.memory-p {
|
||||
width: 100%;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.memory-footer-img {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: -0.74rem;
|
||||
width: 6.83rem;
|
||||
}
|
||||
.memory-footer-img p {
|
||||
height:0;
|
||||
}
|
||||
.memory-footer-img img {
|
||||
width: 6.83rem;
|
||||
|
||||
display: block;
|
||||
aspect-ratio: 683/148;
|
||||
}
|
||||
129
public/static/index/mobile/css/topic_laptop/progress.css
Normal file
129
public/static/index/mobile/css/topic_laptop/progress.css
Normal file
@@ -0,0 +1,129 @@
|
||||
.progress {
|
||||
margin-left: 0.34rem;
|
||||
margin-right: 0.34rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
/* .progress-section {
|
||||
margin-left: 0.34rem;
|
||||
margin-right: 0.34rem;
|
||||
box-sizing: border-box;
|
||||
} */
|
||||
|
||||
.progress-title {
|
||||
font-size: 0.24rem;
|
||||
color: #fff;
|
||||
padding: 0.16rem 0 0.36rem 0;
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
}
|
||||
.progress-item .label {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
line-height: 1;
|
||||
margin-top: 0.13rem;
|
||||
margin-bottom: 0.36rem;
|
||||
}
|
||||
|
||||
.progress-item .label .device-name {
|
||||
flex: 1;
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
margin-left: 0.04rem;
|
||||
}
|
||||
|
||||
.progress-item .label .value {
|
||||
text-align: right;
|
||||
font-family: 'HarmonyOS-Medium';
|
||||
margin-right: 0.04rem;
|
||||
}
|
||||
|
||||
.colorLinearGradient {
|
||||
background: linear-gradient(90deg, #7e51ff, #d5dfff);
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.progress-item .label .value.m4-max {
|
||||
color: #5e5ce6;
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
flex: 1;
|
||||
height: 0.1rem;
|
||||
max-height: 0.2rem;
|
||||
min-height: 0.1rem;
|
||||
border-radius: 0.1rem;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
/* 性能优化1:开启硬件加速,减少重绘 */
|
||||
transform: translateZ(0);
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.progress-fill {
|
||||
height: 100%;
|
||||
border-radius: 0.05rem;
|
||||
transform: scaleX(0);
|
||||
transform-origin: left center;
|
||||
transition: transform 1.2s ease-out;
|
||||
will-change: transform;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 保留你所有原始的进度条颜色类 */
|
||||
.progress-fill.m4-max {
|
||||
background: linear-gradient(40deg, #7e51ff, #e1d5ff);
|
||||
}
|
||||
|
||||
.progress-fill.m2-max {
|
||||
background: #bfc5d9;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
100% {
|
||||
left: 150%;
|
||||
}
|
||||
}
|
||||
|
||||
.font20 {
|
||||
font-size: 0.2rem !important;
|
||||
}
|
||||
.font18 {
|
||||
font-size: 0.18rem !important;
|
||||
}
|
||||
.colorCBCFD8 {
|
||||
color: #646778 !important;
|
||||
}
|
||||
|
||||
.progress-p {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.18rem;
|
||||
margin-top: 0.51rem;
|
||||
margin-bottom: 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.progress-p1 {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.18rem;
|
||||
margin-top: 1.56rem;
|
||||
text-align: center;
|
||||
}
|
||||
.w645 {
|
||||
width: 6.45rem;
|
||||
}
|
||||
.w585 {
|
||||
width: 5.85rem;
|
||||
}
|
||||
.w454 {
|
||||
width: 4.54rem;
|
||||
}
|
||||
.w321 {
|
||||
width: 3.21rem;
|
||||
}
|
||||
.w596 {
|
||||
width: 5.96rem;
|
||||
}
|
||||
.w467 {
|
||||
width: 4.67rem;
|
||||
}
|
||||
25
public/static/index/mobile/css/topic_laptop/qb.css
Normal file
25
public/static/index/mobile/css/topic_laptop/qb.css
Normal file
@@ -0,0 +1,25 @@
|
||||
/* .qb {
|
||||
position: absolute;
|
||||
top:3rem;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
} */
|
||||
.qb-t {
|
||||
width: 100%;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
.qb-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
padding-bottom: 0.34rem;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
line-height: 1.5;
|
||||
}
|
||||
.qb-bg-img1 {
|
||||
width: 6.9rem;
|
||||
}
|
||||
28
public/static/index/mobile/css/topic_laptop/rgb.css
Normal file
28
public/static/index/mobile/css/topic_laptop/rgb.css
Normal file
@@ -0,0 +1,28 @@
|
||||
.rgb-t {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-top: 4.84rem;
|
||||
margin-bottom: 0.37rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.rgb-bg {
|
||||
aspect-ratio: 750/582;
|
||||
}
|
||||
.rgb-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
}
|
||||
.rgb-imgs {
|
||||
display: flex;
|
||||
gap: 0.1rem;
|
||||
margin-top: 0.28rem;
|
||||
justify-content: center;
|
||||
}
|
||||
.rgb-imgs img {
|
||||
width: 2.17rem;
|
||||
display: block;
|
||||
}
|
||||
86
public/static/index/mobile/css/topic_laptop/swiper.css
Normal file
86
public/static/index/mobile/css/topic_laptop/swiper.css
Normal file
@@ -0,0 +1,86 @@
|
||||
/* 轮播容器 - 核心:基于视口高度自适应 */
|
||||
.auto-swiper-container {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 轮播项 - 填充容器高度 */
|
||||
.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: cover; /* 优先填充容器,裁剪超出部分(无拉伸) */
|
||||
/* object-fit: contain; 可选:完整显示图片,不裁剪(可能留黑边) */
|
||||
display: block;
|
||||
}
|
||||
.swiper-container-texts {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 1.2rem;
|
||||
transform: translateX(-50%);
|
||||
z-index: 10;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.swiper-container-texts-t {
|
||||
font-size: 0.48rem;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
line-height: 1;
|
||||
}
|
||||
.swiper-container-texts-p {
|
||||
padding-top: 0.54rem;
|
||||
font-size: 0.16rem;
|
||||
/* text-align: center; */
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/* letter-spacing: px; */
|
||||
justify-content: center;
|
||||
}
|
||||
.swiper-container-texts-p div {
|
||||
font-family: 'HarmonyOS-Light';
|
||||
}
|
||||
.swiper-container-texts-line {
|
||||
width: 1px;
|
||||
height: 0.16rem;
|
||||
background: #fff;
|
||||
margin: 0 12px;
|
||||
}
|
||||
.swiper-container-texts-img {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding-top: 0.54rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.swiper-container-texts-img a {
|
||||
width: 100%;
|
||||
max-width: 1.18rem;
|
||||
}
|
||||
.swiper-container-texts-img img {
|
||||
width: 100%;
|
||||
max-width: 1.18rem;
|
||||
}
|
||||
.swiper-slide-t {
|
||||
padding-top: 0.3rem;
|
||||
font-size: 0.2rem;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
.swiper-slide-p {
|
||||
font-size: 0.16rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
margin-top: 0.18rem;
|
||||
}
|
||||
105
public/static/index/mobile/css/topic_laptop/tabs.css
Normal file
105
public/static/index/mobile/css/topic_laptop/tabs.css
Normal file
@@ -0,0 +1,105 @@
|
||||
.tabs-container {
|
||||
width: 6.03rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.tabs-header-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 0.48rem;
|
||||
}
|
||||
.tabs-header {
|
||||
display: inline-flex;
|
||||
/* 改为inline-flex,宽度由子元素决定 */
|
||||
position: relative;
|
||||
border-bottom: 1px solid #909399;
|
||||
margin: 0 auto;
|
||||
width: 1.75rem;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
/* padding: 12px 24px; */
|
||||
font-size: 0.18rem;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s ease;
|
||||
white-space: nowrap;
|
||||
color: #cbcfd8;
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
margin-bottom: 0.08rem;
|
||||
}
|
||||
|
||||
.tab-indicator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
height:1px;
|
||||
background-color: #fff;
|
||||
transform: translateX(0);
|
||||
width: auto;
|
||||
transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1),
|
||||
width 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
|
||||
will-change: transform, width;
|
||||
backface-visibility: hidden;
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
width: 6.03rem;
|
||||
width: 6.03rem;
|
||||
/* min-width: 1280px; */
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.content-video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.tabs-p {
|
||||
width: 100%;
|
||||
font-size: 0.18rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
margin-top: 0.48rem;
|
||||
display: none;
|
||||
}
|
||||
.tabs-p.active {
|
||||
display: block;
|
||||
}
|
||||
.tab-panel {
|
||||
display: none;
|
||||
}
|
||||
.tab-panel-img {
|
||||
background: #1c1c1e;
|
||||
width: 5.77rem;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
border-radius: 0.16rem;
|
||||
}
|
||||
.tab-panel-img img {
|
||||
width: 5.77rem;
|
||||
}
|
||||
.tab-panel.active {
|
||||
display: block;
|
||||
}
|
||||
.tab-t {
|
||||
font-size: 0.48rem;
|
||||
color: #cbcfd8;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.7rem;
|
||||
display: none;
|
||||
}
|
||||
.tab-t.active {
|
||||
display: block;
|
||||
}
|
||||
/* .tab-ts {
|
||||
margin-top: 2.97rem;
|
||||
margin-bottom: 1rem;
|
||||
} */
|
||||
37
public/static/index/mobile/css/topic_laptop/wift.css
Normal file
37
public/static/index/mobile/css/topic_laptop/wift.css
Normal file
@@ -0,0 +1,37 @@
|
||||
.wifi {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
aspect-ratio: 750/595;
|
||||
margin-top: 3.45rem;
|
||||
}
|
||||
.wifi-texts {
|
||||
position: absolute;
|
||||
top: -2.3rem;
|
||||
left: 0.42rem;
|
||||
width: 100%;
|
||||
}
|
||||
.wifi-t {
|
||||
width: 100%;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.wifi-p {
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
padding-top: 0.37rem;
|
||||
line-height: 1.4;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
}
|
||||
.wifi-img {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: -0.22rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
.wifi-img img {
|
||||
width: 3.35rem;
|
||||
display: block;
|
||||
}
|
||||
9
public/static/index/mobile/css/topic_laptop/window.css
Normal file
9
public/static/index/mobile/css/topic_laptop/window.css
Normal file
@@ -0,0 +1,9 @@
|
||||
.window {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
.window img {
|
||||
width: 6.8rem;
|
||||
}
|
||||
64
public/static/index/mobile/css/topic_laptop/xn.css
Normal file
64
public/static/index/mobile/css/topic_laptop/xn.css
Normal file
@@ -0,0 +1,64 @@
|
||||
.xn-container {
|
||||
width: 6.8rem;
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 图片容器样式(核心) */
|
||||
.xn-image-section {
|
||||
overflow: hidden;
|
||||
border-radius: 0.16rem;
|
||||
background: #0d0c10;
|
||||
border: 1px solid #3f3f45;
|
||||
width: 6.8rem;
|
||||
}
|
||||
|
||||
.zoom-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
/* 调整transform过渡时间为2s,opacity为1.5s,可按需修改 */
|
||||
transition: transform 2s cubic-bezier(0.25, 0.1, 0.25, 1), opacity 1.5s ease;
|
||||
transform: scale(0.8);
|
||||
/* 初始缩放比例 */
|
||||
opacity: 0.9;
|
||||
/* 初始透明度(略暗,放大后变亮) */
|
||||
}
|
||||
|
||||
/* 滚动触发后的放大状态 */
|
||||
.zoom-image.active {
|
||||
transform: scale(1.1);
|
||||
/* 放大5%(官网常用比例,不夸张) */
|
||||
opacity: 1;
|
||||
}
|
||||
.xn-t {
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.6rem;
|
||||
|
||||
}
|
||||
.xn-p {
|
||||
padding-top: 0.6rem;
|
||||
font-size: 0.16rem;
|
||||
margin-left: 0.47rem;
|
||||
}
|
||||
.xn-p p {
|
||||
width: 5.84rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
/* 核心:左内边距控制第二行缩进量 */
|
||||
padding-left: 0.8rem;
|
||||
/* 首行向左偏移,抵消左内边距,实现第二行缩进 */
|
||||
text-indent: -0.8rem;
|
||||
/* 确保p标签是块级,且换行正常 */
|
||||
display: block;
|
||||
word-wrap: break-word;
|
||||
white-space: nowrap;
|
||||
/* 2. 超出元素宽度的内容隐藏 */
|
||||
overflow: hidden;
|
||||
/* 3. 将超出的文本替换为省略号... */
|
||||
text-overflow: ellipsis;
|
||||
/* 可选:给元素设置一个固定宽度(确保省略效果生效) */
|
||||
}
|
||||
122
public/static/index/mobile/css/topic_laptop/zoom.css
Normal file
122
public/static/index/mobile/css/topic_laptop/zoom.css
Normal file
@@ -0,0 +1,122 @@
|
||||
/* 图片容器:100vw宽,最小宽度1440px,按图片原始比例(2560:1857)定高 */
|
||||
.zoom-container {
|
||||
width: 7.5rem;
|
||||
height: 6.05rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 图片包裹层:与容器同尺寸,定位参考系,承接缩放变换 */
|
||||
.img-wrapper {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
/* z-index: -10; */
|
||||
}
|
||||
|
||||
/* 图片:按原始比例填充包裹层,不裁切,初始放大+过渡动画 */
|
||||
.bg-img {
|
||||
width: 7.5rem;
|
||||
height: 6.05rem;
|
||||
display: block;
|
||||
transform: scale(1.5);
|
||||
transition: transform 1.8s ease;
|
||||
transform-origin: center center;
|
||||
}
|
||||
|
||||
/* 图片缩小后的状态 */
|
||||
.bg-img.zoom-out {
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
/* 标注样式:关键修正 - 基于容器绝对定位,百分比参考图片原始比例 */
|
||||
.annotation {
|
||||
position: absolute;
|
||||
color: #fff;
|
||||
font-size: calc(12px + 0.3vw);
|
||||
opacity: 0;
|
||||
transform: translateY(calc(10px + 0.5vw));
|
||||
transition: opacity 0.8s ease, transform 0.8s ease;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
white-space: nowrap;
|
||||
/* 关键:标注的定位参考系是容器(与图片同比例),而非缩放后的图片 */
|
||||
top: 0;
|
||||
left: 0;
|
||||
/* 重置默认值,依赖内联style的百分比定位 */
|
||||
}
|
||||
|
||||
/* 标注显示状态 */
|
||||
.annotation.anno-show {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.annotation span {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
/* 确保文字居中对齐 */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* 标注线条样式:基于文字定位,适配缩放 */
|
||||
.annotation span::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 0.01rem;
|
||||
height: 0;
|
||||
bottom: calc(100% + 6px);
|
||||
background-color: #fff;
|
||||
transition: height 0.8s ease;
|
||||
transform-origin: bottom center;
|
||||
}
|
||||
/* 向上延伸的标注线条(给需要向上的.annotation加anno-up类) */
|
||||
.annotation.anno-up span::before {
|
||||
/* 把线条位置从文字下方,改成文字上方 */
|
||||
bottom: auto;
|
||||
top: 0.3rem; /* 定位到文字顶部外 */
|
||||
/* 线条方向改为向上延伸 */
|
||||
transform-origin: top center;
|
||||
}
|
||||
.annotation.anno-up1 span::before {
|
||||
/* 把线条位置从文字下方,改成文字上方 */
|
||||
bottom: auto;
|
||||
top: 0.5rem; /* 定位到文字顶部外 */
|
||||
/* 线条方向改为向上延伸 */
|
||||
transform-origin: top center;
|
||||
}
|
||||
/* 标注显示时,设置线条最终高度 */
|
||||
.annotation.anno-show span::before {
|
||||
height: 0.57rem;
|
||||
}
|
||||
|
||||
.zoom-t {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
.zoom-p {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
position: absolute;
|
||||
top: 0.37rem;
|
||||
z-index: 10;
|
||||
line-height: 1.5;
|
||||
font-family: 'HarmonyOS-Light';
|
||||
}
|
||||
|
||||
/* 标注延迟类 */
|
||||
.anno-delay-1 {
|
||||
transition-delay: 0.8s;
|
||||
}
|
||||
.anno-delay-1 span::before {
|
||||
transition-delay: 0.8s;
|
||||
}
|
||||
@@ -219,4 +219,32 @@
|
||||
.narshelpCenterdetail-app .nhlpapp-pagescate .nars-hlpdt-ml .sub-list li a:hover {
|
||||
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;
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
/* 核心模块:固定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.08rem(8px) */
|
||||
.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.08rem(8px) */
|
||||
.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);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
.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%;
|
||||
}
|
||||
165
public/static/index/mobile/css/topic_power_prodline/index.css
Normal file
165
public/static/index/mobile/css/topic_power_prodline/index.css
Normal file
@@ -0,0 +1,165 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 1. 根字体适配:限制最小根字体为14px,从源头避免文字过小 */
|
||||
/* html {
|
||||
|
||||
font-size: 16px;
|
||||
} */
|
||||
|
||||
/* 平板端(768px~1023px):15px→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%;
|
||||
}
|
||||
79
public/static/index/mobile/css/topic_power_prodline/mask.css
Normal file
79
public/static/index/mobile/css/topic_power_prodline/mask.css
Normal file
@@ -0,0 +1,79 @@
|
||||
/* 蒙版样式 - 新增触摸事件禁止 */
|
||||
.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;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
.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;
|
||||
}
|
||||
43
public/static/index/mobile/css/topic_power_prodline/nav.css
Normal file
43
public/static/index/mobile/css/topic_power_prodline/nav.css
Normal file
@@ -0,0 +1,43 @@
|
||||
/* 设计稿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;
|
||||
}
|
||||
149
public/static/index/mobile/css/topic_power_prodline/product.css
Normal file
149
public/static/index/mobile/css/topic_power_prodline/product.css
Normal file
@@ -0,0 +1,149 @@
|
||||
/* 设计稿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;
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
.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;
|
||||
/* 缩小图片区域最小宽度,平衡文字空间 */
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/* 设计稿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;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
.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;*/
|
||||
}
|
||||
|
||||
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Black.ttf
(Stored with Git LFS)
Normal file
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Black.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Bold.ttf
(Stored with Git LFS)
Normal file
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Bold.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Light.ttf
(Stored with Git LFS)
Normal file
BIN
public/static/index/mobile/fonts/HarmonyOS_Sans_SC_Light.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user