fix: 修正打包脚本插件目录名(addon)、重建框架文件清单、修复 install.sql(sms 表冲突/菜单归属/权限名拼写)

This commit is contained in:
ywxapp
2026-08-16 17:42:18 +08:00
parent aded1c718b
commit 303f548664
24 changed files with 1614 additions and 882 deletions
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>审核详情 - 应用市场管理</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/wxapp.css" rel="stylesheet">
<style>
body { background: #f2f3f5; padding: 15px; }
.info-card { background: #fff; border-radius: 4px; padding: 15px 20px; margin-bottom: 15px; }
.info-card h3 { margin: 0 0 12px; font-size: 15px; border-left: 3px solid #1e9fff; padding-left: 8px; }
.info-row { display: flex; flex-wrap: wrap; }
.info-item { width: 50%; padding: 6px 0; box-sizing: border-box; }
.info-item.full { width: 100%; }
.info-item .label { color: #999; margin-right: 6px; }
.info-item .value { color: #333; }
.step-wrap { background: #fff; border-radius: 4px; padding: 20px; margin-bottom: 15px; }
.timeline-empty { color: #999; text-align: center; padding: 20px 0; }
</style>
</head>
<body>
<div class="info-card">
<h3>提交信息</h3>
<div class="info-row" id="infoRow">
<div class="timeline-empty">加载中…</div>
</div>
</div>
<div class="step-wrap">
<h3 style="margin:0 0 18px;font-size:15px;border-left:3px solid #1e9fff;padding-left:8px;">审核状态流</h3>
<div class="layui-row layui-col-space20" id="stepRow">
<div class="timeline-empty">加载中…</div>
</div>
</div>
<div class="info-card">
<h3>审核历史时间线</h3>
<ul class="layui-timeline" id="timeline">
<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-loading"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">加载中…</div></div></li>
</ul>
</div>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="{$site.app}"></script>
<script>
layui.use(['jquery', 'http', 'util'], function () {
var $ = layui.jquery, http = layui.http, util = layui.util;
var id = {$id};
function statusText(s) {
switch (parseInt(s, 10)) {
case 0: return '待审核';
case 1: return '已通过';
case 2: return '已驳回';
default: return '未知(' + s + ')';
}
}
function actionText(a) {
switch (a) {
case 'submit': return '提交审核';
case 'approve': return '审核通过';
case 'reject': return '审核驳回';
default: return a;
}
}
function fmt(ts) {
if (!ts) return '';
return util.toDateString(ts * 1000, 'yyyy-MM-dd HH:mm:ss');
}
http.get('detail', { id: id }).then(function (r) {
if (r.code !== 0 || !r.data) { $('#infoRow').html('<div class="timeline-empty">加载失败</div>'); return; }
var d = r.data;
var html = ''
+ '<div class="info-item"><span class="label">ID</span><span class="value">' + (d.id || '') + '</span></div>'
+ '<div class="info-item"><span class="label">标识:</span><span class="value">' + (d.name || '') + '</span></div>'
+ '<div class="info-item"><span class="label">名称:</span><span class="value">' + (d.title || '') + '</span></div>'
+ '<div class="info-item"><span class="label">类型:</span><span class="value">' + (d.type === 'template' ? '模板' : '插件') + '</span></div>'
+ '<div class="info-item"><span class="label">作者:</span><span class="value">' + (d.author || '') + '</span></div>'
+ '<div class="info-item"><span class="label">版本:</span><span class="value">' + (d.version || '') + '</span></div>'
+ '<div class="info-item"><span class="label">价格:</span><span class="value">' + (d.price > 0 ? '¥' + d.price : '免费') + '</span></div>'
+ '<div class="info-item"><span class="label">当前状态:</span><span class="value">' + statusText(d.status) + '</span></div>'
+ '<div class="info-item"><span class="label">提交时间:</span><span class="value">' + fmt(d.create_at) + '</span></div>'
+ '<div class="info-item"><span class="label">上架状态:</span><span class="value">' + (d.published ? '已上架' : '未上架') + '</span></div>'
+ '<div class="info-item full"><span class="label">简介:</span><span class="value">' + (d.description || '-') + '</span></div>'
+ '<div class="info-item full"><span class="label">驳回原因:</span><span class="value">' + (d.reject_reason || '-') + '</span></div>';
$('#infoRow').html(html);
// 步骤条:提交 → 审核(通过/驳回)
var steps = [
{ title: '提交审核', done: true },
{ title: '运营审核', done: true, current: d.status != 0, reject: d.status == 2, pass: d.status == 1 }
];
var stepHtml = '';
steps.forEach(function (s) {
var cls = 'layui-bg-blue';
if (s.reject) cls = 'layui-bg-red';
else if (!s.done) cls = 'layui-bg-gray';
var icon = '&#xe605;';
if (s.reject) icon = '&#x1006;';
else if (!s.done) icon = '&#xe615;';
stepHtml += ''
+ '<div class="layui-col-xs6 layui-col-md6" style="text-align:center;">'
+ ' <button class="layui-btn layui-btn-circle ' + cls + '">' + icon + '</button>'
+ ' <div style="margin-top:6px;">' + s.title + '</div>'
+ '</div>';
});
$('#stepRow').html('<div class="layui-col-xs12" style="display:flex;align-items:center;justify-content:center;">' + stepHtml + '</div>');
}).catch(function () { $('#infoRow').html('<div class="timeline-empty">请求失败</div>'); });
http.get('history', { id: id }).then(function (r) {
var arr = (r.code === 0 && r.data) ? r.data : [];
if (!arr.length) {
$('#timeline').html('<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-face-surprised"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">暂无审核记录</div></div></li>');
return;
}
var html = '';
arr.forEach(function (item) {
var color = item.action === 'reject' ? '#ff5722' : (item.action === 'approve' ? '#16b777' : '#1e9fff');
html += ''
+ '<li class="layui-timeline-item">'
+ ' <i class="layui-icon layui-timeline-axis" style="color:' + color + ';">&#xe63f;</i>'
+ ' <div class="layui-timeline-content layui-text">'
+ ' <h4>' + actionText(item.action) + ' <span class="layui-badge layui-bg-gray">' + statusText(item.from_status) + ' → ' + statusText(item.to_status) + '</span></h4>'
+ ' <p>操作人ID' + (item.operator_id || 0) + (item.reason ? ';意见:' + item.reason : '') + '</p>'
+ ' <p style="color:#999;">' + fmt(item.create_at) + '</p>'
+ ' </div>'
+ '</li>';
});
$('#timeline').html(html);
}).catch(function () {
$('#timeline').html('<li class="layui-timeline-item"><i class="layui-icon layui-timeline-axis layui-icon-face-surprised"></i><div class="layui-timeline-content layui-text"><div class="timeline-empty">请求失败</div></div></li>');
});
});
</script>
</body>
</html>