mirror of
https://gitee.com/zongzhige/shopxo.git
synced 2026-06-06 03:56:57 +08:00
用户等级
This commit is contained in:
@ -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']))
|
||||
|
||||
@ -171,7 +171,7 @@ class Service
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表删除
|
||||
* 数据列表状态更新
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
|
||||
88
application/plugins/membershiplevel/Admin.php
Executable file
88
application/plugins/membershiplevel/Admin.php
Executable 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]);
|
||||
}
|
||||
}
|
||||
?>
|
||||
138
application/plugins/membershiplevel/Hook.php
Executable file
138
application/plugins/membershiplevel/Hook.php
Executable 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>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
135
application/plugins/membershiplevel/Level.php
Normal file
135
application/plugins/membershiplevel/Level.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
303
application/plugins/membershiplevel/Service.php
Executable file
303
application/plugins/membershiplevel/Service.php
Executable 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']]);
|
||||
}
|
||||
}
|
||||
?>
|
||||
31
application/plugins/membershiplevel/config.json
Executable file
31
application/plugins/membershiplevel/config.json
Executable 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"
|
||||
]
|
||||
}
|
||||
}
|
||||
56
application/plugins/view/membershiplevel/admin/index.html
Executable file
56
application/plugins/view/membershiplevel/admin/index.html
Executable 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 -->
|
||||
49
application/plugins/view/membershiplevel/admin/saveinfo.html
Executable file
49
application/plugins/view/membershiplevel/admin/saveinfo.html
Executable 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 -->
|
||||
92
application/plugins/view/membershiplevel/level/index.html
Normal file
92
application/plugins/view/membershiplevel/level/index.html
Normal 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 -->
|
||||
96
application/plugins/view/membershiplevel/level/saveinfo.html
Normal file
96
application/plugins/view/membershiplevel/level/saveinfo.html
Normal 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">×</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">×</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
44
public/static/plugins/css/membershiplevel/admin.css
Executable file
44
public/static/plugins/css/membershiplevel/admin.css
Executable 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;
|
||||
}
|
||||
1
public/static/plugins/css/membershiplevel/index.html
Executable file
1
public/static/plugins/css/membershiplevel/index.html
Executable file
@ -0,0 +1 @@
|
||||
|
||||
20
public/static/plugins/css/membershiplevel/level.css
Normal file
20
public/static/plugins/css/membershiplevel/level.css
Normal 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);
|
||||
}
|
||||
BIN
public/static/plugins/images/membershiplevel/default-images.jpg
Normal file
BIN
public/static/plugins/images/membershiplevel/default-images.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
1
public/static/plugins/images/membershiplevel/index.html
Executable file
1
public/static/plugins/images/membershiplevel/index.html
Executable 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 |
Reference in New Issue
Block a user