session/cache支持后台配置
parent
d6d3194560
commit
9fe07ee808
|
|
@ -290,7 +290,7 @@ class Admin extends Common
|
||||||
*/
|
*/
|
||||||
public function Logout()
|
public function Logout()
|
||||||
{
|
{
|
||||||
session_destroy();
|
session('admin', null);
|
||||||
return redirect(MyUrl('admin/admin/logininfo'));
|
return redirect(MyUrl('admin/admin/logininfo'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,10 @@ class Cache extends Common
|
||||||
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'cache');
|
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'cache');
|
||||||
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'temp');
|
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'temp');
|
||||||
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'data');
|
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'data');
|
||||||
|
|
||||||
|
// 缓存操作清除
|
||||||
|
\think\facade\Cache::clear();
|
||||||
|
|
||||||
return $this->success('更新成功');
|
return $this->success('更新成功');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ namespace app\admin\controller;
|
||||||
|
|
||||||
use app\service\ConfigService;
|
use app\service\ConfigService;
|
||||||
use app\service\GoodsService;
|
use app\service\GoodsService;
|
||||||
|
use app\service\BaseConfigHandleService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 站点设置
|
* 站点设置
|
||||||
|
|
@ -223,12 +224,23 @@ class Site extends Common
|
||||||
{
|
{
|
||||||
switch($nav_type)
|
switch($nav_type)
|
||||||
{
|
{
|
||||||
|
// 登录
|
||||||
case 'login' :
|
case 'login' :
|
||||||
cache(config('shopxo.cache_user_login_left_key'), null);
|
cache(config('shopxo.cache_user_login_left_key'), null);
|
||||||
|
|
||||||
|
// 密码找回
|
||||||
case 'forgetpwd' :
|
case 'forgetpwd' :
|
||||||
cache(config('shopxo.cache_user_forgetpwd_left_key'), null);
|
cache(config('shopxo.cache_user_forgetpwd_left_key'), null);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// 缓存
|
||||||
|
case 'cache' :
|
||||||
|
$res = BaseConfigHandleService::Run();
|
||||||
|
if($res['code'] != 0)
|
||||||
|
{
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,88 +9,126 @@
|
||||||
|
|
||||||
<!-- form start -->
|
<!-- form start -->
|
||||||
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index')}}" enctype="multipart/form-data">
|
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index')}}" enctype="multipart/form-data">
|
||||||
<div class="am-form-group">
|
<!-- 基础配置 -->
|
||||||
<label>{{$data.home_site_name.name}}</label>
|
<div class="am-panel am-panel-default">
|
||||||
<input type="text" name="{{$data.home_site_name.only_tag}}" minlength="1" placeholder="{{$data.home_site_name.name}}" data-validation-message="{{$data.home_site_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_name.value}}"{{/if}} required />
|
<div class="am-panel-hd">
|
||||||
</div>
|
<h3 class="am-panel-title">基础配置</h3>
|
||||||
<div class="am-form-group">
|
</div>
|
||||||
<label class="block">{{$data.home_site_logo.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo.describe}}</span></label>
|
<div class="am-panel-bd">
|
||||||
<ul class="plug-file-upload-view home_site_logo-images-view" data-form-name="home_site_logo" data-max-number="1" data-delete="0" data-dialog-type="images">
|
<div class="am-form-group">
|
||||||
{{if !empty($data['home_site_logo']['value'])}}
|
<label>{{$data.home_site_name.name}}</label>
|
||||||
<li>
|
<input type="text" name="{{$data.home_site_name.only_tag}}" minlength="1" placeholder="{{$data.home_site_name.name}}" data-validation-message="{{$data.home_site_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_name.value}}"{{/if}} required />
|
||||||
<input type="text" name="home_site_logo" value="{{$data.home_site_logo.value}}" />
|
</div>
|
||||||
<img src="{{:AttachmentPathViewHandle($data.home_site_logo.value)}}" />
|
<div class="am-form-group">
|
||||||
</li>
|
<label class="block">{{$data.home_site_logo.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo.describe}}</span></label>
|
||||||
{{/if}}
|
<ul class="plug-file-upload-view home_site_logo-images-view" data-form-name="home_site_logo" data-max-number="1" data-delete="0" data-dialog-type="images">
|
||||||
</ul>
|
{{if !empty($data['home_site_logo']['value'])}}
|
||||||
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_logo-images-view">+选择logo</div>
|
<li>
|
||||||
|
<input type="text" name="home_site_logo" value="{{$data.home_site_logo.value}}" />
|
||||||
|
<img src="{{:AttachmentPathViewHandle($data.home_site_logo.value)}}" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_logo-images-view">+选择logo</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="block">{{$data.home_site_logo_wap.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_wap.describe}}</span></label>
|
||||||
|
<ul class="plug-file-upload-view home_site_logo_wap-images-view" data-form-name="home_site_logo_wap" data-max-number="1" data-delete="0" data-dialog-type="images">
|
||||||
|
{{if !empty($data['home_site_logo_wap']['value'])}}
|
||||||
|
<li>
|
||||||
|
<input type="text" name="home_site_logo_wap" value="{{$data.home_site_logo_wap.value}}" />
|
||||||
|
<img src="{{:AttachmentPathViewHandle($data.home_site_logo_wap.value)}}" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_logo_wap-images-view">+选择logo</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="block">{{$data.home_site_desktop_icon.name}}<span class="am-form-group-label-tips">{{$data.home_site_desktop_icon.describe}}</span></label>
|
||||||
|
<ul class="plug-file-upload-view home_site_desktop_icon-images-view" data-form-name="home_site_desktop_icon" data-max-number="1" data-delete="0" data-dialog-type="images">
|
||||||
|
{{if !empty($data['home_site_desktop_icon']['value'])}}
|
||||||
|
<li>
|
||||||
|
<input type="text" name="home_site_desktop_icon" value="{{$data.home_site_desktop_icon.value}}" />
|
||||||
|
<img src="{{:AttachmentPathViewHandle($data.home_site_desktop_icon.value)}}" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_desktop_icon-images-view">+选择logo</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_timezone.name}}<span class="am-form-group-label-tips">{{$data.common_timezone.describe}}</span></label>
|
||||||
|
<select name="{{$data.common_timezone.only_tag}}" class="am-radius chosen-select" data-placeholder="{{$data.common_timezone.name}}" data-validation-message="{{$data.common_timezone.error_tips}}" required>
|
||||||
|
{{foreach $site_timezone_list as $k=>$v}}
|
||||||
|
<option value="{{$k}}" {{if isset($data['common_timezone']['value']) and $data['common_timezone']['value'] eq $k}}selected{{/if}}>{{$v}}</option>
|
||||||
|
{{/foreach}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="am-form-group">
|
<!-- 站点状态 -->
|
||||||
<label class="block">{{$data.home_site_logo_wap.name}}<span class="am-form-group-label-tips">{{$data.home_site_logo_wap.describe}}</span></label>
|
<div class="am-panel am-panel-default">
|
||||||
<ul class="plug-file-upload-view home_site_logo_wap-images-view" data-form-name="home_site_logo_wap" data-max-number="1" data-delete="0" data-dialog-type="images">
|
<div class="am-panel-hd">
|
||||||
{{if !empty($data['home_site_logo_wap']['value'])}}
|
<h3 class="am-panel-title">站点状态</h3>
|
||||||
<li>
|
</div>
|
||||||
<input type="text" name="home_site_logo_wap" value="{{$data.home_site_logo_wap.value}}" />
|
<div class="am-panel-bd">
|
||||||
<img src="{{:AttachmentPathViewHandle($data.home_site_logo_wap.value)}}" />
|
<div class="am-form-group">
|
||||||
</li>
|
<label>{{$data.home_site_state.name}}<span class="am-form-group-label-tips">{{$data.home_site_state.describe}}</span></label>
|
||||||
{{/if}}
|
<select name="{{$data.home_site_state.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_site_state.error_tips}}" required>
|
||||||
</ul>
|
{{foreach $site_site_state_list as $v}}
|
||||||
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_logo_wap-images-view">+选择logo</div>
|
<option value="{{$v.value}}" {{if isset($data['home_site_state']['value']) and $data['home_site_state']['value'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
|
||||||
|
{{/foreach}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.home_site_close_reason.name}}<span class="am-form-group-label-tips">{{$data.home_site_close_reason.describe}}</span></label>
|
||||||
|
<textarea rows="3" name="{{$data.home_site_close_reason.only_tag}}" class="am-radius" placeholder="{{$data.home_site_close_reason.name}}" data-validation-message="{{$data.home_site_close_reason.error_tips}}">{{if !empty($data)}}{{$data.home_site_close_reason.value}}{{/if}}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="am-form-group">
|
<!-- 备案信息 -->
|
||||||
<label class="block">{{$data.home_site_desktop_icon.name}}<span class="am-form-group-label-tips">{{$data.home_site_desktop_icon.describe}}</span></label>
|
<div class="am-panel am-panel-default">
|
||||||
<ul class="plug-file-upload-view home_site_desktop_icon-images-view" data-form-name="home_site_desktop_icon" data-max-number="1" data-delete="0" data-dialog-type="images">
|
<div class="am-panel-hd">
|
||||||
{{if !empty($data['home_site_desktop_icon']['value'])}}
|
<h3 class="am-panel-title">备案信息</h3>
|
||||||
<li>
|
</div>
|
||||||
<input type="text" name="home_site_desktop_icon" value="{{$data.home_site_desktop_icon.value}}" />
|
<div class="am-panel-bd">
|
||||||
<img src="{{:AttachmentPathViewHandle($data.home_site_desktop_icon.value)}}" />
|
<div class="am-form-group">
|
||||||
</li>
|
<label>{{$data.home_site_icp.name}}<span class="am-form-group-label-tips">{{$data.home_site_icp.describe}}</span></label>
|
||||||
{{/if}}
|
<input type="text" name="{{$data.home_site_icp.only_tag}}" placeholder="{{$data.home_site_icp.describe}}" data-validation-message="{{$data.home_site_icp.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_icp.value}}"{{/if}} />
|
||||||
</ul>
|
</div>
|
||||||
<div class="plug-file-upload-submit" data-view-tag="ul.home_site_desktop_icon-images-view">+选择logo</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="am-form-group">
|
<div class="am-form-group">
|
||||||
<label>{{$data.common_timezone.name}}<span class="am-form-group-label-tips">{{$data.common_timezone.describe}}</span></label>
|
<label>{{$data.home_site_security_record_name.name}}<span class="am-form-group-label-tips">{{$data.home_site_security_record_name.describe}}</span></label>
|
||||||
<select name="{{$data.common_timezone.only_tag}}" class="am-radius chosen-select" data-placeholder="{{$data.common_timezone.name}}" data-validation-message="{{$data.common_timezone.error_tips}}" required>
|
<input type="text" name="{{$data.home_site_security_record_name.only_tag}}" placeholder="{{$data.home_site_security_record_name.describe}}" data-validation-message="{{$data.home_site_security_record_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_security_record_name.value}}"{{/if}} />
|
||||||
{{foreach $site_timezone_list as $k=>$v}}
|
</div>
|
||||||
<option value="{{$k}}" {{if isset($data['common_timezone']['value']) and $data['common_timezone']['value'] eq $k}}selected{{/if}}>{{$v}}</option>
|
<div class="am-form-group">
|
||||||
{{/foreach}}
|
<label>{{$data.home_site_security_record_url.name}}<span class="am-form-group-label-tips">{{$data.home_site_security_record_url.describe}}</span></label>
|
||||||
</select>
|
<input type="text" name="{{$data.home_site_security_record_url.only_tag}}" placeholder="{{$data.home_site_security_record_url.describe}}" data-validation-message="{{$data.home_site_security_record_url.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_security_record_url.value}}"{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_site_state.name}}<span class="am-form-group-label-tips">{{$data.home_site_state.describe}}</span></label>
|
|
||||||
<select name="{{$data.home_site_state.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.home_site_state.error_tips}}" required>
|
|
||||||
{{foreach $site_site_state_list as $v}}
|
|
||||||
<option value="{{$v.value}}" {{if isset($data['home_site_state']['value']) and $data['home_site_state']['value'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
|
|
||||||
{{/foreach}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_site_close_reason.name}}<span class="am-form-group-label-tips">{{$data.home_site_close_reason.describe}}</span></label>
|
|
||||||
<textarea rows="3" name="{{$data.home_site_close_reason.only_tag}}" class="am-radius" placeholder="{{$data.home_site_close_reason.name}}" data-validation-message="{{$data.home_site_close_reason.error_tips}}">{{if !empty($data)}}{{$data.home_site_close_reason.value}}{{/if}}</textarea>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_content_max_width.name}}<span class="am-form-group-label-tips">{{$data.home_content_max_width.describe}}</span></label>
|
|
||||||
<div class="am-input-group am-input-group-sm">
|
|
||||||
<input type="number" min="0" name="{{$data.home_content_max_width.only_tag}}" placeholder="{{$data.home_content_max_width.name}}" data-validation-message="{{$data.home_content_max_width.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_content_max_width.value}}"{{/if}} />
|
|
||||||
<span class="am-input-group-btn">
|
|
||||||
<button class="am-btn am-btn-default" type="button">px</button>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_static_cache_version.name}}<span class="am-form-group-label-tips">{{$data.home_static_cache_version.describe}}</span></label>
|
<!-- 其它 -->
|
||||||
<input type="text" name="{{$data.home_static_cache_version.only_tag}}" placeholder="{{$data.home_static_cache_version.describe}}" data-validation-message="{{$data.home_static_cache_version.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_static_cache_version.value}}"{{/if}} />
|
<div class="am-panel am-panel-default">
|
||||||
</div>
|
<div class="am-panel-hd">
|
||||||
<div class="am-form-group">
|
<h3 class="am-panel-title">其它</h3>
|
||||||
<label>{{$data.home_footer_info.name}}<span class="am-form-group-label-tips">{{$data.home_footer_info.describe}}</span></label>
|
</div>
|
||||||
<textarea rows="6" name="{{$data.home_footer_info.only_tag}}" class="am-radius" placeholder="{{$data.home_footer_info.name}}" data-validation-message="{{$data.home_footer_info.error_tips}}">{{if !empty($data)}}{{$data.home_footer_info.value}}{{/if}}</textarea>
|
<div class="am-panel-bd">
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.home_static_cache_version.name}}<span class="am-form-group-label-tips">{{$data.home_static_cache_version.describe}}</span></label>
|
||||||
|
<input type="text" name="{{$data.home_static_cache_version.only_tag}}" placeholder="{{$data.home_static_cache_version.describe}}" data-validation-message="{{$data.home_static_cache_version.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_static_cache_version.value}}"{{/if}} />
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.home_footer_info.name}}<span class="am-form-group-label-tips">{{$data.home_footer_info.describe}}</span></label>
|
||||||
|
<textarea rows="6" name="{{$data.home_footer_info.only_tag}}" class="am-radius" placeholder="{{$data.home_footer_info.name}}" data-validation-message="{{$data.home_footer_info.error_tips}}">{{if !empty($data)}}{{$data.home_footer_info.value}}{{/if}}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
|
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
|
||||||
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
|
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
|
||||||
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
||||||
|
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
{{include file="public/header" /}}
|
|
||||||
|
|
||||||
<!-- right content start -->
|
|
||||||
<div class="content-right">
|
|
||||||
<div class="content">
|
|
||||||
<!-- table nav start -->
|
|
||||||
{{include file="site/nav" /}}
|
|
||||||
<!-- table nav end -->
|
|
||||||
|
|
||||||
<!-- form start -->
|
|
||||||
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'beian'])}}" enctype="multipart/form-data">
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_site_icp.name}}<span class="am-form-group-label-tips">{{$data.home_site_icp.describe}}</span></label>
|
|
||||||
<input type="text" name="{{$data.home_site_icp.only_tag}}" placeholder="{{$data.home_site_icp.describe}}" data-validation-message="{{$data.home_site_icp.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_icp.value}}"{{/if}} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_site_security_record_name.name}}<span class="am-form-group-label-tips">{{$data.home_site_security_record_name.describe}}</span></label>
|
|
||||||
<input type="text" name="{{$data.home_site_security_record_name.only_tag}}" placeholder="{{$data.home_site_security_record_name.describe}}" data-validation-message="{{$data.home_site_security_record_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_security_record_name.value}}"{{/if}} />
|
|
||||||
</div>
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label>{{$data.home_site_security_record_url.name}}<span class="am-form-group-label-tips">{{$data.home_site_security_record_url.describe}}</span></label>
|
|
||||||
<input type="text" name="{{$data.home_site_security_record_url.only_tag}}" placeholder="{{$data.home_site_security_record_url.describe}}" data-validation-message="{{$data.home_site_security_record_url.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_security_record_url.value}}"{{/if}} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
|
|
||||||
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
|
|
||||||
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<!-- form end -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- right content end -->
|
|
||||||
|
|
||||||
<!-- footer start -->
|
|
||||||
{{include file="public/footer" /}}
|
|
||||||
<!-- footer end -->
|
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
{{include file="public/header" /}}
|
||||||
|
|
||||||
|
<!-- right content start -->
|
||||||
|
<div class="content-right">
|
||||||
|
<div class="content">
|
||||||
|
<!-- table nav start -->
|
||||||
|
{{include file="site/nav" /}}
|
||||||
|
<!-- table nav end -->
|
||||||
|
|
||||||
|
<!-- form start -->
|
||||||
|
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'cache'])}}" enctype="multipart/form-data">
|
||||||
|
<!-- 基础配置 -->
|
||||||
|
<div class="am-panel am-panel-default">
|
||||||
|
<div class="am-panel-hd">
|
||||||
|
<h3 class="am-panel-title">基础配置</h3>
|
||||||
|
</div>
|
||||||
|
<div class="am-panel-bd">
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_session_is_use_cache.name}}<span class="am-form-group-label-tips">{{$data.common_session_is_use_cache.describe}}</span></label>
|
||||||
|
<select name="{{$data.common_session_is_use_cache.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_session_is_use_cache.error_tips}}" required>
|
||||||
|
{{foreach $common_is_text_list as $v}}
|
||||||
|
<option value="{{$v.id}}" {{if isset($data['common_session_is_use_cache']['value']) and $data['common_session_is_use_cache']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
|
||||||
|
{{/foreach}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_data_is_use_cache.name}}<span class="am-form-group-label-tips">{{$data.common_data_is_use_cache.describe}}</span></label>
|
||||||
|
<select name="{{$data.common_data_is_use_cache.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_data_is_use_cache.error_tips}}" required>
|
||||||
|
{{foreach $common_is_text_list as $v}}
|
||||||
|
<option value="{{$v.id}}" {{if isset($data['common_data_is_use_cache']['value']) and $data['common_data_is_use_cache']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
|
||||||
|
{{/foreach}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Redis配置 -->
|
||||||
|
<div class="am-panel am-panel-default">
|
||||||
|
<div class="am-panel-hd">
|
||||||
|
<h3 class="am-panel-title">Redis配置</h3>
|
||||||
|
</div>
|
||||||
|
<div class="am-panel-bd">
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_cache_redis_host.name}}<span class="am-form-group-label-tips">{{$data.common_cache_redis_host.describe}}</span></label>
|
||||||
|
<input type="text" name="{{$data.common_cache_redis_host.only_tag}}" placeholder="{{$data.common_cache_redis_host.describe}}" data-validation-message="{{$data.common_cache_redis_host.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_cache_redis_host.value}}"{{/if}} />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_cache_redis_port.name}}<span class="am-form-group-label-tips">{{$data.common_cache_redis_port.describe}}</span></label>
|
||||||
|
<input type="text" name="{{$data.common_cache_redis_port.only_tag}}" placeholder="{{$data.common_cache_redis_port.describe}}" data-validation-message="{{$data.common_cache_redis_port.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_cache_redis_port.value}}"{{/if}} />
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_cache_redis_password.name}}<span class="am-form-group-label-tips">{{$data.common_cache_redis_password.describe}}</span></label>
|
||||||
|
<input type="text" name="{{$data.common_cache_redis_password.only_tag}}" placeholder="{{$data.common_cache_redis_password.describe}}" data-validation-message="{{$data.common_cache_redis_password.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_cache_redis_password.value}}"{{/if}} />
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_cache_redis_expire.name}}<span class="am-form-group-label-tips">{{$data.common_cache_redis_expire.describe}}</span></label>
|
||||||
|
<div class="am-input-group am-input-group-sm">
|
||||||
|
<input type="number" min="0" name="{{$data.common_cache_redis_expire.only_tag}}" placeholder="{{$data.common_cache_redis_expire.name}}" data-validation-message="{{$data.common_cache_redis_expire.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_cache_redis_expire.value}}"{{/if}} />
|
||||||
|
<span class="am-input-group-btn">
|
||||||
|
<button class="am-btn am-btn-default" type="button">秒</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label>{{$data.common_cache_redis_prefix.name}}<span class="am-form-group-label-tips">{{$data.common_cache_redis_prefix.describe}}</span></label>
|
||||||
|
<input type="text" name="{{$data.common_cache_redis_prefix.only_tag}}" placeholder="{{$data.common_cache_redis_prefix.describe}}" data-validation-message="{{$data.common_cache_redis_prefix.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_cache_redis_prefix.value}}"{{/if}} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="am-form-group am-form-group-refreshing am-margin-top-lg am-padding-left-0">
|
||||||
|
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
|
||||||
|
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!-- form end -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- right content end -->
|
||||||
|
|
||||||
|
<!-- footer start -->
|
||||||
|
{{include file="public/footer" /}}
|
||||||
|
<!-- footer end -->
|
||||||
|
|
@ -5,9 +5,6 @@
|
||||||
<li {{if $nav_type eq 'siteset'}}class="am-active"{{/if}} data-type="siteset">
|
<li {{if $nav_type eq 'siteset'}}class="am-active"{{/if}} data-type="siteset">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}">网站设置</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'siteset'])}}">网站设置</a>
|
||||||
</li>
|
</li>
|
||||||
<li {{if $nav_type eq 'beian'}}class="am-active"{{/if}} data-type="beian">
|
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'beian'])}}">备案信息</a>
|
|
||||||
</li>
|
|
||||||
<li {{if $nav_type eq 'sitetype'}}class="am-active"{{/if}} data-type="sitetype">
|
<li {{if $nav_type eq 'sitetype'}}class="am-active"{{/if}} data-type="sitetype">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'sitetype'])}}">站点类型</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'sitetype'])}}">站点类型</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -20,15 +17,18 @@
|
||||||
<li {{if $nav_type eq 'forgetpwd'}}class="am-active"{{/if}} data-type="forgetpwd">
|
<li {{if $nav_type eq 'forgetpwd'}}class="am-active"{{/if}} data-type="forgetpwd">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'forgetpwd'])}}">密码找回</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'forgetpwd'])}}">密码找回</a>
|
||||||
</li>
|
</li>
|
||||||
<li {{if $nav_type eq 'attachment'}}class="am-active"{{/if}} data-type="attachment">
|
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'attachment'])}}">附件</a>
|
|
||||||
</li>
|
|
||||||
<li {{if $nav_type eq 'verify'}}class="am-active"{{/if}} data-type="verify">
|
<li {{if $nav_type eq 'verify'}}class="am-active"{{/if}} data-type="verify">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'verify'])}}">验证码</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'verify'])}}">验证码</a>
|
||||||
</li>
|
</li>
|
||||||
<li {{if $nav_type eq 'orderaftersale'}}class="am-active"{{/if}} data-type="orderaftersale">
|
<li {{if $nav_type eq 'orderaftersale'}}class="am-active"{{/if}} data-type="orderaftersale">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'orderaftersale'])}}">订单售后</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'orderaftersale'])}}">订单售后</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li {{if $nav_type eq 'attachment'}}class="am-active"{{/if}} data-type="attachment">
|
||||||
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'attachment'])}}">附件</a>
|
||||||
|
</li>
|
||||||
|
<li {{if $nav_type eq 'cache'}}class="am-active"{{/if}} data-type="cache">
|
||||||
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'cache'])}}">缓存</a>
|
||||||
|
</li>
|
||||||
<li {{if $nav_type eq 'extends'}}class="am-active"{{/if}} data-type="extends">
|
<li {{if $nav_type eq 'extends'}}class="am-active"{{/if}} data-type="extends">
|
||||||
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'extends'])}}">扩展项</a>
|
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'extends'])}}">扩展项</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -350,11 +350,6 @@ class Common extends Controller
|
||||||
$this->assign('home_seo_site_keywords', MyC('home_seo_site_keywords'));
|
$this->assign('home_seo_site_keywords', MyC('home_seo_site_keywords'));
|
||||||
$this->assign('home_seo_site_description', MyC('home_seo_site_description'));
|
$this->assign('home_seo_site_description', MyC('home_seo_site_description'));
|
||||||
|
|
||||||
// 页面最大宽度
|
|
||||||
$max_width = MyC('home_content_max_width', 0, true);
|
|
||||||
$max_width_style = ($max_width == 0) ? '' : 'max-width:'.$max_width.'px;';
|
|
||||||
$this->assign('max_width_style', $max_width_style);
|
|
||||||
|
|
||||||
// 用户数据
|
// 用户数据
|
||||||
$this->assign('user', $this->user);
|
$this->assign('user', $this->user);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,185 @@
|
||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Devil
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
namespace app\service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置处理服务层
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-25
|
||||||
|
* @desc description
|
||||||
|
*/
|
||||||
|
class BaseConfigHandleService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 运行入口
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-25
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
public static function Run($params = [])
|
||||||
|
{
|
||||||
|
// session配置
|
||||||
|
$ret = self::SessionHandle($params);
|
||||||
|
if($ret['code'] != 0)
|
||||||
|
{
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cache配置
|
||||||
|
$ret = self::CacheHandle($params);
|
||||||
|
if($ret['code'] != 0)
|
||||||
|
{
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* session配置处理
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-25
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
public static function SessionHandle($params = [])
|
||||||
|
{
|
||||||
|
if(MyC('common_session_is_use_cache') == 1)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
// 使用redis
|
||||||
|
'type' => 'redis',
|
||||||
|
// 连接地址
|
||||||
|
'host' => MyC('common_cache_redis_host', '127.0.0.1', true),
|
||||||
|
// 端口号
|
||||||
|
'port' => MyC('common_cache_redis_port', 6379, true),
|
||||||
|
// 密码
|
||||||
|
'password' => MyC('common_cache_redis_password', '', true),
|
||||||
|
// 全局缓存有效期、默认3600秒
|
||||||
|
'expire' => MyC('common_cache_redis_expire', 3600, true),
|
||||||
|
// 缓存前缀
|
||||||
|
'prefix' => MyC('common_cache_redis_prefix', 'shopxo', true),
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$config = [
|
||||||
|
// session_id
|
||||||
|
'id' => '',
|
||||||
|
// SESSION_ID的提交变量,解决flash上传跨域
|
||||||
|
'var_session_id' => '',
|
||||||
|
// SESSION 前缀
|
||||||
|
'prefix' => 'shopxo',
|
||||||
|
// 驱动方式 支持redis memcache memcached
|
||||||
|
'type' => '',
|
||||||
|
// 是否自动开启 SESSION
|
||||||
|
'auto_start' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// 配置文件
|
||||||
|
$config_file = ROOT.'config'.DS.'session.php';
|
||||||
|
|
||||||
|
// 保存文件
|
||||||
|
return self::ConfigFileSave($config_file, $config, 'Session配置');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cache配置处理
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-25
|
||||||
|
* @desc description
|
||||||
|
* @param [array] $params [输入参数]
|
||||||
|
*/
|
||||||
|
public static function CacheHandle($params = [])
|
||||||
|
{
|
||||||
|
// 是否使用缓存
|
||||||
|
if(MyC('common_data_is_use_cache') == 1)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
// 使用redis
|
||||||
|
'type' => 'redis',
|
||||||
|
// 连接地址
|
||||||
|
'host' => MyC('common_cache_redis_host', '127.0.0.1', true),
|
||||||
|
// 端口号
|
||||||
|
'port' => MyC('common_cache_redis_port', 6379, true),
|
||||||
|
// 密码
|
||||||
|
'password' => MyC('common_cache_redis_password', '', true),
|
||||||
|
// 全局缓存有效期(0为永久有效)
|
||||||
|
'expire' => MyC('common_cache_redis_expire', 0, true),
|
||||||
|
// 缓存前缀
|
||||||
|
'prefix' => MyC('common_cache_redis_prefix', 'shopxo', true),
|
||||||
|
];
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$config = [
|
||||||
|
// 驱动方式
|
||||||
|
'type' => 'File',
|
||||||
|
// 缓存保存目录
|
||||||
|
'path' => '',
|
||||||
|
// 缓存前缀
|
||||||
|
'prefix' => 'shopxo',
|
||||||
|
// 缓存有效期 0表示永久缓存
|
||||||
|
'expire' => 0,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置文件
|
||||||
|
$config_file = ROOT.'config'.DS.'cache.php';
|
||||||
|
|
||||||
|
// 保存文件
|
||||||
|
return self::ConfigFileSave($config_file, $config, '缓存配置');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配置文件保存
|
||||||
|
* @author Devil
|
||||||
|
* @blog http://gong.gg/
|
||||||
|
* @version 1.0.0
|
||||||
|
* @date 2020-09-25
|
||||||
|
* @desc description
|
||||||
|
* @param [string] $config_file [文件路径]
|
||||||
|
* @param [array] $config [配置信息]
|
||||||
|
* @param [string] $name [描述名称]
|
||||||
|
*/
|
||||||
|
private static function ConfigFileSave($config_file, $config, $name)
|
||||||
|
{
|
||||||
|
// 是否有写权限
|
||||||
|
if(file_exists($config_file) && !is_writable($config_file))
|
||||||
|
{
|
||||||
|
return DataReturn('缓存配置文件没有操作权限'.'['.$config_file.']', -3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成配置文件
|
||||||
|
$ret = @file_put_contents($config_file, "<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Devil
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// {$name}\nreturn ".var_export($config, true).";\n?>");
|
||||||
|
if($ret === false)
|
||||||
|
{
|
||||||
|
return DataReturn($name.'处理失败['.$config_file.']', -10);
|
||||||
|
}
|
||||||
|
return DataReturn('处理成功', 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
@ -1 +1,3 @@
|
||||||
database.php
|
database.php
|
||||||
|
cache.php
|
||||||
|
session.php
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Devil
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 缓存设置
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
return [
|
|
||||||
// 驱动方式
|
|
||||||
'type' => 'File',
|
|
||||||
// 缓存保存目录
|
|
||||||
'path' => '',
|
|
||||||
// 缓存前缀
|
|
||||||
'prefix' => '',
|
|
||||||
// 缓存有效期 0表示永久缓存
|
|
||||||
'expire' => 0,
|
|
||||||
];
|
|
||||||
?>
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Devil
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 会话设置
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
return [
|
|
||||||
'id' => '',
|
|
||||||
// SESSION_ID的提交变量,解决flash上传跨域
|
|
||||||
'var_session_id' => '',
|
|
||||||
// SESSION 前缀
|
|
||||||
'prefix' => 'shopxo',
|
|
||||||
// 驱动方式 支持redis memcache memcached
|
|
||||||
'type' => '',
|
|
||||||
// 是否自动开启 SESSION
|
|
||||||
'auto_start' => true,
|
|
||||||
];
|
|
||||||
?>
|
|
||||||
|
|
@ -54,7 +54,7 @@ form.am-form .am-form-group-refreshing, .plug-file-upload-view { border-bottom:
|
||||||
/**
|
/**
|
||||||
* 公共提示信息
|
* 公共提示信息
|
||||||
*/
|
*/
|
||||||
#common-prompt {position:fixed;top:20px;left:0;right:0;text-align:center;padding:10px 15px;font-size:14px;z-index:10000; border-radius: 2px; width: 260px; margin: 0 auto;}
|
#common-prompt {position:fixed;top:20px;left:0;right:0;text-align:center;padding:10px 15px;font-size:14px;z-index:10000; border-radius: 2px; width: 260px; margin: 0 auto; word-break: break-all;}
|
||||||
#common-prompt.am-alert-danger { background-color: #fef0f0; border-color: #f9d4d4; color: #f56c6c; box-shadow: 0 2px 4px #fef0f0, 0 0 6px rgba(0, 0, 0, 0); }
|
#common-prompt.am-alert-danger { background-color: #fef0f0; border-color: #f9d4d4; color: #f56c6c; box-shadow: 0 2px 4px #fef0f0, 0 0 6px rgba(0, 0, 0, 0); }
|
||||||
#common-prompt.am-alert-warning { background-color: #ffe7d5; border-color: #fbceac; color: #f37b1d; box-shadow: 0 2px 4px #ffe7d5, 0 0 6px rgba(0, 0, 0, 0); }
|
#common-prompt.am-alert-warning { background-color: #ffe7d5; border-color: #fbceac; color: #f37b1d; box-shadow: 0 2px 4px #ffe7d5, 0 0 6px rgba(0, 0, 0, 0); }
|
||||||
#common-prompt.am-alert-success { background-color: #e3fbd6; border-color: #bbe8a3; color: #67c23a; box-shadow: 0 2px 4px #e3fbd6, 0 0 6px rgba(0, 0, 0, 0); }
|
#common-prompt.am-alert-success { background-color: #e3fbd6; border-color: #bbe8a3; color: #67c23a; box-shadow: 0 2px 4px #e3fbd6, 0 0 6px rgba(0, 0, 0, 0); }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue