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
+15 -11
View File
@@ -26,7 +26,7 @@ use ywxapp\model\BaseModel;
* 整合以下自愈能力,使一个出问题的插件恢复到「菜单正确 + 表结构完整 + 配置齐全」的状态:
* 1. 重载菜单:refreshMenu()(清旧 admin_power/user_rule + 重建,顺带修复菜单路由前缀)
* 2. 数据库自愈:解析 install.sql 中该插件全部 CREATE TABLE,缺表建表、缺列补列
* 3. 配置行补全:确保 addon_config 表存在该插件配置行(无则按默认 info 写入)
* 3. 配置行补全:确保 common_addonconf 表存在该插件配置行(无则按默认 info 写入)
*
* 用法:
* php think addon:repair <插件名> # 修复指定插件(菜单 + 表 + 配置)
@@ -245,24 +245,25 @@ class AddonRepair extends Command
}
/**
* 配置行补全:确保 addon_config 表有该插件配置行。
* 配置行补全:确保 common_addonconf 表有该插件配置行。
*/
private function repairConfig(AddonService $svc, string $name, Output $output): bool
{
$default = Config::get('database.default');
$prefix = Config::get("database.connections.{$default}.prefix") ?: '';
$configTable = $prefix . 'addon_config';
$configTable = $prefix . 'common_addonconf';
try {
if (!BaseModel::tableExists($configTable)) {
$output->writeln('<comment>[配置] addon_config 表不存在,跳过</comment>');
$output->writeln('<comment>[配置] common_addonconf 表不存在,跳过</comment>');
return true;
}
$row = Db::table($configTable)->where('name', $name)->find();
if (!empty($row)) {
// common_addonconf 设计:每行一个配置项(addon + name 唯一),故按 addon 判断是否存在
$existing = Db::table($configTable)->where('addon', $name)->count();
if ($existing > 0) {
$output->writeln('<comment>[配置] 配置行已存在,跳过</comment>');
return true;
}
// 读取插件默认配置(config.php 返回数组)
// 读取插件默认配置(config.php 返回关联数组 name=>value)
$configFile = $this->addonDir($name) . 'config.php';
$value = [];
if (is_file($configFile)) {
@@ -271,10 +272,13 @@ class AddonRepair extends Command
$value = $cfg;
}
}
$data = [
'name' => $name,
'value' => json_encode($value, JSON_UNESCAPED_UNICODE),
];
if (empty($value)) {
$output->writeln('<comment>[配置] 无默认配置,跳过</comment>');
return true;
}
// 逐配置项写入独立行(与 AddonService::config/$changed 的存储格式一致)
\ywxapp\service\AddonService::config($name, $value);
$data = []; // 已通过 AddonService::config 写入,无需再 insert
// 兼容不同时间戳字段名(createtime/updatetime 或 create_time/update_time)
$cols = Db::query("SHOW COLUMNS FROM `{$configTable}`");
$colNames = array_column($cols, 'Field');