feat: 公共表更名 common/member 前缀 + 插件命令自动加载 + 版本 1.1.1

- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零
- Attachment 模型补  表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患
- install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空
- AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过)
- 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整
- 框架版本 1.1.0 -> 1.1.1
This commit is contained in:
ywxapp
2026-08-20 20:19:15 +08:00
parent 303f548664
commit 1d49e6f5ee
395 changed files with 13342 additions and 2012 deletions
@@ -0,0 +1,35 @@
{block name="style"}<link rel="stylesheet" href="/static/download/css/download.css">{__inline__}{/block}
<div class="dl-wrap">
<div class="dl-crumb">
<a href="{:url('index/index')}">{$site_name}</a><span>/</span>
{present name="cat.title"}
<a href="{:url('index/list', ['cid'=>$cat.id])}">{$cat.title|lang}</a><span>/</span>
{/present}
<strong>{$resource.title|lang}</strong>
</div>
<div class="dl-detail">
<img class="dl-detail-cover" src="{$resource.cover|default='/static/download/img/default.svg'}" alt="{$resource.title|lang}">
<div class="dl-detail-info">
<h1 class="dl-detail-title">{$resource.title|lang}</h1>
<div class="dl-detail-row">大小:{$resource.size_text|default='-'}</div>
<div class="dl-detail-row">分类:{present name="cat.title"}<a href="{:url('index/list', ['cid'=>$cat.id])}">{$cat.title|lang}</a>{else/}—{/present}</div>
<div class="dl-detail-row">更新:{$resource.update_at|default='-'}</div>
<div class="dl-detail-row">下载:{$resource.downloads|default=0}</div>
<div class="dl-detail-row">
{if $resource.is_free == 1}<span class="dl-tag-free">免费</span>{else/}<span class="dl-tag-pay">付费</span>{/if}
</div>
<a class="dl-btn-down" href="{:url('index/down', ['id'=>$resource.id])}">{$download_btn_text}</a>
</div>
</div>
<div class="dl-detail-intro">
<h3>资源简介</h3>
<p>{$resource.intro|default='暂无简介'}</p>
</div>
<a class="dl-back" href="{:url('index/list', ['cid'=>$cat.id|default=0])}">← {$list_text}</a>
</div>
@@ -0,0 +1,77 @@
{block name="style"}<link rel="stylesheet" href="/static/download/css/download.css">{__inline__}{/block}
<div class="dl-wrap">
<section class="dl-hero">
<div>
<h2>{$site_name} · 海量资源 高速免费下载</h2>
<p>精选软件、源码与工具,安全无捆绑,下载更省心。</p>
<div class="slogan">一键下载 · 更新无插件 · 卸载无残留</div>
</div>
<a class="dl-hero-btn" href="{:url('index/list', ['cid'=>0])}">{$all_category_text}</a>
</section>
{notempty name="hot"}
<section class="dl-block">
<div class="dl-block-head">
<h2 class="dl-block-title">{$hot_text}</h2>
<span class="dl-refresh" onclick="location.href='{:url(\'index/index\')}'">换一换</span>
</div>
<ul class="dl-grid">
{volist name="hot" id="item"}
<li class="dl-card">
<a href="{:url('index/detail', ['id'=>$item.id])}">
<img class="dl-cover" src="{$item.cover|default='/static/download/img/default.svg'}" alt="{$item.title|lang}">
<span class="dl-name">{$item.title|lang}</span>
</a>
<p class="dl-desc">{$item.intro|default=''}</p>
<span class="dl-meta">{$item.size_text|default='-'}</span>
<a class="dl-card-btn" href="{:url('index/down', ['id'=>$item.id])}">{$download_btn_text}</a>
</li>
{/volist}
</ul>
</section>
{/notempty}
{notempty name="news"}
<section class="dl-block">
<div class="dl-block-head">
<h2 class="dl-block-title">{$latest_text}</h2>
<span class="dl-refresh" onclick="location.href='{:url(\'index/index\')}'">换一换</span>
</div>
<ul class="dl-grid">
{volist name="news" id="item"}
<li class="dl-card">
<a href="{:url('index/detail', ['id'=>$item.id])}">
<img class="dl-cover" src="{$item.cover|default='/static/download/img/default.svg'}" alt="{$item.title|lang}">
<span class="dl-name">{$item.title|lang}</span>
</a>
<p class="dl-desc">{$item.intro|default=''}</p>
<span class="dl-meta">{$item.size_text|default='-'}</span>
<a class="dl-card-btn" href="{:url('index/down', ['id'=>$item.id])}">{$download_btn_text}</a>
</li>
{/volist}
</ul>
</section>
{/notempty}
<section class="dl-block">
<div class="dl-block-head">
<h2 class="dl-block-title">{$all_category_text}</h2>
</div>
<div class="dl-cat-grid">
{volist name="categories" id="cat"}
<div class="dl-cat">
<h3><a href="{:url('index/list', ['cid'=>$cat.id])}">{$cat.title|lang}</a></h3>
<div class="dl-cat-list">
{volist name="cat.resources" id="r"}
<a href="{:url('index/detail', ['id'=>$r.id])}">{$r.title|lang}</a>
{/volist}
</div>
<a class="dl-cat-more" href="{:url('index/list', ['cid'=>$cat.id])}">{$all_category_text} </a>
</div>
{/volist}
</div>
</section>
</div>
@@ -0,0 +1,41 @@
{block name="style"}<link rel="stylesheet" href="/static/download/css/download.css">{__inline__}{/block}
<div class="dl-wrap">
<div class="dl-crumb">
<a href="{:url('index/index')}">{$site_name}</a><span>/</span>
{present name="cat.title"}
<a href="{:url('index/list', ['cid'=>$cat.id])}">{$cat.title|lang}</a>
{else/}
<strong>{$all_category_text}</strong>
{/present}
</div>
<form class="dl-searchbar" action="{:url('index/search')}" method="get">
<input type="text" name="kw" placeholder="{$search_placeholder}" value="{$keyword|default=''}">
<button type="submit">{$search_text}</button>
</form>
{notempty name="list"}
<ul class="dl-grid">
{volist name="list" id="item"}
<li class="dl-card">
<a href="{:url('index/detail', ['id'=>$item.id])}">
<img class="dl-cover" src="{$item.cover|default='/static/download/img/default.svg'}" alt="{$item.title|lang}">
<span class="dl-name">{$item.title|lang}</span>
</a>
<p class="dl-desc">{$item.intro|default=''}</p>
<span class="dl-meta">{$item.size_text|default='-'}</span>
<a class="dl-card-btn" href="{:url('index/down', ['id'=>$item.id])}">{$download_btn_text}</a>
</li>
{/volist}
</ul>
{notempty name="pager"}
<div class="dl-pager">{$pager|raw}</div>
{/notempty}
{else/}
<div class="dl-empty">{$empty_text|default='暂无资源'}</div>
{/notempty}
</div>
@@ -0,0 +1,42 @@
{block name="style"}<link rel="stylesheet" href="/static/download/css/download.css">{__inline__}{/block}
<div class="dl-wrap">
<div class="dl-crumb">
<a href="{:url('index/index')}">{$site_name}</a><span>/</span>
<strong>{$search_text}</strong>
</div>
<form class="dl-searchbar" action="{:url('index/search')}" method="get">
<input type="text" name="kw" placeholder="{$search_placeholder}" value="{$keyword|default=''}">
<button type="submit">{$search_text}</button>
</form>
{notempty name="list"}
<div class="dl-block" style="border:0;padding:0;background:transparent;">
<div class="dl-block-head">
<h2 class="dl-block-title">{$search_text}{$keyword|default=''}</h2>
</div>
</div>
<ul class="dl-grid">
{volist name="list" id="item"}
<li class="dl-card">
<a href="{:url('index/detail', ['id'=>$item.id])}">
<img class="dl-cover" src="{$item.cover|default='/static/download/img/default.svg'}" alt="{$item.title|lang}">
<span class="dl-name">{$item.title|lang}</span>
</a>
<p class="dl-desc">{$item.intro|default=''}</p>
<span class="dl-meta">{$item.size_text|default='-'}</span>
<a class="dl-card-btn" href="{:url('index/down', ['id'=>$item.id])}">{$download_btn_text}</a>
</li>
{/volist}
</ul>
{notempty name="pager"}
<div class="dl-pager">{$pager|raw}</div>
{/notempty}
{else/}
<div class="dl-empty">{$empty_text|default='未找到相关资源'}</div>
{/notempty}
</div>