提交 40aac0af 编写于 作者: ModStart's avatar ModStart

develop

上级 95c0dd3b
...@@ -33,9 +33,17 @@ class ConfigController extends Controller ...@@ -33,9 +33,17 @@ class ConfigController extends Controller
public function agreement(AdminConfigBuilder $builder) public function agreement(AdminConfigBuilder $builder)
{ {
$builder->pageTitle('用户协议'); $builder->pageTitle('用户协议');
$builder->switch('Member_AgreementEnable', '用户使用协议开启'); $builder->switch('Member_AgreementEnable', '用户使用协议开启')
$builder->text('Member_AgreementTitle', '用户使用协议标题')->help('默认为 用户使用协议'); ->when('=', true, function ($builder) {
$builder->richHtml('Member_AgreementContent', '用户使用协议内容'); $builder->text('Member_AgreementTitle', '用户使用协议标题')->help('默认为 用户使用协议');
$builder->richHtml('Member_AgreementContent', '用户使用协议内容');
});
$builder->switch('Member_PrivacyEnable', '用户隐私协议开启')
->when('=', true, function ($builder) {
$builder->text('Member_PrivacyTitle', '用户隐私协议标题')->help('默认为 用户隐私协议');
$builder->richHtml('Member_PrivacyContent', '用户隐私协议内容');
});
$builder->formClass('wide'); $builder->formClass('wide');
return $builder->perform(); return $builder->perform();
} }
......
...@@ -41,5 +41,6 @@ class MemberGroupController extends Controller ...@@ -41,5 +41,6 @@ class MemberGroupController extends Controller
->hookSaved(function (Form $form) { ->hookSaved(function (Form $form) {
MemberGroupUtil::clearCache(); MemberGroupUtil::clearCache();
}); });
$builder->repository()->setSortColumn('id');
} }
} }
用户隐私协议配置,用户系统上周增长报表
---
- 新增:用户系统上周增长报表 - 新增:用户系统上周增长报表
- 新增:用户隐私协议配置
- 优化:地址选择模块依赖提示
- 修复:用户分组编辑排序字段问题
@extends($_viewFrame) @extends($_viewFrame)
@section('pageTitleMain'){{modstart_config('Member_AgreementTitle','用户使用协议')}}@endsection @section('pageTitleMain'){{$pageTitle}}@endsection
@section('pageKeywords')用户使用协议@endsection @section('pageKeywords'){{$pageTitle}}@endsection
@section('pageDescription')用户使用协议@endsection @section('pageDescription'){{$pageTitle}}@endsection
@section('body') @section('body')
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
<div class="head"></div> <div class="head"></div>
<div class="body"> <div class="body">
<div class="ub-article"> <div class="ub-article">
<h1 class="ub-text-center">{{modstart_config('Member_AgreementTitle','用户使用协议')}}</h1> <h1 class="ub-text-center">{{$pageTitle}}</h1>
<div class="attr"></div> <div class="attr"></div>
<div class="content ub-html"> <div class="content ub-html">
{!! modstart_config('Member_AgreementContent') !!} {!! $pageContent !!}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -159,11 +159,16 @@ ...@@ -159,11 +159,16 @@
<button type="submit" class="btn btn-primary btn-lg btn-block">提交注册</button> <button type="submit" class="btn btn-primary btn-lg btn-block">提交注册</button>
</div> </div>
</div> </div>
@if(modstart_config('Member_AgreementEnable',false)) @if(modstart_config('Member_AgreementEnable',false)||modstart_config('Member_PrivacyEnable',false))
<div class="line"> <div class="line">
<div class="field"> <div class="field">
<input type="checkbox" name="agreement" value="1" checked class="tw-align-middle" /> <input type="checkbox" name="agreement" value="1" checked class="tw-align-middle" />
<a href="{{modstart_web_url('member/agreement')}}" target="_blank">{{modstart_config('Member_AgreementTitle','用户使用协议')}}</a> @if(modstart_config('Member_AgreementEnable',false))
<a href="{{modstart_web_url('member/agreement')}}" target="_blank">{{modstart_config('Member_AgreementTitle','用户使用协议')}}</a>
@endif
@if(modstart_config('Member_PrivacyEnable',false))
<a href="{{modstart_web_url('member/privacy')}}" target="_blank">{{modstart_config('Member_PrivacyTitle','用户隐私协议')}}</a>
@endif
</div> </div>
</div> </div>
@endif @endif
......
...@@ -18,6 +18,7 @@ use ModStart\Field\AutoRenderedFieldValue; ...@@ -18,6 +18,7 @@ use ModStart\Field\AutoRenderedFieldValue;
use ModStart\Form\Form; use ModStart\Form\Form;
use ModStart\Grid\Grid; use ModStart\Grid\Grid;
use ModStart\Grid\GridFilter; use ModStart\Grid\GridFilter;
use ModStart\Module\ModuleManager;
use ModStart\Repository\Filter\RepositoryFilter; use ModStart\Repository\Filter\RepositoryFilter;
use Module\Member\Auth\MemberUser; use Module\Member\Auth\MemberUser;
use Module\Member\Support\MemberLoginCheck; use Module\Member\Support\MemberLoginCheck;
...@@ -68,7 +69,13 @@ class MemberAddressController extends MemberFrameController implements MemberLog ...@@ -68,7 +69,13 @@ class MemberAddressController extends MemberFrameController implements MemberLog
$builder->pageTitle(($id ? '修改' : '增加') . '地址'); $builder->pageTitle(($id ? '修改' : '增加') . '地址');
$builder->text('name', '姓名')->required(); $builder->text('name', '姓名')->required();
$builder->text('phone', '手机号')->required(); $builder->text('phone', '手机号')->required();
$builder->areaChina('area', '省市地区')->required(); if (ModuleManager::isModuleEnabled('Area')) {
$builder->areaChina('area', '省市地区')->required();
} else {
$html = "<div class='tw-bg-gray-200 tw-rounded tw-px-2'>省市地区需要依赖 <a href='https://modstart.com/m/Area' target='_blank'>Area</a> 模块</div>";
$builder->html('area', '省市地区')->html($html)->addable(true)->required();
}
$builder->textarea('detail', '详细地址')->required(); $builder->textarea('detail', '详细地址')->required();
$builder->text('post', '邮政编码'); $builder->text('post', '邮政编码');
return $builder->perform(ArrayUtil::keepKeys($record, ['name', 'phone', 'area', 'detail', 'post']), return $builder->perform(ArrayUtil::keepKeys($record, ['name', 'phone', 'area', 'detail', 'post']),
......
...@@ -10,6 +10,17 @@ class PageController extends ModuleBaseController ...@@ -10,6 +10,17 @@ class PageController extends ModuleBaseController
{ {
public function agreement() public function agreement()
{ {
return $this->view('member.agreement'); return $this->view('member.page', [
'pageTitle' => modstart_config('Member_AgreementTitle'),
'pageContent' => modstart_config('Member_AgreementContent'),
]);
}
public function privacy()
{
return $this->view('member.page', [
'pageTitle' => modstart_config('Member_PrivacyTitle'),
'pageContent' => modstart_config('Member_PrivacyContent'),
]);
} }
} }
...@@ -7,6 +7,7 @@ $router->group([ ...@@ -7,6 +7,7 @@ $router->group([
], function () use ($router) { ], function () use ($router) {
$router->match(['get', 'post'], 'member/agreement', 'PageController@agreement'); $router->match(['get', 'post'], 'member/agreement', 'PageController@agreement');
$router->match(['get', 'post'], 'member/privacy', 'PageController@privacy');
$router->match(['get', 'post'], 'login', 'AuthController@login'); $router->match(['get', 'post'], 'login', 'AuthController@login');
$router->match(['get', 'post'], 'login/captcha', 'AuthController@loginCaptcha'); $router->match(['get', 'post'], 'login/captcha', 'AuthController@loginCaptcha');
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"require": [ "require": [
"Vendor:>=1.9.0" "Vendor:>=1.9.0"
], ],
"version": "2.1.0", "version": "2.2.0",
"modstartVersion": ">=1.4.0", "modstartVersion": ">=1.4.0",
"author": "官方", "author": "官方",
"description": "提供基础的用户管理服务", "description": "提供基础的用户管理服务",
......
模块预检失败增加查看链接
---
- 新增:模块白名单安装控制 - 新增:模块白名单安装控制
- 优化:模块预检失败增加查看链接
...@@ -7,6 +7,7 @@ namespace Module\ModuleStore\Util; ...@@ -7,6 +7,7 @@ namespace Module\ModuleStore\Util;
use Chumper\Zipper\Zipper; use Chumper\Zipper\Zipper;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use ModStart\Core\Exception\BizException; use ModStart\Core\Exception\BizException;
use ModStart\Core\Input\InputPackage;
use ModStart\Core\Input\Response; use ModStart\Core\Input\Response;
use ModStart\Core\Util\CurlUtil; use ModStart\Core\Util\CurlUtil;
use ModStart\Core\Util\FileUtil; use ModStart\Core\Util\FileUtil;
...@@ -20,8 +21,13 @@ class ModuleStoreUtil ...@@ -20,8 +21,13 @@ class ModuleStoreUtil
public static function remoteModuleData() public static function remoteModuleData()
{ {
return Cache::remember('ModuleStore_Modules', 60, function () { $input = InputPackage::buildFromInput();
return CurlUtil::getJSONData(self::REMOTE_BASE . '/api/store/module'); $memberUserId = $input->getInteger('memberUserId');
$apiToken = $input->getTrimString('apiToken');
return Cache::remember('ModuleStore_Modules:' . $memberUserId, 60, function () use ($apiToken) {
return CurlUtil::getJSONData(self::REMOTE_BASE . '/api/store/module', [
'api_token' => $apiToken,
]);
}); });
} }
...@@ -140,7 +146,7 @@ class ModuleStoreUtil ...@@ -140,7 +146,7 @@ class ModuleStoreUtil
} }
} else { } else {
$require['success'] = false; $require['success'] = false;
$require['resolve'] = "请先安装 $require[name]"; $require['resolve'] = "请先安装 $require[name] <a href='https://modstart.com/m/$m' class='ub-text-white tw-underline' target='_blank'>[点击查看]</a>";
} }
$requires[] = $require; $requires[] = $require;
} }
......
...@@ -431,6 +431,14 @@ export default { ...@@ -431,6 +431,14 @@ export default {
installVersionModule: null, installVersionModule: null,
} }
}, },
watch: {
memberUser: {
handler(n, o) {
this.doLoad()
},
deep: true
}
},
computed: { computed: {
filterModules() { filterModules() {
const results = this.modules.filter(module => { const results = this.modules.filter(module => {
...@@ -609,7 +617,10 @@ export default { ...@@ -609,7 +617,10 @@ export default {
} }
}, },
doLoad() { doLoad() {
this.$api.post(this.$url.admin('module_store/all'), {}, res => { this.$api.post(this.$url.admin('module_store/all'), {
memberUserId: this.memberUser.id,
apiToken: this.storeApiToken,
}, res => {
this.loading = false this.loading = false
this.categories = res.data.categories this.categories = res.data.categories
this.types = res.data.types this.types = res.data.types
......
IDManager新增清除随机Key功能
--- ---
......
...@@ -395,7 +395,7 @@ class DataManager ...@@ -395,7 +395,7 @@ class DataManager
/** /**
* 准备文件到本地可用 * 准备文件到本地可用
* @param $path string 文件路径 /data/xxxxxxx.xxx /data_temp/xxxxxxx.xxx http://www.example.com/data/xxxxx.xxx * @param $path string 文件路径 /data/xxxxxxx.xxx data_temp/xxxxxx.xxx /data_temp/xxxxxxx.xxx http://www.example.com/data/xxxxx.xxx
* @param $option * @param $option
* @return array * @return array
*/ */
......
...@@ -130,7 +130,8 @@ class UeditorManager ...@@ -130,7 +130,8 @@ class UeditorManager
if (!$ignoreCatch && preg_match('/^(http|ftp|https):\\/\\//i', $f)) { if (!$ignoreCatch && preg_match('/^(http|ftp|https):\\/\\//i', $f)) {
$ext = FileUtil::extension($f); $ext = FileUtil::extension($f);
if (in_array('.' . $ext, $config ['catcherAllowFiles'])) { if (in_array('.' . $ext, $config ['catcherAllowFiles'])) {
if ($imageContent = CurlUtil::getRaw($f)) { $imageContent = CurlUtil::getRaw($f);
if ($imageContent) {
$ret = DataManager::upload('image', L('Image') . '.' . $ext, $imageContent, $option); $ret = DataManager::upload('image', L('Image') . '.' . $ext, $imageContent, $option);
if ($ret['code']) { if ($ret['code']) {
$ret['state'] = $ret['msg']; $ret['state'] = $ret['msg'];
......
...@@ -10,7 +10,7 @@ class Html extends AbstractField ...@@ -10,7 +10,7 @@ class Html extends AbstractField
{ {
protected $html = ''; protected $html = '';
protected $plain = false; protected $plain = false;
protected $isLayoutField=true; protected $isLayoutField = true;
public function html($html) public function html($html)
{ {
...@@ -34,9 +34,12 @@ class Html extends AbstractField ...@@ -34,9 +34,12 @@ class Html extends AbstractField
if ($this->plain) { if ($this->plain) {
return $this->html; return $this->html;
} }
$rules = $this->rules();
$requiredRuleHtml = str_contains($rules, 'required') ? '<span class="ub-text-danger ub-text-bold">*</span>' : '';
return <<<EOT return <<<EOT
<div class="line"> <div class="line">
<div class="label"> <div class="label">
{$requiredRuleHtml}
{$this->label}: {$this->label}:
</div> </div>
<div class="field"> <div class="field">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册