feat(notice): 通知管理 CURD 模块双层化

This commit is contained in:
augushong
2026-10-12 12:09:01 +00:00
parent 7aba2d02fe
commit bf82168927
7 changed files with 393 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
var init = {
tableElem: '#currentTable',
tableRenderId: 'currentTableRenderId',
indexUrl: 'system.notice/index',
addUrl: '',
editUrl: '',
readUrl: 'system.notice/read',
deleteUrl: 'system.notice/delete',
exportUrl: '',
modifyUrl: 'system.notice/modify',
};

View File

@@ -0,0 +1,7 @@
<div class="layuimini-container">
<div class="layuimini-main">
<table id="currentTable" class="layui-table layui-hide"
lay-filter="currentTable">
</table>
</div>
</div>

View File

@@ -0,0 +1,54 @@
$(function(){
// 场景徽章:标题取 data_brage 下发的 scenes() 动态映射,色标按场景写死(layui-badge 色系)
var sceneColorMap = {
system: 'layui-badge',
common: 'layui-badge layui-bg-blue',
admin_login: 'layui-badge layui-bg-green',
mall_stock: 'layui-badge layui-bg-orange',
};
var sceneTemplet = function(d) {
var titles = ua.getDataBrage('select_list_scene');
var text = titles[d.scene] || d.scene;
var cls = sceneColorMap[d.scene] || 'layui-badge layui-bg-gray';
return '<span class="' + cls + '">' + text + '</span>';
};
var senderTemplet = function(d) {
if (!d.send_admin_id) {
return '<span style="color:#999">系统</span>';
}
return d.send_admin_nickname || ('#' + d.send_admin_id);
};
ua.table.render({
init: init,
toolbar: ['refresh', 'delete'],
defaultToolbar: ['filter'],
cols: [[
{type: 'checkbox'},
{field: 'id', title: 'ID', width: 80, sort: true},
{field: 'scene', title: '场景', width: 110, search: 'select', searchOp: '=', selectList: ua.getDataBrage('select_list_scene'), templet: sceneTemplet},
{field: 'title', title: '标题', minWidth: 220},
{field: 'send_admin_nickname', title: '发送者', width: 120, search: false, templet: senderTemplet},
{field: 'create_time', title: '创建时间', width: 170, templet: ua.table.date, search: 'range'},
{
width: 130, title: '操作', templet: ua.table.tool, fixed: 'right', operat: [
[{
class: 'layui-btn layui-btn-primary layui-btn-xs',
method: 'tab',
field: 'id',
text: '详情',
title: '查看详情',
auth: 'read',
url: init.readUrl,
icon: ''
}],
'delete'
]
},
]],
});
ua.listen();
})

View File

@@ -0,0 +1,119 @@
<div class="layuimini-container detail-container">
<div class="layuimini-main">
<div class="layui-card detail-card">
<div class="layui-card-header detail-header">
<div class="layui-row">
<div class="layui-col-md9">
<h2 class="detail-title">#{$row.id} {$title}</h2>
<div class="detail-id">ID: {$row.id}</div>
</div>
<div class="layui-col-md3 text-right detail-actions">
<button class="layui-btn layui-btn-primary" layuimini-content-href="{$Request.param.backTagId}" data-back="1">返回</button>
</div>
</div>
</div>
<div class="layui-card-body detail-content">
<div class="layui-row layui-col-space12">
<!-- 左侧主体内容 -->
<div class="layui-col-md8 detail-main">
<div class="detail-field-group">
<div class="detail-field-item">
<div class="detail-field-label">场景</div>
<div class="detail-field-value">
{switch name="row.scene"}
{case value="system"}<span class="layui-badge">{$scene_title}</span>{/case}
{case value="common"}<span class="layui-badge layui-bg-blue">{$scene_title}</span>{/case}
{case value="admin_login"}<span class="layui-badge layui-bg-green">{$scene_title}</span>{/case}
{case value="mall_stock"}<span class="layui-badge layui-bg-orange">{$scene_title}</span>{/case}
{default /}<span class="layui-badge layui-bg-gray">{$scene_title}</span>
{/switch}
</div>
</div>
<div class="detail-field-item">
<div class="detail-field-label">标题</div>
<div class="detail-field-value">
{notempty name="row.title"}
{$row.title}
{else/}
<span class="layui-text-em">暂无数据</span>
{/notempty}
</div>
</div>
<div class="detail-field-item detail-field-full">
<div class="detail-field-label">内容</div>
<div class="detail-field-value detail-editor-content">
{notempty name="row.content"}
{$row.content|raw}
{else/}
<span class="layui-text-em">暂无内容</span>
{/notempty}
</div>
</div>
<div class="detail-field-item">
<div class="detail-field-label">业务关联ID</div>
<div class="detail-field-value">
{notempty name="row.biz_id"}
{$row.biz_id}
{else/}
<span class="layui-text-em">-</span>
{/notempty}
</div>
</div>
<div class="detail-field-item detail-field-full">
<div class="detail-field-label">投递汇总</div>
<div class="detail-field-value">
{notempty name="delivery"}
{volist name="delivery" id="vo"}
<div style="margin-bottom:4px;">
<strong>{$vo.channel_name}</strong>
<span style="display:inline-block;padding:2px 10px;border-radius:3px;color:#5FB878;background:#e8f8ef;font-size:12px;margin-left:6px;">成功 {$vo.success}</span>
<span style="display:inline-block;padding:2px 10px;border-radius:3px;color:#FF5722;background:#ffe8e2;font-size:12px;margin-left:4px;">失败 {$vo.failed}</span>
<span style="display:inline-block;padding:2px 10px;border-radius:3px;color:#1E9FFF;background:#e2f1ff;font-size:12px;margin-left:4px;">待发 {$vo.pending}</span>
{if condition="$vo.sending gt 0"}<span style="display:inline-block;padding:2px 10px;border-radius:3px;color:#FFB800;background:#fff8e2;font-size:12px;margin-left:4px;">发送中 {$vo.sending}</span>{/if}
</div>
{/volist}
{else/}
<span class="layui-text-em">暂无投递记录</span>
{/notempty}
</div>
</div>
</div>
</div>
<!-- 右侧基础信息 -->
<div class="layui-col-md4 detail-side">
<h3 class="detail-side-title">基础信息</h3>
<div class="detail-field-group">
<div class="detail-field-item">
<div class="detail-field-label">ID</div>
<div class="detail-field-value">{$row.id}</div>
</div>
<div class="detail-field-item">
<div class="detail-field-label">发送者</div>
<div class="detail-field-value">
{if condition="$row.send_admin_id gt 0"}
{$sender_nickname|default=''}(#{$row.send_admin_id})
{else/}
<span class="layui-text-em">系统</span>
{/if}
</div>
</div>
<div class="detail-field-item">
<div class="detail-field-label">创建时间</div>
<div class="detail-field-value">
{notempty name="row.create_time"}
{$row.create_time|date="Y-m-d H:i:s"}
{else/}
<span class="layui-text-em">暂无数据</span>
{/notempty}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,3 @@
$(function(){
ua.listen();
})