Compare commits
33 Commits
55a75b56b1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 49240893b5 | |||
| 61728434d3 | |||
| 5736d09dbe | |||
| f4646f1e3a | |||
| 5b3e505e9b | |||
| 624d7fde2f | |||
| a85f2c1b3a | |||
| 7ec97c39a7 | |||
| 67016c4e9a | |||
| 69c3634731 | |||
| 12bc6aeee7 | |||
| 2ca25e083e | |||
| df37a7c00d | |||
| 11e2c4f457 | |||
| edfc27b06a | |||
| fdc9064739 | |||
| 24e5554bc4 | |||
| c767c20641 | |||
| 2c85df4a98 | |||
| 88a91f3136 | |||
| 5fd603cbc6 | |||
| b92753c822 | |||
| ddd578eb08 | |||
| 1cdd0536b9 | |||
| 9cc6dc3cd9 | |||
| 4d25f6fec8 | |||
| 2764ce3b86 | |||
| 7cb270b313 | |||
| 86ffcb99ac | |||
| c476193002 | |||
| 5643faad94 | |||
| 989f6c25a0 | |||
| 2e5103b19a |
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.
|
||||||
@@ -201,15 +201,16 @@ class ReceiveProductSync
|
|||||||
throw new \Exception('产品创建失败');
|
throw new \Exception('产品创建失败');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
// 注释更新同步,防止tco同步修改官网手动调整数据
|
||||||
$product->spu = $data['spu'];
|
// else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
||||||
$product->name = $data['name'];
|
// $product->spu = $data['spu'];
|
||||||
$product->category_id = $product_category['id'];
|
// $product->name = $data['name'];
|
||||||
$product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
// $product->category_id = $product_category['id'];
|
||||||
if (!$product->save()) {
|
// $product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
||||||
throw new \Exception('产品更新失败');
|
// if (!$product->save()) {
|
||||||
}
|
// throw new \Exception('产品更新失败');
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
return error(sprintf('%s %s:%d', $th->getMessage(), $th->getFile(), $th->getLine()));
|
return error(sprintf('%s %s:%d', $th->getMessage(), $th->getFile(), $th->getLine()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,13 +107,6 @@ abstract class Common extends BaseController
|
|||||||
'status' => 1
|
'status' => 1
|
||||||
])
|
])
|
||||||
->where('status', '=', 1)
|
->where('status', '=', 1)
|
||||||
->where(function($query) {
|
|
||||||
// 临时代码,移动端暂时不显示 "AI PC"
|
|
||||||
if (request()->from == 'mobile') {
|
|
||||||
$table_name = SysNavigationItemModel::getTable();
|
|
||||||
$query->whereNotIn($table_name . ".id", [78]);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
->order(['sort' => 'asc', 'id' => 'asc'])
|
->order(['sort' => 'asc', 'id' => 'asc'])
|
||||||
->select();
|
->select();
|
||||||
if ($nav->isEmpty()) {
|
if ($nav->isEmpty()) {
|
||||||
|
|||||||
@@ -234,6 +234,6 @@ return [
|
|||||||
"接口大满贯" => "Full-Featured Ports",
|
"接口大满贯" => "Full-Featured Ports",
|
||||||
"酷睿i5-12450H" => "Core i5-12450H",
|
"酷睿i5-12450H" => "Core i5-12450H",
|
||||||
"锐龙9 6900HX" => "Ryzen9 6900HX",
|
"锐龙9 6900HX" => "Ryzen9 6900HX",
|
||||||
"标配多种接口,会议室连接电脑、U盘传输文件、TF卡读取等,全都轻松搞定" => "Versatile Ports for Easy Connectivity. Effortlessly link to pro",
|
"标配多种接口,会议室连接电脑、</br>U盘传输文件、TF卡读取等,全都轻松搞定" => "Versatile Ports for Easy Connectivity. Effortlessly</br> link to projectors, U disks, TF cards, and more.",
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<link rel="stylesheet" href="__CSS__/topic_laptop/window.css">
|
<link rel="stylesheet" href="__CSS__/topic_laptop/window.css">
|
||||||
<link rel="stylesheet" href="__CSS__/topic_laptop/footer.css">
|
<link rel="stylesheet" href="__CSS__/topic_laptop/footer.css">
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
(function (doc, win)
|
(function (doc, win)
|
||||||
{
|
{
|
||||||
var docEl = doc.documentElement;
|
var docEl = doc.documentElement;
|
||||||
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
|
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
|
||||||
@@ -30,10 +30,12 @@
|
|||||||
function setRootFontSize ()
|
function setRootFontSize ()
|
||||||
{
|
{
|
||||||
var clientWidth = docEl.clientWidth;
|
var clientWidth = docEl.clientWidth;
|
||||||
|
console.log(clientWidth,'=clientWidth=')
|
||||||
if (!clientWidth) return;
|
if (!clientWidth) return;
|
||||||
var fontSize = clientWidth / 7.5; // 750px/7.5=100px,375px/7.5=50px
|
var fontSize = clientWidth / 7.5; // 750px/7.5=100px,375px/7.5=50px
|
||||||
// 直接修改内联样式,优先级最高
|
// 直接修改内联样式,优先级最高
|
||||||
docEl.setAttribute('style', 'font-size: ' + fontSize + 'px !important;');
|
docEl.setAttribute('style', 'font-size: ' + fontSize + 'px !important;');
|
||||||
|
console.log(fontSize,'=fontSize=')
|
||||||
}
|
}
|
||||||
|
|
||||||
setRootFontSize();
|
setRootFontSize();
|
||||||
@@ -116,8 +118,13 @@
|
|||||||
{assign name="cpu_first_section" value=":array_shift($data.cpu)"/}
|
{assign name="cpu_first_section" value=":array_shift($data.cpu)"/}
|
||||||
<div class="cpu-main" style="background: url('{$cpu_first_section.image|default=\'\'}');background-size:100% auto">
|
<div class="cpu-main" style="background: url('{$cpu_first_section.image|default=\'\'}');background-size:100% auto">
|
||||||
<div class="cpu-texts">
|
<div class="cpu-texts">
|
||||||
<div class="cpu-texts-t">{$cpu_first_section.title|default=''}</div>
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
<p class="cpu-texts-p">{$cpu_first_section.short_title|default=''}</p>
|
<div class="cpu-texts-t f36 lh1">{$cpu_first_section.title|default=''|raw}</div>
|
||||||
|
<p class="cpu-texts-p f18">{$cpu_first_section.short_title|default=''|raw}</p>
|
||||||
|
{else/}
|
||||||
|
<div class="cpu-texts-t">{$cpu_first_section.title|default=''|raw}</div>
|
||||||
|
<p class="cpu-texts-p">{$cpu_first_section.short_title|default=''|raw}</p>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="cpu-footer">
|
<div class="cpu-footer">
|
||||||
<div class="cpu-footer-img">
|
<div class="cpu-footer-img">
|
||||||
@@ -197,8 +204,13 @@
|
|||||||
<div class="gpu">
|
<div class="gpu">
|
||||||
{assign name="gpu_first_section" value=":array_shift($data.gpu)"/}
|
{assign name="gpu_first_section" value=":array_shift($data.gpu)"/}
|
||||||
<div class="gpu-texts">
|
<div class="gpu-texts">
|
||||||
<div class="gpu-texts-t">{$gpu_first_section.title|default=''|raw}</div>
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
<div class="gpu-texts-p">{$gpu_first_section.short_title|default=''|raw}</div>
|
<div class="gpu-texts-t f36">{$gpu_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="gpu-texts-p f18">{$gpu_first_section.short_title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
|
<div class="gpu-texts-t">{$gpu_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="gpu-texts-p">{$gpu_first_section.short_title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="gpu-main-img" style="background: url('{$gpu_first_section.image|default=\'\'}');background-size:100% auto">
|
<div class="gpu-main-img" style="background: url('{$gpu_first_section.image|default=\'\'}');background-size:100% auto">
|
||||||
<div class="gpu-amd-img">
|
<div class="gpu-amd-img">
|
||||||
@@ -266,9 +278,17 @@
|
|||||||
{notempty name="data.ram"}
|
{notempty name="data.ram"}
|
||||||
<!-- 内存 memory-->
|
<!-- 内存 memory-->
|
||||||
<div class="memory">
|
<div class="memory">
|
||||||
<div class="memory-t">{$data.ram.title|raw}</div>
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="memory-t f36 lh1">{$data.ram.title|raw}</div>
|
||||||
|
{else/}
|
||||||
|
<div class="memory-t">{$data.ram.title|raw}</div>
|
||||||
|
{/eq}
|
||||||
<div class="memory-img" style="background: url('{$data.ram.image|default=\'\'}'); background-size:100% auto">
|
<div class="memory-img" style="background: url('{$data.ram.image|default=\'\'}'); background-size:100% auto">
|
||||||
<div class="memory-p">{$data.ram.short_title|raw}</div>
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="memory-p f18">{$data.ram.short_title|raw}</div>
|
||||||
|
{else/}
|
||||||
|
<div class="memory-p ">{$data.ram.short_title|raw}</div>
|
||||||
|
{/eq}
|
||||||
<div class="memory-footer-img">{$data.ram.desc|raw}</div>
|
<div class="memory-footer-img">{$data.ram.desc|raw}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -278,7 +298,12 @@
|
|||||||
<div class="m2">
|
<div class="m2">
|
||||||
{assign name="ssd_first_section" value=":array_shift($data.hard_drive)"/}
|
{assign name="ssd_first_section" value=":array_shift($data.hard_drive)"/}
|
||||||
<div class="m2-bg" style="background: url('{$ssd_first_section.image|default=\'\'}');background-size:100% auto">
|
<div class="m2-bg" style="background: url('{$ssd_first_section.image|default=\'\'}');background-size:100% auto">
|
||||||
<div class="m2-bg-t1">{$ssd_first_section.title|default=''|raw}</div>
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="m2-bg-t1 f36 lh1">{$ssd_first_section.title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
|
<div class="m2-bg-t1">{$ssd_first_section.title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
|
<div class="m2-bg-p">{$ssd_first_section.short_title|default=''|raw}</div>
|
||||||
<div class="m2-img-box">
|
<div class="m2-img-box">
|
||||||
{volist name="data.hard_drive" id="ho"}
|
{volist name="data.hard_drive" id="ho"}
|
||||||
<img src="{$ho.image}" alt="{$ho.title}" loading="lazy">
|
<img src="{$ho.image}" alt="{$ho.title}" loading="lazy">
|
||||||
@@ -292,8 +317,13 @@
|
|||||||
<div class="fs">
|
<div class="fs">
|
||||||
{notempty name="data.cooling_system.0"}
|
{notempty name="data.cooling_system.0"}
|
||||||
<div class="dl">
|
<div class="dl">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="dl-t f36">{$data.cooling_system.0.title|raw}</div>
|
||||||
|
<p class="dl-p f18">{$data.cooling_system.0.short_title|raw}</p>
|
||||||
|
{else/}
|
||||||
<div class="dl-t">{$data.cooling_system.0.title|raw}</div>
|
<div class="dl-t">{$data.cooling_system.0.title|raw}</div>
|
||||||
<p class="dl-p">{$data.cooling_system.0.short_title|raw}</p>
|
<p class="dl-p">{$data.cooling_system.0.short_title|raw}</p>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
<div class="fs-box">
|
<div class="fs-box">
|
||||||
@@ -322,7 +352,11 @@
|
|||||||
{notempty name="data.apps"}
|
{notempty name="data.apps"}
|
||||||
<!-- 性能大拿 -->
|
<!-- 性能大拿 -->
|
||||||
<div class="xn">
|
<div class="xn">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="xn-t f28 ">{$data.apps.title|default=''}</div>
|
||||||
|
{else/}
|
||||||
<div class="xn-t">{$data.apps.title|default=''}</div>
|
<div class="xn-t">{$data.apps.title|default=''}</div>
|
||||||
|
{/eq}
|
||||||
<div class="xn-container">
|
<div class="xn-container">
|
||||||
<div class="xn-image-section">
|
<div class="xn-image-section">
|
||||||
<img src="{$data.apps.image|default=''}" alt="" class="zoom-image first-image">
|
<img src="{$data.apps.image|default=''}" alt="" class="zoom-image first-image">
|
||||||
@@ -335,9 +369,17 @@
|
|||||||
<!-- IPS -->
|
<!-- IPS -->
|
||||||
<div class="ips">
|
<div class="ips">
|
||||||
{assign name="ips_fisrt_section" value=":array_shift($data.screen_soft_light)"/}
|
{assign name="ips_fisrt_section" value=":array_shift($data.screen_soft_light)"/}
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="ips-t f48">{$ips_fisrt_section.title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="ips-t">{$ips_fisrt_section.title|default=''|raw}</div>
|
<div class="ips-t">{$ips_fisrt_section.title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
<div class="ips-bg" style="background: url('{$ips_fisrt_section.image|default=\'\'}');background-size:100% auto">
|
<div class="ips-bg" style="background: url('{$ips_fisrt_section.image|default=\'\'}');background-size:100% auto">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<p class="f18">{$ips_fisrt_section.short_title|default=''|raw}</p>
|
||||||
|
{else/}
|
||||||
<p>{$ips_fisrt_section.short_title|default=''|raw}</p>
|
<p>{$ips_fisrt_section.short_title|default=''|raw}</p>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="ips-imgs">
|
<div class="ips-imgs">
|
||||||
{volist name="data.screen_soft_light" id="lo"}
|
{volist name="data.screen_soft_light" id="lo"}
|
||||||
@@ -350,9 +392,17 @@
|
|||||||
<!-- 色彩RGB -->
|
<!-- 色彩RGB -->
|
||||||
<div class="rgb">
|
<div class="rgb">
|
||||||
{assign name="gamut_first_section" value=":array_shift($data.screen_color_gamut)"/}
|
{assign name="gamut_first_section" value=":array_shift($data.screen_color_gamut)"/}
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="rgb-t f36 lh1">{$gamut_first_section.title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="rgb-t">{$gamut_first_section.title|default=''|raw}</div>
|
<div class="rgb-t">{$gamut_first_section.title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
<div class="rgb-bg" style="background: url('{$gamut_first_section.image|default=\'\'}');background-size:100% auto">
|
<div class="rgb-bg" style="background: url('{$gamut_first_section.image|default=\'\'}');background-size:100% auto">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<p class="rgb-p f18">{$gamut_first_section.short_title|default=''|raw}</p>
|
||||||
|
{else/}
|
||||||
<p class="rgb-p">{$gamut_first_section.short_title|default=''|raw}</p>
|
<p class="rgb-p">{$gamut_first_section.short_title|default=''|raw}</p>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="rgb-imgs">
|
<div class="rgb-imgs">
|
||||||
{volist name="data.screen_color_gamut" id="go"}
|
{volist name="data.screen_color_gamut" id="go"}
|
||||||
@@ -366,8 +416,13 @@
|
|||||||
<div class="bly">
|
<div class="bly">
|
||||||
{assign name="glare_first_section" value=":array_shift($data.screen_anti_glare)"/}
|
{assign name="glare_first_section" value=":array_shift($data.screen_anti_glare)"/}
|
||||||
<div class="bly-texts">
|
<div class="bly-texts">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="bly-t f36 lh1">{$glare_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="bly-p f18">{$glare_first_section.short_title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="bly-t">{$glare_first_section.title|default=''|raw}</div>
|
<div class="bly-t">{$glare_first_section.title|default=''|raw}</div>
|
||||||
<div class="bly-p">{$glare_first_section.short_title|default=''|raw}</div>
|
<div class="bly-p">{$glare_first_section.short_title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="beforeafter ba-slider" style="border-radius: 0.14rem;height: 3.4rem;">
|
<div class="beforeafter ba-slider" style="border-radius: 0.14rem;height: 3.4rem;">
|
||||||
{assign name="glare_left" value=":array_shift($data.screen_anti_glare)"/}
|
{assign name="glare_left" value=":array_shift($data.screen_anti_glare)"/}
|
||||||
@@ -385,8 +440,13 @@
|
|||||||
<div class="qb">
|
<div class="qb">
|
||||||
<div class="qb-text">
|
<div class="qb-text">
|
||||||
{assign name="texture_first_section" value=":array_shift($data.exterior_texture)"/}
|
{assign name="texture_first_section" value=":array_shift($data.exterior_texture)"/}
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="qb-t f36 lh1">{$texture_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="qb-p f18">{$texture_first_section.short_title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="qb-t">{$texture_first_section.title|default=''|raw}</div>
|
<div class="qb-t">{$texture_first_section.title|default=''|raw}</div>
|
||||||
<div class="qb-p">{$texture_first_section.short_title|default=''|raw}</div>
|
<div class="qb-p">{$texture_first_section.short_title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
<div class="swiper-container auto-swiper-container">
|
<div class="swiper-container auto-swiper-container">
|
||||||
<div class="swiper-wrapper">
|
<div class="swiper-wrapper">
|
||||||
{volist name="data.exterior_texture" id="to"}
|
{volist name="data.exterior_texture" id="to"}
|
||||||
@@ -404,8 +464,13 @@
|
|||||||
{assign name="wifi_first_section" value=":array_shift($data.network_card)"/}
|
{assign name="wifi_first_section" value=":array_shift($data.network_card)"/}
|
||||||
<div class="wifi" style="background: url('{$wifi_first_section.image|default=\'\'}');background-size:100% auto">
|
<div class="wifi" style="background: url('{$wifi_first_section.image|default=\'\'}');background-size:100% auto">
|
||||||
<div class="wifi-texts">
|
<div class="wifi-texts">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="wifi-t f36 ">{$wifi_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="wifi-p f18">{$wifi_first_section.short_title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="wifi-t">{$wifi_first_section.title|default=''|raw}</div>
|
<div class="wifi-t">{$wifi_first_section.title|default=''|raw}</div>
|
||||||
<div class="wifi-p">{$wifi_first_section.short_title|default=''|raw}</div>
|
<div class="wifi-p">{$wifi_first_section.short_title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="wifi-img">
|
<div class="wifi-img">
|
||||||
{volist name="data.network_card" id="co"}
|
{volist name="data.network_card" id="co"}
|
||||||
@@ -419,8 +484,13 @@
|
|||||||
{assign name="battery_first_section" value=":array_shift($data.battery_life)"/}
|
{assign name="battery_first_section" value=":array_shift($data.battery_life)"/}
|
||||||
<div class="endurance" style="background: url('{$battery_first_section.image|default=\'\'|raw}');background-size:100% auto">
|
<div class="endurance" style="background: url('{$battery_first_section.image|default=\'\'|raw}');background-size:100% auto">
|
||||||
<div class="endurance-texts">
|
<div class="endurance-texts">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="endurance-t f36">{$battery_first_section.title|default=''|raw}</div>
|
||||||
|
<div class="endurance-p f18">{$battery_first_section.short_title|default=''|raw}</div>
|
||||||
|
{else/}
|
||||||
<div class="endurance-t">{$battery_first_section.title|default=''|raw}</div>
|
<div class="endurance-t">{$battery_first_section.title|default=''|raw}</div>
|
||||||
<div class="endurance-p">{$battery_first_section.short_title|default=''|raw}</div>
|
<div class="endurance-p">{$battery_first_section.short_title|default=''|raw}</div>
|
||||||
|
{/eq}
|
||||||
</div>
|
</div>
|
||||||
<div class="endurance-img">
|
<div class="endurance-img">
|
||||||
{volist name="data.battery_life" id="lo"}
|
{volist name="data.battery_life" id="lo"}
|
||||||
@@ -431,43 +501,78 @@
|
|||||||
</div>
|
</div>
|
||||||
{/notempty}
|
{/notempty}
|
||||||
<!-- 接口大满贯 -->
|
<!-- 接口大满贯 -->
|
||||||
|
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="zoom-t f36 lh1">{:lang_i18n('接口大满贯')}</div>
|
||||||
|
{else/}
|
||||||
<div class="zoom-t">{:lang_i18n('接口大满贯')}</div>
|
<div class="zoom-t">{:lang_i18n('接口大满贯')}</div>
|
||||||
|
{/eq}
|
||||||
<div class="zoom-container" id="zoomContainer">
|
<div class="zoom-container" id="zoomContainer">
|
||||||
<div class="img-wrapper">
|
<div class="img-wrapper">
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<p class="zoom-p f18">{:lang_i18n('标配多种接口,会议室连接电脑、</br>U盘传输文件、TF卡读取等,全都轻松搞定')}</p>
|
||||||
|
{else/}
|
||||||
<p class="zoom-p">{:lang_i18n('标配多种接口,会议室连接电脑、</br>U盘传输文件、TF卡读取等,全都轻松搞定')}</p>
|
<p class="zoom-p">{:lang_i18n('标配多种接口,会议室连接电脑、</br>U盘传输文件、TF卡读取等,全都轻松搞定')}</p>
|
||||||
|
{/eq}
|
||||||
<img src="__IMAGES__/topic_laptop/zoom-img-1.png" alt="接口图" class="bg-img" id="bgImg" loading="lazy">
|
<img src="__IMAGES__/topic_laptop/zoom-img-1.png" alt="接口图" class="bg-img" id="bgImg" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
<!-- 左边 -->
|
<!-- 左边 -->
|
||||||
<div class="annotation anno-delay-1" style="top:60%; left: 37.5%;">
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('肯辛通锁孔')}</span>
|
<div class="annotation anno-delay-1 anno-up1" style="top: 29%; left: 33%;">
|
||||||
</div>
|
<span style="text-align: center; font-size: 0.16rem;">Gigabit <br/> Ethernet</span>
|
||||||
<div class="annotation anno-delay-1 anno-up" style="top: 31.5%; left: 32%;">
|
</div>
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('千兆网口')}</span>
|
{else/}
|
||||||
|
<div class="annotation anno-delay-1 anno-up" style="top: 32.5%; left: 32%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">千兆网口</span>
|
||||||
|
</div>
|
||||||
|
{/eq}
|
||||||
|
<div class="annotation anno-delay-1" style="top:60%; left: 39%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('肯辛通锁孔')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-delay-1" style="top: 68%; left: 26%;">
|
<div class="annotation anno-delay-1" style="top: 68%; left: 26%;">
|
||||||
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('USB-A<br />(5Gbps)')}</span>
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('USB-A<br/>(5Gbps)')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-delay-1 anno-up1" style="top:35.5%; left:18%;">
|
<div class="annotation anno-delay-1 anno-up1" style="top:35.5%; left:18%;">
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('USB-A<br />(480Mbps)')}</span>
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('USB-A<br/>(480Mbps)')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-delay-1" style="top: 73%; left: 14.5%;">
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('3.5mm<br />耳麦合一')}</span>
|
<div class="annotation anno-delay-1" style="top: 73%; left: 13.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">3.5mm <br/> Combo Audio</span>
|
||||||
</div>
|
</div>
|
||||||
|
{else/}
|
||||||
|
<div class="annotation anno-delay-1" style="top: 73%; left: 15.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">3.5mm<br/>耳麦合一</span>
|
||||||
|
</div>
|
||||||
|
{/eq}
|
||||||
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
|
<div class="annotation anno-delay-1 anno-up1" style="top: 40%; left: 9.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">TF 3.0 <br/> Card Slot</span>
|
||||||
|
</div>
|
||||||
|
{else/}
|
||||||
<div class="annotation anno-delay-1 anno-up" style="top: 43%; left: 9%;">
|
<div class="annotation anno-delay-1 anno-up" style="top: 43%; left: 9%;">
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('TF口3.0')}</span>
|
<span style="text-align: center; font-size: 0.16rem;">TF口3.0</span>
|
||||||
</div>
|
</div>
|
||||||
|
{/eq}
|
||||||
|
|
||||||
<!-- 右边 -->
|
<!-- 右边 -->
|
||||||
<div class="annotation anno-delay-1" style="top: 64%; left: 58%;">
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('全功能<br />USB-C')}</span>
|
<div class="annotation anno-delay-1" style="top: 64%; left: 56.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">All-in-One <br/> USB-C</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-up anno-delay-1" style="top: 34%; left: 65%;">
|
{else/}
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('HDMI')}</span>
|
<div class="annotation anno-delay-1" style="top: 64%; left: 58.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">全功能<br/>USB-C</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-delay-1" style="top: 70.5%; left: 70.5%;">
|
{/eq}
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('USB-A<br />(5Gbps)')}</span>
|
|
||||||
|
<div class="annotation anno-up anno-delay-1" style="top: 34%; left: 66.5%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('HDMI')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="annotation anno-up1 anno-delay-1" style="top:38.5%; left: 77%;">
|
<div class="annotation anno-delay-1" style="top: 70.5%; left: 71.5%;">
|
||||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('USB-C<br />(5Gbps)')}</span>
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('USB-A<br/>(5Gbps)')}</span>
|
||||||
|
</div>
|
||||||
|
<div class="annotation anno-up1 anno-delay-1" style="top:38.5%; left: 78%;">
|
||||||
|
<span style="text-align: center; font-size: 0.16rem;">{:lang_i18n('USB-C<br/>(5Gbps)')}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{notempty name="data.scene_focus_images"}
|
{notempty name="data.scene_focus_images"}
|
||||||
@@ -491,8 +596,21 @@
|
|||||||
{assign name="camare_microphone" value=":array_shift($data.camare_microphone_security)"/}
|
{assign name="camare_microphone" value=":array_shift($data.camare_microphone_security)"/}
|
||||||
{assign name="security" value=":array_shift($data.camare_microphone_security)"/}
|
{assign name="security" value=":array_shift($data.camare_microphone_security)"/}
|
||||||
<div class="tabs-container">
|
<div class="tabs-container">
|
||||||
{notempty name="camare_microphone"}<div class="tab-t active" data-index="0">{$camare_microphone.title|default=''}</div>{/notempty}
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
{notempty name="security"}<div class="tab-t" data-index="1">{$security.title|default=''}</div>{/notempty}
|
{notempty name="camare_microphone"}
|
||||||
|
<div class="tab-t active f36 lh1" data-index="0">{$camare_microphone.title|default=''}</div>
|
||||||
|
{/notempty}
|
||||||
|
{notempty name="security"}
|
||||||
|
<div class="tab-t f36 lh1" data-index="1">{$security.title|default=''}</div>
|
||||||
|
{/notempty}
|
||||||
|
{else/}
|
||||||
|
{notempty name="camare_microphone"}
|
||||||
|
<div class="tab-t active" data-index="0">{$camare_microphone.title|default=''}</div>
|
||||||
|
{/notempty}
|
||||||
|
{notempty name="security"}
|
||||||
|
<div class="tab-t" data-index="1">{$security.title|default=''}</div>
|
||||||
|
{/notempty}
|
||||||
|
{/eq}
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
{notempty name="camare_microphone"}
|
{notempty name="camare_microphone"}
|
||||||
<div class="tab-panel active">
|
<div class="tab-panel active">
|
||||||
@@ -547,9 +665,16 @@
|
|||||||
{/notempty}
|
{/notempty}
|
||||||
{notempty name="data.webpage_footnotes"}
|
{notempty name="data.webpage_footnotes"}
|
||||||
<!-- 底部文字 -->
|
<!-- 底部文字 -->
|
||||||
<div class="footer-texts">
|
{eq name=":cookie('think_lang')" value="en-us"}
|
||||||
{$data.webpage_footnotes.desc|raw|htmlspecialchars_decode}
|
<div class="footer-texts-en">
|
||||||
</div>
|
{$data.webpage_footnotes.desc|raw|htmlspecialchars_decode}
|
||||||
|
</div>
|
||||||
|
{else/}
|
||||||
|
<div class="footer-texts">
|
||||||
|
{$data.webpage_footnotes.desc|raw|htmlspecialchars_decode}
|
||||||
|
</div>
|
||||||
|
{/eq}
|
||||||
|
|
||||||
{/notempty}
|
{/notempty}
|
||||||
{/block}
|
{/block}
|
||||||
{block name="script"}
|
{block name="script"}
|
||||||
@@ -957,18 +1082,18 @@
|
|||||||
const allVideos = document.querySelectorAll('.fs-video');
|
const allVideos = document.querySelectorAll('.fs-video');
|
||||||
const fsBox = document.querySelector('.fs-box');
|
const fsBox = document.querySelector('.fs-box');
|
||||||
let isVideoPlaying = false;
|
let isVideoPlaying = false;
|
||||||
let videoTip = null;
|
// let videoTip = null;
|
||||||
|
|
||||||
// 初始化视频提示
|
// 初始化视频提示
|
||||||
const initVideoTip = () =>
|
// const initVideoTip = () =>
|
||||||
{
|
// {
|
||||||
if (!fsBox || videoTip) return;
|
// if (!fsBox || videoTip) return;
|
||||||
videoTip = document.createElement('div');
|
// videoTip = document.createElement('div');
|
||||||
videoTip.className = 'video-tip';
|
// videoTip.className = 'video-tip';
|
||||||
videoTip.innerText = '点击播放视频';
|
// videoTip.innerText = '点击播放视频';
|
||||||
fsBox.appendChild(videoTip);
|
// fsBox.appendChild(videoTip);
|
||||||
videoTip.style.display = 'none';
|
// videoTip.style.display = 'none';
|
||||||
};
|
// };
|
||||||
|
|
||||||
// 停止所有视频(仅暂停,无显隐)
|
// 停止所有视频(仅暂停,无显隐)
|
||||||
function stopAllVideos ()
|
function stopAllVideos ()
|
||||||
@@ -978,7 +1103,7 @@
|
|||||||
video.pause(); // 仅暂停,删除display修改
|
video.pause(); // 仅暂停,删除display修改
|
||||||
});
|
});
|
||||||
isVideoPlaying = false;
|
isVideoPlaying = false;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 播放指定视频(仅播放,无显隐)
|
// 播放指定视频(仅播放,无显隐)
|
||||||
@@ -992,17 +1117,17 @@
|
|||||||
video.play().then(() =>
|
video.play().then(() =>
|
||||||
{
|
{
|
||||||
isVideoPlaying = true;
|
isVideoPlaying = true;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}).catch((err) =>
|
}).catch((err) =>
|
||||||
{
|
{
|
||||||
console.log('视频自动播放失败:', err);
|
console.log('视频自动播放失败:', err);
|
||||||
if (videoTip) videoTip.style.display = 'block';
|
// if (videoTip) videoTip.style.display = 'block';
|
||||||
// 点击视频手动播放(仅执行一次)
|
// 点击视频手动播放(仅执行一次)
|
||||||
video.addEventListener('click', () =>
|
video.addEventListener('click', () =>
|
||||||
{
|
{
|
||||||
video.play();
|
video.play();
|
||||||
isVideoPlaying = true;
|
isVideoPlaying = true;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}, { once: true });
|
}, { once: true });
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1055,7 +1180,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 初始化执行
|
// 初始化执行
|
||||||
initVideoTip();
|
// initVideoTip();
|
||||||
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
||||||
window.addEventListener('resize', handleVideoResize);
|
window.addEventListener('resize', handleVideoResize);
|
||||||
// 页面加载完成后尝试播放视频
|
// 页面加载完成后尝试播放视频
|
||||||
|
|||||||
@@ -1037,17 +1037,17 @@
|
|||||||
const allVideos = document.querySelectorAll('.fs-video');
|
const allVideos = document.querySelectorAll('.fs-video');
|
||||||
const fsBox = document.querySelector('.fs-box');
|
const fsBox = document.querySelector('.fs-box');
|
||||||
let isVideoPlaying = false;
|
let isVideoPlaying = false;
|
||||||
let videoTip = null;
|
// let videoTip = null;
|
||||||
|
|
||||||
// 初始化视频提示
|
// 初始化视频提示
|
||||||
const initVideoTip = () => {
|
// const initVideoTip = () => {
|
||||||
if (!fsBox || videoTip) return;
|
// if (!fsBox || videoTip) return;
|
||||||
videoTip = document.createElement('div');
|
// videoTip = document.createElement('div');
|
||||||
videoTip.className = 'video-tip';
|
// videoTip.className = 'video-tip';
|
||||||
videoTip.innerText = '点击播放视频';
|
// videoTip.innerText = '点击播放视频';
|
||||||
fsBox.appendChild(videoTip);
|
// fsBox.appendChild(videoTip);
|
||||||
videoTip.style.display = 'none';
|
// videoTip.style.display = 'none';
|
||||||
};
|
// };
|
||||||
|
|
||||||
// 停止所有视频
|
// 停止所有视频
|
||||||
function stopAllVideos ()
|
function stopAllVideos ()
|
||||||
@@ -1060,7 +1060,7 @@
|
|||||||
if (img) img.style.display = 'block';
|
if (img) img.style.display = 'block';
|
||||||
});
|
});
|
||||||
isVideoPlaying = false;
|
isVideoPlaying = false;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 播放指定视频
|
// 播放指定视频
|
||||||
@@ -1075,7 +1075,7 @@
|
|||||||
video.muted = true;
|
video.muted = true;
|
||||||
video.play().then(() => {
|
video.play().then(() => {
|
||||||
isVideoPlaying = true;
|
isVideoPlaying = true;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log('视频自动播放失败:', err);
|
console.log('视频自动播放失败:', err);
|
||||||
video.style.display = 'block';
|
video.style.display = 'block';
|
||||||
@@ -1085,7 +1085,7 @@
|
|||||||
video.addEventListener('click', () => {
|
video.addEventListener('click', () => {
|
||||||
video.play();
|
video.play();
|
||||||
isVideoPlaying = true;
|
isVideoPlaying = true;
|
||||||
if (videoTip) videoTip.style.display = 'none';
|
// if (videoTip) videoTip.style.display = 'none';
|
||||||
}, { once: true });
|
}, { once: true });
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1140,7 +1140,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
initVideoTip();
|
// initVideoTip();
|
||||||
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
||||||
window.addEventListener('resize', handleVideoResize);
|
window.addEventListener('resize', handleVideoResize);
|
||||||
// 页面加载完成后尝试播放
|
// 页面加载完成后尝试播放
|
||||||
|
|||||||
@@ -33,13 +33,13 @@
|
|||||||
transform: scale(0.8);
|
transform: scale(0.8);
|
||||||
}
|
}
|
||||||
.bly-t {
|
.bly-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.bly-p {
|
.bly-p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -10,18 +10,19 @@
|
|||||||
}
|
}
|
||||||
.cpu-texts-t {
|
.cpu-texts-t {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 0.19rem;
|
padding-top: 0.19rem;
|
||||||
}
|
}
|
||||||
.cpu-texts-p {
|
.cpu-texts-p {
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
margin-top: 0.37rem;
|
margin-top: 0.37rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cpu-footer {
|
.cpu-footer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
|||||||
@@ -23,12 +23,12 @@
|
|||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
.endurance-t span:nth-child(2) {
|
.endurance-t span:nth-child(2) {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
margin-left: 0.11rem;
|
margin-left: 0.11rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
.endurance-p {
|
.endurance-p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 0.37rem;
|
padding-top: 0.37rem;
|
||||||
|
|||||||
@@ -35,16 +35,27 @@
|
|||||||
font-family: 'HarmonyOS-Light';
|
font-family: 'HarmonyOS-Light';
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.footer-texts-en {
|
.footer-texts-en {
|
||||||
width: 6.8rem;
|
width: 6.8rem;
|
||||||
margin: 0 auto;
|
margin: 1.5rem 0.35rem;
|
||||||
font-size: 0.16rem;
|
/* font-size: 0.16rem; */
|
||||||
color: #cbcfd8;
|
color: #909399;
|
||||||
white-space: normal;
|
/* white-space: normal; */
|
||||||
|
/* margin-top: 1.5rem;
|
||||||
|
margin-bottom: 1.5rem; */
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.footer-texts-en p {
|
.footer-texts-en p {
|
||||||
text-indent: clamp(-16px, -1vw, -0.22rem);
|
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';
|
font-family: 'HarmonyOS-Light';
|
||||||
|
/* letter-spacing: 1px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -53,23 +64,33 @@
|
|||||||
}
|
}
|
||||||
.oircoEgapp-foot .m_footer {
|
.oircoEgapp-foot .m_footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
/* flex-direction: row; */
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
margin:0 4%;
|
||||||
|
padding-top: 0 !important;
|
||||||
}
|
}
|
||||||
.oircoEgapp-foot .m_footer .left,
|
/* .oircoEgapp-foot .m_footer .left,
|
||||||
.oircoEgapp-foot .foot-con {
|
.oircoEgapp-foot .foot-con {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
} */
|
||||||
.oircoEgapp-foot .m_footer .right {
|
.oircoEgapp-foot .m_footer .right {
|
||||||
max-width: 55%;
|
flex:1;
|
||||||
|
width: 50% !important;
|
||||||
|
display: flex !important;
|
||||||
|
justify-content: end !important;
|
||||||
|
/* max-width: 55%; */
|
||||||
}
|
}
|
||||||
.oircoEgapp-foot .m_footer .left {
|
.oircoEgapp-foot .m_footer .left {
|
||||||
max-width: 40%;
|
flex:1 !important;
|
||||||
|
/* max-width: 40%;
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
margin-right: 4%;
|
margin-right: 4%; */
|
||||||
|
width: 50% !important;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
.oircoEgapp-foot .foot-con span {
|
.oircoEgapp-foot .foot-con span {
|
||||||
width: auto;
|
width: auto;
|
||||||
@@ -89,17 +110,18 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.foot-cate {
|
.foot-cate {
|
||||||
padding: 0 0.16rem;
|
padding: 0.16rem;
|
||||||
}
|
}
|
||||||
.foot-cate h3 {
|
.foot-cate h3 {
|
||||||
font-size: 0.28rem;
|
font-size: 0.28rem;
|
||||||
}
|
}
|
||||||
.foot-cate li {
|
.foot-cate li {
|
||||||
padding: 0.7rem 0;
|
padding: 0.16rem 0;
|
||||||
min-height: 1.8rem;
|
min-height: 276px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.foot-cate li p {
|
.foot-cate li p {
|
||||||
line-height: 0.8rem;
|
line-height: 40px;
|
||||||
}
|
}
|
||||||
.m_footer .right {
|
.m_footer .right {
|
||||||
float: right;
|
float: right;
|
||||||
@@ -107,7 +129,7 @@
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
.foot-con span {
|
.foot-con span {
|
||||||
font-size:0.28rem;
|
font-size:14px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
@@ -127,10 +149,13 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
.m_footer .left img {
|
.m_footer .left img {
|
||||||
width: 0.55rem;
|
width: 30px;
|
||||||
padding-right: 0.2rem;
|
padding-right:0 !important;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
.oircoEgapp-foot .m_footer .right {
|
/* .oircoEgapp-foot .m_footer .right {
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
|
} */
|
||||||
|
.m_footer .right {
|
||||||
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
@@ -52,14 +52,14 @@
|
|||||||
}
|
}
|
||||||
.dl-t {
|
.dl-t {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
.dl-p {
|
.dl-p {
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 0.37rem;
|
padding-top: 0.37rem;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
}
|
}
|
||||||
.gpu-texts {
|
.gpu-texts {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
margin: 0 0.34rem;
|
margin: 0 0.34rem;
|
||||||
}
|
}
|
||||||
.gpu-texts-t {
|
.gpu-texts-t {
|
||||||
@@ -13,10 +13,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.gpu-texts-p {
|
.gpu-texts-p {
|
||||||
font-size: 0.16rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin-top: 0.32rem;
|
margin-top: 0.37rem;
|
||||||
}
|
}
|
||||||
.gpu-main-img {
|
.gpu-main-img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -18,7 +18,9 @@
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
.oircoEgapp-head .headtop .headerlogimg {
|
.oircoEgapp-head .headtop .headerlogimg {
|
||||||
width: 2.25rem !important;
|
|
||||||
|
max-width: 140px;
|
||||||
|
min-width: 123px;
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
display: block;
|
display: block;
|
||||||
/* height: 2.25rem; */
|
/* height: 2.25rem; */
|
||||||
@@ -61,7 +63,7 @@
|
|||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
.cursor_p span {
|
.cursor_p span {
|
||||||
font-size: 0.38rem;
|
font-size: 22px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
@@ -71,7 +73,7 @@
|
|||||||
padding-left: 0.2rem;
|
padding-left: 0.2rem;
|
||||||
}
|
}
|
||||||
.cursor_p span:hover {
|
.cursor_p span:hover {
|
||||||
font-size: 0.38rem;
|
font-size:22px;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: inherit;
|
overflow: inherit;
|
||||||
|
|||||||
@@ -5,9 +5,38 @@
|
|||||||
html {
|
html {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
max-width: 100vw !important;
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #000;
|
background: #000;
|
||||||
overflow-x: hidden;
|
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;
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.ips-t {
|
.ips-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin-top: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.ips-bg p {
|
.ips-bg p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin-left: 0.38rem;
|
margin-left: 0.38rem;
|
||||||
|
|||||||
@@ -9,13 +9,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.m2-bg-t1 {
|
.m2-bg-t1 {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
padding-top: 1.3rem;
|
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 {
|
.m2-img-box {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0.66rem;
|
bottom: 0.66rem;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.memory-t {
|
.memory-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
.memory-p {
|
.memory-p {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
@@ -26,9 +26,14 @@
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
bottom: -0.74rem;
|
bottom: -0.74rem;
|
||||||
|
width: 6.83rem;
|
||||||
|
}
|
||||||
|
.memory-footer-img p {
|
||||||
|
height:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.memory-footer-img img {
|
.memory-footer-img img {
|
||||||
width: 6.83rem;
|
width: 6.83rem;
|
||||||
|
|
||||||
display: block;
|
display: block;
|
||||||
|
aspect-ratio: 683/148;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,13 @@
|
|||||||
} */
|
} */
|
||||||
.qb-t {
|
.qb-t {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 1.5rem;
|
padding-top: 1.5rem;
|
||||||
}
|
}
|
||||||
.qb-p {
|
.qb-p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 0.37rem;
|
padding-top: 0.37rem;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
.rgb-t {
|
.rgb-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
aspect-ratio: 750/582;
|
aspect-ratio: 750/582;
|
||||||
}
|
}
|
||||||
.rgb-p {
|
.rgb-p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
letter-spacing: 1px;
|
/* letter-spacing: px; */
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.swiper-container-texts-p div {
|
.swiper-container-texts-p div {
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.tab-t {
|
.tab-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
}
|
}
|
||||||
.wifi-t {
|
.wifi-t {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
.wifi-p {
|
.wifi-p {
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
padding-top: 0.37rem;
|
padding-top: 0.37rem;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.xn-t {
|
.xn-t {
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
/* 标注样式:关键修正 - 基于容器绝对定位,百分比参考图片原始比例 */
|
/* 标注样式:关键修正 - 基于容器绝对定位,百分比参考图片原始比例 */
|
||||||
.annotation {
|
.annotation {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
color: #48494d;
|
color: #fff;
|
||||||
font-size: calc(12px + 0.3vw);
|
font-size: calc(12px + 0.3vw);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateY(calc(10px + 0.5vw));
|
transform: translateY(calc(10px + 0.5vw));
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
width: 0.01rem;
|
width: 0.01rem;
|
||||||
height: 0;
|
height: 0;
|
||||||
bottom: calc(100% + 6px);
|
bottom: calc(100% + 6px);
|
||||||
background-color: #48494d;
|
background-color: #fff;
|
||||||
transition: height 0.8s ease;
|
transition: height 0.8s ease;
|
||||||
transform-origin: bottom center;
|
transform-origin: bottom center;
|
||||||
}
|
}
|
||||||
@@ -92,20 +92,19 @@
|
|||||||
/* 标注显示时,设置线条最终高度 */
|
/* 标注显示时,设置线条最终高度 */
|
||||||
.annotation.anno-show span::before {
|
.annotation.anno-show span::before {
|
||||||
height: 0.57rem;
|
height: 0.57rem;
|
||||||
/* 最终高度(vw单位) */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.zoom-t {
|
.zoom-t {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 0.36rem;
|
font-size: 0.48rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding-top: 1.5rem;
|
padding-top: 1.5rem;
|
||||||
}
|
}
|
||||||
.zoom-p {
|
.zoom-p {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 0.18rem;
|
font-size: 0.20rem;
|
||||||
color: #cbcfd8;
|
color: #cbcfd8;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0.37rem;
|
top: 0.37rem;
|
||||||
|
|||||||
@@ -244,6 +244,25 @@ class ImageMigrator:
|
|||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("连接已关闭")
|
print("连接已关闭")
|
||||||
|
|
||||||
|
def chown_target(self, owner: str, target_path: str) -> bool:
|
||||||
|
command = f"sudo chown {owner} {target_path}"
|
||||||
|
stdin, stdout, stderr = self.target_client.exec_command(command)
|
||||||
|
# 如果需要输入sudo密码
|
||||||
|
if "sudo" in command and self.target_config.password:
|
||||||
|
stdin.write(self.target_config.password + "\n")
|
||||||
|
stdin.flush()
|
||||||
|
|
||||||
|
if self.verbose:
|
||||||
|
# 获取输出和错误
|
||||||
|
# output = stdout.read().decode()
|
||||||
|
error = stderr.read().decode()
|
||||||
|
exit_code = stdout.channel.recv_exit_status()
|
||||||
|
if exit_code == 0:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print(f"DEBUG chown_target: 修改 {target_path} 的所有者失败: {error}")
|
||||||
|
return False
|
||||||
|
|
||||||
def ensure_target_directory(self, remote_dir: str) -> bool:
|
def ensure_target_directory(self, remote_dir: str) -> bool:
|
||||||
"""确保目标目录存在(递归创建)"""
|
"""确保目标目录存在(递归创建)"""
|
||||||
try:
|
try:
|
||||||
@@ -298,11 +317,17 @@ class ImageMigrator:
|
|||||||
f"DEBUG ensure_target_directory: 创建目录: {current_path}"
|
f"DEBUG ensure_target_directory: 创建目录: {current_path}"
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
|
# 创建目录
|
||||||
self.target_sftp.mkdir(current_path)
|
self.target_sftp.mkdir(current_path)
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print(
|
print(
|
||||||
f"DEBUG ensure_target_directory: 目录创建成功: {current_path}"
|
f"DEBUG ensure_target_directory: 目录创建成功: {current_path}"
|
||||||
)
|
)
|
||||||
|
# 修改目录所有者
|
||||||
|
if self.chown_target("www", current_path) and self.verbose:
|
||||||
|
print(
|
||||||
|
f"DEBUG ensure_target_directory: {current_path} 所有者修改为 www 成功"
|
||||||
|
)
|
||||||
except Exception as mkdir_e:
|
except Exception as mkdir_e:
|
||||||
# 如果创建失败,可能是权限问题或目录已存在
|
# 如果创建失败,可能是权限问题或目录已存在
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
@@ -519,6 +544,8 @@ class ImageMigrator:
|
|||||||
print(f"DEBUG: 目录stat也失败: {stat_e}")
|
print(f"DEBUG: 目录stat也失败: {stat_e}")
|
||||||
|
|
||||||
self.target_sftp.put(temp_path, target_path)
|
self.target_sftp.put(temp_path, target_path)
|
||||||
|
if self.chown_target("www", target_path) and self.verbose:
|
||||||
|
print(f"DEBUG transfer_file: {target_path} 所有者修改为 www 成功")
|
||||||
|
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("DEBUG: 上传完成")
|
print("DEBUG: 上传完成")
|
||||||
@@ -672,13 +699,18 @@ def create_example_config(config_file: str):
|
|||||||
def read_image_paths(image_list_file: str) -> List[str]:
|
def read_image_paths(image_list_file: str) -> List[str]:
|
||||||
"""从文件读取图片路径列表"""
|
"""从文件读取图片路径列表"""
|
||||||
paths = []
|
paths = []
|
||||||
|
not_images = []
|
||||||
try:
|
try:
|
||||||
with open(image_list_file, "r", encoding="utf-8") as f:
|
with open(image_list_file, "r", encoding="utf-8") as f:
|
||||||
for line in f:
|
for line in f:
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if line and not line.startswith("#"):
|
if line and not line.startswith("#"):
|
||||||
paths.append(line)
|
if not line.endswith((".png", ".jpeg", ".jpg", ".gif", ".webp")):
|
||||||
print(f"从文件读取 {len(paths)} 个图片路径")
|
not_images.append(line)
|
||||||
|
else:
|
||||||
|
paths.append(line)
|
||||||
|
print(f"从文件中读取到 {len(paths)} 个图片路径数据行")
|
||||||
|
print(f"从文件中读取到 {len(not_images)} 个非图片路径数据行")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"读取图片路径文件失败 {image_list_file}: {e}")
|
print(f"读取图片路径文件失败 {image_list_file}: {e}")
|
||||||
return paths
|
return paths
|
||||||
@@ -889,9 +921,14 @@ def main():
|
|||||||
print("请使用 --input 指定文件或直接在命令行提供路径")
|
print("请使用 --input 指定文件或直接在命令行提供路径")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
origin_paths = image_paths
|
||||||
# 去重
|
# 去重
|
||||||
image_paths = list(set(image_paths))
|
image_paths = list(set(image_paths))
|
||||||
|
|
||||||
|
repeats = len(origin_paths) - len(image_paths)
|
||||||
|
if repeats > 0:
|
||||||
|
print(f"从文件中读取到 {repeats} 个重复图片路径数据行")
|
||||||
|
|
||||||
# 创建并运行迁移器
|
# 创建并运行迁移器
|
||||||
migrator = ImageMigrator(
|
migrator = ImageMigrator(
|
||||||
source_config=source_config,
|
source_config=source_config,
|
||||||
|
|||||||
Reference in New Issue
Block a user