Skip to content

Commit 936bc28

Browse files
committed
feat: module refresh all added
1 parent 8a78449 commit 936bc28

File tree

12 files changed

+275
-54
lines changed

12 files changed

+275
-54
lines changed

module/AdminManager/View/widget/serverInfo.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
</table>
7777
<script type="text/javascript">
7878
// 请勿删除,用于获取最新的安全通告(比如框架、模块有重大缺陷的应急通知等)
79-
$('body').append('<script src="https://modstart.com/api/modstart/notice?modules={{urlencode(join(',',$modules))}}"><' + '/script>');
79+
$('body').append('<script src="https://modstart.com/api/modstart/notice?modules={{urlencode($modules)}}"><' + '/script>');
8080
</script>
8181
</div>
8282
</div>

module/AdminManager/Widget/ServerInfoWidget.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Module\AdminManager\Widget;
44

5+
use Illuminate\Support\Str;
56
use ModStart\Widget\AbstractWidget;
67
use Module\AdminManager\Util\ModuleUtil;
78

@@ -12,8 +13,16 @@ class ServerInfoWidget extends AbstractWidget
1213
protected function variables()
1314
{
1415
$phpExtensions = get_loaded_extensions();
15-
return [
16+
$modules = json_encode([
1617
'modules' => ModuleUtil::modules(),
18+
]);
19+
if (function_exists('gzdeflate')) {
20+
$modules = 'V_Z_' . base64_encode(gzdeflate($modules));
21+
} else {
22+
$modules = 'V_' . base64_encode($modules);
23+
}
24+
return [
25+
'modules' => $modules,
1726
'attributes' => $this->formatAttributes(),
1827
'phpExtensions' => $phpExtensions,
1928
];

module/Blog/Docs/module/content.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
22

33
「个人博客」提供了一个简约的模块系统
44

5-
## 功能特性
5+
```mind
6+
功能特性
7+
图文博客
8+
博客分类
9+
博客标签
10+
友情链接
11+
留言本
12+
关于博主
13+
暗黑/白天主题
14+
模块市场扩展
15+
```
616

7-
- 图文博客
8-
- 留言本
917

module/Blog/Docs/release.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 2.7.0
1+
## 2.7.0 界面显示优化,暗黑模式跟随系统
22

33
- 新增:博客分享条增加模块ShareJS是否安装判断
44
- 新增:暗黑模式跟随系统

module/Vendor/QuickRun/Export/ExportHandle.php

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ExportHandle
1515
'pageTitle' => '导出数据',
1616
'defaultExportName' => 'Export',
1717
'headTitles' => [],
18+
'customHeadTitle' => false,
1819
];
1920

2021
private $fetchCallback;
@@ -37,6 +38,12 @@ public function withHeadTitles($headTitles)
3738
return $this;
3839
}
3940

41+
public function withCustomHeadTitle($enable)
42+
{
43+
$this->data['customHeadTitle'] = $enable;
44+
return $this;
45+
}
46+
4047
public function handleFetch($callback)
4148
{
4249
$this->fetchCallback = $callback;
@@ -68,23 +75,48 @@ private function perform($ext, $view, $param = [])
6875
}
6976
$pageTitle = $this->data['pageTitle'];
7077
$defaultExportName = $this->data['defaultExportName'];
78+
$headTitles = $this->data['headTitles'];
79+
$customHeadTitle = $this->data['customHeadTitle'];
7180
$input = InputPackage::buildFromInput();
7281
$page = $input->getPage();
7382
$pageSize = $input->getPageSize(null, null, null, 100);
7483
$search = $input->getJsonAsInput('_param')->getArray('search');
7584
$exportName = $input->getTrimString('exportName', $defaultExportName);
7685
$format = $input->getTrimString('format', $ext);
86+
$checkedHeadTitles = $input->getJson('checkedHeadTitles');
7787

7888
if (Request::isPost()) {
7989
BizException::throwsIfEmpty('导出文件名为空', $exportName);
90+
BizException::throwsIfEmpty('请选择导出列', $checkedHeadTitles);
8091
$paginateData = call_user_func_array($this->fetchCallback, [$page, $pageSize, $search, []]);
92+
if ($customHeadTitle) {
93+
$list = [];
94+
foreach ($paginateData['list'] as $v) {
95+
$one = [];
96+
foreach ($v as $vi => $vv) {
97+
if (in_array($vi, $checkedHeadTitles)) {
98+
$one[] = $vv;
99+
}
100+
}
101+
$list[] = $one;
102+
}
103+
$exportHeadTitles = [];
104+
foreach ($this->data['headTitles'] as $i => $v) {
105+
if (in_array($i, $checkedHeadTitles)) {
106+
$exportHeadTitles[] = $v;
107+
}
108+
}
109+
} else {
110+
$list = $paginateData['list'];
111+
$exportHeadTitles = $this->data['headTitles'];
112+
}
81113
$data = [];
82114
$data['code'] = 0;
83-
$data['list'] = $paginateData['list'];
115+
$data['list'] = $list;
84116
$data['total'] = $paginateData['total'];
85117
$data['finished'] = count($paginateData['list']) != $pageSize;
86118
$data['exportName'] = $exportName . '.' . $format;
87-
$data['exportHeadTitles'] = $this->data['headTitles'];
119+
$data['exportHeadTitles'] = $exportHeadTitles;
88120
return Response::generateSuccessData($data);
89121
}
90122

@@ -94,6 +126,8 @@ private function perform($ext, $view, $param = [])
94126
'exportName' => $exportName,
95127
'total' => $paginateData['total'],
96128
'formats' => $param['formats'],
129+
'customHeadTitle' => $customHeadTitle,
130+
'headTitles' => $headTitles,
97131
]);
98132
}
99133
}

module/Vendor/View/quickRun/export/common.blade.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,22 @@
1515
return {
1616
exportName: '{{$exportName}}',
1717
format: 'xlsx',
18+
checkedHeadTitles: {!! json_encode(array_keys($headTitles)) !!}
19+
}
20+
},
21+
computed:{
22+
allChecked(){
23+
return this.checkedHeadTitles.length === {!! count($headTitles) !!};
1824
}
1925
},
2026
methods: {
27+
onAllCheckChange(v){
28+
if(v){
29+
this.checkedHeadTitles = {!! json_encode(array_keys($headTitles)) !!};
30+
}else{
31+
this.checkedHeadTitles = [];
32+
}
33+
},
2134
doExport() {
2235
MS.importExportWork.doExportExecute(this.format, (page, cb) => {
2336
MS.api.postSuccess(
@@ -26,6 +39,7 @@
2639
page: page,
2740
exportName: this.exportName,
2841
format: this.format,
42+
checkedHeadTitles: JSON.stringify(this.checkedHeadTitles)
2943
},
3044
(res) => {
3145
cb(res.data);
@@ -56,10 +70,27 @@
5670
即将导出 <span class="tw-font-bold">{{$total}}</span> 条记录
5771
</div>
5872
</div>
73+
@if(!empty($customHeadTitle))
74+
<div class="line">
75+
<div class="label">
76+
导出字段
77+
</div>
78+
<div class="field">
79+
<el-checkbox-group v-model="checkedHeadTitles">
80+
@foreach($headTitles as $i=>$t)
81+
<el-checkbox style="min-width:4rem;" :label="{{$i}}" key="{{$t}}">{{$t}}</el-checkbox>
82+
@endforeach
83+
</el-checkbox-group>
84+
<div>
85+
<el-checkbox :value="allChecked" @change="onAllCheckChange">全选</el-checkbox>
86+
</div>
87+
</div>
88+
</div>
89+
@endif
5990
<div class="line">
6091
<div class="label">文件格式</div>
6192
<div class="field">
62-
<el-radio-group v-model="format">
93+
<el-radio-group v-model="format" >
6394
@foreach($formats as $f)
6495
<el-radio label="{{$f}}">{{$f}}</el-radio>
6596
@endforeach

vendor/modstart/modstart/resources/asset/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
"vuedraggable": "^2.24.3",
6161
"vuex": "^3.6.2",
6262
"webix-routie": "^0.4.0",
63-
"xlsx": "^0.16.9"
63+
"xlsx": "^0.16.9",
64+
"date-fns": "1.30.1",
65+
"codepage": "1.14.0"
6466
}
6567
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace ModStart\Command;
4+
5+
use Illuminate\Console\Command;
6+
use Illuminate\Support\Facades\Artisan;
7+
use ModStart\Core\Util\FileUtil;
8+
9+
class ModuleRefreshAllCommand extends Command
10+
{
11+
protected $signature = 'modstart:module-refresh-all';
12+
13+
public function handle()
14+
{
15+
$this->info("ModuleRefreshAll Start");
16+
17+
$this->info(">>> CleanOldAsset");
18+
FileUtil::rm(public_path('asset'));
19+
$this->info(">>> Finished\n");
20+
21+
$this->info(">>> Publish Asset");
22+
$exitCode = Artisan::call('vendor:publish', [
23+
'--provider' => 'ModStart\ModStartServiceProvider',
24+
]);
25+
$output = trim(Artisan::output());
26+
$this->info("ExitCode -> " . $exitCode);
27+
$this->info($output);
28+
$this->info(">>> Finished\n");
29+
30+
$this->info(">>> Reinstall Modules");
31+
$exitCode = Artisan::call('modstart:module-install-all');
32+
$output = trim(Artisan::output());
33+
$this->info("ExitCode -> " . $exitCode);
34+
$this->info($output);
35+
$this->info(">>> Finished\n");
36+
37+
$this->warn("ModuleRefreshAll Finished");
38+
}
39+
40+
}

vendor/modstart/modstart/src/Core/Util/DBLockUtil.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
use NinjaMutex\Lock\MySqlLock;
66
use NinjaMutex\MutexFabric;
77

8+
/**
9+
* Class DBLockUtil
10+
* @package ModStart\Core\Util
11+
* @deprecated delete at 2023-11-30
12+
*/
813
class DBLockUtil
914
{
1015
static $instance = null;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
4+
namespace ModStart\Core\Util;
5+
6+
7+
use NinjaMutex\Lock\MySqlLock;
8+
use NinjaMutex\MutexFabric;
9+
10+
class LockUtil
11+
{
12+
static $instance = null;
13+
14+
/**
15+
* @return MutexFabric
16+
*/
17+
private static function instance()
18+
{
19+
if (null === self::$instance) {
20+
$mysqlLock = new MySqlLock(
21+
config('env.DB_USERNAME'),
22+
config('env.DB_PASSWORD'),
23+
config('env.DB_HOST')
24+
);
25+
$mutexFabric = new MutexFabric('mysql', $mysqlLock);
26+
self::$instance = $mutexFabric;
27+
}
28+
return self::$instance;
29+
}
30+
31+
public static function acquire($name, $timeout = 60)
32+
{
33+
if (RedisUtil::isEnable()) {
34+
$key = "Lock:$name";
35+
if (RedisUtil::setnx($key, time() + $timeout)) {
36+
RedisUtil::expire($key, $timeout);
37+
return true;
38+
}
39+
$ts = RedisUtil::get($key);
40+
if ($ts < time()) {
41+
RedisUtil::delete($key);
42+
return self::acquire($name, $timeout);
43+
}
44+
return false;
45+
} else {
46+
if (self::instance()->get($name)->acquireLock($timeout)) {
47+
return true;
48+
}
49+
}
50+
return false;
51+
}
52+
53+
public static function release($name)
54+
{
55+
if (RedisUtil::isEnable()) {
56+
$key = "Lock:$name";
57+
RedisUtil::delete($key);
58+
} else {
59+
self::instance()->get($name)->releaseLock();
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)