From 244991e8e8c33a81862d5501c330ff9065e3da4a Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 26 Oct 2024 10:35:52 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=96=B0=E5=A2=9E=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/SystemController.php | 26 +++++++-- .../assets/js/pages/manage/setting/index.vue | 31 ++++++----- .../js/pages/manage/setting/version.vue | 55 +++++++++++++++++++ resources/assets/js/routes.js | 5 ++ 4 files changed, 98 insertions(+), 19 deletions(-) create mode 100644 resources/assets/js/pages/manage/setting/version.vue diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php index 82984f641..cafee868c 100755 --- a/app/Http/Controllers/Api/SystemController.php +++ b/app/Http/Controllers/Api/SystemController.php @@ -1059,24 +1059,38 @@ class SystemController extends AbstractController * @apiGroup system * @apiName get__updatelog * + * @apiParam {Number} [take] 获取数量,10-100 + * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 */ public function get__updatelog() { + $take = min(100, max(10, intval(Request::input('take')))); $logPath = base_path('CHANGELOG.md'); - $logContent = ""; $logVersion = ""; + $logContent = ""; + $logResults = []; if (file_exists($logPath)) { - $logContent = file_get_contents($logPath); - preg_match("/## \[(.*?)\]/", $logContent, $matchs); - if ($matchs) { - $logVersion = $matchs[1] === "Unreleased" ? $matchs[1] : "v{$matchs[1]}"; + $content = file_get_contents($logPath); + $sections = preg_split("/## \[(.*?)\]/", $content, -1, PREG_SPLIT_DELIM_CAPTURE); + for ($i = 1; $i < count($sections) && count($logResults) < $take; $i += 2) { + $logResults[] = [ + 'title' => $sections[$i], + 'content' => $sections[$i + 1] + ]; } } + if ($logResults) { + $logVersion = $logResults[0]['title']; + $logContent = implode("\n", array_map(function($item) { + return "## " . $item['title'] . $item['content']; + }, $logResults)); + } return Base::retSuccess('success', [ - 'updateLog' => $logContent ?: false, + 'logVersion' => $logVersion, + 'updateLog' => $logContent, ]); } diff --git a/resources/assets/js/pages/manage/setting/index.vue b/resources/assets/js/pages/manage/setting/index.vue index 728ce0259..13d3eff89 100644 --- a/resources/assets/js/pages/manage/setting/index.vue +++ b/resources/assets/js/pages/manage/setting/index.vue @@ -16,17 +16,15 @@ v-for="(item, key) in menu" :key="key" :class="classNameRoute(item.path, item.divided)" - @click="toggleRoute(item.path)">{{$L(item.name)}} -
  • - {{$L('版本')}}: {{version}} - -
  • -
  • - {{$L('版本')}}: {{version}} + @click="toggleRoute(item.path)"> + + + {{$L(item.name)}}
  • @@ -101,6 +99,8 @@ export default { ]) } menu.push(...[ + {path: 'version', name: '更新日志', divided: true}, + {path: 'version-show', name: '版本'}, {path: 'clearCache', name: '清除缓存', divided: true}, {path: 'logout', name: '退出登录'}, ]) @@ -163,8 +163,8 @@ export default { }); break; - case 'version': - Store.set('updateNotification', null); + case 'version-show': + this.onVersion(); break; case 'privacy': @@ -176,6 +176,10 @@ export default { break; default: + if (path === 'version' && !!this.clientNewVersion) { + Store.set('updateNotification', null); + return + } this.goForward({name: 'manage-setting-' + path}); break; } @@ -201,6 +205,7 @@ export default { classNameRoute(path, divided) { return { + "flex": true, "active": this.windowLandscape && this.routeName === `manage-setting-${path}`, "divided": !!divided }; diff --git a/resources/assets/js/pages/manage/setting/version.vue b/resources/assets/js/pages/manage/setting/version.vue new file mode 100644 index 000000000..068eca40e --- /dev/null +++ b/resources/assets/js/pages/manage/setting/version.vue @@ -0,0 +1,55 @@ + + + + diff --git a/resources/assets/js/routes.js b/resources/assets/js/routes.js index ff361d998..b01e2a714 100755 --- a/resources/assets/js/routes.js +++ b/resources/assets/js/routes.js @@ -94,6 +94,11 @@ export default [ path: 'system', component: () => import('./pages/manage/setting/system.vue'), }, + { + name: 'manage-setting-version', + path: 'version', + component: () => import('./pages/manage/setting/version.vue'), + }, { name: 'manage-setting-delete', path: 'delete',