yunzer/runtime/admin/temp/a7bfd508279dfa35c2e6ff0e3f27da40.php
2025-05-16 00:35:41 +08:00

497 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php /*a:2:{s:57:"E:\Demo\PHP\yunzer\app\admin\view\article\articlecate.php";i:1747325751;s:51:"E:\Demo\PHP\yunzer\app\admin\view\public\header.php";i:1746890051;}*/ ?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo htmlentities((string) $config['admin_name']); ?></title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css" media="all"/>
<link rel="stylesheet" type="text/css" href="/static/css/moban.css" media="all"/>
<link rel="stylesheet" type="text/css" href="/static/css/wangeditor.css" media="all"/>
<style type="text/css">
.header span{background:#009688;margin-left:30px;padding:10px;color:#ffffff;}
.header div{border-bottom:solid 2px #009688;margin-top: 8px;}
.header button{float:right;margin-top:-5px;}
.pagination {
display: inline-block;
padding-left: 0;
margin: 20px 0;
border-radius: 4px;
}
.pagination > li {
display: inline;
}
.pagination > li > a,
.pagination > li > span {
position: relative;
float: left;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
color: #337ab7;
text-decoration: none;
background-color: #fff;
border: 1px solid #ddd;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
margin-left: 0;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
z-index: 2;
color: #23527c;
background-color: #eee;
border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
z-index: 3;
color: #fff;
cursor: default;
background-color: #337ab7;
border-color: #337ab7;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
color: #777;
cursor: not-allowed;
background-color: #fff;
border-color: #ddd;
}
.close-img { background: url(/static/images/close_img.png); background-size: 20px 20px; width:20px; height: 20px; position: absolute; right: 5px; top: 5px; z-index: 2;}
</style>
<script type="text/javascript" src="/static/layui/layui.js"></script>
<script type="text/javascript">
layui.use(['layer','form','table','laydate','element','upload'],function(){
layer = layui.layer; // layui 弹框
form = layui.form; // layui form表单
table = layui.table; // layui 表格
laydate = layui.laydate; // layui 时间框
element = layui.element; // layui element
upload = layui.upload; // layui 上传
$ = layui.jquery; // layui jquery
})
</script>
</head>
<body style="padding:10px; box-sizing: border-box;">
<div class="config-container">
<div class="config-header" style="display:flex;justify-content: space-between;">
<div style="display: flex; align-items: center;">
<span>文章分类</span>
</div>
<div>
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm" onclick="add()">
<i class="layui-icon layui-icon-add-1"></i>添加
</button>
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" onclick="refresh()">
<i class="layui-icon layui-icon-refresh"></i>刷新
</button>
</div>
</div>
<div class="layui-row" style="margin-top: 15px;">
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">分类列表</div>
<div class="layui-card-body">
<div id="categoryList"></div>
</div>
</div>
</div>
<div class="layui-col-md4"">
<div class="layui-card">
<div class="layui-card-header">分类信息</div>
<div class="layui-card-body">
<div id="defaultTip" style="text-align: center; padding: 50px 0; color: #999;">
<i class="layui-icon layui-icon-face-surprised" style="font-size: 30px;"></i>
<p style="margin-top: 10px;">请选择左侧分类</p>
</div>
<form class="layui-form" lay-filter="categoryForm" style="display: none;">
<input type="hidden" name="id" id="categoryId">
<div class="layui-form-item">
<label class="layui-form-label">分类名称</label>
<div class="layui-input-block">
<input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">父级分类</label>
<div class="layui-input-block">
<select name="cid" lay-verify="required">
<option value="0">顶级分类</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面图片</label>
<div class="layui-input-block">
<input type="text" name="image" placeholder="请输入图片地址" autocomplete="off"
class="layui-input" id="imageInput">
<div class="layui-upload" style="margin-top: 20px;">
<div>
<button type="button" class="layui-btn" id="uploadImage">上传图片</button>
<span style="color: #999; margin-left: 10px;">建议尺寸250px*140px</span>
</div>
<div class="layui-upload-list">
<img class="layui-upload-img" id="imagePreview" style="margin-top: 10px;">
<i class="layui-icon layui-icon-close delete-image"
style="display: none; position: absolute; top: 0; right: 0; cursor: pointer; color: #FF5722;"></i>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label>
<div class="layui-input-block">
<input type="number" name="sort" value="0" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="禁用">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveCategory">保存</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<button type="button" class="layui-btn layui-btn-danger" id="deleteBtn"
style="display: none;">删除</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
layui.use(['layer', 'form', 'util', 'upload'], function () {
var layer = layui.layer;
var $ = layui.jquery;
var form = layui.form;
var util = layui.util;
var upload = layui.upload;
// 初始化分类列表
function initCategoryList() {
$.ajax({
url: '/admin/article/articlecate',
type: 'POST',
success: function (res) {
if (res.code === 0) {
var html = '';
res.data.forEach(function (item) {
html += renderCategory(item);
});
$('#categoryList').html(html);
bindEvents();
} else {
layer.msg('获取分类数据失败', { icon: 2 });
}
},
error: function () {
layer.msg('请求失败,请重试', { icon: 2 });
}
});
}
// 渲染分类
function renderCategory(category, level = 0) {
var html = '<div class="category-item" data-id="' + category.id + '">';
html += '<div class="category-header">';
html += '<span class="category-name">' + category.title + '</span>';
html += '<div class="category-actions">';
// 只有一级分类才显示添加按钮
if (level === 0) {
html += '<i class="layui-icon layui-icon-add-1 add-child" title="添加子分类"></i>';
}
html += '</div>';
html += '</div>';
if (category.children && category.children.length > 0) {
html += '<div class="category-children">';
category.children.forEach(function (child) {
html += renderCategory(child, level + 1);
});
html += '</div>';
}
html += '</div>';
return html;
}
// 绑定事件
function bindEvents() {
// 点击分类
$('.category-name').off('click').on('click', function () {
var id = $(this).closest('.category-item').data('id');
loadCategoryInfo(id);
});
// 点击添加子分类
$('.add-child').off('click').on('click', function (e) {
e.stopPropagation();
var id = $(this).closest('.category-item').data('id');
$('#categoryId').val('');
$('select[name="cid"]').val(id);
$('#deleteBtn').hide();
form.render();
});
}
// 加载分类信息
function loadCategoryInfo(id) {
$('#defaultTip').hide();
$('form.layui-form').show();
$.get('/admin/article/cateedit?id=' + id, function (res) {
if (res.code === 0) {
// 更新父级分类选项
var $select = $('select[name="cid"]');
$select.empty();
$select.append('<option value="0">顶级分类</option>');
res.data.parentOptions.forEach(function (item) {
$select.append('<option value="' + item.id + '">' + item.name + '</option>');
});
// 填充表单数据
form.val('categoryForm', res.data.info);
// 显示图片预览
if (res.data.info.image) {
$('#imagePreview').attr('src', res.data.info.image);
$('.delete-image').show();
} else {
$('#imagePreview').attr('src', '');
$('.delete-image').hide();
}
// 显示删除按钮
$('#deleteBtn').show();
// 重新渲染表单
form.render();
}
});
}
// 初始化
initCategoryList();
// 默认显示提示信息
$('#defaultTip').show();
$('form.layui-form').hide();
// 监听表单提交
form.on('submit(saveCategory)', function (data) {
var url = data.field.id ? '/admin/article/cateedit' : '/admin/article/cateadd';
$.post(url, data.field, function (res) {
if (res.code === 0) {
layer.msg(res.msg, { icon: 1 });
initCategoryList();
} else {
layer.msg(res.msg, { icon: 2 });
}
});
return false;
});
// 监听删除按钮点击
$('#deleteBtn').on('click', function () {
var id = $('input[name="id"]').val();
if (!id) return;
layer.confirm('确定要删除该分类吗?', {
btn: ['确定', '取消']
}, function () {
$.post('/admin/article/catedel', { id: id }, function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 1 });
initCategoryList();
// 重置表单
form.val('categoryForm', {
id: '',
name: '',
cid: '0',
image: '',
sort: 0,
status: 1
});
$('#imagePreview').attr('src', '');
$('#deleteBtn').hide();
form.render();
} else {
layer.msg(res.msg, { icon: 2 });
}
});
});
});
// 图片上传
upload.render({
elem: '#uploadImage',
url: '/admin/upload/image', // 替换为实际的上传接口
accept: 'images',
acceptMime: 'image/*',
done: function (res) {
if (res.code === 0) {
$('#imageInput').val(res.data.url);
$('#imagePreview').attr('src', res.data.url);
layer.msg('上传成功');
} else {
layer.msg('上传失败');
}
}
});
// 监听图片输入框变化
$('#imageInput').on('input', function () {
var url = $(this).val();
if (url) {
$('#imagePreview').attr('src', url);
$('.delete-image').show();
} else {
$('#imagePreview').attr('src', '');
$('.delete-image').hide();
}
});
// 监听图片删除按钮点击
$(document).on('click', '.delete-image', function () {
$('#imageInput').val('');
$('#imagePreview').attr('src', '');
$(this).hide();
});
});
function add() {
$('#defaultTip').hide();
$('form.layui-form').show();
// 重置表单
layui.form.val('categoryForm', {
id: '',
name: '',
cid: '0',
image: '',
sort: 0,
status: 1
});
$('#imagePreview').attr('src', '');
$('.delete-image').hide();
$('#deleteBtn').hide();
layui.form.render();
}
function refresh() {
initCategoryList();
}
</script>
<style>
.category-item {
margin: 5px 0;
}
.category-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
background-color: #f8f8f8;
border-radius: 2px;
cursor: pointer;
}
.category-header:hover {
background-color: #f2f2f2;
}
.category-name {
flex: 1;
font-size: 14px;
}
.category-actions {
display: none;
}
.category-header:hover .category-actions {
display: block;
}
.category-children {
margin-left: 20px;
padding-left: 10px;
border-left: 1px solid #e6e6e6;
}
.add-child {
color: #1E9FFF;
font-size: 14px;
cursor: pointer;
margin-left: 10px;
}
.add-child:hover {
color: #0C7CD5;
}
.layui-upload-list {
margin-top: 10px;
position: relative;
display: inline-block;
}
.delete-image {
position: absolute;
top: 0;
right: 0;
cursor: pointer;
color: #FF5722;
font-size: 20px;
background: rgba(255, 255, 255, 0.8);
border-radius: 50%;
padding: 2px;
}
.delete-image:hover {
color: #FF0000;
}
.layui-card {
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
}
.layui-col-md4{
width: 40%;
}
.layui-col-md6{
width: 60%;
}
</style>