chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">添加版块</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" id="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-block"><input name="name" class="layui-input" lay-verify="required"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标识</label>
|
||||
<div class="layui-input-block"><input name="slug" class="layui-input" lay-verify="required"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图标</label>
|
||||
<div class="layui-input-block"><input name="icon" class="layui-input"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">简介</label>
|
||||
<div class="layui-input-block"><input name="description" class="layui-input"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block"><input 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">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form','jquery'], function(){
|
||||
var form = layui.form, $ = layui.jquery;
|
||||
form.on('submit(save)', function(data){
|
||||
$.post('/forum/backend/board/save', data.field, function(res){
|
||||
if (res.code === 0) { location.href = '/forum/backend/board'; }
|
||||
else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,50 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">编辑版块</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" id="form">
|
||||
<input type="hidden" name="id" value="{$row.id}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-block"><input name="name" value="{$row.name}" class="layui-input" lay-verify="required"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标识</label>
|
||||
<div class="layui-input-block"><input name="slug" value="{$row.slug}" class="layui-input" lay-verify="required"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图标</label>
|
||||
<div class="layui-input-block"><input name="icon" value="{$row.icon}" class="layui-input"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">简介</label>
|
||||
<div class="layui-input-block"><input name="description" value="{$row.description}" class="layui-input"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block"><input name="sort" value="{$row.sort}" 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="启用" {if $row.status==1}checked{/if}>
|
||||
<input type="radio" name="status" value="0" title="禁用" {if $row.status==0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form','jquery'], function(){
|
||||
var form = layui.form, $ = layui.jquery;
|
||||
form.on('submit(save)', function(data){
|
||||
$.post('/forum/backend/board/update/{$row.id}', data.field, function(res){
|
||||
if (res.code === 0) { location.href = '/forum/backend/board'; }
|
||||
else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,42 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
版块管理
|
||||
<a href="/forum/backend/board/add" class="layui-btn layui-btn-sm layui-btn-normal" style="float:right;">添加版块</a>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr><th>ID</th><th>名称</th><th>标识</th><th>帖子数</th><th>排序</th><th>状态</th><th>操作</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{volist name="list" id="b"}
|
||||
<tr>
|
||||
<td>{$b.id}</td>
|
||||
<td>{$b.name}</td>
|
||||
<td>{$b.slug}</td>
|
||||
<td>{$b.topic_count}</td>
|
||||
<td>{$b.sort}</td>
|
||||
<td>{if $b.status==1}启用{else}禁用{/if}</td>
|
||||
<td>
|
||||
<a href="/forum/backend/board/edit/{$b.id}" class="layui-btn layui-btn-xs">编辑</a>
|
||||
<button class="layui-btn layui-btn-xs layui-btn-danger" data-del="{$b.id}">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['jquery'], function(){
|
||||
var $ = layui.jquery;
|
||||
$('[data-del]').on('click', function(){
|
||||
var id = $(this).data('del');
|
||||
layer.confirm('确认删除?', function(){
|
||||
$.post('/forum/backend/board/delete/'+id, {}, function(res){
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,102 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">编辑器配置(UEditor)</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" lay-filter="editorForm">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上传目录</label>
|
||||
<div class="layui-input-inline" style="width:360px;">
|
||||
<input type="text" name="editor_upload_dir" value="{$cfg.editor_upload_dir}" class="layui-input" placeholder="相对 public/ 的目录">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">图片/附件/视频均存放于此目录下(按类型分子目录)</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图片类型</label>
|
||||
<div class="layui-input-inline" style="width:360px;">
|
||||
<input type="text" name="editor_image_ext" value="{$cfg.editor_image_ext}" class="layui-input" placeholder="逗号分隔,不含点">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">允许上传的图片扩展名</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">图片大小(MB)</label>
|
||||
<div class="layui-input-inline" style="width:160px;">
|
||||
<input type="number" name="editor_image_size" value="{$cfg.editor_image_size}" class="layui-input" min="1" step="1">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">单张图片最大体积</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">附件类型</label>
|
||||
<div class="layui-input-inline" style="width:360px;">
|
||||
<input type="text" name="editor_file_ext" value="{$cfg.editor_file_ext}" class="layui-input" placeholder="逗号分隔,不含点">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">允许上传的附件扩展名</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">附件大小(MB)</label>
|
||||
<div class="layui-input-inline" style="width:160px;">
|
||||
<input type="number" name="editor_file_size" value="{$cfg.editor_file_size}" class="layui-input" min="1" step="1">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">单个附件最大体积</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">视频类型</label>
|
||||
<div class="layui-input-inline" style="width:360px;">
|
||||
<input type="text" name="editor_video_ext" value="{$cfg.editor_video_ext}" class="layui-input" placeholder="逗号分隔,不含点">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">允许上传的视频扩展名</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">视频大小(MB)</label>
|
||||
<div class="layui-input-inline" style="width:160px;">
|
||||
<input type="number" name="editor_video_size" value="{$cfg.editor_video_size}" class="layui-input" min="1" step="1">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">单个视频最大体积</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">远程图片抓取</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="editor_catch_image" value="1" {if $cfg.editor_catch_image == 1}checked{/if} lay-skin="switch" lay-text="开启|关闭">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">粘贴 Word / 网页时是否把外链图落地到本地</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">初始高度(px)</label>
|
||||
<div class="layui-input-inline" style="width:160px;">
|
||||
<input type="number" name="editor_height" value="{$cfg.editor_height}" class="layui-input" min="100" step="20">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">发帖页编辑器默认高度</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="saveEditor">保存配置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form', 'jquery', 'layer'], function(){
|
||||
var form = layui.form, $ = layui.jquery, layer = layui.layer;
|
||||
form.on('submit(saveEditor)', function(data){
|
||||
// 开关未勾选时浏览器不提交该字段,这里补齐
|
||||
if (!data.field.editor_catch_image) { data.field.editor_catch_image = 0; }
|
||||
$.post('/forum/backend/editor/save', data.field, function(res){
|
||||
if (res.code === 0) {
|
||||
layer.msg('保存成功', {icon:1});
|
||||
setTimeout(function(){ location.reload(); }, 800);
|
||||
} else {
|
||||
layer.msg(res.message || '保存失败');
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* @Author: YwxApp <ywx@ywxapp.cn>
|
||||
* @Date: 2026-08-02 01:10:36
|
||||
* @LastEditors: YwxApp <ywx@ywxapp.cn>
|
||||
* @LastEditTime: 2026-08-03 23:40:59
|
||||
* @Description:
|
||||
* @FilePath: \ywxapp_dev\addon\forum\view\backend\reply\index.html
|
||||
* @CustomString: Copyright (c) 2026 YwxApp
|
||||
-->
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">回复管理</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" lay-filter="searchForm">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<input type="text" name="keyword" placeholder="回复内容关键词" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn" lay-submit lay-filter="searchBtn">搜索</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="dataBar">
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">删除</a>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['table', 'jquery', 'layer', 'form'], function () {
|
||||
var table = layui.table, $ = layui.jquery, layer = layui.layer, form = layui.form;
|
||||
|
||||
var dataTable = table.render({
|
||||
elem: '#dataTable',
|
||||
url: 'index',
|
||||
page: true,
|
||||
limit: 20,
|
||||
cols: [[
|
||||
{ field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left' },
|
||||
{ field: 'topic_id', title: '帖子', width: 90, templet: function (d) {
|
||||
return '<a href="/forum/topic/' + d.topic_id + '" target="_blank">#' + d.topic_id + '</a>';
|
||||
} },
|
||||
{ field: 'user_name', title: '用户', width: 120, templet: function (d) {
|
||||
return d.user_name || ('UID:' + d.user_id);
|
||||
} },
|
||||
{ field: 'floor', title: '楼层', width: 80 },
|
||||
{ field: 'content_preview', title: '内容', minWidth: 200 },
|
||||
{ field: 'create_at', title: '时间', width: 170, templet: function (d) {
|
||||
return d.create_at ? layui.util.toDateString(d.create_at * 1000, 'yyyy-MM-dd HH:mm') : '';
|
||||
} },
|
||||
{ title: '操作', width: 80, align: 'center', toolbar: '#dataBar', fixed: 'right' }
|
||||
]]
|
||||
});
|
||||
|
||||
// 搜索
|
||||
form.on('submit(searchBtn)', function (data) {
|
||||
dataTable.reload({
|
||||
where: data.field,
|
||||
page: { curr: 1 }
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
// 工具条事件
|
||||
table.on('tool(dataTable)', function (obj) {
|
||||
var data = obj.data;
|
||||
if (obj.event === 'delete') {
|
||||
layer.confirm('确认删除?', function (index) {
|
||||
layer.close(index);
|
||||
$.post('delete', { id: data.id }, function (res) {
|
||||
if (res.code === 0) {
|
||||
layer.msg('删除成功', { icon: 1 });
|
||||
dataTable.reload();
|
||||
} else {
|
||||
layer.msg(res.message || '删除失败');
|
||||
}
|
||||
}, 'json');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,41 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
标签管理
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" id="addTag" style="float:right;">添加标签</button>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table">
|
||||
<thead><tr><th>ID</th><th>名称</th><th>使用数</th><th>操作</th></tr></thead>
|
||||
<tbody>
|
||||
{volist name="list" id="t"}
|
||||
<tr>
|
||||
<td>{$t.id}</td>
|
||||
<td>{$t.name}</td>
|
||||
<td>{$t.topic_count}</td>
|
||||
<td><button class="layui-btn layui-btn-xs layui-btn-danger" data-del="{$t.id}">删除</button></td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['jquery','layer'], function(){
|
||||
var $ = layui.jquery, layer = layui.layer;
|
||||
$('#addTag').on('click', function(){
|
||||
layer.prompt({title:'输入标签名称'}, function(val, index){
|
||||
$.post('/forum/backend/tag/save', {name:val}, function(res){
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
});
|
||||
$('[data-del]').on('click', function(){
|
||||
var id = $(this).data('del');
|
||||
layer.confirm('确认删除?', function(){
|
||||
$.post('/forum/backend/tag/delete/'+id, {}, function(res){
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,72 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">编辑帖子</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form" id="form">
|
||||
<input type="hidden" name="id" value="{$row.id}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版块</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="board_id">
|
||||
{volist name="boards" id="b"}
|
||||
<option value="{$b.id}" {if $row.board_id==$b.id}selected{/if}>{$b.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type">
|
||||
{foreach $typeMap as $k=>$v}
|
||||
<option value="{$k}" {if $row.type==$k}selected{/if}>{$v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标题</label>
|
||||
<div class="layui-input-block"><input name="title" value="{$row.title}" class="layui-input" lay-verify="required"></div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block"><textarea name="content" class="layui-textarea" style="min-height:200px;">{$row.content}</textarea></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">置顶</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_top" value="1" title="是" {if $row.is_top==1}checked{/if}>
|
||||
<input type="radio" name="is_top" value="0" title="否" {if $row.is_top==0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">加精</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_essence" value="1" title="是" {if $row.is_essence==1}checked{/if}>
|
||||
<input type="radio" name="is_essence" value="0" title="否" {if $row.is_essence==0}checked{/if}>
|
||||
</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 $row.status==1}checked{/if}>
|
||||
<input type="radio" name="status" value="0" title="待审" {if $row.status==0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form','jquery'], function(){
|
||||
var form = layui.form, $ = layui.jquery;
|
||||
form.on('submit(save)', function(data){
|
||||
$.post('/forum/backend/topic/update/{$row.id}', data.field, function(res){
|
||||
if (res.code === 0) { location.href = '/forum/backend/topic'; }
|
||||
else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,69 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">帖子管理(共 {$list.total} 条)</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr><th>ID</th><th>标题</th><th>版块</th><th>类型</th><th>作者</th><th>回复</th><th>状态</th><th>操作</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{volist name="list.list" id="t"}
|
||||
<tr>
|
||||
<td>{$t.id}</td>
|
||||
<td><a href="/forum/topic/{$t.id}" target="_blank">{$t.title}</a></td>
|
||||
<td>{$t.board.name|default='-'}</td>
|
||||
<td>{$typeMap[$t.type]|default='-'}</td>
|
||||
<td>{$t.user_id}</td>
|
||||
<td>{$t.reply_count}</td>
|
||||
<td>
|
||||
{if $t.is_top==1}<span class="layui-badge">顶</span>{/if}
|
||||
{if $t.is_essence==1}<span class="layui-badge layui-bg-green">精</span>{/if}
|
||||
{if $t.status==1}正常{elseif $t.status==0}待审{else}已删{/if}
|
||||
</td>
|
||||
<td>
|
||||
<a href="/forum/backend/topic/edit/{$t.id}" class="layui-btn layui-btn-xs">编辑</a>
|
||||
{if $t.status==0}
|
||||
<button class="layui-btn layui-btn-xs layui-btn-normal" data-audit="{$t.id}">通过</button>
|
||||
<button class="layui-btn layui-btn-xs layui-btn-warm" data-reject="{$t.id}">驳回</button>
|
||||
{/if}
|
||||
<button class="layui-btn layui-btn-xs layui-btn-danger" data-del="{$t.id}">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="pager"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['jquery','laypage'], function(){
|
||||
var $ = layui.jquery, laypage = layui.laypage;
|
||||
laypage.render({ elem:'pager', count:{$list.total}, limit:20,
|
||||
curr:{$list.currentPage}, jump:function(obj,first){
|
||||
if(!first){ location.href='?page='+obj.curr; }
|
||||
}});
|
||||
$('[data-del]').on('click', function(){
|
||||
var id = $(this).data('del');
|
||||
layer.confirm('确认删除?', function(){
|
||||
$.post('/forum/backend/topic/audit/'+id+'?act=del', {}, function(res){}, 'json');
|
||||
$.post('/forum/backend/topic/delete/'+id, {}, function(res){
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
});
|
||||
$('[data-audit]').on('click', function(){
|
||||
var id = $(this).data('audit');
|
||||
$.post('/forum/backend/topic/audit/'+id, {}, function(res){
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
$('[data-reject]').on('click', function(){
|
||||
var id = $(this).data('reject');
|
||||
layer.prompt({title:'驳回理由', formType:2}, function(val, index){
|
||||
$.post('/forum/backend/topic/reject/'+id, {reason:val}, function(res){
|
||||
layer.close(index);
|
||||
if (res.code === 0) { location.reload(); } else { layer.msg(res.message); }
|
||||
}, 'json');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,32 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}{$board.name}{/block}
|
||||
{block name="body"}
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-panel">
|
||||
<div class="fly-panel-title">
|
||||
<span>{$board.name}</span>
|
||||
<span class="fly-board-desc">{$board.description}</span>
|
||||
<span class="fly-board-actions">
|
||||
<a href="/forum/board/{$board.slug}?order=new" {if $order=='new'}class="layui-this"{/if}>最新</a>
|
||||
<a href="/forum/board/{$board.slug}?order=hot" {if $order=='hot'}class="layui-this"{/if}>热门</a>
|
||||
</span>
|
||||
</div>
|
||||
<ul class="fly-list">
|
||||
{volist name="topics" id="t"}
|
||||
<li class="fly-list-item">
|
||||
<h2><a class="fly-link" href="/forum/topic/{$t.id}">{$t.title}</a></h2>
|
||||
<div class="fly-list-info">
|
||||
<span class="fly-list-author">{$t.author.nickname|default='匿名'}</span>
|
||||
<span>{:date('Y-m-d', $t.create_at)}</span>
|
||||
<span class="fly-list-hint">
|
||||
<i class="iconfont icon-pinglun1"></i> {$t.reply_count}
|
||||
<i class="iconfont icon-kiss"></i> {$t.views}
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
<div class="fly-none" style="display:{if empty($topics.list)}block{else}none{/if}">本版块暂无帖子</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
@@ -0,0 +1,67 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}社区首页{/block}
|
||||
{block name="body"}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<!-- 左侧:版块 + 帖子流 -->
|
||||
<div class="layui-col-md8">
|
||||
<div class="fly-panel">
|
||||
<div class="fly-panel-title fly-cols">
|
||||
<a class="fly-col-title">最新帖子</a>
|
||||
<a class="fly-col-extra" href="/forum?order=hot">热门</a>
|
||||
</div>
|
||||
<ul class="fly-list">
|
||||
{volist name="topics" id="t"}
|
||||
<li class="fly-list-item">
|
||||
<a href="/forum/u/{$t.user_id}" class="fly-avatar">
|
||||
<img src="{$t.author.avatar|default='/static/forum/images/avatar.png'}" alt="">
|
||||
</a>
|
||||
<h2>
|
||||
<a class="fly-link" href="/forum/topic/{$t.id}">{$t.title}</a>
|
||||
{if $t.is_top == 1}<span class="layui-badge">置顶</span>{/if}
|
||||
{if $t.is_essence == 1}<span class="layui-badge layui-bg-green">精</span>{/if}
|
||||
</h2>
|
||||
<div class="fly-list-info">
|
||||
<a href="/forum/u/{$t.user_id}" class="fly-list-author">{$t.author.nickname|default='匿名'}</a>
|
||||
<span>{:date('Y-m-d', $t.create_at)}</span>
|
||||
<span class="fly-list-hint">
|
||||
<i class="iconfont icon-pinglun1" title="回复"></i> {$t.reply_count}
|
||||
<i class="iconfont icon-kiss" title="浏览"></i> {$t.views}
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
<div class="fly-none" style="display:{if empty($topics.list)}block{else}none{/if}">暂无帖子</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 右侧:版块导航 + 热议 -->
|
||||
<div class="layui-col-md4">
|
||||
<div class="fly-panel">
|
||||
<h3 class="fly-panel-title">版块</h3>
|
||||
<div class="fly-board">
|
||||
{volist name="boards" id="b"}
|
||||
<a class="fly-board-item" href="/forum/board/{$b.slug}">
|
||||
<i class="layui-icon">{$b.icon|default=''}</i> {$b.name}
|
||||
<em>{$b.topic_count}</em>
|
||||
</a>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fly-panel fly-rank">
|
||||
<h3 class="fly-panel-title">热议</h3>
|
||||
<ul class="fly-rank-list">
|
||||
{volist name="hot" id="h" length="10"}
|
||||
<li><a href="/forum/topic/{$h.id}">{$h.title}</a></li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="fly-panel" style="text-align:center;">
|
||||
<a href="/forum/post" class="layui-btn layui-btn-danger" style="width:100%;">发表新帖</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
@@ -0,0 +1,38 @@
|
||||
{extend name="index/layout" /}
|
||||
{block name="title"}附近帖子{/block}
|
||||
{block name="body"}
|
||||
<div class="fly-panel">
|
||||
<div class="fly-panel-title">附近帖子(半径 {$radius} km)</div>
|
||||
<div id="geo-tip" style="padding:10px;color:#999;">
|
||||
正在获取您的位置…
|
||||
</div>
|
||||
<ul class="fly-list" id="nearby-list" style="display:none;">
|
||||
{volist name="list" id="t"}
|
||||
<li>
|
||||
<a class="fly-list-title" href="/forum/topic/{$t.id}">{$t.title}</a>
|
||||
<span class="fly-list-info">
|
||||
{if isset($t.distance_km)}约 {$t.distance_km|round=2} km{/if}
|
||||
{$t.board.name|default=''}
|
||||
</span>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
<script>
|
||||
(function(){
|
||||
var tip = document.getElementById('geo-tip');
|
||||
var list = document.getElementById('nearby-list');
|
||||
function load(lat, lng){
|
||||
tip.style.display='none'; list.style.display='block';
|
||||
}
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(function(p){
|
||||
var lat = p.coords.latitude, lng = p.coords.longitude;
|
||||
window.location.href = '/forum/nearby?lat='+lat+'&lng='+lng+'&radius=10';
|
||||
}, function(){ tip.textContent='获取位置失败,可在 URL 手动传 ?lat=&lng='; });
|
||||
} else {
|
||||
tip.textContent='浏览器不支持定位,请在 URL 手动传 ?lat=&lng=';
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,11 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}未找到{/block}
|
||||
{block name="body"}
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-panel" style="padding:40px;text-align:center;">
|
||||
<i class="layui-icon" style="font-size:60px;color:#FF5722;"></i>
|
||||
<p style="margin-top:20px;font-size:16px;">{$msg|default='页面不存在'}</p>
|
||||
<p style="margin-top:10px;"><a href="/forum" class="layui-btn layui-btn-primary">返回社区首页</a></p>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
@@ -0,0 +1,84 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}发表新帖{/block}
|
||||
{block name="body"}
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-panel" pad20>
|
||||
<div class="layui-form layui-form-pane">
|
||||
<form class="layui-form" id="postForm">
|
||||
<div class="layui-row layui-col-space15 layui-form-item">
|
||||
<div class="layui-col-md3">
|
||||
<label class="layui-form-label">所在版块</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="board_id" lay-verify="required">
|
||||
<option value=""></option>
|
||||
{volist name="boards" id="b"}
|
||||
<option value="{$b.id}">{$b.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type" lay-verify="required">
|
||||
{foreach $typeMap as $k=>$v}
|
||||
<option value="{$k}">{$v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标题</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">内容</label>
|
||||
<div class="layui-input-block">
|
||||
<script id="editor" name="content" type="text/plain" style="height:360px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-submit lay-filter="postSubmit">立即发布</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="js"}
|
||||
<script src="/assets/library/ueditor/ueditor.config.js"></script>
|
||||
<script src="/assets/library/ueditor/ueditor.all.js"></script>
|
||||
<script>
|
||||
layui.use(['form', 'jquery'], function(){
|
||||
var form = layui.form, $ = layui.jquery;
|
||||
|
||||
// 初始化 UEditor 富文本编辑器
|
||||
var ue = UE.getEditor('editor', {
|
||||
serverUrl: '/forum/backend/ueditor',
|
||||
initialFrameHeight: {$editorHeight|default=360},
|
||||
zIndex: 9999
|
||||
});
|
||||
|
||||
form.on('submit(postSubmit)', function(data){
|
||||
// 同步编辑器内容到表单字段
|
||||
data.field.content = UE.getEditor('editor').getContent();
|
||||
if (!data.field.content || data.field.content.replace(/<[^>]*>/g, '').trim() === '') {
|
||||
layer.msg('请填写帖子内容');
|
||||
return false;
|
||||
}
|
||||
$.post('/forum/post', data.field, function(res){
|
||||
if (res.code === 0) {
|
||||
var id = res.data && res.data.id;
|
||||
location.href = '/forum/topic/' + id;
|
||||
} else {
|
||||
layer.msg(res.message || '发布失败');
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,19 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}搜索{/block}
|
||||
{block name="body"}
|
||||
<div class="layui-container fly-marginTop">
|
||||
<form class="fly-search-form" action="/forum/search" method="get">
|
||||
<input type="text" name="q" value="{$kw}" placeholder="搜索帖子标题" class="layui-input">
|
||||
<button class="layui-btn">搜索</button>
|
||||
</form>
|
||||
<div class="fly-panel">
|
||||
{volist name="list" id="t"}
|
||||
<div class="fly-search-item">
|
||||
<a href="/forum/topic/{$t.id}">{$t.title}</a>
|
||||
<span>{:date('Y-m-d', $t.create_at)}</span>
|
||||
</div>
|
||||
{/volist}
|
||||
<div class="fly-none" style="display:{if empty($list.list)}block{else}none{/if}">{if $kw==''}请输入关键词{else}未找到相关帖子{/if}</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
@@ -0,0 +1,101 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}{$topic.title}{/block}
|
||||
{block name="body"}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-col-md9">
|
||||
<div class="fly-panel" pad20>
|
||||
<div class="fly-detail">
|
||||
<h1 class="fly-detail-title">
|
||||
{if $topic.is_top == 1}<span class="layui-badge">置顶</span>{/if}
|
||||
{$topic.title}
|
||||
</h1>
|
||||
<div class="fly-detail-info">
|
||||
<span class="layui-badge layui-bg-green">{$typeName}</span>
|
||||
<a href="/forum/board/{$board.slug}">{$board.name}</a>
|
||||
<span>作者:<a href="/forum/u/{$topic.user_id}">{$author.nickname|default='匿名'}</a></span>
|
||||
<span>{:date('Y-m-d H:i', $topic.create_at)}</span>
|
||||
<span class="fly-detail-hint">{$topic.views} 阅 / {$topic.reply_count} 答</span>
|
||||
</div>
|
||||
<div class="fly-detail-body">
|
||||
{$topic.content|raw}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="layui-bg-gray">
|
||||
|
||||
<div class="fly-detail-reply">
|
||||
<div class="fly-detail-reply-title">
|
||||
回复 ({$topic.reply_count})
|
||||
</div>
|
||||
<ul class="fly-reply-list">
|
||||
{volist name="replyList" id="r"}
|
||||
<li class="fly-reply-item">
|
||||
<a href="/forum/u/{$r.user_id}" class="fly-reply-avatar">
|
||||
<img src="{if $r.avatar}{$r.avatar}{else}/static/forum/images/avatar.png{/if}">
|
||||
</a>
|
||||
<div class="fly-reply-main">
|
||||
<div class="fly-reply-head">
|
||||
<a href="/forum/u/{$r.user_id}" class="fly-reply-name">{$r.nickname}</a>
|
||||
<span class="fly-reply-floor">{$r.floor}楼</span>
|
||||
<span class="fly-reply-time">{:date('Y-m-d H:i', $r.create_at)}</span>
|
||||
</div>
|
||||
<div class="fly-reply-body">
|
||||
{$r.content|raw}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
<div class="fly-none" style="display:{if empty($replies)}block{else}none{/if}">暂无回复,快来抢沙发</div>
|
||||
</div>
|
||||
|
||||
<!-- 回复表单 -->
|
||||
{if $user}
|
||||
<form class="fly-reply-form layui-form" id="replyForm">
|
||||
<input type="hidden" name="topic_id" value="{$topic.id}">
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<textarea name="content" required lay-verify="required" placeholder="回复内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-submit lay-filter="replySubmit">提交回复</button>
|
||||
</div>
|
||||
</form>
|
||||
{else}
|
||||
<div class="fly-reply-tip"><a href="/user/login">登录</a> 后参与回复</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md3">
|
||||
<div class="fly-panel">
|
||||
<h3 class="fly-panel-title">{$board.name}</h3>
|
||||
<p>{$board.description}</p>
|
||||
</div>
|
||||
{if !empty($related)}
|
||||
<div class="fly-panel" style="margin-top:15px;">
|
||||
<h3 class="fly-panel-title">相关帖子</h3>
|
||||
<ul class="fly-related-list">
|
||||
{volist name="related" id="rel"}
|
||||
<li><a href="/forum/topic/{$rel.id}">{$rel.title}</a></li>
|
||||
{/volist}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="js"}
|
||||
<script>
|
||||
layui.use(['form', 'jquery'], function(){
|
||||
var form = layui.form, $ = layui.jquery;
|
||||
form.on('submit(replySubmit)', function(data){
|
||||
$.post('/forum/reply', data.field, function(res){
|
||||
if (res.code === 0) { location.reload(); }
|
||||
else { layer.msg(res.message || '失败'); }
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,26 @@
|
||||
{extend name="layout" /}
|
||||
{block name="title"}{$user.nickname} 的主页{/block}
|
||||
{block name="body"}
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-home fly-panel">
|
||||
<img src="{$user.avatar|default='/static/forum/images/avatar.png'}" alt="{$user.nickname}">
|
||||
<h1>{$user.nickname}</h1>
|
||||
<p class="fly-home-sign">{$user.intro|default='这家伙很懒,什么都没留下'}</p>
|
||||
</div>
|
||||
<div class="fly-panel">
|
||||
<h3 class="fly-panel-title">TA 的帖子</h3>
|
||||
<ul class="fly-list">
|
||||
{volist name="topics" id="t"}
|
||||
<li class="fly-list-item">
|
||||
<h2><a class="fly-link" href="/forum/topic/{$t.id}">{$t.title}</a></h2>
|
||||
<div class="fly-list-info">
|
||||
<span>{:date('Y-m-d', $t.create_at)}</span>
|
||||
<span class="fly-list-hint">{$t.reply_count} 答 / {$t.views} 阅</span>
|
||||
</div>
|
||||
</li>
|
||||
{/volist}
|
||||
</ul>
|
||||
<div class="fly-none" style="display:{if empty($topics)}block{else}none{/if}">TA 还没有发帖</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
@@ -0,0 +1,64 @@
|
||||
<!--
|
||||
* @Author: YwxApp <ywx@ywxapp.cn>
|
||||
* @Date: 2026-08-02 01:09:44
|
||||
* @LastEditors: YwxApp <ywx@ywxapp.cn>
|
||||
* @LastEditTime: 2026-08-02 08:56:23
|
||||
* @Description:
|
||||
* @FilePath: \ywxapp_dev\addon\forum\view\frontend\layout.html
|
||||
* @CustomString: Copyright (c) 2026 YwxApp
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{block name="title"}{$site_title|default='轻社区'}{/block}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" href="/static/forum/css/global.css">
|
||||
<link rel="stylesheet" href="/static/forum/layui/css/layui.css">
|
||||
{block name="css"}{/block}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="fly-header layui-bg-black">
|
||||
<div class="layui-container">
|
||||
<a class="fly-logo" href="/forum">
|
||||
<img src="/static/forum/images/logo.png" alt="logo">
|
||||
</a>
|
||||
<ul class="layui-nav fly-nav layui-hide-xs">
|
||||
<li class="layui-nav-item layui-this"><a href="/forum"><i class="iconfont icon-jiaoliu"></i>社区</a></li>
|
||||
<li class="layui-nav-item"><a href="/forum/index/search"><i class="iconfont icon-ui"></i>搜索</a></li>
|
||||
</ul>
|
||||
<ul class="layui-nav fly-nav-user">
|
||||
{if $user}
|
||||
<li class="layui-nav-item">
|
||||
<a class="fly-nav-avatar" href="javascript:;">
|
||||
<cite class="layui-hide-xs">{$user.nickname}</cite>
|
||||
{if isset($unread) && $unread > 0}<i class="layui-badge fly-badge-vip">{$unread}</i>{/if}
|
||||
<img src="{$user.avatar|default='/static/forum/images/avatar.png'}">
|
||||
</a>
|
||||
<dl class="layui-nav-child">
|
||||
<dd><a href="/forum/u/{$user.uid}"><i class="layui-icon"></i>我的主页</a></dd>
|
||||
<dd><a href="/user/set"><i class="layui-icon"></i>基本设置</a></dd>
|
||||
<dd><a href="/user/logout" style="text-align:center;">退出</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
{else}
|
||||
<li class="layui-nav-item"><a href="/user/login">登入</a></li>
|
||||
<li class="layui-nav-item"><a href="/user/reg">注册</a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-container">
|
||||
{block name="body"}{/block}
|
||||
</div>
|
||||
|
||||
<div class="fly-footer">
|
||||
<p>轻社区论坛 · Powered by YwxApp</p>
|
||||
</div>
|
||||
|
||||
<script src="/static/forum/layui/layui.js"></script>
|
||||
{block name="js"}{/block}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,84 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
我的帖子
|
||||
<a class="layui-btn layui-btn-sm layui-btn-normal" style="float:right;margin-top:8px;" href="{:addon_url('forum/member.forum/post')}">+ 我要发帖</a>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>标题</th>
|
||||
<th>版块</th>
|
||||
<th>回复</th>
|
||||
<th>浏览</th>
|
||||
<th>状态</th>
|
||||
<th>发布时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="topicList">
|
||||
{volist name="list" id="item"}
|
||||
<tr data-id="{$item.id}">
|
||||
<td>{$item.id}</td>
|
||||
<td><a href="/forum/topic/{$item.id}" target="_blank" style="color:#1e9fff;">{$item.title}</a></td>
|
||||
<td>{$item.board_title}</td>
|
||||
<td>{$item.reply_count}</td>
|
||||
<td>{$item.view_count}</td>
|
||||
<td>
|
||||
{if $item.status == 1}<span class="layui-badge layui-bg-green">正常</span>
|
||||
{elseif $item.status == 0}<span class="layui-badge layui-bg-orange">待审</span>
|
||||
{else}<span class="layui-badge">已删</span>{/if}
|
||||
</td>
|
||||
<td>{$item.create_at}</td>
|
||||
<td>
|
||||
<a class="layui-btn layui-btn-xs" href="/forum/post?edit={$item.id}">编辑</a>
|
||||
<button class="layui-btn layui-btn-xs layui-btn-danger btn-del">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{if empty($list)}
|
||||
<tr><td colspan="8" style="text-align:center;color:#999;">暂无帖子,<a href="{:addon_url('forum/member.forum/post')}" style="color:#1e9fff;">去发帖</a></td></tr>
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="pages"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var _layui = (top.window && top.window.layui) ? top.window.layui : layui;
|
||||
_layui.use(['layer', '$', 'laypage'], function () {
|
||||
var layer = _layui.layer, $ = _layui.$, laypage = _layui.laypage;
|
||||
|
||||
{if $total > 0}
|
||||
laypage.render({
|
||||
elem: 'pages',
|
||||
count: {$total},
|
||||
limit: 15,
|
||||
curr: {$page},
|
||||
jump: function (obj, first) {
|
||||
if (!first) {
|
||||
location.href = '{:addon_url("forum/member.forum/mytopics")}?page=' + obj.curr;
|
||||
}
|
||||
}
|
||||
});
|
||||
{/if}
|
||||
|
||||
$('#topicList').on('click', '.btn-del', function () {
|
||||
var $tr = $(this).closest('tr');
|
||||
var id = $tr.data('id');
|
||||
layer.confirm('确定删除该帖子吗?', function (index) {
|
||||
$.post('{:addon_url("forum/member.forum/del")}', { id: id }, function (res) {
|
||||
if (res && res.code === 0) {
|
||||
layer.msg(res.message || '已删除', { icon: 1 });
|
||||
$tr.remove();
|
||||
} else {
|
||||
layer.msg((res && res.message) || '删除失败');
|
||||
}
|
||||
}, 'json').fail(function () { layer.msg('请求失败'); });
|
||||
layer.close(index);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,77 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">发布帖子</div>
|
||||
<div class="layui-card-body" pad15>
|
||||
<form class="layui-form" lay-filter="postForm">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">所属版块</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="board_id" lay-verify="required">
|
||||
<option value="">请选择版块</option>
|
||||
{volist name="boards" id="b"}
|
||||
<option value="{$b.id}">{$b.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">帖子类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type">
|
||||
<option value="99">分享</option>
|
||||
<option value="0">提问</option>
|
||||
<option value="100">讨论</option>
|
||||
<option value="101">建议</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">标题</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" 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">
|
||||
<script id="editor" name="content" type="text/plain" style="height:{$editorHeight|default=360}px;"></script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="submitPost">立即发布</button>
|
||||
<a class="layui-btn layui-btn-primary" href="{:addon_url('forum/member.forum/mytopics')}">我的帖子</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var _layui = (top.window && top.window.layui) ? top.window.layui : layui;
|
||||
_layui.use(['form', 'layer', 'jquery'], function () {
|
||||
var form = _layui.form, layer = _layui.layer, $ = _layui.jquery;
|
||||
var editor = UE.getEditor('editor', {
|
||||
serverUrl: '/forum/backend/ueditor',
|
||||
initialFrameHeight: {$editorHeight|default=360},
|
||||
zIndex: 9999
|
||||
});
|
||||
|
||||
form.on('submit(submitPost)', function (data) {
|
||||
data.field.content = UE.getEditor('editor').getContent();
|
||||
if (!data.field.content || data.field.content.length < 5) {
|
||||
layer.msg('内容太少啦');
|
||||
return false;
|
||||
}
|
||||
$.post('{:addon_url("forum/member.forum/post")}', data.field, function (res) {
|
||||
if (res && res.code === 0) {
|
||||
layer.msg(res.message || '发布成功', { icon: 1 }, function () {
|
||||
location.href = '{:addon_url("forum/member.forum/mytopics")}';
|
||||
});
|
||||
} else {
|
||||
layer.msg((res && res.message) || '发布失败');
|
||||
}
|
||||
}, 'json').fail(function () { layer.msg('请求失败'); });
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,48 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>{$title | default='论坛 - 会员中心'}</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, maximum-scale=1" />
|
||||
<link href="/assets/layui/css/layui.css" rel="stylesheet" />
|
||||
<link href="/static/member/css/common.css" rel="stylesheet" />
|
||||
<script src="/assets/library/ueditor/ueditor.config.js"></script>
|
||||
<script src="/assets/library/ueditor/ueditor.all.js"></script>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #f2f3f5;
|
||||
}
|
||||
|
||||
.child-page {
|
||||
flex: 1;
|
||||
margin: 14px;
|
||||
}
|
||||
|
||||
.in-iframe .child-page {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var layui = layui || window.top.layui;
|
||||
window.UEDITOR_HOME_URL = '/assets/library/ueditor/';
|
||||
if (window !== top) {
|
||||
document.documentElement.className += ' in-iframe';
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="child-page">
|
||||
{__CONTENT__}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user