mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-05-23 15:21:36 +08:00
修改系统模块版本管理
This commit is contained in:
parent
794a2777a7
commit
0a8baab073
@ -47,4 +47,23 @@ class Module extends Controller
|
|||||||
[$state, $message] = ModuleService::instance()->install($data['name']);
|
[$state, $message] = ModuleService::instance()->install($data['name']);
|
||||||
$state ? $this->success($message) : $this->error($message);
|
$state ? $this->success($message) : $this->error($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看模块更新
|
||||||
|
* @auth true
|
||||||
|
*/
|
||||||
|
public function change()
|
||||||
|
{
|
||||||
|
$data = $this->_vali(['name.require' => '模块名称不能为空!']);
|
||||||
|
$modules = ModuleService::instance()->online();
|
||||||
|
if (isset($modules[$data['name']])) {
|
||||||
|
$this->module = $modules[$data['name']];
|
||||||
|
foreach ($this->module['changes'] as $key => &$change) {
|
||||||
|
$change['datetime'] = preg_replace("|^(\d{4})\.(\d{2})\.(\d{2}).*?$|", '$1年$2月$3日', $key);
|
||||||
|
}
|
||||||
|
$this->fetch();
|
||||||
|
} else {
|
||||||
|
$this->error('未查询到模块更新记录!');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -17,7 +17,7 @@
|
|||||||
return [
|
return [
|
||||||
'name' => 'admin',
|
'name' => 'admin',
|
||||||
'author' => 'Anyon',
|
'author' => 'Anyon',
|
||||||
'version' => '2020.08.03.00',
|
'version' => '2020.08.01.00',
|
||||||
'content' => 'ThinkAdmin 系统基础模块',
|
'content' => 'ThinkAdmin 系统基础模块',
|
||||||
'changes' => [
|
'changes' => [
|
||||||
'2020.08.03.00' => [
|
'2020.08.03.00' => [
|
||||||
|
30
app/admin/view/module/change.html
Normal file
30
app/admin/view/module/change.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post" autocomplete="off">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<table class="layui-table">
|
||||||
|
<tr>
|
||||||
|
<td>模块名称</td>
|
||||||
|
<td>{$module.name}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>模块描述</td>
|
||||||
|
<td>{$module.content}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>最新版本</td>
|
||||||
|
<td>{$module.version}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<ul class="layui-timeline margin-top-30 margin-bottom-30" style="max-height:400px;overflow:auto">
|
||||||
|
{foreach $module.changes as $key=>$vo}
|
||||||
|
<li class="layui-timeline-item">
|
||||||
|
<i class="layui-icon layui-timeline-axis"></i>
|
||||||
|
<div class="layui-timeline-content layui-text">
|
||||||
|
<h3 class="layui-timeline-title">{$vo.datetime|default=''}</h3>
|
||||||
|
<p>模块版本:{$key|default=''}</p>
|
||||||
|
<p>更新描述:{$vo.content|default=''}</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{/foreach}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
@ -22,7 +22,7 @@
|
|||||||
<td class='text-left nowrap'>
|
<td class='text-left nowrap'>
|
||||||
{if isset($vo.local)} {$vo.local.version}
|
{if isset($vo.local)} {$vo.local.version}
|
||||||
{if $vo.version > $vo.local.version}
|
{if $vo.version > $vo.local.version}
|
||||||
<span class="color-red margin-left-5">{$vo.local.version}</span>
|
<span data-title="查看模块版本" data-modal="{:url('change')}?name={$vo.name}" class="color-red margin-left-5">{$vo.version}</span>
|
||||||
{else}
|
{else}
|
||||||
<span class="color-desc margin-left-5">{$vo.type_desc}</span>
|
<span class="color-desc margin-left-5">{$vo.type_desc}</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
8
composer.lock
generated
8
composer.lock
generated
@ -879,12 +879,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
||||||
"reference": "0cf2b63422aff3efe9ad200b21af1ef88339726a"
|
"reference": "d799064954094a3ca5d548d2b6e1e575a4dbeac5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/0cf2b63422aff3efe9ad200b21af1ef88339726a",
|
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/d799064954094a3ca5d548d2b6e1e575a4dbeac5",
|
||||||
"reference": "0cf2b63422aff3efe9ad200b21af1ef88339726a",
|
"reference": "d799064954094a3ca5d548d2b6e1e575a4dbeac5",
|
||||||
"shasum": "",
|
"shasum": "",
|
||||||
"mirrors": [
|
"mirrors": [
|
||||||
{
|
{
|
||||||
@ -928,7 +928,7 @@
|
|||||||
],
|
],
|
||||||
"description": "ThinkPHP v6.0 Development Library",
|
"description": "ThinkPHP v6.0 Development Library",
|
||||||
"homepage": "http://thinkadmin.top",
|
"homepage": "http://thinkadmin.top",
|
||||||
"time": "2020-08-03T09:30:04+00:00"
|
"time": "2020-08-03T09:33:56+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zoujingli/wechat-developer",
|
"name": "zoujingli/wechat-developer",
|
||||||
|
8
vendor/composer/installed.json
vendored
8
vendor/composer/installed.json
vendored
@ -903,12 +903,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
"url": "https://github.com/zoujingli/ThinkLibrary.git",
|
||||||
"reference": "0cf2b63422aff3efe9ad200b21af1ef88339726a"
|
"reference": "d799064954094a3ca5d548d2b6e1e575a4dbeac5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/0cf2b63422aff3efe9ad200b21af1ef88339726a",
|
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/d799064954094a3ca5d548d2b6e1e575a4dbeac5",
|
||||||
"reference": "0cf2b63422aff3efe9ad200b21af1ef88339726a",
|
"reference": "d799064954094a3ca5d548d2b6e1e575a4dbeac5",
|
||||||
"shasum": "",
|
"shasum": "",
|
||||||
"mirrors": [
|
"mirrors": [
|
||||||
{
|
{
|
||||||
@ -924,7 +924,7 @@
|
|||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"topthink/framework": "^6.0"
|
"topthink/framework": "^6.0"
|
||||||
},
|
},
|
||||||
"time": "2020-08-03T09:30:04+00:00",
|
"time": "2020-08-03T09:33:56+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"think": {
|
"think": {
|
||||||
|
2
vendor/services.php
vendored
2
vendor/services.php
vendored
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
// This file is automatically generated at:2020-08-03 17:36:09
|
// This file is automatically generated at:2020-08-03 18:04:42
|
||||||
declare (strict_types = 1);
|
declare (strict_types = 1);
|
||||||
return array (
|
return array (
|
||||||
0 => 'think\\admin\\Library',
|
0 => 'think\\admin\\Library',
|
||||||
|
@ -48,6 +48,25 @@ class ModuleService extends Service
|
|||||||
return $online;
|
return $online;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取线上模块数据
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function online(): array
|
||||||
|
{
|
||||||
|
$data = $this->app->cache->get('moduleOnlineData', []);
|
||||||
|
if (!empty($data)) return $data;
|
||||||
|
$server = InstallService::instance()->getServer();
|
||||||
|
$result = json_decode(HttpExtend::get("{$server}/admin/api.update/version"), true);
|
||||||
|
if (isset($result['code']) && $result['code'] > 0 && isset($result['data']) && is_array($result['data'])) {
|
||||||
|
$this->app->cache->set('moduleOnlineData', $result['data'], 1800);
|
||||||
|
return $result['data'];
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安装或更新模块
|
* 安装或更新模块
|
||||||
* @param string $name 模块名称
|
* @param string $name 模块名称
|
||||||
@ -55,7 +74,7 @@ class ModuleService extends Service
|
|||||||
*/
|
*/
|
||||||
public function install($name): array
|
public function install($name): array
|
||||||
{
|
{
|
||||||
$this->app->cache->set('module-online-data', []);
|
$this->app->cache->set('moduleOnlineData', []);
|
||||||
$data = InstallService::instance()->grenerateDifference(["app/{$name}"]);
|
$data = InstallService::instance()->grenerateDifference(["app/{$name}"]);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return [0, '没有需要安装的文件', []];
|
return [0, '没有需要安装的文件', []];
|
||||||
@ -77,35 +96,17 @@ class ModuleService extends Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取线上模块数据
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function online(): array
|
|
||||||
{
|
|
||||||
$data = $this->app->cache->get('module-online-data', []);
|
|
||||||
if (!empty($data)) return $data;
|
|
||||||
$server = InstallService::instance()->getServer();
|
|
||||||
$result = json_decode(HttpExtend::get("{$server}/admin/api.update/version"), true);
|
|
||||||
if (isset($result['code']) && $result['code'] > 0 && isset($result['data']) && is_array($result['data'])) {
|
|
||||||
$this->app->cache->set('module-online-data', $result['data'], 1800);
|
|
||||||
return $result['data'];
|
|
||||||
} else {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取系统模块信息
|
* 获取系统模块信息
|
||||||
|
* @param array $data
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getModules(): array
|
public function getModules(array $data = []): array
|
||||||
{
|
{
|
||||||
$data = [];
|
|
||||||
foreach (NodeService::instance()->getModules() as $name) {
|
foreach (NodeService::instance()->getModules() as $name) {
|
||||||
if (is_array($ver = $this->getModuleVersion($name))) {
|
if (is_array($version = $this->getModuleVersion($name))) {
|
||||||
if (preg_match('|^\d{4}\.\d{2}\.\d{2}\.\d{2}$|', $ver['version'])) {
|
if (preg_match('|^\d{4}\.\d{2}\.\d{2}\.\d{2}$|', $version['version'])) {
|
||||||
$data[$name] = $ver;
|
$data[$name] = $version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user