Compare commits
12 Commits
3664861ef0
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 61728434d3 | |||
| 5736d09dbe | |||
| 5b3e505e9b | |||
| 7ec97c39a7 | |||
| 69c3634731 | |||
| 2ca25e083e | |||
| df37a7c00d | |||
| 11e2c4f457 | |||
| edfc27b06a | |||
| fdc9064739 | |||
| 55a75b56b1 | |||
| 005457e13e |
@@ -201,15 +201,16 @@ class ReceiveProductSync
|
||||
throw new \Exception('产品创建失败');
|
||||
}
|
||||
}
|
||||
else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
||||
$product->spu = $data['spu'];
|
||||
$product->name = $data['name'];
|
||||
$product->category_id = $product_category['id'];
|
||||
$product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
||||
if (!$product->save()) {
|
||||
throw new \Exception('产品更新失败');
|
||||
}
|
||||
}
|
||||
// 注释更新同步,防止tco同步修改官网手动调整数据
|
||||
// else if (strtotime($product['updated_at']) < strtotime($data['created_at'])) {
|
||||
// $product->spu = $data['spu'];
|
||||
// $product->name = $data['name'];
|
||||
// $product->category_id = $product_category['id'];
|
||||
// $product->status = Operate_Of_ReceiveSync::Disable == $data['operate'] ? -1 : 1;
|
||||
// if (!$product->save()) {
|
||||
// throw new \Exception('产品更新失败');
|
||||
// }
|
||||
// }
|
||||
} catch (\Throwable $th) {
|
||||
return error(sprintf('%s %s:%d', $th->getMessage(), $th->getFile(), $th->getLine()));
|
||||
}
|
||||
|
||||
@@ -107,13 +107,6 @@ abstract class Common extends BaseController
|
||||
'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'])
|
||||
->select();
|
||||
if ($nav->isEmpty()) {
|
||||
|
||||
@@ -234,6 +234,6 @@ return [
|
||||
"接口大满贯" => "Full-Featured Ports",
|
||||
"酷睿i5-12450H" => "Core i5-12450H",
|
||||
"锐龙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.",
|
||||
],
|
||||
];
|
||||
|
||||
@@ -30,10 +30,12 @@
|
||||
function setRootFontSize ()
|
||||
{
|
||||
var clientWidth = docEl.clientWidth;
|
||||
console.log(clientWidth,'=clientWidth=')
|
||||
if (!clientWidth) return;
|
||||
var fontSize = clientWidth / 7.5; // 750px/7.5=100px,375px/7.5=50px
|
||||
// 直接修改内联样式,优先级最高
|
||||
docEl.setAttribute('style', 'font-size: ' + fontSize + 'px !important;');
|
||||
console.log(fontSize,'=fontSize=')
|
||||
}
|
||||
|
||||
setRootFontSize();
|
||||
@@ -116,8 +118,13 @@
|
||||
{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-texts">
|
||||
<div class="cpu-texts-t">{$cpu_first_section.title|default=''}</div>
|
||||
<p class="cpu-texts-p">{$cpu_first_section.short_title|default=''}</p>
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<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 class="cpu-footer">
|
||||
<div class="cpu-footer-img">
|
||||
@@ -197,8 +204,13 @@
|
||||
<div class="gpu">
|
||||
{assign name="gpu_first_section" value=":array_shift($data.gpu)"/}
|
||||
<div class="gpu-texts">
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<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 class="gpu-main-img" style="background: url('{$gpu_first_section.image|default=\'\'}');background-size:100% auto">
|
||||
<div class="gpu-amd-img">
|
||||
@@ -266,9 +278,17 @@
|
||||
{notempty name="data.ram"}
|
||||
<!-- 内存 memory-->
|
||||
<div class="memory">
|
||||
{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-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>
|
||||
</div>
|
||||
@@ -278,7 +298,12 @@
|
||||
<div class="m2">
|
||||
{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">
|
||||
{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">
|
||||
{volist name="data.hard_drive" id="ho"}
|
||||
<img src="{$ho.image}" alt="{$ho.title}" loading="lazy">
|
||||
@@ -292,8 +317,13 @@
|
||||
<div class="fs">
|
||||
{notempty name="data.cooling_system.0"}
|
||||
<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>
|
||||
<p class="dl-p">{$data.cooling_system.0.short_title|raw}</p>
|
||||
{/eq}
|
||||
</div>
|
||||
{/notempty}
|
||||
<div class="fs-box">
|
||||
@@ -322,7 +352,11 @@
|
||||
{notempty name="data.apps"}
|
||||
<!-- 性能大拿 -->
|
||||
<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>
|
||||
{/eq}
|
||||
<div class="xn-container">
|
||||
<div class="xn-image-section">
|
||||
<img src="{$data.apps.image|default=''}" alt="" class="zoom-image first-image">
|
||||
@@ -335,9 +369,17 @@
|
||||
<!-- IPS -->
|
||||
<div class="ips">
|
||||
{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>
|
||||
{/eq}
|
||||
<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>
|
||||
{/eq}
|
||||
</div>
|
||||
<div class="ips-imgs">
|
||||
{volist name="data.screen_soft_light" id="lo"}
|
||||
@@ -350,9 +392,17 @@
|
||||
<!-- 色彩RGB -->
|
||||
<div class="rgb">
|
||||
{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>
|
||||
{/eq}
|
||||
<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>
|
||||
{/eq}
|
||||
</div>
|
||||
<div class="rgb-imgs">
|
||||
{volist name="data.screen_color_gamut" id="go"}
|
||||
@@ -366,8 +416,13 @@
|
||||
<div class="bly">
|
||||
{assign name="glare_first_section" value=":array_shift($data.screen_anti_glare)"/}
|
||||
<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-p">{$glare_first_section.short_title|default=''|raw}</div>
|
||||
{/eq}
|
||||
</div>
|
||||
<div class="beforeafter ba-slider" style="border-radius: 0.14rem;height: 3.4rem;">
|
||||
{assign name="glare_left" value=":array_shift($data.screen_anti_glare)"/}
|
||||
@@ -385,8 +440,13 @@
|
||||
<div class="qb">
|
||||
<div class="qb-text">
|
||||
{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-p">{$texture_first_section.short_title|default=''|raw}</div>
|
||||
{/eq}
|
||||
<div class="swiper-container auto-swiper-container">
|
||||
<div class="swiper-wrapper">
|
||||
{volist name="data.exterior_texture" id="to"}
|
||||
@@ -404,8 +464,13 @@
|
||||
{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-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-p">{$wifi_first_section.short_title|default=''|raw}</div>
|
||||
{/eq}
|
||||
</div>
|
||||
<div class="wifi-img">
|
||||
{volist name="data.network_card" id="co"}
|
||||
@@ -419,8 +484,13 @@
|
||||
{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-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-p">{$battery_first_section.short_title|default=''|raw}</div>
|
||||
{/eq}
|
||||
</div>
|
||||
<div class="endurance-img">
|
||||
{volist name="data.battery_life" id="lo"}
|
||||
@@ -431,43 +501,78 @@
|
||||
</div>
|
||||
{/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>
|
||||
{/eq}
|
||||
<div class="zoom-container" id="zoomContainer">
|
||||
<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>
|
||||
{/eq}
|
||||
<img src="__IMAGES__/topic_laptop/zoom-img-1.png" alt="接口图" class="bg-img" id="bgImg" loading="lazy">
|
||||
</div>
|
||||
<!-- 左边 -->
|
||||
<div class="annotation anno-delay-1" style="top:60%; left: 37.5%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('肯辛通锁孔')}</span>
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<div class="annotation anno-delay-1 anno-up1" style="top: 29%; left: 33%;">
|
||||
<span style="text-align: center; font-size: 0.16rem;">Gigabit <br/> Ethernet</span>
|
||||
</div>
|
||||
<div class="annotation anno-delay-1 anno-up" style="top: 31.5%; left: 32%;">
|
||||
<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 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 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 class="annotation anno-delay-1" style="top: 73%; left: 14.5%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('3.5mm<br />耳麦合一')}</span>
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<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>
|
||||
{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%;">
|
||||
<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>
|
||||
{/eq}
|
||||
|
||||
<!-- 右边 -->
|
||||
<div class="annotation anno-delay-1" style="top: 64%; left: 58%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('全功能<br />USB-C')}</span>
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<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 class="annotation anno-up anno-delay-1" style="top: 34%; left: 65%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('HDMI')}</span>
|
||||
{else/}
|
||||
<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 class="annotation anno-delay-1" style="top: 70.5%; left: 70.5%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('USB-A<br />(5Gbps)')}</span>
|
||||
{/eq}
|
||||
|
||||
<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 class="annotation anno-up1 anno-delay-1" style="top:38.5%; left: 77%;">
|
||||
<span style="text-align: center; font-size: 0.18rem;">{:lang_i18n('USB-C<br />(5Gbps)')}</span>
|
||||
<div class="annotation anno-delay-1" style="top: 70.5%; left: 71.5%;">
|
||||
<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>
|
||||
{notempty name="data.scene_focus_images"}
|
||||
@@ -491,8 +596,21 @@
|
||||
{assign name="camare_microphone" value=":array_shift($data.camare_microphone_security)"/}
|
||||
{assign name="security" value=":array_shift($data.camare_microphone_security)"/}
|
||||
<div class="tabs-container">
|
||||
{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 name=":cookie('think_lang')" value="en-us"}
|
||||
{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">
|
||||
{notempty name="camare_microphone"}
|
||||
<div class="tab-panel active">
|
||||
@@ -547,9 +665,16 @@
|
||||
{/notempty}
|
||||
{notempty name="data.webpage_footnotes"}
|
||||
<!-- 底部文字 -->
|
||||
<div class="footer-texts">
|
||||
{eq name=":cookie('think_lang')" value="en-us"}
|
||||
<div class="footer-texts-en">
|
||||
{$data.webpage_footnotes.desc|raw|htmlspecialchars_decode}
|
||||
</div>
|
||||
</div>
|
||||
{else/}
|
||||
<div class="footer-texts">
|
||||
{$data.webpage_footnotes.desc|raw|htmlspecialchars_decode}
|
||||
</div>
|
||||
{/eq}
|
||||
|
||||
{/notempty}
|
||||
{/block}
|
||||
{block name="script"}
|
||||
@@ -957,18 +1082,18 @@
|
||||
const allVideos = document.querySelectorAll('.fs-video');
|
||||
const fsBox = document.querySelector('.fs-box');
|
||||
let isVideoPlaying = false;
|
||||
let videoTip = null;
|
||||
// let videoTip = null;
|
||||
|
||||
// 初始化视频提示
|
||||
const initVideoTip = () =>
|
||||
{
|
||||
if (!fsBox || videoTip) return;
|
||||
videoTip = document.createElement('div');
|
||||
videoTip.className = 'video-tip';
|
||||
videoTip.innerText = '点击播放视频';
|
||||
fsBox.appendChild(videoTip);
|
||||
videoTip.style.display = 'none';
|
||||
};
|
||||
// const initVideoTip = () =>
|
||||
// {
|
||||
// if (!fsBox || videoTip) return;
|
||||
// videoTip = document.createElement('div');
|
||||
// videoTip.className = 'video-tip';
|
||||
// videoTip.innerText = '点击播放视频';
|
||||
// fsBox.appendChild(videoTip);
|
||||
// videoTip.style.display = 'none';
|
||||
// };
|
||||
|
||||
// 停止所有视频(仅暂停,无显隐)
|
||||
function stopAllVideos ()
|
||||
@@ -978,7 +1103,7 @@
|
||||
video.pause(); // 仅暂停,删除display修改
|
||||
});
|
||||
isVideoPlaying = false;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}
|
||||
|
||||
// 播放指定视频(仅播放,无显隐)
|
||||
@@ -992,17 +1117,17 @@
|
||||
video.play().then(() =>
|
||||
{
|
||||
isVideoPlaying = true;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}).catch((err) =>
|
||||
{
|
||||
console.log('视频自动播放失败:', err);
|
||||
if (videoTip) videoTip.style.display = 'block';
|
||||
// if (videoTip) videoTip.style.display = 'block';
|
||||
// 点击视频手动播放(仅执行一次)
|
||||
video.addEventListener('click', () =>
|
||||
{
|
||||
video.play();
|
||||
isVideoPlaying = true;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}, { once: true });
|
||||
});
|
||||
};
|
||||
@@ -1055,7 +1180,7 @@
|
||||
};
|
||||
|
||||
// 初始化执行
|
||||
initVideoTip();
|
||||
// initVideoTip();
|
||||
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
||||
window.addEventListener('resize', handleVideoResize);
|
||||
// 页面加载完成后尝试播放视频
|
||||
|
||||
@@ -1037,17 +1037,17 @@
|
||||
const allVideos = document.querySelectorAll('.fs-video');
|
||||
const fsBox = document.querySelector('.fs-box');
|
||||
let isVideoPlaying = false;
|
||||
let videoTip = null;
|
||||
// let videoTip = null;
|
||||
|
||||
// 初始化视频提示
|
||||
const initVideoTip = () => {
|
||||
if (!fsBox || videoTip) return;
|
||||
videoTip = document.createElement('div');
|
||||
videoTip.className = 'video-tip';
|
||||
videoTip.innerText = '点击播放视频';
|
||||
fsBox.appendChild(videoTip);
|
||||
videoTip.style.display = 'none';
|
||||
};
|
||||
// const initVideoTip = () => {
|
||||
// if (!fsBox || videoTip) return;
|
||||
// videoTip = document.createElement('div');
|
||||
// videoTip.className = 'video-tip';
|
||||
// videoTip.innerText = '点击播放视频';
|
||||
// fsBox.appendChild(videoTip);
|
||||
// videoTip.style.display = 'none';
|
||||
// };
|
||||
|
||||
// 停止所有视频
|
||||
function stopAllVideos ()
|
||||
@@ -1060,7 +1060,7 @@
|
||||
if (img) img.style.display = 'block';
|
||||
});
|
||||
isVideoPlaying = false;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}
|
||||
|
||||
// 播放指定视频
|
||||
@@ -1075,7 +1075,7 @@
|
||||
video.muted = true;
|
||||
video.play().then(() => {
|
||||
isVideoPlaying = true;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}).catch((err) => {
|
||||
console.log('视频自动播放失败:', err);
|
||||
video.style.display = 'block';
|
||||
@@ -1085,7 +1085,7 @@
|
||||
video.addEventListener('click', () => {
|
||||
video.play();
|
||||
isVideoPlaying = true;
|
||||
if (videoTip) videoTip.style.display = 'none';
|
||||
// if (videoTip) videoTip.style.display = 'none';
|
||||
}, { once: true });
|
||||
});
|
||||
};
|
||||
@@ -1140,7 +1140,7 @@
|
||||
};
|
||||
|
||||
// 初始化
|
||||
initVideoTip();
|
||||
// initVideoTip();
|
||||
window.addEventListener('scroll', handleVideoScroll, { passive: true });
|
||||
window.addEventListener('resize', handleVideoResize);
|
||||
// 页面加载完成后尝试播放
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
transform: scale(0.8);
|
||||
}
|
||||
.bly-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
.bly-p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
@@ -10,18 +10,19 @@
|
||||
}
|
||||
.cpu-texts-t {
|
||||
color: #fff;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
padding-top: 0.19rem;
|
||||
}
|
||||
.cpu-texts-p {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
margin-top: 0.37rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cpu-footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
line-height: 1;
|
||||
}
|
||||
.endurance-t span:nth-child(2) {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
margin-left: 0.11rem;
|
||||
line-height: 1;
|
||||
}
|
||||
.endurance-p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
width: 6.8rem;
|
||||
margin: 1.5rem 0.35rem;
|
||||
/* font-size: 0.16rem; */
|
||||
color: #cbcfd8;
|
||||
color: #909399;
|
||||
/* white-space: normal; */
|
||||
/* margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem; */
|
||||
@@ -28,23 +28,34 @@
|
||||
.footer-texts p {
|
||||
width: 6.8rem;
|
||||
font-size: 0.16rem;
|
||||
padding-left: 0.05rem;
|
||||
text-indent: -0.1rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 0.1rem;
|
||||
padding-left: 0.1rem;
|
||||
text-indent: -0.2rem;
|
||||
/* line-height: 1.5;
|
||||
margin-bottom: 0.1rem; */
|
||||
font-family: 'HarmonyOS-Light';
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
|
||||
.footer-texts-en {
|
||||
width: 6.8rem;
|
||||
margin: 0 auto;
|
||||
font-size: 0.16rem;
|
||||
color: #cbcfd8;
|
||||
white-space: normal;
|
||||
margin: 1.5rem 0.35rem;
|
||||
/* font-size: 0.16rem; */
|
||||
color: #909399;
|
||||
/* white-space: normal; */
|
||||
/* margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem; */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.footer-texts-en p {
|
||||
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';
|
||||
/* letter-spacing: 1px; */
|
||||
}
|
||||
|
||||
|
||||
@@ -53,23 +64,33 @@
|
||||
}
|
||||
.oircoEgapp-foot .m_footer {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
/* flex-direction: row; */
|
||||
align-items: 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 {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
} */
|
||||
.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 {
|
||||
max-width: 40%;
|
||||
flex:1 !important;
|
||||
/* max-width: 40%;
|
||||
justify-content: end;
|
||||
margin-right: 4%;
|
||||
margin-right: 4%; */
|
||||
width: 50% !important;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.oircoEgapp-foot .foot-con span {
|
||||
width: auto;
|
||||
@@ -89,17 +110,18 @@
|
||||
align-items: center;
|
||||
}
|
||||
.foot-cate {
|
||||
padding: 0 0.16rem;
|
||||
padding: 0.16rem;
|
||||
}
|
||||
.foot-cate h3 {
|
||||
font-size: 0.28rem;
|
||||
}
|
||||
.foot-cate li {
|
||||
padding: 0.7rem 0;
|
||||
min-height: 1.8rem;
|
||||
padding: 0.16rem 0;
|
||||
min-height: 276px;
|
||||
|
||||
}
|
||||
.foot-cate li p {
|
||||
line-height: 0.8rem;
|
||||
line-height: 40px;
|
||||
}
|
||||
.m_footer .right {
|
||||
float: right;
|
||||
@@ -107,7 +129,7 @@
|
||||
text-align: left;
|
||||
}
|
||||
.foot-con span {
|
||||
font-size:0.28rem;
|
||||
font-size:14px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -127,10 +149,13 @@
|
||||
|
||||
}
|
||||
.m_footer .left img {
|
||||
width: 0.55rem;
|
||||
padding-right: 0.2rem;
|
||||
width: 30px;
|
||||
padding-right:0 !important;
|
||||
padding-top: 0;
|
||||
}
|
||||
.oircoEgapp-foot .m_footer .right {
|
||||
/* .oircoEgapp-foot .m_footer .right {
|
||||
max-width: 50%;
|
||||
} */
|
||||
.m_footer .right {
|
||||
padding: 0 !important;
|
||||
}
|
||||
@@ -3,10 +3,7 @@
|
||||
}
|
||||
.fs-box {
|
||||
width: 100%;
|
||||
aspect-ratio: 16/9; /* 2560/1440=16/9,核心比例约束 */
|
||||
position: relative;
|
||||
will-change: contents; /* 告诉浏览器该元素即将变化,提前优化 */
|
||||
contain: layout paint; /* 限制重排重绘范围 */
|
||||
aspect-ratio: 16/9;
|
||||
}
|
||||
.fs-img,
|
||||
.fs-video {
|
||||
@@ -17,7 +14,6 @@
|
||||
width: 100%;
|
||||
}
|
||||
.fs-box-img {
|
||||
display: flex;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
@@ -27,15 +23,19 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0.11rem;
|
||||
|
||||
}
|
||||
.fs-h-img img {
|
||||
width: 3.35rem;
|
||||
aspect-ratio: 335/95;
|
||||
|
||||
}
|
||||
.fs-b-img {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 0.1rem;
|
||||
aspect-ratio: 681/122;
|
||||
}
|
||||
.fs-b-img img {
|
||||
width: 6.81rem;
|
||||
@@ -52,14 +52,14 @@
|
||||
}
|
||||
.dl-t {
|
||||
color: #fff;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.dl-p {
|
||||
color: #cbcfd8;
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}
|
||||
.gpu-texts {
|
||||
color: #fff;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
margin: 0 0.34rem;
|
||||
}
|
||||
.gpu-texts-t {
|
||||
@@ -13,10 +13,10 @@
|
||||
}
|
||||
|
||||
.gpu-texts-p {
|
||||
font-size: 0.16rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
margin-top: 0.32rem;
|
||||
margin-top: 0.37rem;
|
||||
}
|
||||
.gpu-main-img {
|
||||
width: 100%;
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
background: #fff;
|
||||
}
|
||||
.oircoEgapp-head .headtop .headerlogimg {
|
||||
width: 2.25rem !important;
|
||||
|
||||
max-width: 140px;
|
||||
min-width: 123px;
|
||||
height: auto !important;
|
||||
display: block;
|
||||
/* height: 2.25rem; */
|
||||
@@ -61,7 +63,7 @@
|
||||
color: #666;
|
||||
}
|
||||
.cursor_p span {
|
||||
font-size: 0.38rem;
|
||||
font-size: 22px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -71,7 +73,7 @@
|
||||
padding-left: 0.2rem;
|
||||
}
|
||||
.cursor_p span:hover {
|
||||
font-size: 0.38rem;
|
||||
font-size:22px;
|
||||
white-space: normal;
|
||||
width: 100%;
|
||||
overflow: inherit;
|
||||
|
||||
@@ -5,9 +5,38 @@
|
||||
html {
|
||||
width: 100% !important;
|
||||
overflow-x: hidden;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
max-width: 100vw !important;
|
||||
}
|
||||
body {
|
||||
width: 100%;
|
||||
background: #000;
|
||||
overflow-x: hidden;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
max-width: 100vw !important;
|
||||
}
|
||||
|
||||
.f36{
|
||||
font-size: 0.36rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
/* line-height: 1 !important; */
|
||||
}
|
||||
.f18{
|
||||
font-size: 0.18rem !important;
|
||||
line-height: 1.5 !important;
|
||||
}
|
||||
.lh1 {
|
||||
line-height: 1 !important;
|
||||
}
|
||||
.f28 {
|
||||
font-size: 0.28rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
}
|
||||
.f48 {
|
||||
font-size: 0.48rem !important;
|
||||
line-height: 1 !important;
|
||||
margin-bottom: 0.6rem !important;
|
||||
font-family: "HarmonyOS-Medium" !important;
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
position: relative;
|
||||
}
|
||||
.ips-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
line-height: 1.5;
|
||||
margin-top: 1.5rem;
|
||||
@@ -15,7 +15,7 @@
|
||||
position: relative;
|
||||
}
|
||||
.ips-bg p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
margin-left: 0.38rem;
|
||||
|
||||
@@ -9,13 +9,21 @@
|
||||
}
|
||||
|
||||
.m2-bg-t1 {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
padding-top: 1.3rem;
|
||||
}
|
||||
.m2-bg-p {
|
||||
color: #CBCFD8ff;
|
||||
font-size: 0.18rem;
|
||||
padding-top:0.37rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
.m2-img-box {
|
||||
position: absolute;
|
||||
bottom: 0.66rem;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
width: 100%;
|
||||
}
|
||||
.memory-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
@@ -16,7 +16,7 @@
|
||||
}
|
||||
.memory-p {
|
||||
width: 100%;
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
line-height: 1.5;
|
||||
@@ -26,9 +26,14 @@
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: -0.74rem;
|
||||
width: 6.83rem;
|
||||
}
|
||||
.memory-footer-img p {
|
||||
height:0;
|
||||
}
|
||||
|
||||
.memory-footer-img img {
|
||||
width: 6.83rem;
|
||||
|
||||
display: block;
|
||||
aspect-ratio: 683/148;
|
||||
}
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
} */
|
||||
.qb-t {
|
||||
width: 100%;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
.qb-p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
text-align: center;
|
||||
padding-top: 0.37rem;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.rgb-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
@@ -11,7 +11,7 @@
|
||||
aspect-ratio: 750/582;
|
||||
}
|
||||
.rgb-p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
.swiper-container-texts {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 0.91rem;
|
||||
top: 1.2rem;
|
||||
transform: translateX(-50%);
|
||||
z-index: 10;
|
||||
width: 100%;
|
||||
@@ -39,13 +39,13 @@
|
||||
line-height: 1;
|
||||
}
|
||||
.swiper-container-texts-p {
|
||||
padding-top: 0.68rem;
|
||||
padding-top: 0.54rem;
|
||||
font-size: 0.16rem;
|
||||
/* text-align: center; */
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
letter-spacing: 1.3px;
|
||||
/* letter-spacing: px; */
|
||||
justify-content: center;
|
||||
}
|
||||
.swiper-container-texts-p div {
|
||||
@@ -61,7 +61,7 @@
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding-top: 0.63rem;
|
||||
padding-top: 0.54rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.swiper-container-texts-img a {
|
||||
@@ -73,6 +73,7 @@
|
||||
max-width: 1.18rem;
|
||||
}
|
||||
.swiper-slide-t {
|
||||
padding-top: 0.3rem;
|
||||
font-size: 0.2rem;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
display: inline-flex;
|
||||
/* 改为inline-flex,宽度由子元素决定 */
|
||||
position: relative;
|
||||
border-bottom: 1px solid #cbcfd8;
|
||||
border-bottom: 1px solid #909399;
|
||||
margin: 0 auto;
|
||||
width: 1.75rem;
|
||||
display: flex;
|
||||
@@ -36,10 +36,10 @@
|
||||
.tab-indicator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
height: 2px;
|
||||
height:1px;
|
||||
background-color: #fff;
|
||||
transform: translateX(0);
|
||||
width: 0.87rem;
|
||||
width: auto;
|
||||
transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1),
|
||||
width 0.3s cubic-bezier(0.25, 0.1, 0.25, 1);
|
||||
will-change: transform, width;
|
||||
@@ -88,7 +88,7 @@
|
||||
display: block;
|
||||
}
|
||||
.tab-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #cbcfd8;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
}
|
||||
.wifi-t {
|
||||
width: 100%;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.wifi-p {
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
padding-top: 0.37rem;
|
||||
line-height: 1.4;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
opacity: 1;
|
||||
}
|
||||
.xn-t {
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
@@ -55,4 +55,10 @@
|
||||
/* 确保p标签是块级,且换行正常 */
|
||||
display: block;
|
||||
word-wrap: break-word;
|
||||
white-space: nowrap;
|
||||
/* 2. 超出元素宽度的内容隐藏 */
|
||||
overflow: hidden;
|
||||
/* 3. 将超出的文本替换为省略号... */
|
||||
text-overflow: ellipsis;
|
||||
/* 可选:给元素设置一个固定宽度(确保省略效果生效) */
|
||||
}
|
||||
@@ -34,7 +34,7 @@
|
||||
/* 标注样式:关键修正 - 基于容器绝对定位,百分比参考图片原始比例 */
|
||||
.annotation {
|
||||
position: absolute;
|
||||
color: #48494d;
|
||||
color: #fff;
|
||||
font-size: calc(12px + 0.3vw);
|
||||
opacity: 0;
|
||||
transform: translateY(calc(10px + 0.5vw));
|
||||
@@ -70,7 +70,7 @@
|
||||
width: 0.01rem;
|
||||
height: 0;
|
||||
bottom: calc(100% + 6px);
|
||||
background-color: #48494d;
|
||||
background-color: #fff;
|
||||
transition: height 0.8s ease;
|
||||
transform-origin: bottom center;
|
||||
}
|
||||
@@ -92,20 +92,19 @@
|
||||
/* 标注显示时,设置线条最终高度 */
|
||||
.annotation.anno-show span::before {
|
||||
height: 0.57rem;
|
||||
/* 最终高度(vw单位) */
|
||||
}
|
||||
|
||||
.zoom-t {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 0.36rem;
|
||||
font-size: 0.48rem;
|
||||
color: #fff;
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
.zoom-p {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 0.18rem;
|
||||
font-size: 0.20rem;
|
||||
color: #cbcfd8;
|
||||
position: absolute;
|
||||
top: 0.37rem;
|
||||
|
||||
@@ -244,6 +244,25 @@ class ImageMigrator:
|
||||
if self.verbose:
|
||||
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:
|
||||
"""确保目标目录存在(递归创建)"""
|
||||
try:
|
||||
@@ -298,11 +317,17 @@ class ImageMigrator:
|
||||
f"DEBUG ensure_target_directory: 创建目录: {current_path}"
|
||||
)
|
||||
try:
|
||||
# 创建目录
|
||||
self.target_sftp.mkdir(current_path)
|
||||
if self.verbose:
|
||||
print(
|
||||
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:
|
||||
# 如果创建失败,可能是权限问题或目录已存在
|
||||
if self.verbose:
|
||||
@@ -519,6 +544,8 @@ class ImageMigrator:
|
||||
print(f"DEBUG: 目录stat也失败: {stat_e}")
|
||||
|
||||
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:
|
||||
print("DEBUG: 上传完成")
|
||||
@@ -672,13 +699,18 @@ def create_example_config(config_file: str):
|
||||
def read_image_paths(image_list_file: str) -> List[str]:
|
||||
"""从文件读取图片路径列表"""
|
||||
paths = []
|
||||
not_images = []
|
||||
try:
|
||||
with open(image_list_file, "r", encoding="utf-8") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line and not line.startswith("#"):
|
||||
if not line.endswith((".png", ".jpeg", ".jpg", ".gif", ".webp")):
|
||||
not_images.append(line)
|
||||
else:
|
||||
paths.append(line)
|
||||
print(f"从文件读取 {len(paths)} 个图片路径")
|
||||
print(f"从文件中读取到 {len(paths)} 个图片路径数据行")
|
||||
print(f"从文件中读取到 {len(not_images)} 个非图片路径数据行")
|
||||
except Exception as e:
|
||||
print(f"读取图片路径文件失败 {image_list_file}: {e}")
|
||||
return paths
|
||||
@@ -889,9 +921,14 @@ def main():
|
||||
print("请使用 --input 指定文件或直接在命令行提供路径")
|
||||
sys.exit(1)
|
||||
|
||||
origin_paths = image_paths
|
||||
# 去重
|
||||
image_paths = list(set(image_paths))
|
||||
|
||||
repeats = len(origin_paths) - len(image_paths)
|
||||
if repeats > 0:
|
||||
print(f"从文件中读取到 {repeats} 个重复图片路径数据行")
|
||||
|
||||
# 创建并运行迁移器
|
||||
migrator = ImageMigrator(
|
||||
source_config=source_config,
|
||||
|
||||
Reference in New Issue
Block a user