no message

This commit is contained in:
kuaifan 2025-05-09 00:13:11 +08:00
parent 176e5de531
commit 02708807bd
2 changed files with 40 additions and 28 deletions

View File

@ -155,7 +155,7 @@ class AppsController extends AbstractController
} }
$status = str_replace(['successful', 'failed'], ['installed', 'error'], $status); $status = str_replace(['successful', 'failed'], ['installed', 'error'], $status);
if (empty($status) || !in_array($status, ['installed', 'error'])) { if (!in_array($status, ['installed', 'error'])) {
return Base::retError('状态无效'); return Base::retError('状态无效');
} }

View File

@ -93,15 +93,7 @@ class Apps
// 获取本地安装信息 // 获取本地安装信息
$localInfo = self::getAppLocalInfo($appName); $localInfo = self::getAppLocalInfo($appName);
$localInfo['installed_num']++;
// 保存版本信息到.applocal文件
$localUpdate = [
'status' => $command === 'up' ? 'installing' : 'not_installed',
'installed_num' => $localInfo['installed_num'] + 1,
'installed_version' => $versionInfo['version'],
];
$localUpdate[$command === 'up' ? 'installed_at' : 'uninstalled_at'] = date('Y-m-d H:i:s');
self::saveAppLocalInfo($appName, $localUpdate);
// 生成docker-compose.yml文件 // 生成docker-compose.yml文件
$res = self::generateDockerComposeYml($versionInfo['compose_file'], $localInfo['params']); $res = self::generateDockerComposeYml($versionInfo['compose_file'], $localInfo['params']);
@ -110,8 +102,17 @@ class Apps
} }
$RESULTS['generate'] = $res['data']; $RESULTS['generate'] = $res['data'];
// 保存版本信息到.applocal文件
$localUpdate = [
'status' => $command === 'up' ? 'installing' : 'uninstalling',
'installed_num' => $localInfo['installed_num'],
'installed_version' => $versionInfo['version'],
$command === 'up' ? 'installed_at' : 'uninstalled_at' => date('Y-m-d H:i:s'),
];
self::saveAppLocalInfo($appName, $localUpdate);
// 执行docker-compose命令 // 执行docker-compose命令
$callbackUrl = "http://host.docker.internal:" . env("APP_PORT") . "/api/apps/update/status?installed_num=" . $localUpdate['installed_num']; $callbackUrl = "http://host.docker.internal:" . env("APP_PORT") . "/api/apps/update/status?installed_num=" . $localInfo['installed_num'];
$res = self::curl("apps/{$command}/{$appName}?callback_url=" . urlencode($callbackUrl)); $res = self::curl("apps/{$command}/{$appName}?callback_url=" . urlencode($callbackUrl));
if (Base::isError($res)) { if (Base::isError($res)) {
return $res; return $res;
@ -130,7 +131,14 @@ class Apps
*/ */
public static function dockerComposeDown(string $appName, string $version = 'latest'): array public static function dockerComposeDown(string $appName, string $version = 'latest'): array
{ {
return self::dockerComposeUp($appName, $version, 'down'); $res = self::dockerComposeUp($appName, $version, 'down');
if (Base::isSuccess($res)) {
self::nginxUpdate($appName);
}
self::saveAppLocalInfo($appName, [
'status' => Base::isSuccess($res) ? 'not_installed' : 'error',
]);
return $res;
} }
/** /**
@ -223,7 +231,7 @@ class Apps
// 处理描述(支持多语言) // 处理描述(支持多语言)
if (isset($configData['description'])) { if (isset($configData['description'])) {
$info['description'] = self::formatMultiLanguageField($configData['description']); $info['description'] = self::getMultiLanguageField($configData['description']);
} }
// 处理字段 // 处理字段
@ -251,12 +259,12 @@ class Apps
// 处理label支持多语言 // 处理label支持多语言
if (isset($field['label'])) { if (isset($field['label'])) {
$normalizedField['label'] = self::formatMultiLanguageField($field['label']); $normalizedField['label'] = self::getMultiLanguageField($field['label']);
} }
// 处理placeholder支持多语言 // 处理placeholder支持多语言
if (isset($field['placeholder'])) { if (isset($field['placeholder'])) {
$normalizedField['placeholder'] = self::formatMultiLanguageField($field['placeholder']); $normalizedField['placeholder'] = self::getMultiLanguageField($field['placeholder']);
} }
// 处理其他属性 // 处理其他属性
@ -297,7 +305,7 @@ class Apps
'installed_at' => '', // 安装/更新的时间 'installed_at' => '', // 安装/更新的时间
'installed_num' => 0, // 安装/更新的次数 'installed_num' => 0, // 安装/更新的次数
'installed_version' => '', // 安装/更新的版本 'installed_version' => '', // 安装/更新的版本
'status' => 'not_installed', // 应用状态: installing, installed, not_installed, error 'status' => 'not_installed', // 应用状态: installing, installed, uninstalling, not_installed, error
'params' => [], // 用户自定义参数值 'params' => [], // 用户自定义参数值
'resources' => [ 'resources' => [
'cpu_limit' => '', // CPU限制例如 '0.5' 或 '2' 'cpu_limit' => '', // CPU限制例如 '0.5' 或 '2'
@ -452,23 +460,27 @@ class Apps
} }
/** /**
* 格式化多语言字段 * 获取多语言字段
* *
* @param mixed $field 要处理的字段值 * @param mixed $field 要处理的字段值
* @return array 格式化后的多语言数组 * @return mixed 处理后的字段值
*/ */
private static function formatMultiLanguageField(mixed $field): array private static function getMultiLanguageField(mixed $field): mixed
{ {
if (is_array($field)) { // 判断单语言字段,直接返回
// 多语言字段 if (!is_array($field)) {
$result = $field; return $field;
$firstLang = array_key_first($result);
$result['default'] = $result[$firstLang];
return $result;
} else {
// 单语言字段
return ['default' => $field];
} }
// 空数组检查
if (empty($field)) {
return null;
}
$lang = Base::headerOrInput('language');
// 使用null合并运算符简化
return $field[$lang] ?? $field[array_key_first($field)];
} }
/** /**