chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
|
||||
<div class="layui-container">
|
||||
<div class="admin-title">添加分类</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" action="{:url('blog/backend.category/save')}" method="post">
|
||||
<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="pid">
|
||||
<option value="0">顶级分类</option>
|
||||
{volist name="categories" id="c"}
|
||||
<option value="{$c.id}">{$c.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类描述</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="description" placeholder="请输入分类描述" class="layui-textarea"></textarea>
|
||||
</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" placeholder="请输入排序值" autocomplete="off" class="layui-input">
|
||||
<div class="layui-form-mid layui-word-aux">数值越小越靠前</div>
|
||||
</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="categorySubmit">添加分类</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,59 @@
|
||||
|
||||
<div class="layui-container">
|
||||
<div class="admin-title">编辑分类</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" action="{:url('blog/backend.category/update', ['id' => $category.id])}" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" value="{$category.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="pid">
|
||||
<option value="0" {if $category.pid==0}selected{/if}>顶级分类</option>
|
||||
{volist name="categories" id="c"}
|
||||
<option value="{$c.id}" {if $category.pid==$c.id}selected{/if}>{$c.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类描述</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="description" placeholder="请输入分类描述" class="layui-textarea">{$category.description}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="sort" value="{$category.sort}" placeholder="请输入排序值" autocomplete="off" class="layui-input">
|
||||
<div class="layui-form-mid layui-word-aux">数值越小越靠前</div>
|
||||
</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="正常" {if $category.status==1}checked{/if}>
|
||||
<input type="radio" name="status" value="0" title="禁用" {if $category.status==0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="categorySubmit">更新分类</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,228 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<button class="layui-btn layui-btn-sm" id="addRoot">添加根分类</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger" id="batchDelete">批量删除</button>
|
||||
<button class="layui-btn layui-btn-sm" id="expandAll">展开全部</button>
|
||||
<button class="layui-btn layui-btn-sm" id="foldAll">折叠全部</button>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 行操作模板 -->
|
||||
<script type="text/html" id="dataBarTpl">
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="addChild">添加子分类</a>
|
||||
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete">删除</a>
|
||||
</script>
|
||||
|
||||
<!-- 新增/编辑 表单模板(弹窗内渲染) -->
|
||||
<script type="text/html" id="dataFormTpl">
|
||||
<div style="padding:15px;">
|
||||
<form class="layui-form" lay-filter="dataForm">
|
||||
<input type="hidden" name="id" value="{{ d.id || '' }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" value="{{ d.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">
|
||||
<textarea name="description" placeholder="请输入分类描述" class="layui-textarea">{{ d.description || '' }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级分类</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="pid" id="pidSelect"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="sort" value="{{ d.sort || 0 }}" placeholder="数值越小越靠前" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="status" value="1" {{ d.status == 1 ? 'checked' : '' }} lay-skin="switch" lay-text="正常|禁用">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="dataFormSubmit" id="dataFormSubmit">保存</button>
|
||||
<button type="button" class="layui-btn layui-btn-primary" id="cancelBtn">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['treeTable', 'layer', 'form', 'laytpl', 'http'], function () {
|
||||
var treeTable = layui.treeTable;
|
||||
var layer = layui.layer;
|
||||
var $ = layui.$;
|
||||
var form = layui.form;
|
||||
var laytpl = layui.laytpl;
|
||||
var http = layui.http;
|
||||
|
||||
var treeData = {$treeData|raw};
|
||||
var pmap = {};
|
||||
treeData.forEach(function (c) { pmap[c.id] = c; });
|
||||
|
||||
// 构建上级分类下拉(编辑时排除自身及其子孙节点,避免形成环)
|
||||
function buildPidOptions(selfId) {
|
||||
var html = '<option value="0">顶级分类</option>';
|
||||
treeData.forEach(function (c) {
|
||||
if (selfId && c.id === selfId) return;
|
||||
if (selfId) {
|
||||
var cur = pmap[c.id];
|
||||
while (cur && cur.pid) {
|
||||
if (cur.pid == selfId) return;
|
||||
cur = pmap[cur.pid];
|
||||
}
|
||||
}
|
||||
html += '<option value="' + c.id + '">' + c.title + '</option>';
|
||||
});
|
||||
return html;
|
||||
}
|
||||
|
||||
var renderTable = function () {
|
||||
treeTable.render({
|
||||
elem: '#dataTable',
|
||||
data: treeData,
|
||||
tree: {
|
||||
customName: {
|
||||
isParent: "is_parent",
|
||||
name: "title",
|
||||
id: "id",
|
||||
pid: "pid"
|
||||
},
|
||||
data: { isSimpleData: true, rootPid: 0 },
|
||||
view: { showIcon: false }
|
||||
},
|
||||
cols: [[
|
||||
{ type: 'checkbox', fixed: 'left' },
|
||||
{ field: 'id', title: 'ID', width: 80 },
|
||||
{ field: 'title', title: '分类名称', minWidth: 160 },
|
||||
{ field: 'owner', title: '归属', width: 150 },
|
||||
{ field: 'description', title: '描述', minWidth: 160 },
|
||||
{ field: 'articles_count', title: '文章数', width: 90 },
|
||||
{ field: 'sort', title: '排序', width: 80, sort: true },
|
||||
{
|
||||
field: 'status', title: '状态', width: 90, templet: function (d) {
|
||||
return d.status == 1
|
||||
? '<span class="layui-badge layui-bg-blue">正常</span>'
|
||||
: '<span class="layui-badge layui-bg-gray">禁用</span>';
|
||||
}
|
||||
},
|
||||
{ title: '操作', width: 210, align: 'center', toolbar: '#dataBarTpl' }
|
||||
]],
|
||||
page: false,
|
||||
skin: 'line'
|
||||
});
|
||||
};
|
||||
renderTable();
|
||||
|
||||
// 展开 / 折叠全部
|
||||
$('#expandAll').click(function () { treeTable.expandAll('#dataTable'); });
|
||||
$('#foldAll').click(function () { treeTable.foldAll('#dataTable'); });
|
||||
|
||||
// 批量删除
|
||||
$('#batchDelete').click(function () {
|
||||
var checkData = treeTable.checkStatus('dataTable').data;
|
||||
if (!checkData.length) {
|
||||
return layer.msg('请选择要删除的分类');
|
||||
}
|
||||
var ids = checkData.map(function (item) { return item.id; });
|
||||
layer.confirm('确定删除选中的 ' + ids.length + ' 个分类吗?', function (index) {
|
||||
$.post('{:url("blog/backend.category/batchDelete")}', { ids: ids.join(',') }, function (res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.msg, { icon: 1 }, function () { location.reload(); });
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 });
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
});
|
||||
});
|
||||
|
||||
// 新增 / 编辑 弹窗
|
||||
function openForm(data) {
|
||||
data = data || {};
|
||||
var formHtml = laytpl($('#dataFormTpl').html()).render(data);
|
||||
layer.open({
|
||||
title: data.id ? '编辑分类' : (data.pid ? '添加子分类' : '添加分类'),
|
||||
content: formHtml,
|
||||
anim: 'slideLeft',
|
||||
offset: 'r',
|
||||
area: ['480px', '98%'],
|
||||
shade: 0.1,
|
||||
shadeClose: true,
|
||||
btn: ['保存', '取消'],
|
||||
success: function (layero, index) {
|
||||
$('#pidSelect').html(buildPidOptions(data.id));
|
||||
if (data.pid) { $('#pidSelect').val(data.pid); }
|
||||
form.render('select');
|
||||
},
|
||||
yes: function (index, layero) {
|
||||
layero.contents().find('#dataFormSubmit').trigger('click');
|
||||
},
|
||||
btn2: function (index) { layer.close(index); }
|
||||
});
|
||||
}
|
||||
|
||||
// 表单提交:仅绑定一次(layui form submit 为事件委托,弹窗内同 lay-filter 表单均可触发)
|
||||
form.on('submit(dataFormSubmit)', function (elem) {
|
||||
var field = elem.field;
|
||||
var isEdit = !!field.id;
|
||||
var url = isEdit
|
||||
? '{:url("blog/backend.category/update")}'
|
||||
: '{:url("blog/backend.category/save")}';
|
||||
var postData = $.extend({}, field);
|
||||
postData.status = field.status ? 1 : 0;
|
||||
if (isEdit) { postData.id = field.id; }
|
||||
http.post(url, postData).then(function (res) {
|
||||
if (res.code === 1) {
|
||||
layer.closeAll('dialog');
|
||||
layer.msg(res.msg, { icon: 1 });
|
||||
setTimeout(function () { location.reload(); }, 500);
|
||||
} else {
|
||||
layer.msg(res.msg || '操作失败', { icon: 2 });
|
||||
}
|
||||
}).catch(function () { layer.msg('请求失败,请重试', { icon: 2 }); });
|
||||
return false;
|
||||
});
|
||||
|
||||
// 行操作
|
||||
treeTable.on('tool(dataTable)', function (obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'edit') {
|
||||
openForm(data);
|
||||
} else if (obj.event === 'addChild') {
|
||||
openForm({ pid: data.id, sort: 0, status: 1 });
|
||||
} else if (obj.event === 'delete') {
|
||||
layer.confirm('确定要删除该分类吗?', function (index) {
|
||||
$.post('{:url("blog/backend.category/delete")}', { id: data.id }, function (res) {
|
||||
if (res.code === 1) {
|
||||
layer.msg(res.msg, { icon: 1 }, function () { location.reload(); });
|
||||
} else {
|
||||
layer.msg(res.msg, { icon: 2 });
|
||||
}
|
||||
});
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 添加根分类
|
||||
$('#addRoot').click(function () {
|
||||
openForm({ pid: 0, sort: 0, status: 1 });
|
||||
});
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user