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('产品创建失败');
|
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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
|
/* 可选:给元素设置一个固定宽度(确保省略效果生效) */
|
||||||
}
|
}
|
||||||
@@ -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