12 Commits

Author SHA1 Message Date
61728434d3 refactor: 修改tco产品数据同步
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 5s
2026-01-13 17:30:56 +08:00
5736d09dbe refactor: image_migrate.py添加迁移后的目录及文件所有者修改
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 4s
2026-01-04 11:00:52 +08:00
5b3e505e9b 删除视频提示语
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-31 17:06:51 +08:00
7ec97c39a7 注释initVideoTip
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-31 16:55:30 +08:00
69c3634731 refactor: 图片迁移脚本
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-31 14:58:48 +08:00
2ca25e083e 调整
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-31 11:11:53 +08:00
df37a7c00d 调整
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-31 10:24:10 +08:00
11e2c4f457 删除注释
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 2s
2025-12-30 17:46:02 +08:00
edfc27b06a 调整
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-30 17:45:27 +08:00
fdc9064739 笔记本英文版
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 4s
2025-12-30 15:28:33 +08:00
55a75b56b1 Merge branch 'dev' of http://gitea.f2b211.com/jsasg/orico-official-website into dev
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 3s
2025-12-29 14:39:47 +08:00
005457e13e 调整 2025-12-29 14:35:17 +08:00
24 changed files with 380 additions and 148 deletions

View File

@@ -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()));
} }

View File

@@ -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()) {

View File

@@ -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.",
], ],
]; ];

View File

@@ -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=100px375px/7.5=50px var fontSize = clientWidth / 7.5; // 750px/7.5=100px375px/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);
// 页面加载完成后尝试播放视频 // 页面加载完成后尝试播放视频

View File

@@ -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);
// 页面加载完成后尝试播放 // 页面加载完成后尝试播放

View File

@@ -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%;

View File

@@ -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;

View File

@@ -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;

View File

@@ -19,7 +19,7 @@
width: 6.8rem; width: 6.8rem;
margin: 1.5rem 0.35rem; 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-top: 1.5rem;
margin-bottom: 1.5rem; */ margin-bottom: 1.5rem; */
@@ -28,23 +28,34 @@
.footer-texts p { .footer-texts p {
width: 6.8rem; width: 6.8rem;
font-size: 0.16rem; font-size: 0.16rem;
padding-left: 0.05rem; padding-left: 0.1rem;
text-indent: -0.1rem; text-indent: -0.2rem;
line-height: 1.5; /* line-height: 1.5;
margin-bottom: 0.1rem; margin-bottom: 0.1rem; */
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;
} }

View File

@@ -3,10 +3,7 @@
} }
.fs-box { .fs-box {
width: 100%; width: 100%;
aspect-ratio: 16/9; /* 2560/1440=16/9核心比例约束 */ aspect-ratio: 16/9;
position: relative;
will-change: contents; /* 告诉浏览器该元素即将变化,提前优化 */
contain: layout paint; /* 限制重排重绘范围 */
} }
.fs-img, .fs-img,
.fs-video { .fs-video {
@@ -17,7 +14,6 @@
width: 100%; width: 100%;
} }
.fs-box-img { .fs-box-img {
display: flex;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
@@ -27,15 +23,19 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 0.11rem; gap: 0.11rem;
} }
.fs-h-img img { .fs-h-img img {
width: 3.35rem; width: 3.35rem;
aspect-ratio: 335/95;
} }
.fs-b-img { .fs-b-img {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 0.1rem; margin-top: 0.1rem;
aspect-ratio: 681/122;
} }
.fs-b-img img { .fs-b-img img {
width: 6.81rem; width: 6.81rem;
@@ -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;

View File

@@ -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%;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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;

View File

@@ -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;

View File

@@ -26,7 +26,7 @@
.swiper-container-texts { .swiper-container-texts {
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 0.91rem; top: 1.2rem;
transform: translateX(-50%); transform: translateX(-50%);
z-index: 10; z-index: 10;
width: 100%; width: 100%;
@@ -39,13 +39,13 @@
line-height: 1; line-height: 1;
} }
.swiper-container-texts-p { .swiper-container-texts-p {
padding-top: 0.68rem; padding-top: 0.54rem;
font-size: 0.16rem; font-size: 0.16rem;
/* text-align: center; */ /* text-align: center; */
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
letter-spacing: 1.3px; /* letter-spacing: px; */
justify-content: center; justify-content: center;
} }
.swiper-container-texts-p div { .swiper-container-texts-p div {
@@ -61,7 +61,7 @@
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
padding-top: 0.63rem; padding-top: 0.54rem;
cursor: pointer; cursor: pointer;
} }
.swiper-container-texts-img a { .swiper-container-texts-img a {
@@ -73,6 +73,7 @@
max-width: 1.18rem; max-width: 1.18rem;
} }
.swiper-slide-t { .swiper-slide-t {
padding-top: 0.3rem;
font-size: 0.2rem; font-size: 0.2rem;
text-align: center; text-align: center;
color: #fff; color: #fff;

View File

@@ -12,7 +12,7 @@
display: inline-flex; display: inline-flex;
/* 改为inline-flex宽度由子元素决定 */ /* 改为inline-flex宽度由子元素决定 */
position: relative; position: relative;
border-bottom: 1px solid #cbcfd8; border-bottom: 1px solid #909399;
margin: 0 auto; margin: 0 auto;
width: 1.75rem; width: 1.75rem;
display: flex; display: flex;
@@ -36,10 +36,10 @@
.tab-indicator { .tab-indicator {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
height: 2px; height:1px;
background-color: #fff; background-color: #fff;
transform: translateX(0); transform: translateX(0);
width: 0.87rem; width: auto;
transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1), 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); width 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
will-change: transform, width; will-change: transform, width;
@@ -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;

View File

@@ -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;

View File

@@ -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;
@@ -55,4 +55,10 @@
/* 确保p标签是块级且换行正常 */ /* 确保p标签是块级且换行正常 */
display: block; display: block;
word-wrap: break-word; word-wrap: break-word;
white-space: nowrap;
/* 2. 超出元素宽度的内容隐藏 */
overflow: hidden;
/* 3. 将超出的文本替换为省略号... */
text-overflow: ellipsis;
/* 可选:给元素设置一个固定宽度(确保省略效果生效) */
} }

View File

@@ -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;

View File

@@ -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,