Files
ulthon_information/view/admin/post_output/index.html
augushong 83a2bd48a2 feat(post): 新增手机图片排版与AI智能排版功能
- 新增手机图片排版功能,支持小红书/抖音尺寸输出
- 新增AI智能排版顾问,支持内容分析与优化推荐
- 新增AI供应商管理,支持多渠道配置与同步
- 新增文章输出管理页面,支持图片预览与批量下载
- 新增字体文件与排版样式配置
2026-05-01 12:23:17 +08:00

265 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{$post.title} - 输出管理</title>
<link rel="stylesheet" href="/static/lib/layui/css/layui.css">
<style>
.output-thumb-row {
display: none;
}
.output-thumb-row.show {
display: table-row;
}
.output-thumbs {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 10px 0;
}
.output-thumb-item {
position: relative;
width: 80px;
height: 107px;
border: 1px solid #e6e6e6;
border-radius: 4px;
overflow: hidden;
cursor: pointer;
transition: border-color 0.2s;
}
.output-thumb-item:hover {
border-color: #1e9fff;
}
.output-thumb-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
.output-thumb-item .thumb-page-num {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.5);
color: #fff;
text-align: center;
font-size: 11px;
line-height: 18px;
}
.output-thumbs-loading {
padding: 20px;
text-align: center;
color: #999;
}
.btn-view-images {
cursor: pointer;
}
</style>
</head>
<body>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-header">
<a href="{:url('post/index')}" class="layui-btn layui-btn-sm layui-btn-primary"><i
class="layui-icon layui-icon-return"></i> 返回</a>
<a href="{:url('post/phoneImage',['id'=>$post.id])}" class="layui-btn layui-btn-sm"><i
class="layui-icon layui-icon-add-1"></i> 新建排版</a>
<span style="margin-left: 15px;">文章: {$post.title}</span>
</div>
<div class="layui-card-body">
<table class="layui-table" lay-skin="line">
<colgroup>
<col width="100">
<col width="200">
<col width="80">
<col width="80">
<col width="160">
<col width="100">
<col>
</colgroup>
<thead>
<tr>
<th>ID</th>
<th>输出类型</th>
<th>状态</th>
<th>图片数</th>
<th>创建时间</th>
<th>操作人</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name="list" id="vo"}
<tr>
<td>{$vo.id}</td>
<td>{$vo.output_type_text}</td>
<td>{$vo.status_text}</td>
<td>{$vo.page_count}</td>
<td>{$vo.create_time|date='Y-m-d H:i'}</td>
<td>Admin</td>
<td>
<button class="layui-btn layui-btn-xs btn-view-images" data-id="{$vo.id}"
data-page-count="{$vo.page_count}">查看图片</button>
<a href="{:url('post/downloadPostOutputZip',['id'=>$vo.id])}"
class="layui-btn layui-btn-xs layui-btn-normal">下载ZIP</a>
<button class="layui-btn layui-btn-xs layui-btn-warm btn-regenerate"
data-id="{$vo.id}">重新生成</button>
<button class="layui-btn layui-btn-xs layui-btn-danger btn-delete"
data-id="{$vo.id}">删除</button>
</td>
</tr>
<tr class="output-thumb-row" id="thumbs-row-{$vo.id}">
<td colspan="7">
<div class="output-thumbs-loading">
<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>
加载中...
</div>
<div class="output-thumbs" id="thumbs-{$vo.id}" style="display:none;"></div>
</td>
</tr>
{/volist}
</tbody>
</table>
<div class="layui-page">{$list|raw}</div>
</div>
</div>
</div>
<script src="/static/lib/jquery/jquery-3.4.1.min.js"></script>
<script src="/static/lib/layui/layui.js"></script>
<script>
layui.use(['layer'], function () {
var layer = layui.layer;
// 查看图片 - 展开/收起缩略图
$(document).on('click', '.btn-view-images', function () {
var $btn = $(this);
var outputId = $btn.data('id');
var pageCount = parseInt($btn.data('page-count'), 10) || 0;
var $thumbRow = $('#thumbs-row-' + outputId);
var $thumbContainer = $('#thumbs-' + outputId);
// 切换显示
if ($thumbRow.hasClass('show')) {
$thumbRow.removeClass('show');
$btn.text('查看图片');
return;
}
// 如果已加载过图片,直接显示
if ($thumbContainer.children('.output-thumb-item').length > 0) {
$thumbRow.addClass('show');
$btn.text('收起图片');
return;
}
// 无图片数据
if (pageCount === 0) {
layer.msg('该输出暂无图片');
return;
}
// 加载图片列表
$thumbRow.addClass('show');
$btn.text('收起图片');
$thumbContainer.siblings('.output-thumbs-loading').show();
$thumbContainer.hide();
$.getJSON('/index.php/admin/post/getOutputFiles', { output_id: outputId }, function (res) {
$thumbContainer.siblings('.output-thumbs-loading').hide();
if (res.code !== 0 || !res.data || res.data.length === 0) {
$thumbContainer.html('<div style="color:#999;padding:10px;">暂无图片文件</div>').show();
return;
}
$thumbContainer.empty();
for (var i = 0; i < res.data.length; i++) {
var file = res.data[i];
var $item = $('<div class="output-thumb-item" data-full="' + file.file_url + '">' +
'<img src="' + file.file_url + '" alt="第' + file.page + '页">' +
'<div class="thumb-page-num">第' + file.page + '页</div>' +
'</div>');
$thumbContainer.append($item);
}
$thumbContainer.show();
}).fail(function () {
$thumbContainer.siblings('.output-thumbs-loading').hide();
$thumbContainer.html('<div style="color:#FF5722;padding:10px;">加载失败,请重试</div>').show();
});
});
// 点击缩略图查看大图
$(document).on('click', '.output-thumb-item', function () {
var imgUrl = $(this).data('full');
if (!imgUrl) return;
var pageText = $(this).find('.thumb-page-num').text() || '';
layer.open({
type: 1,
title: pageText,
area: ['auto', '90%'],
maxWidth: 600,
shadeClose: true,
content: '<div style="text-align:center;padding:10px;background:#f2f2f2;">' +
'<img src="' + imgUrl + '" style="max-width:100%;height:auto;" alt="' + pageText + '">' +
'</div>'
});
});
// 删除
$(document).on('click', '.btn-delete', function () {
var id = $(this).data('id');
var $btn = $(this);
layer.confirm('确定删除该输出记录?图片文件将一并删除。', function (index) {
$btn.prop('disabled', true).addClass('layui-btn-disabled');
$.post('{:url("post/deletePostOutput")}', { id: id }, function (res) {
if (res.code === 0) {
layer.msg('删除成功', { icon: 1 });
setTimeout(function () { location.reload(); }, 1000);
} else {
layer.msg(res.msg || '删除失败', { icon: 2 });
$btn.prop('disabled', false).removeClass('layui-btn-disabled');
}
}).fail(function () {
layer.msg('网络错误', { icon: 2 });
$btn.prop('disabled', false).removeClass('layui-btn-disabled');
});
layer.close(index);
});
});
// 重新生成
$(document).on('click', '.btn-regenerate', function () {
var id = $(this).data('id');
var $btn = $(this);
layer.confirm('重新生成将删除当前输出记录,确定继续?', function (index) {
$btn.prop('disabled', true).addClass('layui-btn-disabled');
$.post('{:url("post/regeneratePostOutput")}', { id: id }, function (res) {
if (res.code === 0) {
layer.msg('正在跳转...', { icon: 1 });
setTimeout(function () {
location.href = '{:url("post/phoneImage",["id"=>$post.id])}';
}, 500);
} else {
layer.msg(res.msg || '操作失败', { icon: 2 });
$btn.prop('disabled', false).removeClass('layui-btn-disabled');
}
}).fail(function () {
layer.msg('网络错误', { icon: 2 });
$btn.prop('disabled', false).removeClass('layui-btn-disabled');
});
layer.close(index);
});
});
});
</script>
</body>
</html>