用户等级

This commit is contained in:
devil_gong
2019-04-25 18:19:13 +08:00
parent 55c97e7fd4
commit 766803bcfd
19 changed files with 1091 additions and 27 deletions

View File

@ -1346,7 +1346,6 @@ function ParamsChecked($data, $params)
{
return '验证最小值未定义';
}
$fun = $v['checked_data'];
if(!isset($data[$v['key_name']]) || $data[$v['key_name']] < $v['checked_data'])
{
return $v['error_msg'];
@ -1359,13 +1358,24 @@ function ParamsChecked($data, $params)
{
return '验证最大值未定义';
}
$fun = $v['checked_data'];
if(!isset($data[$v['key_name']]) || $data[$v['key_name']] > $v['checked_data'])
{
return $v['error_msg'];
}
break;
// 相等
case 'eq' :
if(!isset($v['checked_data']))
{
return '验证相等未定义';
}
if(!isset($data[$v['key_name']]) || $data[$v['key_name']] == $v['checked_data'])
{
return $v['error_msg'];
}
break;
// 数据库唯一
case 'unique' :
if(!isset($v['checked_data']))

View File

@ -171,7 +171,7 @@ class Service
}
/**
* 数据列表删除
* 数据列表状态更新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0

View File

@ -0,0 +1,88 @@
<?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\plugins\membershiplevel;
use think\Controller;
use app\plugins\membershiplevel\Service;
use app\service\PluginsService;
/**
* 会员等级插件 - 管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Admin extends Controller
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function index($params = [])
{
$ret = PluginsService::PluginsData('membershiplevel', Service::$base_config_attachment_field, false);
if($ret['code'] == 0)
{
// 等级规则
$this->assign('members_level_rules_list', Service::$members_level_rules_list);
$this->assign('data', $ret['data']);
return $this->fetch('../../../plugins/view/membershiplevel/admin/index');
} else {
return $ret['msg'];
}
}
/**
* 编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function saveinfo($params = [])
{
$ret = PluginsService::PluginsData('membershiplevel', Service::$base_config_attachment_field, false);
if($ret['code'] == 0)
{
// 等级规则
$this->assign('members_level_rules_list', Service::$members_level_rules_list);
$this->assign('data', $ret['data']);
return $this->fetch('../../../plugins/view/membershiplevel/admin/saveinfo');
} else {
return $ret['msg'];
}
}
/**
* 数据保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function save($params = [])
{
// 会员等级数据
$level = Service::LevelDataList();
$params['level_list'] = $level['data'];
return PluginsService::PluginsDataSave(['plugins'=>'membershiplevel', 'data'=>$params]);
}
}
?>

View File

@ -0,0 +1,138 @@
<?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\plugins\membershiplevel;
use think\Controller;
use app\plugins\membershiplevel\Service;
use app\service\PluginsService;
/**
* 会员等级插件 - 钩子入口
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Hook extends Controller
{
/**
* 应用响应入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-09T14:25:44+0800
* @param [array] $params [输入参数]
*/
public function run($params = [])
{
if(!empty($params['hook_name']))
{
switch($params['hook_name'])
{
// style css
case 'plugins_common_header' :
$ret = $this->StyleCss($params);
break;
// 楼层数据上面
case 'plugins_view_home_floor_top' :
$ret = $this->HomeFloorTopAdv($params);
break;
default :
$ret = '';
}
return $ret;
}
}
/**
* 首页楼层顶部广告
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-06T16:16:34+0800
* @param [array] $params [输入参数]
*/
public function HomeFloorTopAdv($params = [])
{
// 获取应用数据
$ret = PluginsService::PluginsData('membershiplevel');
if($ret['code'] == 0)
{
// 有效时间
if(!empty($ret['data']['time_start']))
{
// 是否已开始
if(strtotime($ret['data']['time_start']) > time())
{
return '';
}
}
if(!empty($ret['data']['time_end']))
{
// 是否已结束
if(strtotime($ret['data']['time_end']) < time())
{
return '';
}
}
}
// 获取图片列表
$ret = Service::DataList();
if($ret['code'] == 0 && !empty($ret['data']))
{
$this->assign('data_list', $ret['data']);
return $this->fetch('../../../plugins/view/membershiplevel/index/content');
}
return '';
}
/**
* css
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-06T16:16:34+0800
* @param [array] $params [输入参数]
*/
public function StyleCss($params = [])
{
return '<style type="text/css">
@media only screen and (min-width:640px) {
.plugins-membershiplevel-home-adv ul.am-gallery img {
-webkit-transition: transform .2s ease-in;
-moz-transition: transform .2s ease-in;
-ms-transition: transform .2s ease-in;
-o-transition: transform .2s ease-in;
transition: transform .2s ease-in;
}
.plugins-membershiplevel-home-adv ul.am-gallery img:hover {
-ms-transform: translate3d(0px, -3px, 0px);
-webkit-transform: translate3d(0px, -3px, 0px);
-o-transform: translate3d(0px, -3px, 0px);
transform: translate3d(0px, -3px, 0px);
}
}
@media only screen and (min-width:1025px) {
.plugins-membershiplevel-home-adv {
overflow: hidden;
}
.plugins-membershiplevel-home-adv ul.am-gallery {
width: calc(100% + 20px);
margin-left: -10px;
margin-top: 10px;
}
}
</style>';
}
}
?>

View File

@ -0,0 +1,135 @@
<?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\plugins\membershiplevel;
use think\Controller;
use app\plugins\membershiplevel\Service;
use app\service\PluginsService;
/**
* 会员等级管理插件 - 管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Level extends Controller
{
/**
* 等级页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function index($params = [])
{
$ret = Service::LevelDataList();
if($ret['code'] == 0)
{
$this->assign('data_list', $ret['data']);
$this->assign('params', $params);
return $this->fetch('../../../plugins/view/membershiplevel/level/index');
} else {
return $ret['msg'];
}
}
/**
* 等级编辑
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function saveinfo($params = [])
{
// 数据
$data = [];
if(!empty($params['id']))
{
$data_params = [
'get_id' => $params['id'],
];
$ret = Service::LevelDataList($data_params);
$data = empty($ret['data']) ? [] : $ret['data'];
}
$this->assign('data', $data);
return $this->fetch('../../../plugins/view/membershiplevel/level/saveinfo');
}
/**
* 等级保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-07T08:21:54+0800
* @param [array] $params [输入参数]
*/
public function save($params = [])
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
return Service::LevelDataSave($params);
}
/**
* 等级状态更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-12T22:23:06+0800
* @param [array] $params [输入参数]
*/
public function statusupdate($params = [])
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params['data_field'] = 'level_list';
return Service::DataStatusUpdate($params);
}
/**
* 等级删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-15T11:03:30+0800
* @param [array] $params [输入参数]
*/
public function delete($params = [])
{
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 开始处理
$params['data_field'] = 'level_list';
return Service::DataDelete($params);
}
}
?>

View File

@ -0,0 +1,303 @@
<?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\plugins\membershiplevel;
use app\service\PluginsService;
use app\service\ResourcesService;
/**
* 会员等级服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Service
{
// 基础数据附件字段
public static $base_config_attachment_field = [
'default_level_images'
];
// 等级规则
public static $members_level_rules_list = [
0 => ['value' => 0, 'name' => '积分(可用积分)', 'checked' => true],
1 => ['value' => 1, 'name' => '消费总额(已完成订单)'],
];
/**
* 获取等级数据列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function LevelDataList($params = [])
{
// 数据字段
$data_field = 'level_list';
// 获取数据
$ret = PluginsService::PluginsData('membershiplevel', self::$base_config_attachment_field);
$data = (empty($ret['data']) || empty($ret['data'][$data_field])) ? [] : $ret['data'][$data_field];
if(!empty($data))
{
$common_is_enable_tips = lang('common_is_enable_tips');
foreach($data as &$v)
{
// 是否启用
$v['is_enable_text'] = $common_is_enable_tips[$v['is_enable']]['name'];
// 图片地址
$v['images_url_old'] = $v['images_url'];
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
// 时间
$v['operation_time_time'] = empty($v['operation_time']) ? '' : date('Y-m-d H:i:s', $v['operation_time']);
$v['operation_time_date'] = empty($v['operation_time']) ? '' : date('Y-m-d', $v['operation_time']);
}
}
// 是否读取单条
if(!empty($params['get_id']) && isset($data[$params['get_id']]))
{
$data = $data[$params['get_id']];
}
return DataReturn('处理成功', 0, $data);
}
/**
* 获取等级数据保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function LevelDataSave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'length',
'key_name' => 'name',
'checked_data' => '1,30',
'error_msg' => '名称长度 1~30 个字符',
],
[
'checked_type' => 'empty',
'key_name' => 'images_url',
'checked_data' => '255',
'error_msg' => '请上传图标',
],
[
'checked_type' => 'isset',
'key_name' => 'rules_min',
'error_msg' => '请填写规则最小值',
],
[
'checked_type' => 'isset',
'key_name' => 'rules_max',
'error_msg' => '请填写规则最大值',
],
[
'checked_type' => 'max',
'key_name' => 'discount_rate',
'checked_data' => 0.99,
'is_checked' => 1,
'error_msg' => '折扣率应输入 0.00~0.99 的数字,小数保留两位',
],
[
'checked_type' => 'fun',
'key_name' => 'order_price',
'checked_data' => 'CheckPrice',
'is_checked' => 1,
'error_msg' => '请输入有效的订单满金额',
],
[
'checked_type' => 'fun',
'key_name' => 'full_reduction_price',
'checked_data' => 'CheckPrice',
'is_checked' => 1,
'error_msg' => '请输入有效的满减金额',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 请求参数
$p = [
[
'checked_type' => 'eq',
'key_name' => 'rules_min',
'checked_data' => $params['rules_max'],
'error_msg' => '规则最小值不能最大值相等',
],
[
'checked_type' => 'eq',
'key_name' => 'rules_max',
'checked_data' => $params['rules_min'],
'error_msg' => '规则最大值不能最小值相等',
],
[
'checked_type' => 'max',
'key_name' => 'rules_min',
'checked_data' => intval($params['rules_max']),
'error_msg' => '规则最小值不能大于最大值['.intval($params['rules_max']).']',
],
[
'checked_type' => 'min',
'key_name' => 'rules_max',
'checked_data' => intval($params['rules_min']),
'error_msg' => '规则最大值不能小于最小值['.intval($params['rules_min']).']',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据字段
$data_field = 'level_list';
// 附件
$data_fields = ['images_url'];
$attachment = ResourcesService::AttachmentParams($params, $data_fields);
// 数据
$data = [
'name' => $params['name'],
'rules_min' => intval($params['rules_min']),
'rules_max' => intval($params['rules_max']),
'images_url' => $attachment['data']['images_url'],
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
'discount_rate' => isset($params['discount_rate']) ? $params['discount_rate'] : 0,
'order_price' => empty($params['order_price']) ? 0.00 : PriceNumberFormat($params['order_price']),
'full_reduction_price' => empty($params['full_reduction_price']) ? 0.00 : PriceNumberFormat($params['full_reduction_price']),
'operation_time' => time(),
];
// 原有数据
$ret = PluginsService::PluginsData('membershiplevel', self::$base_config_attachment_field, false);
// 数据id
$data['id'] = (empty($params['id']) || empty($ret['data']) || empty($ret['data'][$data_field][$params['id']])) ? date('YmdHis').GetNumberCode(6) : $params['id'];
$ret['data'][$data_field][$data['id']] = $data;
// 保存
return PluginsService::PluginsDataSave(['plugins'=>'membershiplevel', 'data'=>$ret['data']]);
}
/**
* 数据删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-18
* @desc description
* @param [array] $params [输入参数]
*/
public static function DataDelete($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据字段
$data_field = empty($params['data_field']) ? 'data_list' : $params['data_field'];
// 原有数据
$ret = PluginsService::PluginsData('membershiplevel', self::$base_config_attachment_field, false);
$ret['data'][$data_field] = (empty($ret['data']) || empty($ret['data'][$data_field])) ? [] : $ret['data'][$data_field];
// 删除操作
if(isset($ret['data'][$data_field][$params['id']]))
{
unset($ret['data'][$data_field][$params['id']]);
}
// 保存
return PluginsService::PluginsDataSave(['plugins'=>'membershiplevel', 'data'=>$ret['data']]);
}
/**
* 数据状态更新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-18
* @desc description
* @param [array] $params [输入参数]
*/
public static function DataStatusUpdate($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
],
[
'checked_type' => 'empty',
'key_name' => 'field',
'error_msg' => '操作字段有误',
],
[
'checked_type' => 'in',
'key_name' => 'state',
'checked_data' => [0,1],
'error_msg' => '状态有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据字段
$data_field = empty($params['data_field']) ? 'data_list' : $params['data_field'];
// 原有数据
$ret = PluginsService::PluginsData('membershiplevel', self::$base_config_attachment_field, false);
$ret['data'][$data_field] = (empty($ret['data']) || empty($ret['data'][$data_field])) ? [] : $ret['data'][$data_field];
// 删除操作
if(isset($ret['data'][$data_field][$params['id']]) && is_array($ret['data'][$data_field][$params['id']]))
{
$ret['data'][$data_field][$params['id']][$params['field']] = intval($params['state']);
$ret['data'][$data_field][$params['id']]['operation_time'] = time();
}
// 保存
return PluginsService::PluginsDataSave(['plugins'=>'membershiplevel', 'data'=>$ret['data']]);
}
}
?>

View File

@ -0,0 +1,31 @@
{
"base":{
"plugins":"membershiplevel",
"name":"会员等级",
"logo":"\/static\/upload\/images\/plugins_membershiplevel\/2019\/04\/25\/1556163954923228.jpg",
"author":"Devil",
"author_url":"https:\/\/shopxo.net\/",
"version":"1.0.0",
"desc":"根据不同等级设置不同折扣",
"apply_terminal":[
"pc",
"h5",
"app",
"alipay",
"weixin",
"baidu"
],
"apply_version":[
"1.5.0"
],
"is_home":false
},
"hook":{
"plugins_common_header":[
"app\\plugins\\membershiplevel\\Hook"
],
"plugins_view_home_floor_top":[
"app\\plugins\\membershiplevel\\Hook"
]
}
}

View File

@ -0,0 +1,56 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<legend>
<span class="fs-16">会员等级</span>
<a href="{{:MyUrl('admin/pluginsadmin/index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="membershiplevel-content">
<!-- 基础数据 -->
<div class="am-panel am-panel-secondary membershiplevel-middle-banner">
<div class="am-panel-hd">
<span class="am-panel-title">基础数据</span>
<a class="am-fr" href="{{:PluginsAdminUrl('membershiplevel', 'admin', 'saveinfo')}}">编辑</a>
</div>
<div class="am-panel-bd">
<div class="items">
<label>等级规则模式</label>
<div>
{{if isset($data['level_rules']) and isset($members_level_rules_list[$data['level_rules']])}}
{{:$members_level_rules_list[$data['level_rules']]['name']}}
{{else /}}
未设置,默认[ 积分(可用积分)]
{{/if}}
</div>
</div>
<div class="items">
<label>默认等级图标</label>
<div class="immages-tag">
<img src="{{if !empty($data['default_level_images'])}}{{$data.default_level_images}}{{else /}}{{$attachment_host}}/static/plugins/images/membershiplevel/level-default-images.png{{/if}}" />
</div>
</div>
</div>
</div>
<!-- 会员等级 -->
<div class="am-panel am-panel-secondary membershiplevel-level-list">
<div class="am-panel-hd">
<span class="am-panel-title">会员等级</span>
<a class="am-fr" href="{{:PluginsAdminUrl('membershiplevel', 'level', 'index')}}">编辑</a>
</div>
<div class="am-panel-bd">
<iframe src="{{:PluginsAdminUrl('membershiplevel', 'level', 'index', ['is_admin_index'=>1])}}"></iframe>
</div>
</div>
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,49 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:PluginsAdminUrl('membershiplevel', 'admin', 'save')}}" method="POST" request-type="ajax-url" request-value="{{:PluginsAdminUrl('membershiplevel', 'admin', 'index')}}" enctype="multipart/form-data">
<legend>
<span class="fs-16">会员等级</span>
<a href="{{:PluginsAdminUrl('membershiplevel', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="am-form-group">
<label>等级规则模式<span class="am-form-group-label-tips">默认积分</span></label>
<div>
{{foreach $members_level_rules_list as $v}}
<label class="am-radio-inline m-r-10">
<input type="radio" name="level_rules" value="{{$v.value}}" {{if isset($data['level_rules']) and $data['level_rules'] eq $v['value']}}checked="checked"{{else /}}{{if !isset($data['level_rules']) and isset($v['checked']) and $v['checked'] eq true}}checked="checked"{{/if}}{{/if}} data-am-ucheck /> {{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<div class="am-form-group am-form-file">
<label class="block">默认等级图标<span class="am-form-group-label-tips">建议50像数X50像数</span></label>
<ul class="plug-file-upload-view plugins-default_level_images-view" data-form-name="default_level_images" data-max-number="1" data-dialog-type="images">
{{if !empty($data['default_level_images'])}}
<li>
<input type="text" name="default_level_images" value="{{$data.default_level_images_old}}" data-validation-message="请上传默认等级图标" />
<img src="{{$data.default_level_images}}" />
<i>×</i>
</li>
{{/if}}
</ul>
<div class="plug-file-upload-submit" data-view-tag="ul.plugins-default_level_images-view">+上传图片</div>
</div>
<div class="am-form-group am-form-group-refreshing">
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,92 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
{{if !isset($params['is_admin_index']) or $params['is_admin_index'] neq 1}}
<legend>
<span class="fs-16">会员等级</span>
<a href="{{:PluginsAdminUrl('membershiplevel', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
{{/if}}
<div class="membershiplevel-content">
{{if !isset($params['is_admin_index']) or $params['is_admin_index'] neq 1}}
<!-- operation start -->
<div class="am-g m-t-15 m-b-10">
<a href="{{:PluginsAdminUrl('membershiplevel', 'level', 'saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
</div>
<!-- operation end -->
{{/if}}
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle">
<thead>
<tr>
<th>名称</th>
<th>图标</th>
<th>规则值</th>
<th>优惠信息</th>
<th class="am-hide-sm-only">是否启用</th>
<th class="am-hide-sm-only">操作时间</th>
{{if !isset($params['is_admin_index']) or $params['is_admin_index'] neq 1}}
<th>操作</th>
{{/if}}
</tr>
</thead>
<tbody>
{{if !empty($data_list)}}
{{foreach $data_list as $v}}
<tr id="data-list-{{$v.id}}" {{if isset($v['is_enable']) and $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td>{{$v.name}}</td>
<td {{if !empty($v['bg_color'])}}style="background-color:{{$v.bg_color}};"{{/if}}>
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
<img src="{{$v['images_url']}}" class="am-radius" width="100" />
</a>
{{else /}}
<span class="cr-ccc">暂无图片</span>
{{/if}}
</td>
<td>{{$v.rules_min}}~{{$v.rules_max}}</td>
<td>
满减:{{if $v['order_price'] gt 0 and $v['full_reduction_price'] gt 0}}
满{{$v.order_price}}元 减{{$v.full_reduction_price}}元
{{else /}}
<span class="cr-ccc">无满减</span>
{{/if}}
<br />
折扣:{{if $v['discount_rate']}}
{{$v.discount_rate}}折
{{else /}}
<span class="cr-ccc">无折扣</span>
{{/if}}
</td>
<td class="am-hide-sm-only">
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if isset($v['is_enable']) and $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:PluginsAdminUrl('membershiplevel', 'level', 'statusupdate')}}" data-id="{{$v.id}}" data-state="{{if isset($v['is_enable'])}}{{$v['is_enable']}}{{/if}}" data-field="is_enable" data-is-update-status="1"></a>
</td>
<td class="am-hide-sm-only">{{$v.operation_time_time}}</td>
{{if !isset($params['is_admin_index']) or $params['is_admin_index'] neq 1}}
<td class="view-operation">
<a href="{{:PluginsAdminUrl('membershiplevel', 'level', 'saveinfo', ['id'=>$v['id']])}}">
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-edit"> 编辑</button>
</a>
<button class="am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o submit-delete" data-url="{{:PluginsAdminUrl('membershiplevel', 'level', 'delete')}}" data-id="{{$v.id}}"> 删除</button>
</td>
{{/if}}
</tr>
{{/foreach}}
{{else /}}
<tr><td colspan="5" class="table-no">没有相关数据</td></tr>
{{/if}}
</tbody>
</table>
<!-- list end -->
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -0,0 +1,96 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<legend>
<span class="fs-16">
{{if empty($data['id'])}}
会员等级添加
{{else /}}
会员等级编辑
{{/if}}
</span>
<a href="{{:PluginsAdminUrl('membershiplevel', 'level', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend>
<div class="membershiplevel-content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:PluginsAdminUrl('membershiplevel', 'level', 'save')}}" method="POST" request-type="ajax-url" request-value="{{:PluginsAdminUrl('membershiplevel', 'level', 'index')}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>名称</label>
<input type="text" name="name" placeholder="名称" minlength="1" maxlength="30" data-validation-message="名称格式 1~30 个字符" class="am-radius" {{if !empty($data['name'])}} value="{{$data.name}}"{{/if}} required />
</div>
<div class="am-form-group am-form-file">
<label class="block">图标<span class="am-form-group-label-tips">建议50像数x50像数</span></label>
<ul class="plug-file-upload-view images_url-images-view" data-form-name="images_url" data-max-number="1" data-delete="0" data-dialog-type="images">
<li>
<input type="text" name="images_url" value="{{if !empty($data['images_url'])}}{{$data.images_url}}{{/if}}" data-validation-message="请上传图标" required />
<img src="{{if !empty($data['images_url'])}}{{$data.images_url}}{{else /}}{{$attachment_host}}/static/plugins/images/membershiplevel/default-images.jpg{{/if}}" />
</li>
</ul>
<div class="plug-file-upload-submit" data-view-tag="ul.images_url-images-view">+上传图标</div>
</div>
<div class="am-alert am-alert-warning" data-am-alert="">
<button type="button" class="am-close">&times;</button>
<p>
规则举例 <br>
<span class="mini-tips-text">最小规则0 - 最大规则100 则是小于100
<br> 最小规则1000 - 最大规则0 则是大于1000
<br> 最小规则100 - 最大规则500 则是大于等于100并且小于500
</span>
</p>
</div>
<div class="am-form-group">
<label>规则值</label>
<div class="rules-value">
<input type="number" placeholder="最小值" name="rules_min" data-validation-message="请填写规则最小值" class="am-radius" {{if isset($data['rules_min'])}} value="{{$data.rules_min}}"{{/if}} required />
<span>~</span>
<input type="number" placeholder="最大值" name="rules_max" data-validation-message="请填写规则最大值" class="am-radius" {{if isset($data['rules_max'])}} value="{{$data.rules_max}}"{{/if}} required />
</div>
</div>
<div class="am-alert am-alert-warning" data-am-alert="">
<button type="button" class="am-close">&times;</button>
<p>
优惠说明 <br>
<span class="mini-tips-text">
满减优惠 与 折扣率可<span class="cr-red">叠加使用</span>,如需只使用其中一项优惠,则请注意只需配置该优惠项即可!!!
</span>
</p>
</div>
<div class="am-form-group">
<label>满减优惠<span class="am-form-group-label-tips">计算规则,大于等于[订单满金额]则减[满减金额](不含运费)空或0则无优惠</span></label>
<div class="full-reduction-value">
<span></span>
<input type="number" name="order_price" min="0.00" step="0.01" placeholder="订单满金额" data-validation-message="请输入有效的订单满金额" class="am-radius" {{if !empty($data['order_price'])}} value="{{$data.order_price}}"{{/if}} />
<span></span>
<input type="number" name="full_reduction_price" min="0.00" step="0.01" placeholder="满减金额" data-validation-message="请输入有效的满减金额" class="am-radius" {{if !empty($data['full_reduction_price'])}} value="{{$data.full_reduction_price}}"{{/if}} />
</div>
</div>
<div class="am-form-group">
<label>折扣率<span class="am-form-group-label-tips">空或0则无折扣最大0.99</span></label>
<input type="number" name="discount_rate" placeholder="折扣率" min="0.00" max="0.99" step="0.01" data-validation-message="折扣率应输入 0.00~0.99 的数字,小数保留两位" class="am-radius" {{if !empty($data['discount_rate'])}} value="{{$data.discount_rate}}"{{/if}} />
</div>
<div class="am-form-group">
<label class="block">是否启用</label>
<input name="is_enable" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_enable']) and $data['is_enable'] eq 1) or empty($data)}}checked="true"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" {{if !empty($data['id'])}} value="{{$data.id}}"{{/if}} />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm w100" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,44 @@
/**
* 首页
*/
.membershiplevel-content .items {
margin: 10px 0 20px 0;
border-bottom: 1px dashed #f1f1f1;
padding-bottom: 20px;
}
.membershiplevel-content .items .immages-tag {
border: 1px solid #eee;
text-align: center;
max-width: 60px;
max-height: 60px;
padding: 5px;
}
.membershiplevel-content .items .immages-tag img {
max-width: 100%;
}
.membershiplevel-content .edit-submit {
margin-bottom: 20px;
}
/**
* iframe
*/
.membershiplevel-content .am-panel-bd iframe {
min-height: 300px;
}
/**
* 会员等级
*/
.membershiplevel-level-list .am-panel-bd {
padding: 0;
}
/**
* 编辑页面
*/
.content ul.plug-file-upload-view li {
max-width: 50px;
max-height: 50px;
}

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,20 @@
/**
* 列表
*/
.membershiplevel-content table img, .membershiplevel-content ul.plug-file-upload-view li {
max-width: 50px;
max-height: 50px;
}
/**
* 编辑页面
*/
.membershiplevel-content .rules-value input, .membershiplevel-content .full-reduction-value input {
display: -webkit-inline-box;
}
.membershiplevel-content .rules-value input {
width: calc(50% - 8px);
}
.membershiplevel-content .full-reduction-value input {
width: calc(50% - 18px);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1 @@

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB