This commit is contained in:
2025-07-01 11:28:00 +08:00
16 changed files with 106 additions and 41 deletions

View File

@@ -105,6 +105,7 @@ class BannerItem
'desc_txt_color', 'desc_txt_color',
'type', 'type',
'image', 'image',
'extra_image',
'video', 'video',
'link_to' => 'custom', 'link_to' => 'custom',
'link', 'link',
@@ -159,6 +160,7 @@ class BannerItem
'desc_txt_color', 'desc_txt_color',
'type', 'type',
'image', 'image',
'extra_image',
'video', 'video',
'link_to', 'link_to',
'link', 'link',
@@ -242,6 +244,7 @@ class BannerItem
'desc_txt_color' => '描述字体颜色', 'desc_txt_color' => '描述字体颜色',
'type' => '前台显示类型', 'type' => '前台显示类型',
'image' => '图片地址', 'image' => '图片地址',
'extra_image' => '额外图片地址',
'video' => '视频地址', 'video' => '视频地址',
'link_to' => '链接类型', 'link_to' => '链接类型',
'link' => '链接地址', 'link' => '链接地址',
@@ -274,6 +277,7 @@ class BannerItem
'item.desc_txt_color', 'item.desc_txt_color',
'item.type', 'item.type',
'item.image', 'item.image',
'item.extra_image',
'item.video', 'item.video',
'item.link_to', 'item.link_to',
'item.link', 'item.link',

View File

@@ -22,6 +22,7 @@ class SysBannerItemValidate extends Validate
'desc_txt_color' => 'max:7', 'desc_txt_color' => 'max:7',
'type' => 'in:image,video', 'type' => 'in:image,video',
'image' => 'max:255', 'image' => 'max:255',
'extra_image' => 'max:255',
'video' => 'max:255', 'video' => 'max:255',
'link_to' => 'requireIf:type,image|max:64|in:article,article_category,product,product_category,system_page,custom', 'link_to' => 'requireIf:type,image|max:64|in:article,article_category,product,product_category,system_page,custom',
'link' => 'max:255', 'link' => 'max:255',
@@ -47,6 +48,7 @@ class SysBannerItemValidate extends Validate
'desc_txt_color.max' => '描述字体颜色最多不能超过7个字符', 'desc_txt_color.max' => '描述字体颜色最多不能超过7个字符',
'type.in' => '显示类型必须是image或video', 'type.in' => '显示类型必须是image或video',
'image.max' => '图片地址最多不能超过255个字符', 'image.max' => '图片地址最多不能超过255个字符',
'extra_image.max' => '额外图片地址最多不能超过255个字符',
'video.max' => '视频地址最多不能超过255个字符', 'video.max' => '视频地址最多不能超过255个字符',
'link_to.requireIf' => '链接类型不能为空', 'link_to.requireIf' => '链接类型不能为空',
'link_to.max' => '链接类型最多不能超过64个字符', 'link_to.max' => '链接类型最多不能超过64个字符',

View File

@@ -25,6 +25,7 @@ class SysBannerItemBaseModel extends BaseModel
'desc_txt_color' => 'string', 'desc_txt_color' => 'string',
'type' => 'string', 'type' => 'string',
'image' => 'string', 'image' => 'string',
'extra_image' => 'string',
'video' => 'string', 'video' => 'string',
'link_to' => 'string', 'link_to' => 'string',
'link' => 'string', 'link' => 'string',

View File

@@ -45,14 +45,7 @@ class ContactUs extends Common
$banner_map[$v->unique_label] = $v; $banner_map[$v->unique_label] = $v;
} }
$focus_image = data_get($banner_map, 'BANNER_6805e3d32dcc2')?->items->first()?->toArray(); $focus_image = data_get($banner_map, 'BANNER_6805e3d32dcc2')?->items->first()?->toArray();
$info_datas = data_get($banner_map, 'BANNER_6806090c1838f')?->items->each(function($item) { $info_datas = data_get($banner_map, 'BANNER_6806090c1838f')?->items->toArray();
if (Str::contains($item->title, '<br/>')) {
$title = explode('<br/>', $item->title);
$item->title = $title[0];
$item->title_short = $title[1];
}
return $item;
})->toArray();
} }
View::assign('focus_image', $focus_image); View::assign('focus_image', $focus_image);
View::assign('info_datas', $info_datas); View::assign('info_datas', $info_datas);

View File

@@ -24,13 +24,13 @@
<div class="narskfit" {notempty name="item.link"}onclick="location.href='{$item.link}'"{/notempty}> <div class="narskfit" {notempty name="item.link"}onclick="location.href='{$item.link}'"{/notempty}>
<img src="{$item.image}" class="narskico-img" /> <img src="{$item.image}" class="narskico-img" />
<span class="narskf-title">{$item.title}</span> <span class="narskf-title">{$item.title}</span>
{notempty name="item.title_short"}
<span class="narskf-sm">{$item.title_short}</span>
{/notempty}
{notempty name="item.desc"} {notempty name="item.desc"}
{if condition="str_contains($item.desc, '<img')"} <span class="narskf-sm">{$item.desc|raw}</span>
<div class="narskfactive-ewm" style="display: none;">{$item.desc|raw}</div> {/notempty}
{/if} {notempty name="item.extra_image"}
<div class="narskfactive-ewm" style="display: none;">
<img src="{$item.extra_image}" alt="" />
</div>
{/notempty} {/notempty}
</div> </div>
{/volist} {/volist}

View File

@@ -18,8 +18,28 @@
<link rel="stylesheet" href="https://unpkg.com/swiper@9/swiper-bundle.min.css"> <link rel="stylesheet" href="https://unpkg.com/swiper@9/swiper-bundle.min.css">
<script type="text/javascript" src='https://code.jquery.com/jquery-3.6.0.min.js'></script> <script type="text/javascript" src='https://code.jquery.com/jquery-3.6.0.min.js'></script>
<script type="text/javascript" src="https://unpkg.com/swiper@9.4.1/swiper-bundle.min.js"></script> <script type="text/javascript" src="https://unpkg.com/swiper@9.4.1/swiper-bundle.min.js"></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.f2b211.com/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head> </head>
<body> <body>
<noscript>
<!-- Matomo Image Tracker-->
<img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.f2b211.com/matomo.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Matomo -->
</noscript>
{block name="header"} {block name="header"}
{include file="public/header"/} {include file="public/header"/}
{/block} {/block}

View File

@@ -49,8 +49,9 @@
{notempty name="contacts"} {notempty name="contacts"}
<h1 class="nhlpapp-title">{:lang_i18n('联系我们')}</h1> <h1 class="nhlpapp-title">{:lang_i18n('联系我们')}</h1>
<div class="nhlpapp-row"> <div class="nhlpapp-row">
{assign name="first_section" value=":array_splice($contacts, 0, count($contacts) - 3)"}
<div class="sec-1"> <div class="sec-1">
{volist name="contacts" id="co" key="idx" offset="0" length="4"} {volist name="first_section" id="co"}
<a class="nhlplxwmit" {notempty name="co.link"}href="{$co.link}"{/notempty}> <a class="nhlplxwmit" {notempty name="co.link"}href="{$co.link}"{/notempty}>
<img src="{$co.image}" class="lximg"> <img src="{$co.image}" class="lximg">
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span> <span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span>
@@ -61,7 +62,7 @@
{/volist} {/volist}
</div> </div>
<div class="sec-2"> <div class="sec-2">
{volist name="contacts" id="co" key="idx" offset="4"} {volist name="contacts" id="co"}
<a class="nhlplxwmit nhlplxwmit-w1" {notempty name="co.link"}href="{$co.link}"{/notempty}> <a class="nhlplxwmit nhlplxwmit-w1" {notempty name="co.link"}href="{$co.link}"{/notempty}>
<img src="{$co.image}" class="lximg"> <img src="{$co.image}" class="lximg">
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}<br></span> <span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}<br></span>

View File

@@ -14,6 +14,7 @@
<!-- 搜索 --> <!-- 搜索 -->
<form action="{:url('attachment/video')}" method="get"> <form action="{:url('attachment/video')}" method="get">
<div class="search_all"> <div class="search_all">
<input type="hidden" name="id" value="{$Request.get.id}" />
<input type="text" name="keyword" placeholder="{:lang_i18n('搜索')}" /> <input type="text" name="keyword" placeholder="{:lang_i18n('搜索')}" />
<button class="searchbtn" type="submit"><img src="__IMAGES__/search_blue.png" /></button> <button class="searchbtn" type="submit"><img src="__IMAGES__/search_blue.png" /></button>
</div> </div>

View File

@@ -24,16 +24,12 @@
<a class="narskfit" href="{$item.link}"> <a class="narskfit" href="{$item.link}">
<img src="{$item.image}" class="narskico-img" /> <img src="{$item.image}" class="narskico-img" />
<span class="narskf-title">{$item.title}</span> <span class="narskf-title">{$item.title}</span>
{notempty name="item.title_short"}
<span class="narskf-sm">{$item.title_short}</span>
{/notempty}
{notempty name="item.desc"} {notempty name="item.desc"}
{if condition="str_contains($item.desc, '<img')"} <span class="narskf-sm">{$item.desc|raw}</span>
{/notempty}
{notempty name="item.extra_image"}
<div class="narskfactive-ewm"> <div class="narskfactive-ewm">
{else/} <img src="{$item.extra_image}" alt="" />
<div class="narskf-sm narskf-font-26">
{/if}
{$item.desc|raw}
</div> </div>
{/notempty} {/notempty}
</a> </a>

View File

@@ -102,9 +102,31 @@
} }
}) })
</script> </script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.f2b211.com/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head> </head>
<body> <body>
<noscript>
<!-- Matomo Image Tracker-->
<img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.f2b211.com/matomo.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Matomo -->
</noscript>
{block name="header"} {block name="header"}
{include file="public/header"/} {include file="public/header"/}
{/block} {/block}

View File

@@ -14,8 +14,28 @@
<link rel="stylesheet" type="text/css" href="__CSS__/orico_footer.css" /> <link rel="stylesheet" type="text/css" href="__CSS__/orico_footer.css" />
{block name="style"}{/block} {block name="style"}{/block}
<script type="text/javascript" src='https://code.jquery.com/jquery-3.6.0.min.js'></script> <script type="text/javascript" src='https://code.jquery.com/jquery-3.6.0.min.js'></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.f2b211.com/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head> </head>
<body> <body>
<noscript>
<!-- Matomo Image Tracker-->
<img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.f2b211.com/matomo.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Matomo -->
</noscript>
{block name="header"} {block name="header"}
{include file="public/nas_header"/} {include file="public/nas_header"/}
{/block} {/block}

View File

@@ -57,33 +57,37 @@
<h1 class="lxwmtitle">{:lang_i18n('联系我们')}</h1> <h1 class="lxwmtitle">{:lang_i18n('联系我们')}</h1>
<div class="nhlp-row"> <div class="nhlp-row">
<div class="nhlp-row-content"> <div class="nhlp-row-content">
{volist name="contacts" id="co" key="idx" offset="0" length="3"} {assign name="fist_section" value=":array_splice($contacts, 0, 3)" /}
<a class="nhlplxwmit nhlplxwmit-w1" {notempty name="co.link"}href="{$co.link}"{/notempty} {eq name="idx" value="3"}style="margin-right: 0;"{/eq}> {volist name="fist_section" id="co"}
<a class="nhlplxwmit nhlplxwmit-w1" {notempty name="co.link"}href="{$co.link}"{/notempty}>
<img src="{$co.image}" class="lximg" /> <img src="{$co.image}" class="lximg" />
{if condition="!empty($co.desc) && str_contains($co.desc, '<img')"} {notempty name="co.extra_image"}
<img src="{:get_path_from_img_tag($co.desc)}" class="lxewmimg" /> <img src="{$co.extra_image}" class="lxewmimg" />
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span> {/notempty}
{else/}
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span> <span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span>
{notempty name="co.desc"}
<span class="t2" {:style(['color'=>$co.desc_txt_color])}>{$co.desc|raw}</span> <span class="t2" {:style(['color'=>$co.desc_txt_color])}>{$co.desc|raw}</span>
{/if} {/notempty}
</a> </a>
{/volist} {/volist}
</div> </div>
{assign name="second_section" value=":array_chunk($contacts, 4)" /}
{volist name="second_section" id="chunk"}
<div class="nhlp-row-content"> <div class="nhlp-row-content">
{volist name="contacts" id="co" key="idx" offset="3"} {volist name="chunk" id="co"}
<a class="nhlplxwmit nhlplxwmit-w2" {notempty name="co.link"}href="{$co.link}"{/notempty} {eq name="idx%4" value="0"}style="margin-right: 0;"{/eq}> <a class="nhlplxwmit nhlplxwmit-w2" {notempty name="co.link"}href="{$co.link}"{/notempty}>
<img src="{$co.image}" class="lximg" /> <img src="{$co.image}" class="lximg" />
{if condition="!empty($co.desc) && str_contains($co.desc, '<img')"} {notempty name="co.extra_image"}
<img src="{:get_path_from_img_tag($co.desc)}" class="lxewmimg" /> <img src="{$co.extra_image}" class="lxewmimg" />
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span> {/notempty}
{else/}
<span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span> <span class="t1" {:style(['color'=>$co.title_txt_color])}>{$co.title}</span>
{notempty name="co.desc"}
<span class="t2" {:style(['color'=>$co.desc_txt_color])}>{$co.desc|raw}</span> <span class="t2" {:style(['color'=>$co.desc_txt_color])}>{$co.desc|raw}</span>
{/if} {/notempty}
</a> </a>
{/volist} {/volist}
</div> </div>
{/volist}
</div> </div>
</div> </div>
{/notempty} {/notempty}

View File

@@ -33,7 +33,7 @@ class CreateArticleLeaveMessage extends Migrator
->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱']) ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
->addColumn('content', 'text', ['null' => false, 'comment' => '内容']) ->addColumn('content', 'text', ['null' => false, 'comment' => '内容'])
->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP']) ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP'])
->addColumn('user_agent', 'string', ['limit' => 255, 'null' => false, 'comment' => 'UserAgent']) ->addColumn('user_agent', 'string', ['limit' => 1024, 'null' => false, 'comment' => 'UserAgent'])
->addColumn('is_audited', 'boolean', ['null' => false, 'default' => 0, 'comment' => '0待审核,1已审核']) ->addColumn('is_audited', 'boolean', ['null' => false, 'default' => 0, 'comment' => '0待审核,1已审核'])
->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间']) ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间'])

View File

@@ -33,7 +33,7 @@ class CreateLeaveMessage extends Migrator
->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱']) ->addColumn('email', 'string', ['limit' => 128, 'null' => false, 'comment' => '邮箱'])
->addColumn('content', 'text', ['null' => false, 'comment' => '内容']) ->addColumn('content', 'text', ['null' => false, 'comment' => '内容'])
->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP']) ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP'])
->addColumn('user_agent', 'string', ['limit' => 255, 'null' => false, 'comment' => 'UserAgent']) ->addColumn('user_agent', 'string', ['limit' => 1024, 'null' => false, 'comment' => 'UserAgent'])
->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
->create(); ->create();
} }

View File

@@ -31,7 +31,7 @@ class CreateSysUserLoginLog extends Migrator
$table = $this->table('sys_user_login_log', ['engine' => 'MyISAM', 'comment' => '系统用户登录日志表']); $table = $this->table('sys_user_login_log', ['engine' => 'MyISAM', 'comment' => '系统用户登录日志表']);
$table->addColumn('user_id', 'integer', ['null' => false, 'comment' => '用户ID']) $table->addColumn('user_id', 'integer', ['null' => false, 'comment' => '用户ID'])
->addColumn('ip', 'integer', ['limit' => 11, 'signed' => false, 'null' => false, 'comment' => '登录IP']) ->addColumn('ip', 'integer', ['limit' => 11, 'signed' => false, 'null' => false, 'comment' => '登录IP'])
->addColumn('user_agent', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '登录设备UA信息']) ->addColumn('user_agent', 'string', ['limit' => 1024, 'null' => true, 'default' => null, 'comment' => '登录设备UA信息'])
->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间'])
->create(); ->create();
} }

View File

@@ -36,6 +36,7 @@ class CreateSysBannerItem extends Migrator
->addColumn('desc_txt_color', 'string', ['limit' => 7, 'null' => false, 'default' => '', 'comment' => '描述文本颜色']) ->addColumn('desc_txt_color', 'string', ['limit' => 7, 'null' => false, 'default' => '', 'comment' => '描述文本颜色'])
->addColumn('type', 'string', ['limit' => 16, 'null' => false, 'comment' => '类型: image为图片, video为视频']) ->addColumn('type', 'string', ['limit' => 16, 'null' => false, 'comment' => '类型: image为图片, video为视频'])
->addColumn('image', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '图片']) ->addColumn('image', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '图片'])
->addColumn('extra_image', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '额外的图片'])
->addColumn('video', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '视频']) ->addColumn('video', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '视频'])
->addColumn('link_to', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '链接到(类型): article:文章, article_category:文章分类, product:产品, product_category:产品分类, custom:自定义链接']) ->addColumn('link_to', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '链接到(类型): article:文章, article_category:文章分类, product:产品, product_category:产品分类, custom:自定义链接'])
->addColumn('link', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '链接']) ->addColumn('link', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '链接'])