mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-01-07 05:38:15 +00:00
后台新增会员管理
This commit is contained in:
parent
24c45cd79e
commit
3739b09022
186
application/admin/controller/article/WechatNews.php
Normal file
186
application/admin/controller/article/WechatNews.php
Normal file
@ -0,0 +1,186 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\article;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use service\UtilService as Util;
|
||||
use service\JsonService as Json;
|
||||
use service\UploadService as Upload;
|
||||
use think\Request;
|
||||
use app\admin\model\article\ArticleCategory as ArticleCategoryModel;
|
||||
use app\admin\model\article\Article as ArticleModel;
|
||||
use app\admin\model\system\SystemAttachment;
|
||||
|
||||
/**
|
||||
* 图文管理
|
||||
* Class WechatNews
|
||||
* @package app\admin\controller\wechat
|
||||
*/
|
||||
class WechatNews extends AuthController
|
||||
{
|
||||
/**
|
||||
* 显示后台管理员添加的图文
|
||||
* @return mixed
|
||||
*/
|
||||
public function index($cid = 0)
|
||||
{
|
||||
$where = Util::getMore([
|
||||
['title','']
|
||||
],$this->request);
|
||||
if($cid)
|
||||
$where['cid'] = $cid;
|
||||
else
|
||||
$where['cid'] = '';
|
||||
$this->assign('where',$where);
|
||||
$where['merchant'] = 0;//区分是管理员添加的图文显示 0 还是 商户添加的图文显示 1
|
||||
$this->assign('cid',$cid);
|
||||
$this->assign(ArticleModel::getAll($where));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示页面 添加和删除
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(){
|
||||
$id = input('id');
|
||||
$cid = input('cid');
|
||||
$news = array();
|
||||
$news['id'] = '';
|
||||
$news['image_input'] = '';
|
||||
$news['title'] = '';
|
||||
$news['author'] = '';
|
||||
$news['content'] = '';
|
||||
$news['synopsis'] = '';
|
||||
$news['url'] = '';
|
||||
$news['cid'] = array();
|
||||
if($id){
|
||||
$news = \app\admin\model\wechat\WechatNews::where('n.id',$id)->alias('n')->field('n.*,c.content')->join('__WECHAT_NEWS_CONTENT__ c','c.nid=n.id')->find();
|
||||
if(!$news) return $this->failedNotice('数据不存在!');
|
||||
$news['cid'] = explode(',',$news['cid']);
|
||||
// dump($news);
|
||||
}
|
||||
$all = array();
|
||||
$select = 0;
|
||||
if(!$cid)
|
||||
$cid = '';
|
||||
else {
|
||||
if($id){
|
||||
$all = ArticleCategoryModel::where('id',$cid)->where('hidden','neq',0)->column('id,title');
|
||||
$select = 1;
|
||||
}else{
|
||||
$all = ArticleCategoryModel::where('id',$cid)->column('id,title');
|
||||
$select = 1;
|
||||
}
|
||||
|
||||
}
|
||||
if(empty($all)){
|
||||
$all = ArticleCategoryModel::getField('id,title');//新闻分类
|
||||
$select = 0;
|
||||
}
|
||||
$this->assign('all',$all);
|
||||
$this->assign('news',$news);
|
||||
$this->assign('cid',$cid);
|
||||
$this->assign('select',$select);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传图文图片
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function upload_image(){
|
||||
$res = Upload::Image($_POST['file'],'wechat/image/'.date('Ymd'));
|
||||
//产品图片上传记录
|
||||
$fileInfo = $res->fileInfo->getinfo();
|
||||
SystemAttachment::attachmentAdd($res->fileInfo->getSaveName(),$fileInfo['size'],$fileInfo['type'],$res->dir,'',5);
|
||||
if(!$res->status) return Json::fail($res->error);
|
||||
return Json::successful('上传成功!',['url'=>$res->filePath]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加和修改图文
|
||||
* @param Request $request
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function add_new(Request $request){
|
||||
$post = $request->post();
|
||||
$data = Util::postMore([
|
||||
['id',0],
|
||||
['cid',[]],
|
||||
'title',
|
||||
'author',
|
||||
'image_input',
|
||||
'content',
|
||||
'synopsis',
|
||||
'share_title',
|
||||
'share_synopsis',
|
||||
['visit',0],
|
||||
['sort',0],
|
||||
'url',
|
||||
['status',1],],$request);
|
||||
$data['cid'] = implode(',',$data['cid']);
|
||||
$content = $data['content'];
|
||||
unset($data['content']);
|
||||
if($data['id']){
|
||||
$id = $data['id'];
|
||||
unset($data['id']);
|
||||
ArticleModel::beginTrans();
|
||||
$res1 = ArticleModel::edit($data,$id,'id');
|
||||
$res2 = ArticleModel::setContent($id,$content);
|
||||
if($res1 && $res2)
|
||||
$res = true;
|
||||
else
|
||||
$res =false;
|
||||
// dump($res);
|
||||
// exit();
|
||||
ArticleModel::checkTrans($res);
|
||||
if($res)
|
||||
return Json::successful('修改图文成功!',$id);
|
||||
else
|
||||
return Json::fail('修改图文失败!',$id);
|
||||
}else{
|
||||
$data['add_time'] = time();
|
||||
$data['admin_id'] = $this->adminId;
|
||||
ArticleModel::beginTrans();
|
||||
$res1 = ArticleModel::set($data);
|
||||
$res2 = false;
|
||||
if($res1)
|
||||
$res2 = ArticleModel::setContent($res1->id,$content);
|
||||
if($res1 && $res2)
|
||||
$res = true;
|
||||
else
|
||||
$res =false;
|
||||
ArticleModel::checkTrans($res);
|
||||
if($res)
|
||||
return Json::successful('添加图文成功!',$res1->id);
|
||||
else
|
||||
return Json::successful('添加图文失败!',$res1->id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除图文
|
||||
* @param $id
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
$res = ArticleModel::del($id);
|
||||
if(!$res)
|
||||
return Json::fail('删除失败,请稍候再试!');
|
||||
else
|
||||
return Json::successful('删除成功!');
|
||||
}
|
||||
|
||||
public function merchantIndex(){
|
||||
$where = Util::getMore([
|
||||
['title','']
|
||||
],$this->request);
|
||||
$this->assign('where',$where);
|
||||
$where['cid'] = input('cid');
|
||||
$where['merchant'] = 1;//区分是管理员添加的图文显示 0 还是 商户添加的图文显示 1
|
||||
$this->assign(ArticleModel::getAll($where));
|
||||
return $this->fetch();
|
||||
}
|
||||
}
|
||||
335
application/admin/controller/user/UserLevel.php
Normal file
335
application/admin/controller/user/UserLevel.php
Normal file
@ -0,0 +1,335 @@
|
||||
<?php
|
||||
namespace app\admin\controller\user;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use app\admin\model\system\SystemUserLevel;
|
||||
use app\admin\model\system\SystemUserTask;
|
||||
use service\FormBuilder as Form;
|
||||
use service\JsonService;
|
||||
use service\UtilService;
|
||||
use think\Url;
|
||||
use traits\CurdControllerTrait;
|
||||
use app\admin\model\user\UserLevel as UserLevelModel;
|
||||
|
||||
/**
|
||||
* 会员设置
|
||||
* Class UserLevel
|
||||
* @package app\admin\controller\user
|
||||
*/
|
||||
class UserLevel extends AuthController
|
||||
{
|
||||
use CurdControllerTrait;
|
||||
|
||||
/*
|
||||
* 等级展示
|
||||
* */
|
||||
public function index()
|
||||
{
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/*
|
||||
* 创建form表单
|
||||
* */
|
||||
public function create($id=0)
|
||||
{
|
||||
if($id) $vipinfo=SystemUserLevel::get($id);
|
||||
$field[]= Form::input('name','等级名称',isset($vipinfo) ? $vipinfo->name : '')->col(Form::col(24));
|
||||
$field[]= Form::radio('is_forever','是否为永久',isset($vipinfo) ? $vipinfo->is_forever : 0)->options([['label'=>'永久','value'=>1],['label'=>'非永久','value'=>0]])->col(24);
|
||||
$field[]= Form::number('money','等级价格',isset($vipinfo) ? $vipinfo->money : 0)->min(0)->col(24);
|
||||
$field[]= Form::radio('is_pay','是否需要购买',isset($vipinfo) ? $vipinfo->is_pay : 0)->options([['label'=>'需要','value'=>1],['label'=>'免费','value'=>0]])->col(24);
|
||||
$field[]= Form::number('valid_date','有效时间(天)',isset($vipinfo) ? $vipinfo->valid_date : 0)->min(0)->col(8);
|
||||
$field[]= Form::number('grade','等级',isset($vipinfo) ? $vipinfo->grade : 0)->min(0)->col(8);
|
||||
$field[]= Form::number('discount','享受折扣',isset($vipinfo) ? $vipinfo->discount : 0)->min(0)->col(8);
|
||||
$field[]= Form::frameImageOne('icon','图标',Url::build('admin/widget.images/index',array('fodder'=>'icon')),isset($vipinfo) ? $vipinfo->icon : '')->icon('image')->width('100%')->height('500px');
|
||||
$field[]= Form::frameImageOne('image','会员背景',Url::build('admin/widget.images/index',array('fodder'=>'image')),isset($vipinfo) ? $vipinfo->image : '')->icon('image')->width('100%')->height('500px');
|
||||
$field[]= Form::radio('is_show','是否显示',isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label'=>'显示','value'=>1],['label'=>'隐藏','value'=>0]])->col(8);
|
||||
$field[]= Form::textarea('explain','等级说明',isset($vipinfo) ? $vipinfo->explain : '');
|
||||
$form = Form::make_post_form('添加等级设置',$field,Url::build('save',['id'=>$id]),2);
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
|
||||
/*
|
||||
* 会员等级添加或者修改
|
||||
* @param $id 修改的等级id
|
||||
* @return json
|
||||
* */
|
||||
public function save($id=0)
|
||||
{
|
||||
$data=UtilService::postMore([
|
||||
['name',''],
|
||||
['is_forever',0],
|
||||
['money',0],
|
||||
['is_pay',0],
|
||||
['valid_date',0],
|
||||
['grade',0],
|
||||
['discount',0],
|
||||
['icon',''],
|
||||
['image',''],
|
||||
['is_show',''],
|
||||
['explain',''],
|
||||
]);
|
||||
if(!$data['name']) return JsonService::fail('请输入等级名称');
|
||||
if(!$data['grade']) return JsonService::fail('请输入等级');
|
||||
if(!$data['explain']) return JsonService::fail('请输入等级说明');
|
||||
if($data['is_forever']==0 && !$data['valid_date']) return JsonService::fail('请输入有效时间(天)');
|
||||
if($data['is_pay'] && !$data['money']) return JsonService::fail('请输入购买金额');
|
||||
if(!$data['icon']) return JsonService::fail('请上传等级图标');
|
||||
if(!$data['image']) return JsonService::fail('请上传等级背景图标');
|
||||
SystemUserLevel::beginTrans();
|
||||
try{
|
||||
//修改
|
||||
if($id){
|
||||
if(SystemUserLevel::edit($data,$id)){
|
||||
SystemUserLevel::commitTrans();
|
||||
return JsonService::successful('修改成功');
|
||||
}else{
|
||||
SystemUserLevel::rollbackTrans();
|
||||
return JsonService::fail('添加失败');
|
||||
}
|
||||
}else{
|
||||
//新增
|
||||
$data['add_time']=time();
|
||||
if(SystemUserLevel::set($data)){
|
||||
SystemUserLevel::commitTrans();
|
||||
return JsonService::successful('添加成功');
|
||||
}else{
|
||||
SystemUserLevel::rollbackTrans();
|
||||
return JsonService::fail('添加失败');
|
||||
}
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
SystemUserLevel::rollbackTrans();
|
||||
return JsonService::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 获取系统设置的vip列表
|
||||
* @param int page
|
||||
* @param int limit
|
||||
* */
|
||||
public function get_system_vip_list()
|
||||
{
|
||||
$where=UtilService::getMore([
|
||||
['page',0],
|
||||
['limit',10],
|
||||
['title',''],
|
||||
['is_show',''],
|
||||
]);
|
||||
return JsonService::successlayui(SystemUserLevel::getSytemList($where));
|
||||
}
|
||||
|
||||
/*
|
||||
* 删除会员等级
|
||||
* @param int $id
|
||||
* */
|
||||
public function delete($id=0)
|
||||
{
|
||||
if(SystemUserLevel::edit(['is_del'=>1],$id))
|
||||
return JsonService::successful('删除成功');
|
||||
else
|
||||
return JsonService::fail('删除失败');
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置单个产品上架|下架
|
||||
*
|
||||
* @return json
|
||||
*/
|
||||
public function set_show($is_show='',$id=''){
|
||||
($is_show=='' || $id=='') && Json::fail('缺少参数');
|
||||
$res=SystemUserLevel::where(['id'=>$id])->update(['is_show'=>(int)$is_show]);
|
||||
if($res){
|
||||
return JsonService::successful($is_show==1 ? '显示成功':'隐藏成功');
|
||||
}else{
|
||||
return JsonService::fail($is_show==1 ? '显示失败':'隐藏失败');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 快速编辑
|
||||
*
|
||||
* @return json
|
||||
*/
|
||||
public function set_value($field='',$id='',$value=''){
|
||||
$field=='' || $id=='' || $value=='' && Json::fail('缺少参数');
|
||||
if(SystemUserLevel::where(['id'=>$id])->update([$field=>$value]))
|
||||
return JsonService::successful('保存成功');
|
||||
else
|
||||
return JsonService::fail('保存失败');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 等级任务列表
|
||||
* @param int $vip_id 等级id
|
||||
* @return json
|
||||
* */
|
||||
public function tash($level_id=0)
|
||||
{
|
||||
$this->assign('level_id',$level_id);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 快速编辑
|
||||
*
|
||||
* @return json
|
||||
*/
|
||||
public function set_tash_value($field='',$id='',$value=''){
|
||||
$field=='' || $id=='' || $value=='' && Json::fail('缺少参数');
|
||||
if(SystemUserTask::where(['id'=>$id])->update([$field=>$value]))
|
||||
return JsonService::successful('保存成功');
|
||||
else
|
||||
return JsonService::fail('保存失败');
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置单个产品上架|下架
|
||||
*
|
||||
* @return json
|
||||
*/
|
||||
public function set_tash_show($is_show='',$id=''){
|
||||
($is_show=='' || $id=='') && Json::fail('缺少参数');
|
||||
$res=SystemUserTask::where(['id'=>$id])->update(['is_show'=>(int)$is_show]);
|
||||
if($res){
|
||||
return JsonService::successful($is_show==1 ? '显示成功':'隐藏成功');
|
||||
}else{
|
||||
return JsonService::fail($is_show==1 ? '显示失败':'隐藏失败');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置单个产品上架|下架
|
||||
*
|
||||
* @return json
|
||||
*/
|
||||
public function set_tash_must($is_must='',$id=''){
|
||||
($is_must=='' || $id=='') && Json::fail('缺少参数');
|
||||
$res=SystemUserTask::where(['id'=>$id])->update(['is_must'=>(int)$is_must]);
|
||||
if($res){
|
||||
return JsonService::successful('设置成功');
|
||||
}else{
|
||||
return JsonService::fail('设置失败');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 生成任务表单
|
||||
* @param int $id 任务id
|
||||
* @param int $vip_id 会员id
|
||||
* @return html
|
||||
* */
|
||||
public function create_tash($id=0,$level_id=0)
|
||||
{
|
||||
if($id) $tash=SystemUserTask::get($id);
|
||||
$field[]= Form::select('task_type','任务类型',isset($tash) ? $tash->task_type : '')->setOptions(function(){
|
||||
$list = SystemUserTask::getTaskTypeAll();
|
||||
$menus=[];
|
||||
foreach ($list as $menu){
|
||||
$menus[] = ['value'=>$menu['type'],'label'=>$menu['name'].'----单位['.$menu['unit'].']'];
|
||||
}
|
||||
return $menus;
|
||||
})->filterable(1);
|
||||
$field[]= Form::number('number','限定数量',isset($tash) ? $tash->number : 0)->min(0)->col(24);
|
||||
$field[]= Form::number('sort','排序',isset($tash) ? $tash->sort : 0)->min(0)->col(24);
|
||||
$field[]= Form::radio('is_show','是否显示',isset($tash) ? $tash->is_show : 1)->options([['label'=>'显示','value'=>1],['label'=>'隐藏','value'=>0]])->col(24);
|
||||
$field[]= Form::radio('is_must','是否务必达成',isset($tash) ? $tash->is_must : 1)->options([['label'=>'务必达成','value'=>1],['label'=>'完成其一','value'=>0]])->col(24);
|
||||
$field[]= Form::textarea('illustrate','任务说明',isset($tash) ? $tash->illustrate : '');
|
||||
$form = Form::make_post_form('添加任务',$field,Url::build('save_tash',['id'=>$id,'level_id'=>$level_id]),2);
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 保存或者修改任务
|
||||
* @param int $id 任务id
|
||||
* @param int $vip_id 会员id
|
||||
* */
|
||||
public function save_tash($id=0,$level_id=0)
|
||||
{
|
||||
if(!$level_id) return JsonService::fail('缺少参数');
|
||||
$data=UtilService::postMore([
|
||||
['task_type',''],
|
||||
['number',0],
|
||||
['is_show',0],
|
||||
['sort',0],
|
||||
['is_must',0],
|
||||
['illustrate',''],
|
||||
]);
|
||||
if(!$data['task_type']) return JsonService::fail('请选择任务类型');
|
||||
if($data['number'] < 0) return JsonService::fail('请输入限定数量');
|
||||
$tash=SystemUserTask::getTaskType($data['task_type']);
|
||||
if($tash['max_number']!=0 && $data['number'] > $tash['max_number']) return JsonService::fail('您设置的限定数量超出最大限制,最大限制为:'.$tash['max_number']);
|
||||
$data['name']=SystemUserTask::setTaskName($data['task_type'],$data['number']);
|
||||
try{
|
||||
if($id){
|
||||
SystemUserTask::edit($data,$id);
|
||||
return JsonService::successful('修改成功');
|
||||
}else{
|
||||
$data['level_id']=$level_id;
|
||||
$data['add_time']=time();
|
||||
$data['real_name']=$tash['real_name'];
|
||||
if(SystemUserTask::set($data))
|
||||
return JsonService::successful('添加成功');
|
||||
else
|
||||
return JsonService::fail('添加失败');
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
return JsonService::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 异步获取等级任务列表
|
||||
* @param int $vip_id 会员id
|
||||
* @param int $page 分页
|
||||
* @param int $limit 显示条数
|
||||
* @return json
|
||||
* */
|
||||
public function get_tash_list($level_id=0)
|
||||
{
|
||||
list($page,$limit)=UtilService::getMore([
|
||||
['page',1],
|
||||
['limit',10],
|
||||
],$this->request,true);
|
||||
return JsonService::successlayui(SystemUserTask::getTashList($level_id,(int)$page,(int)$limit));
|
||||
}
|
||||
|
||||
/*
|
||||
* 删除任务
|
||||
* @param int 任务id
|
||||
* */
|
||||
public function delete_tash($id=0)
|
||||
{
|
||||
if(!$id) return JsonService::fail('缺少差参数');
|
||||
if(SystemUserTask::del($id))
|
||||
return JsonService::successful('删除成功');
|
||||
else
|
||||
return JsonService::fail('删除失败');
|
||||
}
|
||||
|
||||
/*
|
||||
* 会员等级展示
|
||||
*
|
||||
* */
|
||||
public function user_level_list()
|
||||
{
|
||||
$this->assign('level',SystemUserLevel::where('is_del',0)->where('is_show',1)->order('grade asc')->field(['id','name'])->select());
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
public function get_user_vip_list()
|
||||
{
|
||||
$where=UtilService::getMore([
|
||||
['page',1],
|
||||
['limit',10],
|
||||
['nickname',''],
|
||||
['level_id',''],
|
||||
]);
|
||||
return JsonService::successlayui(UserLevelModel::getUserVipList($where));
|
||||
}
|
||||
|
||||
}
|
||||
51
application/admin/model/system/SystemAttachmentType.php
Normal file
51
application/admin/model/system/SystemAttachmentType.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* 附件目录
|
||||
*
|
||||
*/
|
||||
|
||||
namespace app\admin\model\system;
|
||||
|
||||
use traits\ModelTrait;
|
||||
use basic\ModelBasic;
|
||||
|
||||
/**
|
||||
* 文件检验model
|
||||
* Class SystemFile
|
||||
* @package app\admin\model\system
|
||||
*/
|
||||
class SystemAttachmentType extends ModelBasic
|
||||
{
|
||||
use ModelTrait;
|
||||
/**添加附件记录
|
||||
*/
|
||||
public static function attachmentAdd($name,$att_size,$att_type,$att_dir,$satt_dir='',$pid = 0 )
|
||||
{
|
||||
$data['name'] = $name;
|
||||
$data['att_dir'] = $att_dir;
|
||||
$data['satt_dir'] = $satt_dir;
|
||||
$data['att_size'] = $att_size;
|
||||
$data['att_type'] = $att_type;
|
||||
$data['time'] = time();
|
||||
$data['pid'] = $pid;
|
||||
return self::create($data);
|
||||
}
|
||||
/**
|
||||
* 获取分类图
|
||||
* */
|
||||
public static function getAll($id){
|
||||
$model = new self;
|
||||
$where['pid'] = $id;
|
||||
$model->where($where)->order('att_id desc');
|
||||
return $model->page($model,$where,'',30);
|
||||
}
|
||||
/**
|
||||
* 获取单条信息
|
||||
* */
|
||||
public static function getinfo($att_id){
|
||||
$model = new self;
|
||||
$where['att_id'] = $att_id;
|
||||
return $model->where($where)->select()->toArray()[0];
|
||||
}
|
||||
|
||||
}
|
||||
53
application/admin/model/system/SystemUserLevel.php
Normal file
53
application/admin/model/system/SystemUserLevel.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @author: xaboy<365615158@qq.com>
|
||||
* @day: 2017/11/13
|
||||
*/
|
||||
|
||||
namespace app\admin\model\system;
|
||||
|
||||
use traits\ModelTrait;
|
||||
use basic\ModelBasic;
|
||||
|
||||
/**
|
||||
* 设置会员vip model
|
||||
* Class SystemVip
|
||||
* @package app\admin\model\system
|
||||
*/
|
||||
class SystemUserLevel extends ModelBasic
|
||||
{
|
||||
use ModelTrait;
|
||||
|
||||
public static function setAddTimeAttr()
|
||||
{
|
||||
return time();
|
||||
}
|
||||
public static function getAddTimeAttr($value)
|
||||
{
|
||||
return date('Y-m-d H:i:s',$value);
|
||||
}
|
||||
/*
|
||||
* 获取查询条件
|
||||
* */
|
||||
public static function setWhere($where,$alert='',$model=null)
|
||||
{
|
||||
$model=$model===null ? new self() : $model;
|
||||
if($alert) $model=$model->alias($alert);
|
||||
$alert=$alert ? $alert.'.': '';
|
||||
if(isset($where['is_show']) && $where['is_show']!=='') $model=$model->where("{$alert}is_show",$where['is_show']);
|
||||
if(isset($where['title']) && $where['title']) $model=$model->where("{$alert}name",'LIKE',"%$where[title]%");
|
||||
return $model;
|
||||
}
|
||||
/*
|
||||
* 查找系统设置的会员等级列表
|
||||
* */
|
||||
public static function getSytemList($where)
|
||||
{
|
||||
$data=self::setWhere($where)->order('grade asc')->page((int)$where['page'],(int)$where['limit'])->select();
|
||||
$data=count($data) ? $data->toArray() : [];
|
||||
$count=self::setWhere($where)->count();
|
||||
return compact('data','count');
|
||||
}
|
||||
|
||||
}
|
||||
136
application/admin/model/system/SystemUserTask.php
Normal file
136
application/admin/model/system/SystemUserTask.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @author: xaboy<365615158@qq.com>
|
||||
* @day: 2017/11/13
|
||||
*/
|
||||
|
||||
namespace app\admin\model\system;
|
||||
|
||||
use app\admin\model\order\StoreOrder;
|
||||
use app\admin\model\user\User;
|
||||
use app\admin\model\user\UserBill;
|
||||
use app\admin\model\user\UserLevel;
|
||||
use app\admin\model\user\UserTaskFinish;
|
||||
use traits\ModelTrait;
|
||||
use basic\ModelBasic;
|
||||
|
||||
/**
|
||||
* 设置等级任务 model
|
||||
* Class SystemVipTask
|
||||
* @package app\admin\model\system
|
||||
*/
|
||||
class SystemUserTask extends ModelBasic
|
||||
{
|
||||
use ModelTrait;
|
||||
|
||||
/*
|
||||
* 任务类型
|
||||
* type 记录在数据库中用来区分任务
|
||||
* name 任务名 (任务名中的{$num}会自动替换成设置的数字 + 单位)
|
||||
* max_number 最大设定数值 0为不限定
|
||||
* min_number 最小设定数值
|
||||
* unit 单位
|
||||
* */
|
||||
protected static $TaskType=[
|
||||
[
|
||||
'type'=>'SatisfactionIntegral',
|
||||
'name'=>'满足积分{$num}',
|
||||
'real_name'=>'积分数',
|
||||
'max_number'=>0,
|
||||
'min_number'=>0,
|
||||
'unit'=>'分'
|
||||
],
|
||||
[
|
||||
'type'=>'ConsumptionAmount',
|
||||
'name'=>'消费满{$num}',
|
||||
'real_name'=>'消费金额',
|
||||
'max_number'=>0,
|
||||
'min_number'=>0,
|
||||
'unit'=>'元'
|
||||
],
|
||||
[
|
||||
'type'=>'ConsumptionFrequency',
|
||||
'name'=>'消费{$num}',
|
||||
'real_name'=>'消费次数',
|
||||
'max_number'=>0,
|
||||
'min_number'=>0,
|
||||
'unit'=>'次'
|
||||
],
|
||||
[
|
||||
'type'=>'CumulativeAttendance',
|
||||
'name'=>'累计签到{$num}',
|
||||
'real_name'=>'累计签到',
|
||||
'max_number'=>365,
|
||||
'min_number'=>1,
|
||||
'unit'=>'天'
|
||||
],
|
||||
[
|
||||
'type'=>'SharingTimes',
|
||||
'name'=>'分享给朋友{$num}',
|
||||
'real_name'=>'分享给朋友',
|
||||
'max_number'=>1000,
|
||||
'min_number'=>1,
|
||||
'unit'=>'次'
|
||||
],
|
||||
[
|
||||
'type'=>'InviteGoodFriends',
|
||||
'name'=>'邀请好友{$num}成为下线',
|
||||
'real_name'=>'邀请好友成为下线',
|
||||
'max_number'=>1000,
|
||||
'min_number'=>1,
|
||||
'unit'=>'人'
|
||||
],
|
||||
[
|
||||
'type'=>'InviteGoodFriendsLevel',
|
||||
'name'=>'邀请好友{$num}成为会员',
|
||||
'real_name'=>'邀请好友成为会员',
|
||||
'max_number'=>1000,
|
||||
'min_number'=>1,
|
||||
'unit'=>'人'
|
||||
],
|
||||
];
|
||||
|
||||
public function profile()
|
||||
{
|
||||
return $this->hasOne('SystemUserLevel','level_id','id')->field('name');
|
||||
}
|
||||
|
||||
public static function getTaskTypeAll()
|
||||
{
|
||||
return self::$TaskType;
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取某个任务
|
||||
* */
|
||||
public static function getTaskType($type)
|
||||
{
|
||||
foreach (self::$TaskType as $item){
|
||||
if($item['type']==$type) return $item;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 设置任务名
|
||||
* */
|
||||
public static function setTaskName($type,$num)
|
||||
{
|
||||
$systemType=self::getTaskType($type);
|
||||
return str_replace('{$num}',$num.$systemType['unit'],$systemType['name']);
|
||||
}
|
||||
/*
|
||||
* 获取等级会员任务列表
|
||||
* */
|
||||
public static function getTashList($level_id,$page,$limit)
|
||||
{
|
||||
$data=self::where('level_id',$level_id)->order('sort desc,add_time desc')->page($page,$limit)->select();
|
||||
$data=count($data) ? $data->toArray() : [];
|
||||
foreach ($data as &$item){
|
||||
$item['level_name']=SystemUserLevel::where('id',$item['level_id'])->value('name');
|
||||
}
|
||||
$count=self::where('level_id',$level_id)->count();
|
||||
return compact('data','count');
|
||||
}
|
||||
|
||||
}
|
||||
54
application/admin/model/user/UserLevel.php
Normal file
54
application/admin/model/user/UserLevel.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @author: xaboy<365615158@qq.com>
|
||||
* @day: 2017/11/11
|
||||
*/
|
||||
namespace app\admin\model\user;
|
||||
use app\admin\model\system\SystemUserLevel;
|
||||
use traits\ModelTrait;
|
||||
use basic\ModelBasic;
|
||||
/**
|
||||
* 用户管理 model
|
||||
* Class User
|
||||
* @package app\admin\model\user
|
||||
*/
|
||||
class UserLevel extends ModelBasic
|
||||
{
|
||||
use ModelTrait;
|
||||
|
||||
public static function setWhere($where,$alias='',$userAlias='u.',$model=null)
|
||||
{
|
||||
$model=is_null($model) ? new self() : $model;
|
||||
if($alias){
|
||||
$model=$model->alias($alias);
|
||||
$alias.='.';
|
||||
}
|
||||
if(isset($where['nickname']) && $where['nickname']!='') $model=$model->where("{$userAlias}nickanme",$where['nickname']);
|
||||
if(isset($where['level_id']) && $where['level_id']!='') $model=$model->where("{$alias}level_id",$where['level_id']);
|
||||
return $model->where(["{$alias}status"=>1,"{$alias}is_del"=>0]);
|
||||
}
|
||||
/*
|
||||
* 查询用户vip列表
|
||||
* @param array $where
|
||||
* */
|
||||
public static function getUserVipList($where)
|
||||
{
|
||||
$data=self::setWhere($where,'a')->group('a.uid')->order('grade desc')
|
||||
->field(['a.*','u.nickname','u.avatar'])
|
||||
->join('__USER__ u','a.uid=u.uid')->page((int)$where['page'],(int)$where['limit'])->select();
|
||||
$data=count($data) ? $data->toArray() : [];
|
||||
foreach ($data as &$item){
|
||||
$info=SystemUserLevel::where('id',$item['level_id'])->find();
|
||||
if($info){
|
||||
$item['name']=$info['name'];
|
||||
$item['icon']=$info['icon'];
|
||||
}
|
||||
$item['is_forever']= $item['is_forever'] ? '永久会员':'限时会员';
|
||||
$item['valid_time']=$item['is_forever'] ? '永久':date('Y-m-d H:i:s',$item['valid_time']);
|
||||
}
|
||||
$count=self::setWhere($where,'a')->group('a.level_id')->order('grade desc')->join('__USER__ u','a.uid=u.uid')->count();
|
||||
return compact('data','count');
|
||||
}
|
||||
|
||||
}
|
||||
29
application/admin/model/user/UserTaskFinish.php
Normal file
29
application/admin/model/user/UserTaskFinish.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\user;
|
||||
|
||||
use traits\ModelTrait;
|
||||
use basic\ModelBasic;
|
||||
/**
|
||||
* 用户等级完成任务记录 model
|
||||
* Class UserTaskFinish
|
||||
* @package app\admin\model\user
|
||||
*/
|
||||
|
||||
class UserTaskFinish extends ModelBasic
|
||||
{
|
||||
use ModelTrait;
|
||||
|
||||
/*
|
||||
* 设置任务完成情况
|
||||
* @param int $uid 用户uid
|
||||
* @param int $task_id 任务id
|
||||
* @return Boolean
|
||||
* */
|
||||
public static function setFinish($uid,$task_id)
|
||||
{
|
||||
$add_time=time();
|
||||
if(self::be(['uid'=>$uid,'task_id'=>$task_id])) return true;
|
||||
return self::set(compact('uid','task_id','add_time'));
|
||||
}
|
||||
}
|
||||
58
application/admin/view/finance/finance/bill1.php
Normal file
58
application/admin/view/finance/finance/bill1.php
Normal file
@ -0,0 +1,58 @@
|
||||
{extend name="public/bootstraptable"}
|
||||
{block name="head"}
|
||||
|
||||
{/block}
|
||||
{block name="content"}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table id="table1"></table>
|
||||
<table id="table2"></table>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
|
||||
<script>
|
||||
$('#table2').bootstrapTable({
|
||||
method: "POST",
|
||||
url: "{:Url('billlist')}",
|
||||
dataType: "json",
|
||||
toolbar: '#toolbar', //工具按钮用哪个容器
|
||||
pagination: true, //是否显示分页(*)
|
||||
cache: false,
|
||||
clickToSelect: true,
|
||||
showRefresh: true, //是否显示刷新按钮
|
||||
showPaginationSwitch: true, //是否显示选择分页数按钮
|
||||
pageNumber: 1, //初始化加载第一页,默认第一页
|
||||
showColumns:true,
|
||||
pageSize: 5, //每页的记录行数(*)
|
||||
search: true,
|
||||
showToggle:true,//是否显示切换视图(table/card)按钮
|
||||
showFullscreen:true,//是否显示全屏按钮
|
||||
sortable: true, //是否启用排序
|
||||
sortOrder: "asc",
|
||||
columns: [
|
||||
{checkbox : true},
|
||||
{ field: 'id', title: '编号',sortable:true },
|
||||
{ field: 'title', title: '标题',sortable:true },
|
||||
{ field: 'link_id', title: '关联ID',sortable:true },
|
||||
{ field: 'pm', title: '是否支出',sortable:true },
|
||||
{ field: 'number', title: '明细数字',sortable:true },
|
||||
{ field: 'status', title: '状态',sortable:true },
|
||||
{ field: 'add_time', title: '时间',sortable:true},
|
||||
{ field: 'balance', title: '余额',sortable:true },
|
||||
{ field: 'uid', title: '学生编号',sortable:true },
|
||||
{ field: 'balance', title: '金额' },
|
||||
{ field: 'mark', title: '生日' }
|
||||
],
|
||||
onLoadSuccess: function(){ //加载成功时执行
|
||||
console.info("加载成功");
|
||||
},
|
||||
onLoadError: function(){ //加载失败时执行
|
||||
console.info("加载数据失败");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
22
application/admin/view/public/layui.php
Normal file
22
application/admin/view/public/layui.php
Normal file
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script src="{__FRAME_PATH}js/jquery.min.js"></script>
|
||||
<link href="{__PLUG_PATH}layui/css/layui.css" rel="stylesheet">
|
||||
<script src="{__PLUG_PATH}layui/layui.js"></script>
|
||||
<script>
|
||||
$eb = parent._mpApi;
|
||||
if(!$eb) top.location.reload();
|
||||
</script>
|
||||
{block name="head"}{/block}
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="wrapper wrapper-content">
|
||||
{block name="content"}{/block}
|
||||
{block name="script"}{/block}
|
||||
</div>
|
||||
<!--全局layout模版-->
|
||||
</body>
|
||||
</html>
|
||||
93
application/admin/view/system/system_notice/index.php
Normal file
93
application/admin/view/system/system_notice/index.php
Normal file
@ -0,0 +1,93 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox">
|
||||
<div class="ibox-title">
|
||||
<button type="button" class="btn btn-w-m btn-primary" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加通知模板</button>
|
||||
<div class="ibox-tools">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div class="row">
|
||||
<div class="m-b m-l">
|
||||
<form action="" class="form-inline">
|
||||
|
||||
<div class="input-group">
|
||||
<input type="text" name="key" value="" placeholder="请输入关键词" class="input-sm form-control"> <span class="input-group-btn">
|
||||
<button type="submit" class="btn btn-sm btn-primary"> <i class="fa fa-search" ></i>搜索</button> </span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th class="text-center">编号</th>
|
||||
<th class="text-center">标题</th>
|
||||
<th class="text-center">关键字</th>
|
||||
<th class="text-center">模板</th>
|
||||
<th class="text-center">发送管理员</th>
|
||||
<th class="text-center">状态</th>
|
||||
<th class="text-center">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="">
|
||||
{volist name="list" id="vo"}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
{$vo.id}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.title}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.type}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.template}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.push_admin_name}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<i class="fa {eq name='vo.status' value='1'}fa-check text-navy{else/}fa-close text-danger{/eq}"></i>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')"><i class="fa fa-paste"></i> 编辑</button>
|
||||
<button class="btn btn-warning btn-xs" data-url="{:Url('delete',array('id'=>$vo['id']))}" type="button"><i class="fa fa-warning"></i> 删除
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
$('.btn-warning').on('click',function(){
|
||||
var _this = $(this),url =_this.data('url');
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
console.log(res);
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
_this.parents('tr').remove();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
225
application/admin/view/system/system_notice/message.php
Normal file
225
application/admin/view/system/system_notice/message.php
Normal file
@ -0,0 +1,225 @@
|
||||
{extend name="public/container"}
|
||||
{block name="head_top"}
|
||||
<link href="{__FRAME_PATH}css/plugins/iCheck/custom.css" rel="stylesheet">
|
||||
{/block}
|
||||
{block name="content"}
|
||||
<div class="wrapper wrapper-content">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 animated fadeInRight">
|
||||
<div class="mail-box-header">
|
||||
|
||||
<form method="get" action="index.html" class="pull-right mail-search">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" name="search" placeholder="搜索邮件标题,正文等">
|
||||
<div class="input-group-btn">
|
||||
<button type="submit" class="btn btn-sm btn-primary">
|
||||
搜索
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<h2>
|
||||
收件箱 (16)
|
||||
</h2>
|
||||
<div class="mail-tools tooltip-demo m-t-md">
|
||||
<div class="btn-group pull-right">
|
||||
<button class="btn btn-white btn-sm"><i class="fa fa-arrow-left"></i>
|
||||
</button>
|
||||
<button class="btn btn-white btn-sm"><i class="fa fa-arrow-right"></i>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
<button class="btn btn-white btn-sm" data-toggle="tooltip" data-placement="left" title="刷新邮件列表"><i class="fa fa-refresh"></i> 刷新</button>
|
||||
<button class="btn btn-white btn-sm" data-toggle="tooltip" data-placement="top" title="标为已读"><i class="fa fa-eye"></i>
|
||||
</button>
|
||||
<button class="btn btn-white btn-sm" data-toggle="tooltip" data-placement="top" title="标为重要"><i class="fa fa-exclamation"></i>
|
||||
</button>
|
||||
<button class="btn btn-white btn-sm" data-toggle="tooltip" data-placement="top" title="标为垃圾邮件"><i class="fa fa-trash-o"></i>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="mail-box">
|
||||
|
||||
<table class="table table-hover table-mail">
|
||||
<tbody>
|
||||
<tr class="unread">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">支付宝</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">支付宝提醒</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">昨天 10:20</td>
|
||||
</tr>
|
||||
<tr class="unread">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks" checked>
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">Amaze UI</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">Amaze UI Beta2 发布</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午10:57</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">WordPress</a> <span class="label label-warning pull-right">验证邮件</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">wp-user-frontend-pro v2.1.9</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午9:21</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">史上最全!淘宝双11红包疯抢攻略!</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">中午12:24</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a> <span class="label label-danger pull-right">AD</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">亲,双11来啦!帮你挑货,还送你4999元红包!仅此一次!</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">上午6:48</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">支付宝</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">支付宝提醒</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">昨天 10:20</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">Amaze UI</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">Amaze UI Beta2 发布</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午10:57</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">WordPress</a> <span class="label label-warning pull-right">验证邮件</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">wp-user-frontend-pro v2.1.9</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午9:21</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">史上最全!淘宝双11红包疯抢攻略!</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">中午12:24</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a> <span class="label label-danger pull-right">AD</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">亲,双11来啦!帮你挑货,还送你4999元红包!仅此一次!</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">上午6:48</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">支付宝</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">支付宝提醒</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">昨天 10:20</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">Amaze UI</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">Amaze UI Beta2 发布</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午10:57</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">WordPress</a> <span class="label label-warning pull-right">验证邮件</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">wp-user-frontend-pro v2.1.9</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">上午9:21</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">史上最全!淘宝双11红包疯抢攻略!</a>
|
||||
</td>
|
||||
<td class=""></td>
|
||||
<td class="text-right mail-date">中午12:24</td>
|
||||
</tr>
|
||||
<tr class="read">
|
||||
<td class="check-mail">
|
||||
<input type="checkbox" class="i-checks">
|
||||
</td>
|
||||
<td class="mail-ontact"><a href="mail_detail.html">淘宝网</a> <span class="label label-danger pull-right">AD</span>
|
||||
</td>
|
||||
<td class="mail-subject"><a href="mail_detail.html">亲,双11来啦!帮你挑货,还送你4999元红包!仅此一次!</a>
|
||||
</td>
|
||||
<td class=""><i class="fa fa-paperclip"></i>
|
||||
</td>
|
||||
<td class="text-right mail-date">上午6:48</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
371
application/admin/view/ump/store_seckill/attr.php
Normal file
371
application/admin/view/ump/store_seckill/attr.php
Normal file
@ -0,0 +1,371 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
{include file="public/head"}
|
||||
<title>{$title|default=''}</title>
|
||||
<style>
|
||||
.demo-upload{
|
||||
display: block;
|
||||
height: 33px;
|
||||
text-align: center;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
position: relative;
|
||||
box-shadow: 0 1px 1px rgba(0,0,0,.2);
|
||||
margin-right: 4px;
|
||||
}
|
||||
.demo-upload img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
.demo-upload-cover{
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: rgba(0,0,0,.6);
|
||||
}
|
||||
.demo-upload:hover .demo-upload-cover{
|
||||
display: block;
|
||||
}
|
||||
.demo-upload-cover i{
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
margin: 0 2px;
|
||||
}
|
||||
.check{color: #f00}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="store-attr" class="mp-form" v-cloak="">
|
||||
<i-Form :label-width="80" style="width: 100%" v-show="hidden == false">
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="5">
|
||||
<i-Button type="dashed" long @click="hiddenBool" icon="plus-round">添加新规则</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
</i-Form>
|
||||
<i-Form :label-width="80" style="width: 100%" v-show="hidden == true">
|
||||
<Form-Item
|
||||
:label="'规则名称:'">
|
||||
<Row>
|
||||
<i-Col style="position: relative;margin-right: 6px" span="5"
|
||||
v-for="(item, index) in items"
|
||||
:key="index">
|
||||
<i-Input type="text" v-model="item.value" placeholder="设置名称"></i-Input>
|
||||
<i-Button style="position: absolute;top:0;right:0;margin-top:1px;border: none;font-size: 8px;line-height: 1.8" type="ghost" @click="handleRemove(index)" v-show="item.attrHidden == true"><Icon type="close-round" /></i-Button>
|
||||
<i-Button style="position: absolute;top:0;right:0;margin-top:1px;border: none;font-size: 8px;line-height: 1.8" type="ghost" @click="attrHiddenBool(item)" v-show="item.attrHidden == false"><Icon type="checkmark-round"></Icon></i-Button>
|
||||
</i-Col>
|
||||
<i-Col span="5">
|
||||
<i-Button type="dashed" long @click="handleAdd" icon="plus-round">添加新规则</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item v-show="item.attrHidden == true"
|
||||
v-for="(item, index) in items"
|
||||
:key="index"
|
||||
:label="''+item.value+':'" >
|
||||
<Row>
|
||||
<i-Col span="3"
|
||||
v-for="(attr,k) in item.detail"
|
||||
:key="attr"
|
||||
:name="attr">
|
||||
<Tag type="border" closable color="blue" @on-close="attrRemove(item,k)">{{ attr }}</Tag>
|
||||
</i-Col>
|
||||
<i-Col span="5">
|
||||
<i-Input type="text" v-model="item.detailValue" placeholder="设置属性"></i-Input>
|
||||
</i-Col>
|
||||
<i-Col span="5">
|
||||
<i-Button type="primary" style="margin-left: 6px" @click="attrAdd(item)">添加</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item v-show="hidden == true" style="width: 100%;">
|
||||
<Row style="margin: 0 88px 0 20px">
|
||||
<i-Col span="24">
|
||||
<i-Button type="primary" long @click="addGoods(true)">生成</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
|
||||
<template v-if="items[0].value!='' && items[0].detail.length>0 && attrs.length">
|
||||
<template v-for="(attr,index) in attrs">
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<template v-for="(item,index) in attr.detail">
|
||||
<i-Col span="3" style="margin-right: 3px">
|
||||
{{index}}:{{item}}
|
||||
</i-Col>
|
||||
</template>
|
||||
<i-Col span="5" style="margin-right: 3px">
|
||||
<span :class="attr.check ? 'check':''">金额:</span> <i-Input placeholder="请输入金额" v-model="attr.price" style="width: 68%"
|
||||
:number="true"></i-Input>
|
||||
</i-Col>
|
||||
<i-Col span="5" style="margin-right: 3px">
|
||||
<span :class="attr.check ? 'check':''">库存:</span> <i-Input placeholder="请输入库存" v-model="attr.sales" style="width: 68%"
|
||||
:number="true"></i-Input>
|
||||
</i-Col>
|
||||
<i-Col span="2" offset="1" style="margin-right: 3px">
|
||||
<div class="demo-upload">
|
||||
<img :src="attr.pic">
|
||||
<div class="demo-upload-cover">
|
||||
<Icon type="ios-eye-outline" @click.native="openPic(attr.pic)" ></Icon>
|
||||
<Upload
|
||||
:show-upload-list="false"
|
||||
:on-success="uploadSuccess(attr)"
|
||||
:on-error="uploadError"
|
||||
:format="['jpg','jpeg','png']"
|
||||
:max-size="2048"
|
||||
accept="image/*"
|
||||
:on-format-error="uploadFormatError"
|
||||
action="{:Url('upload')}"
|
||||
style="display: inline-block"
|
||||
:goods="attr"
|
||||
>
|
||||
<Icon type="ios-cloud-upload-outline"></Icon>
|
||||
</Upload>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</i-Col>
|
||||
<i-Col span="2" style="margin-right: 3px">
|
||||
<i-Button type="ghost" @click="removeGoods(index)">删除</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
</template>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<!-- <i-Col span="10">-->
|
||||
<!-- <i-Button type="dashed" long @click="addGoods" icon="plus-round">添加新商品</i-Button>-->
|
||||
<!-- </i-Col>-->
|
||||
<i-Col span="2" offset="2">
|
||||
<i-Button type="primary" @click="submit">提交</i-Button>
|
||||
</i-Col>
|
||||
<i-Col span="2" offset="1">
|
||||
<i-Button type="error" @click="clear">清空所有属性</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
</template>
|
||||
</i-Form>
|
||||
<Spin fix v-show="submiting == true">保存中...</Spin>
|
||||
</div>
|
||||
<script>
|
||||
var _vm ;
|
||||
mpFrame.start(function(Vue){
|
||||
new Vue({
|
||||
data () {
|
||||
return {
|
||||
hidden:false,
|
||||
submiting :false,
|
||||
items: <?php echo $result && isset($result['attr']) && !empty($result['attr']) ? json_encode($result['attr']) : 'false'; ?> || [
|
||||
{
|
||||
value: '',
|
||||
detailValue:'',
|
||||
attrHidden:false,
|
||||
detail:[]
|
||||
}
|
||||
],
|
||||
attrs:<?php echo $result && isset($result['value']) && !empty($result['value']) ? json_encode($result['value']) : '[]'; ?>
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
items:{
|
||||
handler:function(){
|
||||
// this.attrs = [];
|
||||
},
|
||||
deep:true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
attrHiddenBool(item){
|
||||
if(item.value == ''){
|
||||
$eb.message('error','请填写规则名称');
|
||||
}else{
|
||||
item.attrHidden = true;
|
||||
}
|
||||
},
|
||||
hiddenBool(){
|
||||
this.hidden = true;
|
||||
},
|
||||
handleAdd () {
|
||||
if(!this.checkAttr())return ;
|
||||
this.items.push({
|
||||
value: '',
|
||||
detailValue:'',
|
||||
attrHidden:false,
|
||||
detail:[]
|
||||
});
|
||||
},
|
||||
checkAttr(){
|
||||
var bool = true;
|
||||
this.items.map(function(item){
|
||||
if(!bool) return;
|
||||
if(!item.value){
|
||||
$eb.message('error','请填写规则名称');
|
||||
bool = false;
|
||||
}else if(!item.detail.length){
|
||||
$eb.message('error','请设置规则属性');
|
||||
bool = false;
|
||||
}
|
||||
});
|
||||
return bool;
|
||||
},
|
||||
attrAdd (item) {
|
||||
if(!item.detailValue) return false;
|
||||
item.detail.push(item.detailValue);
|
||||
item.detailValue = '';
|
||||
},
|
||||
handleRemove (index) {
|
||||
if(this.items.length > 1)
|
||||
this.items.splice(index,1);
|
||||
else
|
||||
$eb.message('error','请设置至少一个规则');
|
||||
},
|
||||
attrRemove(item,k){
|
||||
if(1==item.detail.length){
|
||||
$eb.message('error','请设置至少一个属性');
|
||||
return false;
|
||||
}
|
||||
item.detail.splice(k,1);
|
||||
},
|
||||
removeGoods(index){
|
||||
this.attrs.splice(index,1);
|
||||
},
|
||||
checkGoods(){
|
||||
var bool = true;
|
||||
this.attrs.map(function(attr){
|
||||
if(!bool) return ;
|
||||
if(!Object.keys(attr.detail).length){
|
||||
$eb.message('error','请选择至少一个属性');
|
||||
bool = false;
|
||||
}else if(attr.price != parseFloat(attr.price) || attr.price < 0){
|
||||
$eb.message('error','请输入正确的商品价格');
|
||||
bool = false;
|
||||
}else if(attr.sales != parseInt(attr.sales) || attr.sales < 0){
|
||||
$eb.message('error','请输入正确的商品库存');
|
||||
bool = false;
|
||||
}
|
||||
});
|
||||
return bool;
|
||||
},
|
||||
addGoods(type){
|
||||
var that = this;
|
||||
if(this.attrs.length){
|
||||
if(!this.checkGoods())return ;
|
||||
}
|
||||
$eb.axios.post("{:Url('is_format_attr',array('id'=>$id))}",{items:this.items,attrs:this.attrs}).then(function(res){
|
||||
if(res.data.code == 200){
|
||||
that.attrs = res.data.data
|
||||
}else{
|
||||
$eb.message('error',res.data.msg);
|
||||
}
|
||||
}).catch(function(err){
|
||||
if(res.data.code == 200){
|
||||
that.attrs = res.data.data
|
||||
}else{
|
||||
$eb.message('error',res.data.msg);
|
||||
}
|
||||
})
|
||||
// if(type === true){
|
||||
// this.attrs = [{
|
||||
// detail:{},
|
||||
// price:'',
|
||||
// sales:'',
|
||||
// pic:'{$image}'
|
||||
// }];
|
||||
// }else{
|
||||
// this.attrs.push({
|
||||
// detail:{},
|
||||
// price:'',
|
||||
// sales:'',
|
||||
// pic:'{$image}'
|
||||
// });
|
||||
// }
|
||||
},
|
||||
openPic(src){
|
||||
$eb.openImage(src);
|
||||
},
|
||||
uploadSuccess(data){
|
||||
return function(response, file, fileList){
|
||||
if(response.code == 200){
|
||||
data.pic = response.data.url;
|
||||
}else{
|
||||
$eb.message('error',response.data.msg || '图片上传失败!');
|
||||
}
|
||||
}
|
||||
},
|
||||
uploadError(error, file, fileList){
|
||||
$eb.message('error',error);
|
||||
},
|
||||
uploadFormatError(file, fileList){
|
||||
$eb.message('error','图片格式错误');
|
||||
},
|
||||
submit(){
|
||||
var that = this;
|
||||
that.submiting = true;
|
||||
if(!this.checkAttr() || !this.checkGoods()) return ;
|
||||
for(let attr in that.attrs){
|
||||
that.attrs[attr].check = false;
|
||||
}
|
||||
$eb.axios.post("{:Url('set_attr',array('id'=>$id))}",{items:this.items,attrs:this.attrs}).then(function(res){
|
||||
that.submiting = false;
|
||||
if(res.status == 200 && res.data.code == 200){
|
||||
$eb.message('success',res.data.msg || '编辑成功!');
|
||||
$eb.closeModalFrame(window.name);
|
||||
}else{
|
||||
$eb.message('error',res.data.msg || '请求失败!');
|
||||
}
|
||||
}).catch(function(err){
|
||||
$eb.message('error',err);
|
||||
})
|
||||
},
|
||||
clear(){
|
||||
var that = this;
|
||||
requirejs(['sweetalert'], function (swel) {
|
||||
swel({
|
||||
title: "您确定要清空产品属性吗",
|
||||
text: "删除后将无法恢复,请谨慎操作!",
|
||||
type: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: "#DD6B55",
|
||||
confirmButtonText: "是的,我要清空!",
|
||||
cancelButtonText: "让我再考虑一下…",
|
||||
closeOnConfirm: false,
|
||||
closeOnCancel: false
|
||||
}).then(function () {
|
||||
$eb.axios.post("{:Url('clear_attr',array('id'=>$id))}", {
|
||||
items: that.items,
|
||||
attrs: that.attrs
|
||||
}).then(function (res) {
|
||||
if (res.status == 200 && res.data.code == 200) {
|
||||
$eb.message('success', res.data.msg || '清空成功!');
|
||||
window.location.reload();
|
||||
} else {
|
||||
$eb.message('error', res.data.msg || '清空失败!');
|
||||
}
|
||||
}).catch(function (err) {
|
||||
$eb.message('error', err);
|
||||
})
|
||||
}).catch(console.log);
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted (){
|
||||
_vm = this;
|
||||
var resultAdmin = <?php echo $result && isset($result['attr']) && !empty($result['attr']) ? json_encode($result['attr']) : 'false'; ?>;
|
||||
if(resultAdmin) this.hidden = true;
|
||||
}
|
||||
}).$mount(document.getElementById('store-attr'));
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
76
application/admin/view/user/user/group.php
Normal file
76
application/admin/view/user/user/group.php
Normal file
@ -0,0 +1,76 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox">
|
||||
<div class="ibox-title">
|
||||
<button type="button" class="btn btn-w-m btn-primary" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加身份</button>
|
||||
<div class="ibox-tools">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th class="text-center">编号</th>
|
||||
<th class="text-center">身份昵称</th>
|
||||
<th class="text-center">权限</th>
|
||||
<th class="text-center">状态</th>
|
||||
<th class="text-center">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="">
|
||||
{volist name="list" id="vo"}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
{$vo.id}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.role_name}
|
||||
</td>
|
||||
<td class="text-center" style="width: 70%;">
|
||||
{$vo.rules}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<i class="fa {eq name='vo.status' value='1'}fa-check text-navy{else/}fa-close text-danger{/eq}"></i>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')"><i class="fa fa-paste"></i> 编辑</button>
|
||||
<button class="btn btn-warning btn-xs" data-url="{:Url('delete',array('id'=>$vo['id']))}" type="button"><i class="fa fa-warning"></i> 删除
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{include file="public/inner_page"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
$('.btn-warning').on('click',function(){
|
||||
window.t = $(this);
|
||||
var _this = $(this),url =_this.data('url');
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
console.log(res);
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
_this.parents('tr').remove();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
76
application/admin/view/user/user/rank.php
Normal file
76
application/admin/view/user/user/rank.php
Normal file
@ -0,0 +1,76 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox">
|
||||
<div class="ibox-title">
|
||||
<button type="button" class="btn btn-w-m btn-primary" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加身份</button>
|
||||
<div class="ibox-tools">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th class="text-center">编号</th>
|
||||
<th class="text-center">身份昵称</th>
|
||||
<th class="text-center">权限</th>
|
||||
<th class="text-center">状态</th>
|
||||
<th class="text-center">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="">
|
||||
{volist name="list" id="vo"}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
{$vo.id}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.role_name}
|
||||
</td>
|
||||
<td class="text-center" style="width: 70%;">
|
||||
{$vo.rules}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<i class="fa {eq name='vo.status' value='1'}fa-check text-navy{else/}fa-close text-danger{/eq}"></i>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')"><i class="fa fa-paste"></i> 编辑</button>
|
||||
<button class="btn btn-warning btn-xs" data-url="{:Url('delete',array('id'=>$vo['id']))}" type="button"><i class="fa fa-warning"></i> 删除
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{include file="public/inner_page"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
$('.btn-warning').on('click',function(){
|
||||
window.t = $(this);
|
||||
var _this = $(this),url =_this.data('url');
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
console.log(res);
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
_this.parents('tr').remove();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
203
application/admin/view/user/user_level/index.php
Normal file
203
application/admin/view/user/user_level/index.php
Normal file
@ -0,0 +1,203 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-row layui-col-space15" id="app">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">搜索条件</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">是否显示</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="is_show">
|
||||
<option value="">是否显示</option>
|
||||
<option value="1">显示</option>
|
||||
<option value="0">不显示</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">任务名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" class="layui-input" placeholder="请输入任务名称">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
|
||||
<i class="layui-icon layui-icon-search"></i>搜索</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--产品列表-->
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">分类列表</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加会员等级</button>
|
||||
</div>
|
||||
<table class="layui-hide" id="List" lay-filter="List"></table>
|
||||
<script type="text/html" id="icon">
|
||||
<img style="cursor: pointer" lay-event='open_image' src="{{d.icon}}">
|
||||
</script>
|
||||
<script type="text/html" id="is_forever">
|
||||
<input type='checkbox' name='id' disabled lay-skin='switch' value="{{d.id}}" lay-filter='is_forever' lay-text='永久|非永久' {{ d.is_forever == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="is_show">
|
||||
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show' lay-text='显示|隐藏' {{ d.is_show == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="is_pay">
|
||||
<input type='checkbox' name='id' disabled lay-skin='switch' value="{{d.id}}" lay-filter='is_pay' lay-text='付费|免费' {{ d.is_pay == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="act">
|
||||
<button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作 <span class="caret"></span></button>
|
||||
<ul class="layui-nav-child layui-anim layui-anim-upbit">
|
||||
<li>
|
||||
<a href="javascript:void(0)" onclick="$eb.createModalFrame(this.innerText,'{:Url(\'tash\')}?level_id={{d.id}}',{w:1000})">
|
||||
<i class="fa fa-paste"></i> 等级任务
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:void(0)" onclick="$eb.createModalFrame(this.innerText,'{:Url(\'create\')}?id={{d.id}}')">
|
||||
<i class="fa fa-paste"></i> 编辑等级
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a lay-event='delect' href="javascript:void(0)" >
|
||||
<i class="fa fa-paste"></i> 删除等级
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
//实例化form
|
||||
layList.form.render();
|
||||
//加载列表
|
||||
layList.tableList('List',"{:Url('get_system_vip_list')}",function (){
|
||||
return [
|
||||
{field: 'id', title: '编号', sort: true,event:'id'},
|
||||
{field: 'icon', title: '等级图标',templet:'#icon'},
|
||||
{field: 'name', title: '等级名称',edit:'name'},
|
||||
{field: 'grade', title: '等级',edit:'grade'},
|
||||
{field: 'discount', title: '享受折扣',edit:'discount'},
|
||||
{field: 'valid_date', title: '有效时间'},
|
||||
{field: 'is_forever', title: '是否永久',templet:'#is_forever',width:'8%'},
|
||||
{field: 'is_pay', title: '是否付费',templet:'#is_pay',width:'6%'},
|
||||
{field: 'is_show', title: '是否显示',templet:'#is_show',width:'6%'},
|
||||
{field: 'explain', title: '等级说明',width:'10%'},
|
||||
{field: 'right', title: '操作',align:'center',toolbar:'#act',width:'5%'},
|
||||
];
|
||||
});
|
||||
//自定义方法
|
||||
var action= {
|
||||
set_value: function (field, id, value) {
|
||||
layList.baseGet(layList.Url({
|
||||
a: 'set_value',
|
||||
q: {field: field, id: id, value: value}
|
||||
}), function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
},
|
||||
}
|
||||
//查询
|
||||
layList.search('search',function(where){
|
||||
layList.reload(where,true);
|
||||
});
|
||||
layList.switch('is_show',function (odj,value) {
|
||||
if(odj.elem.checked==true){
|
||||
layList.baseGet(layList.Url({a:'set_show',p:{is_show:1,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}else{
|
||||
layList.baseGet(layList.Url({a:'set_show',p:{is_show:0,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}
|
||||
});
|
||||
//快速编辑
|
||||
layList.edit(function (obj) {
|
||||
var id=obj.data.id,value=obj.value;
|
||||
switch (obj.field) {
|
||||
case 'name':
|
||||
action.set_value('name',id,value);
|
||||
break;
|
||||
case 'grade':
|
||||
action.set_value('grade',id,value);
|
||||
break;
|
||||
case 'discount':
|
||||
action.set_value('discount',id,value);
|
||||
break;
|
||||
}
|
||||
});
|
||||
//监听并执行排序
|
||||
layList.sort(['id','sort'],true);
|
||||
//点击事件绑定
|
||||
layList.tool(function (event,data,obj) {
|
||||
switch (event) {
|
||||
case 'delete':
|
||||
var url=layList.U({a:'delete',q:{id:data.id}});
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
obj.del();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
break;
|
||||
case 'open_image':
|
||||
$eb.openImage(data.icon);
|
||||
break;
|
||||
}
|
||||
})
|
||||
//下拉框
|
||||
$(document).click(function (e) {
|
||||
$('.layui-nav-child').hide();
|
||||
})
|
||||
function dropdown(that){
|
||||
var oEvent = arguments.callee.caller.arguments[0] || event;
|
||||
oEvent.stopPropagation();
|
||||
var offset = $(that).offset();
|
||||
var top=offset.top-$(window).scrollTop();
|
||||
var index = $(that).parents('tr').data('index');
|
||||
$('.layui-nav-child').each(function (key) {
|
||||
if (key != index) {
|
||||
$(this).hide();
|
||||
}
|
||||
})
|
||||
if($(document).height() < top+$(that).next('ul').height()){
|
||||
$(that).next('ul').css({
|
||||
'padding': 10,
|
||||
'top': - ($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height()/2),
|
||||
'min-width': 'inherit',
|
||||
'position': 'absolute'
|
||||
}).toggle();
|
||||
}else{
|
||||
$(that).next('ul').css({
|
||||
'padding': 10,
|
||||
'top':$(that).parent('td').height() / 2 + $(that).height(),
|
||||
'min-width': 'inherit',
|
||||
'position': 'absolute'
|
||||
}).toggle();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
168
application/admin/view/user/user_level/tash.php
Normal file
168
application/admin/view/user/user_level/tash.php
Normal file
@ -0,0 +1,168 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-row layui-col-space15" id="app">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">搜索条件</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">是否显示</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="is_show">
|
||||
<option value="">是否显示</option>
|
||||
<option value="1">显示</option>
|
||||
<option value="0">不显示</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">任务名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" class="layui-input" placeholder="请输入任务名称">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
|
||||
<i class="layui-icon layui-icon-search"></i>搜索</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--产品列表-->
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">任务列表</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="alert alert-info" role="alert">
|
||||
添加等级任务,任务类型中的{literal}{$num}{/literal}会自动替换成限定数量+系统预设的单位生成任务名
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create_tash',['level_id'=>$level_id])}')">添加会员任务</button>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm" onclick="window.location.reload()"><i class="layui-icon layui-icon-refresh"></i> 刷新</button>
|
||||
</div>
|
||||
<table class="layui-hide" id="List" lay-filter="List"></table>
|
||||
<script type="text/html" id="image">
|
||||
<img style="cursor: pointer" lay-event='open_image' src="{{d.image}}">
|
||||
</script>
|
||||
<script type="text/html" id="is_show">
|
||||
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show' lay-text='显示|隐藏' {{ d.is_show == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="is_must">
|
||||
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_must' lay-text='全部完成|达成其一' {{ d.is_must == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="act">
|
||||
<button class="layui-btn layui-btn-xs" onclick="$eb.createModalFrame('编辑','{:Url('create_tash',['level_id'=>$level_id])}?id={{d.id}}')">
|
||||
<i class="fa fa-paste"></i> 编辑
|
||||
</button>
|
||||
<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete'>
|
||||
<i class="fa fa-warning"></i> 删除
|
||||
</button>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
//实例化form
|
||||
layList.form.render();
|
||||
//加载列表
|
||||
layList.tableList('List',"{:Url('get_tash_list',['level_id'=>$level_id])}",function (){
|
||||
return [
|
||||
{field: 'id', title: '编号', sort: true,event:'id'},
|
||||
{field: 'level_name', title: '等级名称',},
|
||||
{field: 'name', title: '任务名称',},
|
||||
{field: 'sort', title: '排序',sort: true,event:'sort',edit:'sort',width:'7%'},
|
||||
{field: 'is_show', title: '是否显示',templet:'#is_show',width:'10%'},
|
||||
{field: 'is_must', title: '务必达成',templet:'#is_must',width:'15%'},
|
||||
{field: 'illustrate', title: '任务说明'},
|
||||
{field: 'right', title: '操作',align:'center',toolbar:'#act',width:'13%'},
|
||||
];
|
||||
});
|
||||
//自定义方法
|
||||
var action= {
|
||||
set_value: function (field, id, value) {
|
||||
layList.baseGet(layList.Url({
|
||||
a: 'set_tash_value',
|
||||
q: {field: field, id: id, value: value}
|
||||
}), function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
},
|
||||
}
|
||||
//查询
|
||||
layList.search('search',function(where){
|
||||
layList.reload(where,true);
|
||||
});
|
||||
layList.switch('is_show',function (odj,value) {
|
||||
if(odj.elem.checked==true){
|
||||
layList.baseGet(layList.Url({a:'set_tash_show',p:{is_show:1,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}else{
|
||||
layList.baseGet(layList.Url({a:'set_tash_show',p:{is_show:0,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
layList.switch('is_must',function (odj,value) {
|
||||
if(odj.elem.checked==true){
|
||||
layList.baseGet(layList.Url({a:'set_tash_must',p:{is_must:1,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}else{
|
||||
layList.baseGet(layList.Url({a:'set_tash_must',p:{is_must:0,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}
|
||||
});
|
||||
//快速编辑
|
||||
layList.edit(function (obj) {
|
||||
var id=obj.data.id,value=obj.value;
|
||||
switch (obj.field) {
|
||||
case 'title':
|
||||
action.set_value('title',id,value);
|
||||
break;
|
||||
case 'sort':
|
||||
action.set_value('sort',id,value);
|
||||
break;
|
||||
}
|
||||
});
|
||||
//监听并执行排序
|
||||
layList.sort(['id','sort'],true);
|
||||
//点击事件绑定
|
||||
layList.tool(function (event,data,obj) {
|
||||
switch (event) {
|
||||
case 'delete':
|
||||
var url=layList.U({a:'delete_tash',q:{id:data.id}});
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
obj.del();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
break;
|
||||
case 'open_image':
|
||||
$eb.openImage(data.image);
|
||||
break;
|
||||
}
|
||||
})
|
||||
</script>
|
||||
{/block}
|
||||
161
application/admin/view/user/user_level/user_level_list.php
Normal file
161
application/admin/view/user/user_level/user_level_list.php
Normal file
@ -0,0 +1,161 @@
|
||||
{extend name="public/container"}
|
||||
{block name="content"}
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-row layui-col-space15" id="app">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">搜索条件</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">用户名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" class="layui-input" placeholder="请输入用户名称">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
|
||||
<i class="layui-icon layui-icon-search"></i>搜索</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--产品列表-->
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">会员等级列表</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-hide" id="List" lay-filter="List"></table>
|
||||
<script type="text/html" id="is_forever">
|
||||
<input type='checkbox' name='id' disabled lay-skin='switch' value="{{d.id}}" lay-filter='is_forever' lay-text='永久|非永久' {{ d.is_forever == 1 ? 'checked' : '' }}>
|
||||
</script>
|
||||
<script type="text/html" id="act">
|
||||
<button class="layui-btn layui-btn-sm"><i class="fa fa-paste"></i> 删除等级</button>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
//实例化form
|
||||
layList.form.render();
|
||||
//加载列表
|
||||
layList.tableList('List',"{:Url('get_user_vip_list')}",function (){
|
||||
return [
|
||||
{field: 'id', title: '编号', sort: true,event:'id'},
|
||||
{field: 'nickname', title: '用户名'},
|
||||
{field: 'name', title: '等级名称',edit:'name'},
|
||||
{field: 'grade', title: '等级',edit:'grade'},
|
||||
{field: 'discount', title: '享受折扣',edit:'discount'},
|
||||
{field: 'valid_time', title: '有效时间'},
|
||||
{field: 'is_forever', title: '是否永久'},
|
||||
{field: 'right', title: '操作',align:'center',toolbar:'#act',width:'8%'},
|
||||
];
|
||||
});
|
||||
//自定义方法
|
||||
var action= {
|
||||
set_value: function (field, id, value) {
|
||||
layList.baseGet(layList.Url({
|
||||
a: 'set_value',
|
||||
q: {field: field, id: id, value: value}
|
||||
}), function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
},
|
||||
}
|
||||
//查询
|
||||
layList.search('search',function(where){
|
||||
layList.reload(where,true);
|
||||
});
|
||||
layList.switch('is_show',function (odj,value) {
|
||||
if(odj.elem.checked==true){
|
||||
layList.baseGet(layList.Url({a:'set_show',p:{is_show:1,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}else{
|
||||
layList.baseGet(layList.Url({a:'set_show',p:{is_show:0,id:value}}),function (res) {
|
||||
layList.msg(res.msg);
|
||||
});
|
||||
}
|
||||
});
|
||||
//快速编辑
|
||||
layList.edit(function (obj) {
|
||||
var id=obj.data.id,value=obj.value;
|
||||
switch (obj.field) {
|
||||
case 'name':
|
||||
action.set_value('name',id,value);
|
||||
break;
|
||||
case 'grade':
|
||||
action.set_value('grade',id,value);
|
||||
break;
|
||||
case 'discount':
|
||||
action.set_value('discount',id,value);
|
||||
break;
|
||||
}
|
||||
});
|
||||
//监听并执行排序
|
||||
layList.sort(['id','sort'],true);
|
||||
//点击事件绑定
|
||||
layList.tool(function (event,data,obj) {
|
||||
switch (event) {
|
||||
case 'delete':
|
||||
var url=layList.U({a:'delete',q:{id:data.id}});
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.get(url).then(function(res){
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
obj.del();
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
})
|
||||
break;
|
||||
case 'open_image':
|
||||
$eb.openImage(data.icon);
|
||||
break;
|
||||
}
|
||||
})
|
||||
//下拉框
|
||||
$(document).click(function (e) {
|
||||
$('.layui-nav-child').hide();
|
||||
})
|
||||
function dropdown(that){
|
||||
var oEvent = arguments.callee.caller.arguments[0] || event;
|
||||
oEvent.stopPropagation();
|
||||
var offset = $(that).offset();
|
||||
var top=offset.top-$(window).scrollTop();
|
||||
var index = $(that).parents('tr').data('index');
|
||||
$('.layui-nav-child').each(function (key) {
|
||||
if (key != index) {
|
||||
$(this).hide();
|
||||
}
|
||||
})
|
||||
if($(document).height() < top+$(that).next('ul').height()){
|
||||
$(that).next('ul').css({
|
||||
'padding': 10,
|
||||
'top': - ($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height()/2),
|
||||
'min-width': 'inherit',
|
||||
'position': 'absolute'
|
||||
}).toggle();
|
||||
}else{
|
||||
$(that).next('ul').css({
|
||||
'padding': 10,
|
||||
'top':$(that).parent('td').height() / 2 + $(that).height(),
|
||||
'min-width': 'inherit',
|
||||
'position': 'absolute'
|
||||
}).toggle();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
Loading…
x
Reference in New Issue
Block a user