|
|
@@ -210,7 +210,10 @@
|
|
|
<div class="search-box">
|
|
|
<input type="text" id="keywordInput" placeholder="搜索" value="{$keyword|default=''}">
|
|
|
<input type="hidden" id="typeFilter" value="{$type|default=''}">
|
|
|
- <button id="searchBtn" type="button">查询</button>
|
|
|
+ <input type="hidden" id="styleFilter" value="{$style|default=''}">
|
|
|
+ <button id="searchBtn" type="button">
|
|
|
+ <span class="icons search-icon"></span>
|
|
|
+ 搜索</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -219,11 +222,10 @@
|
|
|
<div class="filter-options">
|
|
|
<div class="filter-group">
|
|
|
<label>风格:</label>
|
|
|
- <span {if condition="empty($style)"}style="background-color: #e9ecef;"{/if}>全部</span>
|
|
|
- <span>动漫</span>
|
|
|
- <span>油画</span>
|
|
|
- <span>风景</span>
|
|
|
- <span>人像</span>
|
|
|
+ <span id="styleAll" {if condition="empty($style)"}style="background-color: #e9ecef; color: #007bff;"{else}style="color: #333;"{/if} onclick="filterByStyle('')">全部</span>
|
|
|
+ {volist name="styleList" id="styleItem"}
|
|
|
+ <span id="style{$styleItem}" {if condition="$style eq $styleItem"}style="background-color: #e9ecef; color: #007bff;"{else}style="color: #333;"{/if} onclick="filterByStyle('{$styleItem}')">{$styleItem}</span>
|
|
|
+ {/volist}
|
|
|
</div>
|
|
|
<div class="filter-group">
|
|
|
<label>模版类型:</label>
|
|
|
@@ -240,11 +242,11 @@
|
|
|
<div class="template-card">
|
|
|
<div class="template-thumbnail">
|
|
|
{if condition="$template.type eq '文生图'"}
|
|
|
- <a href="{:url('user/diagrams_list', ['id' => $template.id])}">
|
|
|
+ <a href="/index/user/diagrams_list/id/{$template.id}.html">
|
|
|
<img src="{$template.template_image_url}" alt="{$template.template_name}" onerror="this.src=''; this.alt='图片加载失败';">
|
|
|
</a>
|
|
|
{elseif condition="$template.type eq '文生视频'"}
|
|
|
- <a href="{:url('user/diagrams_list', ['id' => $template.id])}">
|
|
|
+ <a href="/index/user/diagrams_list/id/{$template.id}.html">
|
|
|
<video src="{$template.template_image_url}" alt="{$template.template_name}" controls muted></video>
|
|
|
</a>
|
|
|
{/if}
|
|
|
@@ -261,31 +263,31 @@
|
|
|
</div>
|
|
|
</section>
|
|
|
|
|
|
- <!-- 大图查看容器 -->
|
|
|
- <div id="largeViewContainer">
|
|
|
- <div id="largeMediaContent"></div>
|
|
|
- </div>
|
|
|
+
|
|
|
|
|
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
|
|
<script>
|
|
|
// 初始化变量
|
|
|
let currentKeyword = '{$keyword|default=\'\'}';
|
|
|
let currentType = '{$type|default=\'\'}';
|
|
|
+ let currentStyle = '{$style|default=\'\'}';
|
|
|
|
|
|
// 搜索函数
|
|
|
function searchTemplates() {
|
|
|
- // 获取当前的关键词和类型
|
|
|
+ // 获取当前的关键词、类型和风格
|
|
|
const keyword = $('#keywordInput').val().trim();
|
|
|
const type = $('#typeFilter').val();
|
|
|
+ const style = $('#styleFilter').val();
|
|
|
|
|
|
// 如果参数没有变化,不发送请求
|
|
|
- if (keyword === currentKeyword && type === currentType) {
|
|
|
+ if (keyword === currentKeyword && type === currentType && style === currentStyle) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 更新当前参数
|
|
|
currentKeyword = keyword;
|
|
|
currentType = type;
|
|
|
+ currentStyle = style;
|
|
|
|
|
|
// 发送AJAX请求
|
|
|
$.ajax({
|
|
|
@@ -293,7 +295,8 @@
|
|
|
type: 'GET',
|
|
|
data: {
|
|
|
keyword: keyword,
|
|
|
- type: type
|
|
|
+ type: type,
|
|
|
+ style: style
|
|
|
},
|
|
|
dataType: 'json',
|
|
|
success: function(response) {
|
|
|
@@ -326,21 +329,23 @@
|
|
|
let mediaElement;
|
|
|
// 根据类型创建媒体元素
|
|
|
if (template.type === '文生图') {
|
|
|
- mediaElement = `<img src="${template.template_image_url}" alt="${template.template_name}" onclick="showMedia('${template.template_image_url}', '${template.type}')" onerror="this.src=''; this.alt='图片加载失败';">`;
|
|
|
+ mediaElement = `<img src="${template.template_image_url}" alt="${template.template_name}" onerror="this.src=''; this.alt='图片加载失败';">`;
|
|
|
} else if (template.type === '文生视频') {
|
|
|
- mediaElement = `<video src="${template.template_image_url}" alt="${template.template_name}" controls muted onclick="showMedia('${template.template_image_url}', '${template.type}')"></video>`;
|
|
|
+ mediaElement = `<video src="${template.template_image_url}" alt="${template.template_name}" controls muted></video>`;
|
|
|
}
|
|
|
|
|
|
// 创建模板卡片
|
|
|
const templateCard = `
|
|
|
<div class="template-card">
|
|
|
<div class="template-thumbnail">
|
|
|
- ${mediaElement}
|
|
|
+ <a href="/index/user/diagrams_list/id/${template.id}.html">
|
|
|
+ ${mediaElement}
|
|
|
+ </a>
|
|
|
</div>
|
|
|
<div class="template-info">
|
|
|
<div class="template-name">${template.template_name}</div>
|
|
|
<div class="template-meta">
|
|
|
- <span>${template.type === '文生图' ? '图片' : '视频'}</span>
|
|
|
+ <span style="color: black">${template.nickname || '未知用户'}</span>
|
|
|
<span>免费</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -370,6 +375,25 @@
|
|
|
searchTemplates();
|
|
|
}
|
|
|
|
|
|
+ // 风格筛选函数
|
|
|
+ function filterByStyle(style) {
|
|
|
+ // 更新风格筛选器的值
|
|
|
+ $('#styleFilter').val(style);
|
|
|
+
|
|
|
+ // 更新风格筛选按钮的样式
|
|
|
+ // 先重置所有风格按钮的样式
|
|
|
+ $('.filter-group span[id^="style"]').css({'background-color': '', 'color': '#333'});
|
|
|
+ // 然后设置选中的按钮样式
|
|
|
+ if (style === '') {
|
|
|
+ $('#styleAll').css({'background-color': '#e9ecef', 'color': '#007bff'});
|
|
|
+ } else {
|
|
|
+ $('#style' + style).css({'background-color': '#e9ecef', 'color': '#007bff'});
|
|
|
+ }
|
|
|
+
|
|
|
+ // 执行搜索
|
|
|
+ searchTemplates();
|
|
|
+ }
|
|
|
+
|
|
|
// 搜索按钮点击事件
|
|
|
$('#searchBtn').click(function() {
|
|
|
searchTemplates();
|
|
|
@@ -390,50 +414,7 @@
|
|
|
searchTimer = setTimeout(searchTemplates, 300);
|
|
|
});
|
|
|
|
|
|
- // 图片/视频放大查看功能
|
|
|
- function showMedia(url, type) {
|
|
|
- const container = document.getElementById('largeViewContainer');
|
|
|
- const content = document.getElementById('largeMediaContent');
|
|
|
-
|
|
|
- // 清空容器
|
|
|
- content.innerHTML = '';
|
|
|
|
|
|
- // 创建媒体元素
|
|
|
- if (type === '文生图') {
|
|
|
- const img = document.createElement('img');
|
|
|
- img.src = url;
|
|
|
- img.alt = '大图查看';
|
|
|
- content.appendChild(img);
|
|
|
- } else if (type === '文生视频') {
|
|
|
- const video = document.createElement('video');
|
|
|
- video.src = url;
|
|
|
- video.controls = true;
|
|
|
- content.appendChild(video);
|
|
|
- }
|
|
|
-
|
|
|
- // 显示大图查看容器
|
|
|
- container.style.display = 'flex';
|
|
|
- }
|
|
|
-
|
|
|
- // 关闭大图查看
|
|
|
- function closeLargeView() {
|
|
|
- document.getElementById('largeViewContainer').style.display = 'none';
|
|
|
- }
|
|
|
-
|
|
|
- // 点击大图容器关闭
|
|
|
- document.getElementById('largeViewContainer').addEventListener('click', function(event) {
|
|
|
- // 只有点击容器本身才关闭,避免点击媒体元素也关闭
|
|
|
- if (event.target === this) {
|
|
|
- closeLargeView();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // 按ESC键关闭大图查看
|
|
|
- document.addEventListener('keydown', function(event) {
|
|
|
- if (event.key === 'Escape') {
|
|
|
- closeLargeView();
|
|
|
- }
|
|
|
- });
|
|
|
</script>
|
|
|
</body>
|
|
|
</html>
|