This commit is contained in:
125
css/index.css
125
css/index.css
@@ -266,6 +266,7 @@
|
|||||||
/* banner 轮播容器 */
|
/* banner 轮播容器 */
|
||||||
.banner-cont .swiper-slide {
|
.banner-cont .swiper-slide {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
/* 桌面端高度 */
|
||||||
height: 650px;
|
height: 650px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
/* 深色科技渐变背景 */
|
/* 深色科技渐变背景 */
|
||||||
@@ -3480,7 +3481,7 @@ html {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 快速入口 - 四宫格中等版 ===== */
|
/* ===== 快速入口 - 四宫格中等版 ===== */
|
||||||
.banner . banner-s {
|
.banner .banner-s {
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
padding: 8px 8px;
|
padding: 8px 8px;
|
||||||
}
|
}
|
||||||
@@ -3717,7 +3718,7 @@ html {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 快速入口 - 四宫格极简版 ===== */
|
/* ===== 快速入口 - 四宫格极简版 ===== */
|
||||||
.banner . banner-s {
|
.banner .banner-s {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
padding: 8px 6px;
|
padding: 8px 6px;
|
||||||
}
|
}
|
||||||
@@ -4525,3 +4526,123 @@ html {
|
|||||||
background: rgba(56, 189, 248, 0.3);
|
background: rgba(56, 189, 248, 0.3);
|
||||||
box-shadow: 0 0 20px rgba(56, 189, 248, 0.4);
|
box-shadow: 0 0 20px rgba(56, 189, 248, 0.4);
|
||||||
}
|
}
|
||||||
|
/* Mobile Overrides for Index Page */
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
|
||||||
|
/* Banner Adjustment */
|
||||||
|
.banner-cont .swiper-slide {
|
||||||
|
height: auto !important;
|
||||||
|
min-height: 400px;
|
||||||
|
padding-bottom: 60px;
|
||||||
|
/* Space for pagination */
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-cont .swiper-slide .section-content {
|
||||||
|
position: relative;
|
||||||
|
top: auto;
|
||||||
|
left: auto;
|
||||||
|
transform: none;
|
||||||
|
padding: 80px 20px 40px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-cont .swiper-slide .section-content .title-wrapper {
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-cont .swiper-slide h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-tags {
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-cont .banner-desc {
|
||||||
|
font-size: 15px;
|
||||||
|
margin: 0 auto 30px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Feature Cards (Banner-S) */
|
||||||
|
.banner .banner-s {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner .banner-s .banner-list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 15px;
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-s .banner-list .banner-item {
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
flex: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hot Products - Card View */
|
||||||
|
.products-table thead {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.products-table,
|
||||||
|
.products-table tbody,
|
||||||
|
.products-table tr,
|
||||||
|
.products-table td {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.products-table tr {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background: rgba(30, 41, 59, 0.4);
|
||||||
|
border: 1px solid rgba(148, 163, 184, 0.1);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.products-table td {
|
||||||
|
text-align: right;
|
||||||
|
padding: 8px 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom: 1px solid rgba(148, 163, 184, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.products-table td:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.products-table td::before {
|
||||||
|
content: attr(data-label);
|
||||||
|
float: left;
|
||||||
|
font-weight: 600;
|
||||||
|
color: rgba(148, 163, 184, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Solution Wrapper - Stacked */
|
||||||
|
.solution-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.solution-tabs {
|
||||||
|
display: none;
|
||||||
|
/* Hide desktop tabs */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We might need to restructure the HTML to show all solutions stacked or use a mobile slider
|
||||||
|
For now, let's assume we stack them or show a simple list.
|
||||||
|
Actually, if HTML structure depends on clicks to show/hide, we need JS or CSS modification.
|
||||||
|
Let's style the active one well first, or maybe show all?
|
||||||
|
*/
|
||||||
|
}
|
||||||
62
index.html
62
index.html
@@ -18,7 +18,8 @@
|
|||||||
<div class="swiper-wrapper">
|
<div class="swiper-wrapper">
|
||||||
{if ( isset($data.banner) ) }
|
{if ( isset($data.banner) ) }
|
||||||
{foreach $data.banner as $key=>$value}
|
{foreach $data.banner as $key=>$value}
|
||||||
<div class="swiper-slide" style="background-image: url('{$value.img|default='/web/BlackFruit-web/assets/img/index/1@2x.png'}');">
|
<div class="swiper-slide"
|
||||||
|
style="background-image: url('{$value.img|default='/web/BlackFruit-web/assets/img/index/1@2x.png'}');">
|
||||||
<div class="section-content">
|
<div class="section-content">
|
||||||
<div class="title-wrapper">
|
<div class="title-wrapper">
|
||||||
{if !empty($value.tags)}
|
{if !empty($value.tags)}
|
||||||
@@ -43,11 +44,8 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{if !empty($value.button_text)}
|
{if !empty($value.button_text)}
|
||||||
<a
|
<a class="btn btn2 btn-normal" href="{$value.button_link|default=$value.url|default='javascript:;'}" {if
|
||||||
class="btn btn2 btn-normal"
|
!empty($value.button_blank) || !empty($value.blank)}target="_blank" {/if}>
|
||||||
href="{$value.button_link|default=$value.url|default='javascript:;'}"
|
|
||||||
{if !empty($value.button_blank) || !empty($value.blank)}target="_blank"{/if}
|
|
||||||
>
|
|
||||||
{$value.button_text}
|
{$value.button_text}
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -101,28 +99,32 @@
|
|||||||
<div class="banner-s">
|
<div class="banner-s">
|
||||||
<div class="section-content banner-list">
|
<div class="section-content banner-list">
|
||||||
<div class="banner-item" id="cloud-box">
|
<div class="banner-item" id="cloud-box">
|
||||||
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon" class="banner-item-icon">
|
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon"
|
||||||
|
class="banner-item-icon">
|
||||||
<div class="banner-item-content">
|
<div class="banner-item-content">
|
||||||
<h5>新用户最低可<span class="highlight">5折</span>优惠</h5>
|
<h5>新用户最低可<span class="highlight">5折</span>优惠</h5>
|
||||||
<p class="title-desc mt-10 mb-10">无数个人用户的共同选择</p>
|
<p class="title-desc mt-10 mb-10">无数个人用户的共同选择</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="banner-item" id="domain-box">
|
<div class="banner-item" id="domain-box">
|
||||||
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon" class="banner-item-icon">
|
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon"
|
||||||
|
class="banner-item-icon">
|
||||||
<div class="banner-item-content">
|
<div class="banner-item-content">
|
||||||
<h5>域名<span class="highlight">低至9元</span>起</h5>
|
<h5>域名<span class="highlight">低至9元</span>起</h5>
|
||||||
<p class="title-desc mt-10 mb-10">优选主流域名注册服务</p>
|
<p class="title-desc mt-10 mb-10">优选主流域名注册服务</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="banner-item" id="cps-box">
|
<div class="banner-item" id="cps-box">
|
||||||
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon" class="banner-item-icon">
|
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon"
|
||||||
|
class="banner-item-icon">
|
||||||
<div class="banner-item-content">
|
<div class="banner-item-content">
|
||||||
<h5>推广最高<span class="highlight">30%</span>佣金</h5>
|
<h5>推广最高<span class="highlight">30%</span>佣金</h5>
|
||||||
<p class="title-desc mt-10 mb-10">多种产品高额返佣</p>
|
<p class="title-desc mt-10 mb-10">多种产品高额返佣</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="banner-item" id="logon-box">
|
<div class="banner-item" id="logon-box">
|
||||||
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon" class="banner-item-icon">
|
<img src="/web/BlackFruit-web/assets/picture_DyJDf/remoteL17140335436547.png" alt="icon"
|
||||||
|
class="banner-item-icon">
|
||||||
<div class="banner-item-content">
|
<div class="banner-item-content">
|
||||||
<h5>注册送<span class="highlight">2000元</span>礼包</h5>
|
<h5>注册送<span class="highlight">2000元</span>礼包</h5>
|
||||||
<p class="title-desc mt-10 mb-10">免费注册领取专属礼包</p>
|
<p class="title-desc mt-10 mb-10">免费注册领取专属礼包</p>
|
||||||
@@ -461,6 +463,38 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="honor-list" id="certBox">
|
<div class="honor-list" id="certBox">
|
||||||
<!-- 荣誉证书动态插入这里 -->
|
<!-- 荣誉证书动态插入这里 -->
|
||||||
|
{if ( isset($data.honor) ) }
|
||||||
|
{foreach $data.honor as $key=>$value}
|
||||||
|
<div class="honor-item">
|
||||||
|
<div class="honor-icon">
|
||||||
|
<img src="{$value.img}" alt="{$value.name}">
|
||||||
|
</div>
|
||||||
|
<h4 class="honor-name">{$value.name}</h4>
|
||||||
|
</div>
|
||||||
|
{/foreach}
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 合作伙伴 -->
|
||||||
|
<div class="honor-section partner-section" style="background-color: #f8f9fa;">
|
||||||
|
<div class="section-content">
|
||||||
|
<div class="honor-title">
|
||||||
|
<h3>合作伙伴</h3>
|
||||||
|
<p class="honor-subtitle">携手共进,合作共赢</p>
|
||||||
|
</div>
|
||||||
|
<div class="honor-list" id="partnerBox">
|
||||||
|
{if ( isset($data.partner) ) }
|
||||||
|
{foreach $data.partner as $key=>$value}
|
||||||
|
<div class="honor-item">
|
||||||
|
<div class="honor-icon">
|
||||||
|
<img src="{$value.img}" alt="{$value.name}">
|
||||||
|
</div>
|
||||||
|
<h4 class="honor-name">{$value.name}</h4>
|
||||||
|
</div>
|
||||||
|
{/foreach}
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -498,13 +532,13 @@
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div style="height: 0;">
|
<div class="d-none">
|
||||||
<img id="viewer" alt="" style="display: none;">
|
<img id="viewer" alt="">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// 回到顶部功能
|
// 回到顶部功能
|
||||||
$(document).ready(function() {
|
$(document).ready(function () {
|
||||||
// 点击回到顶部
|
// 点击回到顶部
|
||||||
$("#backTop").click(function () {
|
$("#backTop").click(function () {
|
||||||
$("html, body").animate({ scrollTop: 0 }, 300);
|
$("html, body").animate({ scrollTop: 0 }, 300);
|
||||||
@@ -526,4 +560,4 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{include file="footer"}
|
{include file="footer"}
|
||||||
15
js/index.js
15
js/index.js
@@ -98,11 +98,24 @@ $(function () {
|
|||||||
`);
|
`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 合作伙伴
|
||||||
|
if (commentObj.partner && commentObj.partner.length > 0) {
|
||||||
|
commentObj.partner.forEach((item) => {
|
||||||
|
$("#partnerBox").append(`
|
||||||
|
<div class="honor-item">
|
||||||
|
<div class="honor-icon">
|
||||||
|
<img src="${item.img}" alt="${item.name}">
|
||||||
|
</div>
|
||||||
|
<h4 class="honor-name">${item.name}</h4>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 获取通用配置信息
|
// 获取通用配置信息
|
||||||
function getCommentInfo() {
|
function getCommentInfo() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/console/v1/common",
|
url: "/console/v1/theme/config",
|
||||||
method: "get",
|
method: "get",
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: "Bearer" + " " + localStorage.jwt,
|
Authorization: "Bearer" + " " + localStorage.jwt,
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class ThemeController extends PluginAdminBaseController
|
|||||||
'side' => $param['side'] ?? [],
|
'side' => $param['side'] ?? [],
|
||||||
'feedback_type' => $param['feedback_type'] ?? [],
|
'feedback_type' => $param['feedback_type'] ?? [],
|
||||||
'honor' => $param['honor'] ?? [],
|
'honor' => $param['honor'] ?? [],
|
||||||
|
'partner' => $param['partner'] ?? [],
|
||||||
];
|
];
|
||||||
|
|
||||||
$model = new ThemeConfigModel();
|
$model = new ThemeConfigModel();
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class ThemeController extends PluginBaseController
|
|||||||
'dcim_product_link' => $config['site_config']['dcim_product_link'] ?? '',
|
'dcim_product_link' => $config['site_config']['dcim_product_link'] ?? '',
|
||||||
// 以下字段需与 /console/v1/common 保持一致的扁平结构
|
// 以下字段需与 /console/v1/common 保持一致的扁平结构
|
||||||
'honor' => $config['honor'] ?? ($config['site_config']['honor'] ?? []),
|
'honor' => $config['honor'] ?? ($config['site_config']['honor'] ?? []),
|
||||||
|
'partner' => $config['partner'] ?? ($config['site_config']['partner'] ?? []),
|
||||||
'friendly_link' => $config['friendly_link'] ?? [],
|
'friendly_link' => $config['friendly_link'] ?? [],
|
||||||
'banner' => $config['banner'] ?? [],
|
'banner' => $config['banner'] ?? [],
|
||||||
'header_nav' => $config['header_nav'] ?? [],
|
'header_nav' => $config['header_nav'] ?? [],
|
||||||
|
|||||||
@@ -11,34 +11,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>联系电话</label>
|
<label>联系电话</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.enterprise_telephone" placeholder="400-000-0000"></t-input>
|
||||||
v-model="fullConfig.site_config.enterprise_telephone"
|
|
||||||
placeholder="400-000-0000"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>联系邮箱</label>
|
<label>联系邮箱</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.enterprise_mailbox" placeholder="support@example.com"></t-input>
|
||||||
v-model="fullConfig.site_config.enterprise_mailbox"
|
|
||||||
placeholder="support@example.com"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>Logo 地址</label>
|
<label>Logo 地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.official_website_logo" placeholder="/upload/logo.png"></t-input>
|
||||||
v-model="fullConfig.site_config.official_website_logo"
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
placeholder="/upload/logo.png"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
></t-input>
|
@success="(ctx) => handleUpload(['site_config', 'official_website_logo'], ctx)">
|
||||||
<t-upload
|
|
||||||
theme="custom"
|
|
||||||
:action="uploadUrl"
|
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="(ctx) => handleUpload(['site_config', 'official_website_logo'], ctx)"
|
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -48,19 +33,10 @@
|
|||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>二维码地址</label>
|
<label>二维码地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.enterprise_qrcode" placeholder="/upload/qrcode.png"></t-input>
|
||||||
v-model="fullConfig.site_config.enterprise_qrcode"
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
placeholder="/upload/qrcode.png"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
></t-input>
|
@success="(ctx) => handleUpload(['site_config', 'enterprise_qrcode'], ctx)">
|
||||||
<t-upload
|
|
||||||
theme="custom"
|
|
||||||
:action="uploadUrl"
|
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="(ctx) => handleUpload(['site_config', 'enterprise_qrcode'], ctx)"
|
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -69,10 +45,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>在线客服链接</label>
|
<label>在线客服链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.online_customer_service_link"
|
||||||
v-model="fullConfig.site_config.online_customer_service_link"
|
placeholder="http://www.test.com"></t-input>
|
||||||
placeholder="http://www.test.com"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>ICP 号</label>
|
<label>ICP 号</label>
|
||||||
@@ -80,66 +54,41 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>ICP 链接</label>
|
<label>ICP 链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.icp_info_link" placeholder="https://beian.miit.gov.cn"></t-input>
|
||||||
v-model="fullConfig.site_config.icp_info_link"
|
|
||||||
placeholder="https://beian.miit.gov.cn"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>公安备案号</label>
|
<label>公安备案号</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.public_security_network_preparation"
|
||||||
v-model="fullConfig.site_config.public_security_network_preparation"
|
placeholder="京公网安备XXXX号"></t-input>
|
||||||
placeholder="京公网安备XXXX号"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>公安备案链接</label>
|
<label>公安备案链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.public_security_network_preparation_link"
|
||||||
v-model="fullConfig.site_config.public_security_network_preparation_link"
|
placeholder="https://beian.mps.gov.cn"></t-input>
|
||||||
placeholder="https://beian.mps.gov.cn"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>电信增值许可证</label>
|
<label>电信增值许可证</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.telecom_appreciation" placeholder="增值电信业务经营许可证"></t-input>
|
||||||
v-model="fullConfig.site_config.telecom_appreciation"
|
|
||||||
placeholder="增值电信业务经营许可证"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>用户协议链接</label>
|
<label>用户协议链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.terms_service_url" placeholder="/agreement/service.html"></t-input>
|
||||||
v-model="fullConfig.site_config.terms_service_url"
|
|
||||||
placeholder="/agreement/service.html"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>隐私政策链接</label>
|
<label>隐私政策链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.terms_privacy_url" placeholder="/agreement/privacy.html"></t-input>
|
||||||
v-model="fullConfig.site_config.terms_privacy_url"
|
|
||||||
placeholder="/agreement/privacy.html"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>云产品购买链接</label>
|
<label>云产品购买链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.cloud_product_link" placeholder="/cart/goods.htm?id=1"></t-input>
|
||||||
v-model="fullConfig.site_config.cloud_product_link"
|
|
||||||
placeholder="/cart/goods.htm?id=1"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>物理机/DCIM 链接</label>
|
<label>物理机/DCIM 链接</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.dcim_product_link" placeholder="/cart/goods.htm?id=2"></t-input>
|
||||||
v-model="fullConfig.site_config.dcim_product_link"
|
|
||||||
placeholder="/cart/goods.htm?id=2"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>版权信息</label>
|
<label>版权信息</label>
|
||||||
<t-input
|
<t-input v-model="fullConfig.site_config.copyright_info" placeholder="© 2025 主题云"></t-input>
|
||||||
v-model="fullConfig.site_config.copyright_info"
|
|
||||||
placeholder="© 2025 主题云"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</t-card>
|
</t-card>
|
||||||
@@ -168,15 +117,9 @@
|
|||||||
<label>图标地址</label>
|
<label>图标地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input v-model="item.icon" placeholder="/upload/side-phone.png"></t-input>
|
<t-input v-model="item.icon" placeholder="/upload/side-phone.png"></t-input>
|
||||||
<t-upload
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
theme="custom"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
:action="uploadUrl"
|
@success="(ctx) => handleUpload(['side', index, 'icon'], ctx)">
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="(ctx) => handleUpload(['side', index, 'icon'], ctx)"
|
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -185,11 +128,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>内容(支持 HTML)</label>
|
<label>内容(支持 HTML)</label>
|
||||||
<t-textarea
|
<t-textarea v-model="item.content" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||||
v-model="item.content"
|
placeholder="<p>7x24 小时不间断服务</p>"></t-textarea>
|
||||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
|
||||||
placeholder="<p>7x24 小时不间断服务</p>"
|
|
||||||
></t-textarea>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -203,11 +143,7 @@
|
|||||||
<div v-if="!fullConfig.feedback_type.length" class="empty-tip">
|
<div v-if="!fullConfig.feedback_type.length" class="empty-tip">
|
||||||
还没有反馈类型,点击下方按钮添加。
|
还没有反馈类型,点击下方按钮添加。
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="config-item" v-for="(item, index) in fullConfig.feedback_type" :key="'feedback-' + index">
|
||||||
class="config-item"
|
|
||||||
v-for="(item, index) in fullConfig.feedback_type"
|
|
||||||
:key="'feedback-' + index"
|
|
||||||
>
|
|
||||||
<div class="config-item__header">
|
<div class="config-item__header">
|
||||||
<h4>类型 {{ index + 1 }}</h4>
|
<h4>类型 {{ index + 1 }}</h4>
|
||||||
<t-button size="small" theme="danger" variant="outline" @click="removeFeedbackType(index)">
|
<t-button size="small" theme="danger" variant="outline" @click="removeFeedbackType(index)">
|
||||||
@@ -246,11 +182,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>描述</label>
|
<label>描述</label>
|
||||||
<t-textarea
|
<t-textarea v-model="fullConfig.seo.description" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||||
v-model="fullConfig.seo.description"
|
placeholder="站点描述"></t-textarea>
|
||||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
|
||||||
placeholder="站点描述"
|
|
||||||
></t-textarea>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</t-card>
|
</t-card>
|
||||||
@@ -276,19 +209,10 @@
|
|||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>图片地址</label>
|
<label>图片地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input
|
<t-input v-model="banner.img" placeholder="/upload/banner-1.png"></t-input>
|
||||||
v-model="banner.img"
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
placeholder="/upload/banner-1.png"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
></t-input>
|
@success="(ctx) => handleUpload(['banner', index, 'img'], ctx)">
|
||||||
<t-upload
|
|
||||||
theme="custom"
|
|
||||||
:action="uploadUrl"
|
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="(ctx) => handleUpload(['banner', index, 'img'], ctx)"
|
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -301,10 +225,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>标签</label>
|
<label>标签</label>
|
||||||
<t-input
|
<t-input v-model="banner.tags" placeholder="如:高速,低价,安全(多个标签用逗号分隔)"></t-input>
|
||||||
v-model="banner.tags"
|
|
||||||
placeholder="如:高速,低价,安全(多个标签用逗号分隔)"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label>跳转链接</label>
|
<label>跳转链接</label>
|
||||||
@@ -351,15 +272,9 @@
|
|||||||
<label>图片地址</label>
|
<label>图片地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input v-model="item.img" placeholder="/upload/honor.png"></t-input>
|
<t-input v-model="item.img" placeholder="/upload/honor.png"></t-input>
|
||||||
<t-upload
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
theme="custom"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
:action="uploadUrl"
|
@success="(ctx) => handleUpload(['honor', index, 'img'], ctx)">
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="(ctx) => handleUpload(['honor', index, 'img'], ctx)"
|
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -370,6 +285,44 @@
|
|||||||
</div>
|
</div>
|
||||||
<t-button theme="primary" variant="outline" @click="addHonor">新增荣誉</t-button>
|
<t-button theme="primary" variant="outline" @click="addHonor">新增荣誉</t-button>
|
||||||
</t-card>
|
</t-card>
|
||||||
|
|
||||||
|
<t-card class="theme-card" title="合作伙伴" bordered>
|
||||||
|
<div v-if="!fullConfig.partner.length" class="empty-tip">
|
||||||
|
用于首页"合作伙伴"模块(partner)。
|
||||||
|
</div>
|
||||||
|
<div class="config-item" v-for="(item, index) in fullConfig.partner" :key="'partner-' + index">
|
||||||
|
<div class="config-item__header">
|
||||||
|
<h4>伙伴 {{ index + 1 }}</h4>
|
||||||
|
<t-button size="small" theme="danger" variant="outline" @click="removePartner(index)">
|
||||||
|
删除
|
||||||
|
</t-button>
|
||||||
|
</div>
|
||||||
|
<div class="form-grid">
|
||||||
|
<div class="form-item">
|
||||||
|
<label>名称</label>
|
||||||
|
<t-input v-model="item.name" placeholder="客户名称"></t-input>
|
||||||
|
</div>
|
||||||
|
<div class="form-item">
|
||||||
|
<label>描述</label>
|
||||||
|
<t-input v-model="item.description" placeholder="典型案例"></t-input>
|
||||||
|
</div>
|
||||||
|
<div class="form-item form-item--full">
|
||||||
|
<label>图片地址</label>
|
||||||
|
<div class="upload-row">
|
||||||
|
<t-input v-model="item.img" placeholder="/upload/case.png"></t-input>
|
||||||
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1"
|
||||||
|
@success="(ctx) => handleUpload(['partner', index, 'img'], ctx)">
|
||||||
|
<t-button size="small" class="ml-10">
|
||||||
|
<t-icon name="upload" size="small" /> 上传
|
||||||
|
</t-button>
|
||||||
|
</t-upload>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<t-button theme="primary" variant="outline" @click="addPartner">新增伙伴</t-button>
|
||||||
|
</t-card>
|
||||||
</t-tab-panel>
|
</t-tab-panel>
|
||||||
|
|
||||||
<t-tab-panel value="nav" label="导航配置">
|
<t-tab-panel value="nav" label="导航配置">
|
||||||
@@ -380,10 +333,7 @@
|
|||||||
<div class="form-grid">
|
<div class="form-grid">
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>Logo 点击跳转地址</label>
|
<label>Logo 点击跳转地址</label>
|
||||||
<t-input
|
<t-input v-model="homeNav.file_address" placeholder="index.html 或 /index.html"></t-input>
|
||||||
v-model="homeNav.file_address"
|
|
||||||
placeholder="index.html 或 /index.html"
|
|
||||||
></t-input>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -391,12 +341,7 @@
|
|||||||
<div v-if="headerNavList.length <= 1" class="empty-tip">
|
<div v-if="headerNavList.length <= 1" class="empty-tip">
|
||||||
还没有自定义导航,请点击下方按钮新增。
|
还没有自定义导航,请点击下方按钮新增。
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="config-item" v-for="(item, index) in headerNavList" :key="'nav-' + index" v-if="index > 0">
|
||||||
class="config-item"
|
|
||||||
v-for="(item, index) in headerNavList"
|
|
||||||
:key="'nav-' + index"
|
|
||||||
v-if="index > 0"
|
|
||||||
>
|
|
||||||
<div class="config-item__header">
|
<div class="config-item__header">
|
||||||
<h4>导航 {{ index }}</h4>
|
<h4>导航 {{ index }}</h4>
|
||||||
<t-button size="small" theme="danger" variant="outline" @click="removeHeaderNav(index)">
|
<t-button size="small" theme="danger" variant="outline" @click="removeHeaderNav(index)">
|
||||||
@@ -422,19 +367,11 @@
|
|||||||
<div v-if="!getHeaderChildren(item).length" class="empty-tip">
|
<div v-if="!getHeaderChildren(item).length" class="empty-tip">
|
||||||
还没有子菜单,点击下方按钮新增。
|
还没有子菜单,点击下方按钮新增。
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="config-item" v-for="(child, cIndex) in getHeaderChildren(item)"
|
||||||
class="config-item"
|
:key="'nav-' + index + '-child-' + cIndex">
|
||||||
v-for="(child, cIndex) in getHeaderChildren(item)"
|
|
||||||
:key="'nav-' + index + '-child-' + cIndex"
|
|
||||||
>
|
|
||||||
<div class="config-item__header">
|
<div class="config-item__header">
|
||||||
<h4>子菜单 {{ cIndex + 1 }}</h4>
|
<h4>子菜单 {{ cIndex + 1 }}</h4>
|
||||||
<t-button
|
<t-button size="small" theme="danger" variant="outline" @click="removeHeaderNavChild(index, cIndex)">
|
||||||
size="small"
|
|
||||||
theme="danger"
|
|
||||||
variant="outline"
|
|
||||||
@click="removeHeaderNavChild(index, cIndex)"
|
|
||||||
>
|
|
||||||
删除
|
删除
|
||||||
</t-button>
|
</t-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -455,17 +392,10 @@
|
|||||||
<label>图标地址</label>
|
<label>图标地址</label>
|
||||||
<div class="upload-row">
|
<div class="upload-row">
|
||||||
<t-input v-model="child.icon" placeholder="/upload/nav-icon.png"></t-input>
|
<t-input v-model="child.icon" placeholder="/upload/nav-icon.png"></t-input>
|
||||||
<t-upload
|
<t-upload theme="custom" :action="uploadUrl" :headers="uploadHeaders"
|
||||||
theme="custom"
|
:format-response="uploadFormatResponse" :show-upload-progress="false" :max="1" @success="
|
||||||
:action="uploadUrl"
|
|
||||||
:headers="uploadHeaders"
|
|
||||||
:format-response="uploadFormatResponse"
|
|
||||||
:show-upload-progress="false"
|
|
||||||
:max="1"
|
|
||||||
@success="
|
|
||||||
(ctx) => handleUpload(['header_nav', index, 'children', cIndex, 'icon'], ctx)
|
(ctx) => handleUpload(['header_nav', index, 'children', cIndex, 'icon'], ctx)
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<t-button size="small" class="ml-10">
|
<t-button size="small" class="ml-10">
|
||||||
<t-icon name="upload" size="small" /> 上传
|
<t-icon name="upload" size="small" /> 上传
|
||||||
</t-button>
|
</t-button>
|
||||||
@@ -474,21 +404,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-item form-item--full">
|
<div class="form-item form-item--full">
|
||||||
<label>描述</label>
|
<label>描述</label>
|
||||||
<t-textarea
|
<t-textarea v-model="child.description" :autosize="{ minRows: 2, maxRows: 3 }"
|
||||||
v-model="child.description"
|
placeholder="如:高可用的弹性计算服务"></t-textarea>
|
||||||
:autosize="{ minRows: 2, maxRows: 3 }"
|
|
||||||
placeholder="如:高可用的弹性计算服务"
|
|
||||||
></t-textarea>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<t-button
|
<t-button class="mt-10" theme="primary" size="small" variant="outline" @click="addHeaderNavChild(index)">
|
||||||
class="mt-10"
|
|
||||||
theme="primary"
|
|
||||||
size="small"
|
|
||||||
variant="outline"
|
|
||||||
@click="addHeaderNavChild(index)"
|
|
||||||
>
|
|
||||||
新增子菜单
|
新增子菜单
|
||||||
</t-button>
|
</t-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -507,11 +428,7 @@
|
|||||||
<div v-if="!footerNavList.length" class="empty-tip">
|
<div v-if="!footerNavList.length" class="empty-tip">
|
||||||
还没有底部栏目,点击下方按钮新增。
|
还没有底部栏目,点击下方按钮新增。
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="config-item" v-for="(group, index) in footerNavList" :key="'footer-' + index">
|
||||||
class="config-item"
|
|
||||||
v-for="(group, index) in footerNavList"
|
|
||||||
:key="'footer-' + index"
|
|
||||||
>
|
|
||||||
<div class="config-item__header">
|
<div class="config-item__header">
|
||||||
<h4>栏目 {{ index + 1 }}</h4>
|
<h4>栏目 {{ index + 1 }}</h4>
|
||||||
<t-button size="small" theme="danger" variant="outline" @click="removeFooterNav(index)">
|
<t-button size="small" theme="danger" variant="outline" @click="removeFooterNav(index)">
|
||||||
@@ -528,19 +445,11 @@
|
|||||||
<div v-if="!getFooterChildren(group).length" class="empty-tip">
|
<div v-if="!getFooterChildren(group).length" class="empty-tip">
|
||||||
还没有链接,点击下方按钮新增。
|
还没有链接,点击下方按钮新增。
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="config-item" v-for="(link, cIndex) in getFooterChildren(group)"
|
||||||
class="config-item"
|
:key="'footer-' + index + '-child-' + cIndex">
|
||||||
v-for="(link, cIndex) in getFooterChildren(group)"
|
|
||||||
:key="'footer-' + index + '-child-' + cIndex"
|
|
||||||
>
|
|
||||||
<div class="config-item__header">
|
<div class="config-item__header">
|
||||||
<h4>链接 {{ cIndex + 1 }}</h4>
|
<h4>链接 {{ cIndex + 1 }}</h4>
|
||||||
<t-button
|
<t-button size="small" theme="danger" variant="outline" @click="removeFooterNavChild(index, cIndex)">
|
||||||
size="small"
|
|
||||||
theme="danger"
|
|
||||||
variant="outline"
|
|
||||||
@click="removeFooterNavChild(index, cIndex)"
|
|
||||||
>
|
|
||||||
删除
|
删除
|
||||||
</t-button>
|
</t-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -559,13 +468,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<t-button
|
<t-button class="mt-10" theme="primary" size="small" variant="outline" @click="addFooterNavChild(index)">
|
||||||
class="mt-10"
|
|
||||||
theme="primary"
|
|
||||||
size="small"
|
|
||||||
variant="outline"
|
|
||||||
@click="addFooterNavChild(index)"
|
|
||||||
>
|
|
||||||
新增链接
|
新增链接
|
||||||
</t-button>
|
</t-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -605,11 +508,7 @@
|
|||||||
<p class="theme-tip">
|
<p class="theme-tip">
|
||||||
用于暂未在 UI 中开放的配置项(如复杂导航结构 header_nav/footer_nav 等)。如非必要,建议优先使用上方表单编辑。
|
用于暂未在 UI 中开放的配置项(如复杂导航结构 header_nav/footer_nav 等)。如非必要,建议优先使用上方表单编辑。
|
||||||
</p>
|
</p>
|
||||||
<t-textarea
|
<t-textarea v-model="advancedText" :autosize="{ minRows: 14 }" class="theme-textarea"></t-textarea>
|
||||||
v-model="advancedText"
|
|
||||||
:autosize="{ minRows: 14 }"
|
|
||||||
class="theme-textarea"
|
|
||||||
></t-textarea>
|
|
||||||
<div class="mt-10">
|
<div class="mt-10">
|
||||||
<t-button variant="outline" @click="syncJson">同步当前配置</t-button>
|
<t-button variant="outline" @click="syncJson">同步当前配置</t-button>
|
||||||
<t-button class="ml-10" @click="applyAdvanced">应用 JSON</t-button>
|
<t-button class="ml-10" @click="applyAdvanced">应用 JSON</t-button>
|
||||||
@@ -678,6 +577,7 @@
|
|||||||
side: [],
|
side: [],
|
||||||
feedback_type: [],
|
feedback_type: [],
|
||||||
honor: [],
|
honor: [],
|
||||||
|
partner: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
@@ -751,18 +651,23 @@
|
|||||||
side: Array.isArray(data.side)
|
side: Array.isArray(data.side)
|
||||||
? data.side
|
? data.side
|
||||||
: Array.isArray(data.side_floating_window)
|
: Array.isArray(data.side_floating_window)
|
||||||
? data.side_floating_window
|
? data.side_floating_window
|
||||||
: [],
|
: [],
|
||||||
feedback_type: Array.isArray(data.feedback_type)
|
feedback_type: Array.isArray(data.feedback_type)
|
||||||
? data.feedback_type
|
? data.feedback_type
|
||||||
: Array.isArray(data.site_config && data.site_config.feedback_type)
|
: Array.isArray(data.site_config && data.site_config.feedback_type)
|
||||||
? data.site_config.feedback_type
|
? data.site_config.feedback_type
|
||||||
: [],
|
: [],
|
||||||
honor: Array.isArray(data.honor)
|
honor: Array.isArray(data.honor)
|
||||||
? data.honor
|
? data.honor
|
||||||
: Array.isArray(data.site_config && data.site_config.honor)
|
: Array.isArray(data.site_config && data.site_config.honor)
|
||||||
? data.site_config.honor
|
? data.site_config.honor
|
||||||
: [],
|
: [],
|
||||||
|
partner: Array.isArray(data.partner)
|
||||||
|
? data.partner
|
||||||
|
: Array.isArray(data.site_config && data.site_config.partner)
|
||||||
|
? data.site_config.partner
|
||||||
|
: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!Array.isArray(merged.header_nav) || merged.header_nav.length === 0) {
|
if (!Array.isArray(merged.header_nav) || merged.header_nav.length === 0) {
|
||||||
@@ -903,6 +808,12 @@
|
|||||||
removeHonor(index) {
|
removeHonor(index) {
|
||||||
this.fullConfig.honor.splice(index, 1);
|
this.fullConfig.honor.splice(index, 1);
|
||||||
},
|
},
|
||||||
|
addPartner() {
|
||||||
|
this.fullConfig.partner.push({ name: "", description: "", img: "" });
|
||||||
|
},
|
||||||
|
removePartner(index) {
|
||||||
|
this.fullConfig.partner.splice(index, 1);
|
||||||
|
},
|
||||||
addFeedbackType() {
|
addFeedbackType() {
|
||||||
if (!Array.isArray(this.fullConfig.feedback_type)) {
|
if (!Array.isArray(this.fullConfig.feedback_type)) {
|
||||||
this.fullConfig.feedback_type = [];
|
this.fullConfig.feedback_type = [];
|
||||||
@@ -1043,4 +954,4 @@
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
@@ -1,19 +1,23 @@
|
|||||||
<div class="register-advert ">
|
<div class="register-advert ">
|
||||||
<a href="regist.htm"><img class="img-responsive" src="/web/BlackFruit-web/assets/img/index/register@2x.png" alt=""></a>
|
<a href="regist.htm"><img class="img-responsive" src="/web/BlackFruit-web/assets/img/index/register@2x.png"
|
||||||
|
alt=""></a>
|
||||||
</div>
|
</div>
|
||||||
<div class=" section-promise">
|
<div class=" section-promise">
|
||||||
<div class="promise section-content section-p">
|
<div class="promise section-content section-p">
|
||||||
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-1.png"> <span class="ml-20">3天 无忧退款</span>
|
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-1.png"> <span class="ml-20">3天
|
||||||
|
无忧退款</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-2.png"> <span class="ml-20">0元 免费备案</span>
|
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-2.png"> <span class="ml-20">0元
|
||||||
|
免费备案</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-3.png"> <span class="ml-20">1V1 专属客服</span>
|
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-3.png"> <span class="ml-20">1V1
|
||||||
|
专属客服</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-4.png"> <span class="ml-20">7*24
|
<div class="promise-box"><img src="/web/BlackFruit-web/assets/img/index/promise-4.png"> <span class="ml-20">7*24
|
||||||
小时服务</span></div>
|
小时服务</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section-content section-p">
|
<footer class="section-content section-p">
|
||||||
|
|
||||||
|
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
@@ -76,68 +80,70 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-nav-box">
|
<div class="footer-nav-box">
|
||||||
<div class="footer-nav-head">其他</div>
|
<div class="footer-nav-head">其他</div>
|
||||||
<div class="footer-nav-cont">
|
<div class="footer-nav-cont">
|
||||||
<div class="footer-nav-item">
|
<div class="footer-nav-item">
|
||||||
<a class="link-hover" id="terms_service_url" href="{$data.terms_service_url|default='/agreement/service.html'}">用户协议</a>
|
<a class="link-hover" id="terms_service_url"
|
||||||
</div>
|
href="{$data.terms_service_url|default='/agreement/service.html'}">用户协议</a>
|
||||||
<div class="footer-nav-item">
|
</div>
|
||||||
<a class="link-hover" id="terms_privacy_url" href="{$data.terms_privacy_url|default='/agreement/privacy.html'}">隐私政策</a>
|
<div class="footer-nav-item">
|
||||||
</div>
|
<a class="link-hover" id="terms_privacy_url"
|
||||||
<div class="footer-nav-item"><a class="link-hover" href="/agreement.htm?id=26">Cookies政策</a></div>
|
href="{$data.terms_privacy_url|default='/agreement/privacy.html'}">隐私政策</a>
|
||||||
<div class="footer-nav-item"><a class="link-hover" href="/agreement.htm?id=27">法律声明</a></div>
|
</div>
|
||||||
</div>
|
<div class="footer-nav-item"><a class="link-hover" href="/agreement.htm?id=26">Cookies政策</a></div>
|
||||||
</div>
|
<div class="footer-nav-item"><a class="link-hover" href="/agreement.htm?id=27">法律声明</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-nav-right">
|
<div class="footer-nav-right">
|
||||||
<div class="footer-nav-box">
|
<div class="footer-nav-box">
|
||||||
<div class="footer-nav-head">联系我们</div>
|
<div class="footer-nav-head">联系我们</div>
|
||||||
<div class="footer-nav-cont">
|
<div class="footer-nav-cont">
|
||||||
<div class="footer-nav-item" id="enterprise_name">{$data.enterprise_name|default=''}</div>
|
<div class="footer-nav-item" id="enterprise_name">{$data.enterprise_name|default=''}</div>
|
||||||
<div class="footer-nav-item mt-20" id="enterprise_telephone">
|
<div class="footer-nav-item mt-20" id="enterprise_telephone">
|
||||||
{if !empty($data.enterprise_telephone)}联系电话:{$data.enterprise_telephone}{/if}
|
{if !empty($data.enterprise_telephone)}联系电话:{$data.enterprise_telephone}{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-nav-item" id="enterprise_mailbox">
|
<div class="footer-nav-item" id="enterprise_mailbox">
|
||||||
{if !empty($data.enterprise_mailbox)}联系邮箱:{$data.enterprise_mailbox}{/if}
|
{if !empty($data.enterprise_mailbox)}联系邮箱:{$data.enterprise_mailbox}{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="qr-code">
|
<div class="qr-code">
|
||||||
<img src="{$data.enterprise_qrcode|default=''}" alt="" id="enterprise_qrcode">
|
<img src="{$data.enterprise_qrcode|default=''}" alt="" id="enterprise_qrcode">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{if ( isset($data.friendly_link) && !empty($data.friendly_link) ) }
|
{if ( isset($data.friendly_link) && !empty($data.friendly_link) ) }
|
||||||
<div class="footer-link">
|
<div class="footer-link">
|
||||||
<span>友情链接:</span>
|
<span>友情链接:</span>
|
||||||
{foreach $data.friendly_link as $key=>$value}
|
{foreach $data.friendly_link as $key=>$value}
|
||||||
<a href={$value.url} target="_blank" rel="nofollow">{$value.name}</a>
|
<a href={$value.url} target="_blank" rel="nofollow">{$value.name}</a>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</div>
|
</div>
|
||||||
{else /}
|
{else /}
|
||||||
<div class="footer-link" id="footerLink">
|
<div class="footer-link" id="footerLink">
|
||||||
<span>友情链接:</span>
|
<span>友情链接:</span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="footer-record" id="footerRecord">
|
<div class="footer-record" id="footerRecord">
|
||||||
<div class="left-info">
|
<div class="left-info">
|
||||||
{if !empty($data.icp_info)}
|
{if !empty($data.icp_info)}
|
||||||
<a href="{$data.icp_info_link|default=''}" target="_blank" rel="nofollow">{$data.icp_info}</a>
|
<a href="{$data.icp_info_link|default=''}" target="_blank" rel="nofollow">{$data.icp_info}</a>
|
||||||
{/if}
|
{/if}
|
||||||
{if !empty($data.public_security_network_preparation)}
|
{if !empty($data.public_security_network_preparation)}
|
||||||
<a href="{$data.public_security_network_preparation_link|default=''}" target="_blank" rel="nofollow">
|
<a href="{$data.public_security_network_preparation_link|default=''}" target="_blank" rel="nofollow">
|
||||||
{$data.public_security_network_preparation}
|
{$data.public_security_network_preparation}
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
{if !empty($data.telecom_appreciation)}
|
{if !empty($data.telecom_appreciation)}
|
||||||
<span>{$data.telecom_appreciation}</span>
|
<span>{$data.telecom_appreciation}</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<span>{$data.copyright_info|default=''}</span>
|
<span>{$data.copyright_info|default=''}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</footer>
|
||||||
@@ -1,30 +1,31 @@
|
|||||||
<div class="nav-shadow">
|
<div class="nav-shadow">
|
||||||
<div class="section-content nav-header">
|
<nav class="section-content nav-header">
|
||||||
<div class="nav-left">
|
<div class="nav-left">
|
||||||
{php}
|
{php}
|
||||||
// 顶部导航与 Logo 走服务端渲染,兼容未配置时的默认值
|
// 顶部导航与 Logo 走服务端渲染,兼容未配置时的默认值
|
||||||
$__homeNav = isset($data['header_nav'][0])
|
$__homeNav = isset($data['header_nav'][0])
|
||||||
? $data['header_nav'][0]
|
? $data['header_nav'][0]
|
||||||
: ['file_address' => 'index.html', 'blank' => false];
|
: ['file_address' => 'index.html', 'blank' => false];
|
||||||
{/php}
|
{/php}
|
||||||
<div class="nav-icon">
|
<div class="nav-icon">
|
||||||
<a href="{$__homeNav.file_address|default='index.html'}" {if !empty($__homeNav.blank)}target="_blank"{/if}>
|
<a href="{$__homeNav.file_address|default='index.html'}" {if !empty($__homeNav.blank)}target="_blank" {/if}>
|
||||||
<img src="{$data.official_website_logo|default='/web/BlackFruit-web/assets/img/index/logo.png'}" alt="" id="logo">
|
<img src="{$data.official_website_logo|default='/web/BlackFruit-web/assets/img/index/logo.png'}" alt="Logo"
|
||||||
|
id="logo">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-menu">
|
<div class="nav-menu">
|
||||||
{if isset($data.header_nav) && !empty($data.header_nav)}
|
{if isset($data.header_nav) && !empty($data.header_nav)}
|
||||||
{foreach $data.header_nav as $k=>$item}
|
{foreach $data.header_nav as $k=>$item}
|
||||||
{if $k > 0}
|
{if $k > 0}
|
||||||
{if !empty($item.file_address)}
|
{if !empty($item.file_address)}
|
||||||
<a href="{$item.file_address}" {if !empty($item.blank)}target="_blank"{/if}>
|
<a href="{$item.file_address}" {if !empty($item.blank)}target="_blank" {/if}>
|
||||||
<div class="nav-item">{$item.name}</div>
|
<div class="nav-item">{$item.name}</div>
|
||||||
</a>
|
</a>
|
||||||
{else /}
|
{else /}
|
||||||
<div class="nav-item">{$item.name}</div>
|
<div class="nav-item">{$item.name}</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -33,18 +34,18 @@
|
|||||||
<span class="nav-divider nav-desktop-link">|</span>
|
<span class="nav-divider nav-desktop-link">|</span>
|
||||||
<a href="/home.htm" class="nav-text-link nav-desktop-link">控制台</a>
|
<a href="/home.htm" class="nav-text-link nav-desktop-link">控制台</a>
|
||||||
<span class="nav-divider nav-desktop-link">|</span>
|
<span class="nav-divider nav-desktop-link">|</span>
|
||||||
<div class="no-login nav-desktop-link" style="display: none;">
|
<div class="no-login nav-desktop-link d-none">
|
||||||
<span class="nav-text-link" id="loginBtn">登录</span>
|
<span class="nav-text-link" id="loginBtn">登录</span>
|
||||||
<span class="nav-divider">|</span>
|
<span class="nav-divider">|</span>
|
||||||
<div class="btn btn-normal" id="registBtn"><span class="regist-text">立即注册</span></div>
|
<div class="btn btn-normal" id="registBtn"><span class="regist-text">立即注册</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-in nav-desktop-link" style="display: none;">
|
<div class="login-in nav-desktop-link d-none">
|
||||||
<div id="headImg" class="head-img"></div>
|
<div id="headImg" class="head-img"></div>
|
||||||
<span class="ml-10 font-el1 name" id="username"></span>
|
<span class="ml-10 font-el1 name" id="username"></span>
|
||||||
<div class="login-menu animated fadeIn">
|
<div class="login-menu animated fadeIn">
|
||||||
<div class="login-menu-item" id="accountBtn">账户信息
|
<div class="login-menu-item" id="accountBtn">账户信息
|
||||||
<span class="no-real-name real-name" id="noCertification">未实名</span>
|
<span class="no-real-name real-name" id="noCertification">未实名</span>
|
||||||
<span class="real-name " id="isCertification" style="display: none;">已实名</span>
|
<span class="real-name d-none" id="isCertification">已实名</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-menu-item" id="financeBtn">未付款订单</div>
|
<div class="login-menu-item" id="financeBtn">未付款订单</div>
|
||||||
<div class="login-menu-item" id="ticketBtn">我的工单</div>
|
<div class="login-menu-item" id="ticketBtn">我的工单</div>
|
||||||
@@ -52,43 +53,43 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 移动端汉堡菜单按钮 -->
|
<!-- 移动端汉堡菜单按钮 -->
|
||||||
<div class="mobile-menu-toggle" id="mobileMenuToggle">
|
<button class="mobile-menu-toggle" id="mobileMenuToggle" aria-label="Toggle navigation">
|
||||||
<span></span>
|
<span></span>
|
||||||
<span></span>
|
<span></span>
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</nav>
|
||||||
|
|
||||||
<div class="nav-cont">
|
<div class="nav-cont">
|
||||||
<div class="section-content">
|
<div class="section-content">
|
||||||
{if isset($data.header_nav) && !empty($data.header_nav)}
|
{if isset($data.header_nav) && !empty($data.header_nav)}
|
||||||
{foreach $data.header_nav as $k=>$item}
|
{foreach $data.header_nav as $k=>$item}
|
||||||
{if $k > 0}
|
{if $k > 0}
|
||||||
{if isset($item.children) && !empty($item.children)}
|
{if isset($item.children) && !empty($item.children)}
|
||||||
<div class="nav-cont-menu animated slideInDown">
|
<div class="nav-cont-menu animated slideInDown">
|
||||||
<div class="nav-content">
|
<div class="nav-content">
|
||||||
{foreach $item.children as $child}
|
{foreach $item.children as $child}
|
||||||
<a href="{if !empty($child.file_address)}{$child.file_address}{else/}javascript:;{/if}"
|
<a href="{if !empty($child.file_address)}{$child.file_address}{else/}javascript:;{/if}" {if
|
||||||
{if !empty($child.blank)}target="_blank"{/if}>
|
!empty($child.blank)}target="_blank" {/if}>
|
||||||
<div class="nav-item-box">
|
<div class="nav-item-box">
|
||||||
{if !empty($child.icon)}
|
{if !empty($child.icon)}
|
||||||
<img src="{$child.icon}" alt="">
|
<img src="{$child.icon}" alt="">
|
||||||
{/if}
|
{/if}
|
||||||
<div class="item-box-title">
|
<div class="item-box-title">
|
||||||
<div class="title">{$child.name}</div>
|
<div class="title">{$child.name}</div>
|
||||||
<div class="desc">{$child.description}</div>
|
<div class="desc">{$child.description}</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
{/foreach}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{else /}
|
</div>
|
||||||
<div class="nav-cont-menu nav-cont-empty"></div>
|
</a>
|
||||||
{/if}
|
{/foreach}
|
||||||
{/if}
|
</div>
|
||||||
{/foreach}
|
</div>
|
||||||
|
{else /}
|
||||||
|
<div class="nav-cont-menu nav-cont-empty"></div>
|
||||||
|
{/if}
|
||||||
|
{/if}
|
||||||
|
{/foreach}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -111,19 +112,19 @@
|
|||||||
<div class="mobile-sidebar-body">
|
<div class="mobile-sidebar-body">
|
||||||
<!-- 主导航菜单 -->
|
<!-- 主导航菜单 -->
|
||||||
{if isset($data.header_nav) && !empty($data.header_nav)}
|
{if isset($data.header_nav) && !empty($data.header_nav)}
|
||||||
{foreach $data.header_nav as $k=>$item}
|
{foreach $data.header_nav as $k=>$item}
|
||||||
{if $k > 0}
|
{if $k > 0}
|
||||||
<div class="mobile-nav-item">
|
<div class="mobile-nav-item">
|
||||||
{if !empty($item.file_address)}
|
{if !empty($item.file_address)}
|
||||||
<a href="{$item.file_address}" {if !empty($item.blank)}target="_blank"{/if} class="mobile-nav-link">
|
<a href="{$item.file_address}" {if !empty($item.blank)}target="_blank" {/if} class="mobile-nav-link">
|
||||||
{$item.name}
|
{$item.name}
|
||||||
</a>
|
</a>
|
||||||
{else /}
|
{else /}
|
||||||
<div class="mobile-nav-link">{$item.name}</div>
|
<div class="mobile-nav-link">{$item.name}</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/if}
|
{/if}
|
||||||
<!-- 分隔线 -->
|
<!-- 分隔线 -->
|
||||||
<div class="mobile-nav-divider"></div>
|
<div class="mobile-nav-divider"></div>
|
||||||
@@ -248,4 +249,4 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user