初始化

This commit is contained in:
liut
2021-10-12 11:06:24 +08:00
commit ff0b4d5b12
1270 changed files with 405680 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Users;
use think\captcha\Captcha;
class Auth extends Admin
{
public function login(){
if((new Users)->login_auth('admin')){
return redirect('index/index');
}
if($this->request->isPost()){
$username = input('post.username');
$password = input('post.password');
$captcha = input('post.captcha');
try {
if(!captcha_check($captcha)){
throw new \Exception('验证码错误');
}
(new Users)->login($username,$password,'admin');
return json(['code' => 200,'msg' => '登录成功,正在跳转后台..']);
}catch (\Throwable $e){
return json(['code' => 502,'msg' => '登录失败:' . $e->getMessage()]);
}
}else{
return $this->fetch();
}
}
public function logout(){
(new Users)->logout('admin');
return json(['code' => 200,'msg' => '退出登录成功']);
}
public function verify(){
$config = [
'length' => 4
];
$captcha = new Captcha($config);
return $captcha->entry();
}
}
+63
View File
@@ -0,0 +1,63 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Certify as CertifyModel;
use app\common\model\Users;
class Certify extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',20);
$list = CertifyModel::order('create_time desc')
->page($page,$limit)
->field('id,uid,name,idcard,status,create_time')
->select()->each(function($item){
$item['create_time'] = date('Y-m-d H:i',$item['create_time']);
$item['uid'] = Users::where('id',$item['uid'])->value('username');
return $item;
});
$count = CertifyModel::count();
return json([
'code' => 0,
'msg' => '获取成功',
'data' => $list->toArray(),
'count' => $count
]);
}
return $this->fetch();
}
public function edit(){
$id = input('get.id');
$info = CertifyModel::where('id',$id)->find();
if(empty($info)){
return json(['code' => 502,'msg' => '数据不存在']);
}
$info['status'] = 1;
$info->save();
Users::where('id',$info['uid'])->update(['is_auth' => 1]);
return json(['code' => 200,'msg' => '处理成功']);
}
public function delete(){
$id = input('get.id');
CertifyModel::where('id',$id)->delete();
return json(['code' => 200,'msg' => '删除成功']);
}
}
@@ -0,0 +1,91 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Profit;
use app\common\model\Stores;
use app\common\model\Users;
class Dashboard extends Admin
{
public function index(){
// 获取当月所有时间
$month_time = [];
$time_type = [];
for ($i = 0;$i < 30;$i++){
$month_time[] = strtotime('-'.$i.' day');
$time_type[] = "'".date('m-d',strtotime('-'.$i.' day'))."'";
}
$time_type = array_reverse($time_type);
$time_type = implode(',',$time_type);
// 获取当月间隔时间
$start_time = strtotime(date('Y-m-d',strtotime('-29 day')));
$end_time = strtotime('now');
// 获取30天的统计记录
$profit = Profit::whereTime('create_time','>=',$start_time)
->whereTime('create_time','<=',$end_time)
->order('create_time desc')
->select();
// 图表统计
$series_reg = str_split(str_repeat('0',30),1);
$series_order = str_split(str_repeat('0',30),1);
$series_money = str_split(str_repeat('0',30),1);
foreach ($month_time as $key => $item){
$item_time = date('Y-m-d',$item);
foreach ($profit as $profit_item){
$profit_time = date('Y-m-d',$profit_item['create_time']);
if($item_time == $profit_time){
$series_reg[$key] = $profit_item['count_reg'];
$series_order[$key] = $profit_item['count_order_yes'];
$series_money[$key] = $profit_item['count_money'];
}
}
}
$series_reg = array_reverse($series_reg);
$series_reg = implode(',',$series_reg);
$series_order = array_reverse($series_order);
$series_order = implode(',',$series_order);
$series_money = array_reverse($series_money);
$series_money = implode(',',$series_money);
// 用户数量统计
$default_group = config('register.default_group');
$vip_group = config('vip.vip_group');
$default_user = Users::where('group',$default_group)->count();
$vip_user = Users::where('group',$vip_group)->count();
$file = Stores::count();
$size = Stores::sum('size');
$this->assign('count',[
'user' => $default_user,
'vip' => $vip_user,
'file' => $file,
'size' => countSize($size)
]);
$this->assign('profit',$profit);
$this->assign('series_reg',$series_reg);
$this->assign('series_order',$series_order);
$this->assign('series_money',$series_money);
$this->assign('time_type',$time_type);
return $this->fetch();
}
}
+152
View File
@@ -0,0 +1,152 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\driver\AliyunOss;
use app\common\model\driver\Local;
use app\common\model\driver\TxyunOss;
use app\common\model\Policys;
use app\common\model\Stores;
use app\common\model\Users;
use think\response\Download;
class File extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$map = [];
// 获取筛选条件
$start_time = input('get.start_time','');
$end_time = input('get.end_time','');
$policy_id = input('get.policy','');
$ext = input('get.ext','');
$uid = input('get.uid','');
$origin_name = input('get.origin_name','');
if(!empty($start_time) && !empty($end_time)){
$map[] = ['create_time','between time',[$start_time,$end_time]];
}
if(!empty($policy_id)){
$map[] = ['policy_id','=',$policy_id];
}
if(!empty($ext)){
$map[] = ['ext','=',$ext];
}
if(!empty($uid)){
$map[] = ['uid','=',$uid];
}
if(!empty($origin_name)){
$map[] = ['origin_name','like','%'.$origin_name.'%'];
}
//获取排序条件
$sort_key = input('get.sort_key','create_time');
$sort = input('get.sort',0);
$order_type = empty($sort) ? 'desc' : 'asc';
$list = Stores::where($map)->page($page,$limit)->order($sort_key,$order_type)->select()->each(function($item){
$item['icon'] = getFileIcon($item['ext'],'admin');
$item['size'] = countSize($item['size']);
$item['uid'] = Users::where('id',$item['uid'])->value('nickname');
$item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name');
return $item;
});
$count = Stores::where($map)->count();
return json([
'code' => 0,
'msg' => '加载成功',
'count' => $count,
'data' => $list->toArray()
]);
}else{
$policy = Policys::field('id,name')->select();
$this->assign('policy',$policy);
return $this->fetch();
}
}
public function delete(){
$ids = input('get.ids');
$store = Stores::withTrashed()->where('id','in',$ids)->select();
if(empty($store)){
$this->returnError('数据不存在');
}
$succ = 0;
foreach ($store as $item){
$item->delete();
$succ++;
}
$this->returnSuccess('成功删除'.$succ.'个文件');
}
public function download(){
$id = input('get.id',0);
$info = Stores::get($id);
if(empty($info)){
$this->error('数据不存在');
}
$policy = Policys::get($info['policy_id']);
if(empty($policy)){
$this->error('存储策略不存在');
}
// 远程文件下载
if($policy['type'] == 'remote'){
$down_url = getDownloadRemote($info['file_name'],$info['origin_name'],$policy->config['server_uri'],"",$policy->config['access_token']);
$this->redirect($down_url);
}
// 存储驱动下载
switch ($policy['type']){
case 'aliyunoss':
$driver = new AliyunOss(0,0,0);
break;
case 'txyunoss':
$driver = new TxyunOss(0,0,0);
break;
default:
$driver = new Local(0,0,0);
break;
}
// 下载
return $driver->download($info,"",$policy);
}
public function info(){
$id = input('get.id',0);
$info = Stores::get($id);
if(empty($info)){
$this->error('数据不存在');
}
$username = Users::where('id',$info['uid'])->value('username');
$policy_name = Policys::where('id',$info['policy_id'])->value('name');
$file_path = $info['file_name'];
$this->assign('username',$username);
$this->assign('policy_name',$policy_name);
$this->assign('file_path',$file_path);
$this->assign('info',$info);
return $this->fetch();
}
}
+84
View File
@@ -0,0 +1,84 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Groups;
use app\common\model\Policys;
use app\common\model\Users;
class Group extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$list = Groups::page($page,$limit)->select()->each(function($item){
$item['max_storage'] = countSize($item['max_storage']);
$item['is_sys'] = $item['is_sys'] ? '<span class="layui-badge-rim">系统</span>' : '自定义';
$item['user_num'] = Users::where('group',$item['id'])->count();
$item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name');
return $item;
});
$count = Groups::count();
$this->returnSuccessLayTable($count,$list->toArray());
}
return $this->fetch();
}
public function add(){
if($this->request->isPost()){
$this->callModelMethods('Groups','addGroup',input('post.'));
$this->returnSuccess();
}
$policy = Policys::getPolicyAll();
$this->assign('policy',$policy);
return $this->fetch();
}
public function edit(){
$id = input('get.id');
$info = Groups::get($id);
if(empty($info)){
$this->error('用户组数据不存在');
}
if($this->request->isPost()){
$this->callModelMethods('Groups','editGroup',$id,input('post.'));
$this->returnSuccess();
}
$policy = Policys::getPolicyAll();
$this->assign('policy',$policy);
$this->assign('info',$info);
return $this->fetch();
}
public function delete(){
$id = input('get.id');
$info = Groups::get($id);
if(empty($info)){
$this->returnError('用户组不存在');
}
if($info['is_sys'] == 1){
$this->returnError('系统用户组,不可删除');
}
/**
* 判断用户组下是否存在用户
*/
Groups::where('id',$id)->delete();
$this->returnSuccess('删除成功');
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
class Index extends Admin
{
public function index(){
$theme = [
// 标题
'title' => 'SkPan网盘',
// logo
'logo' => '/static/admin/images/logo.png',
// 菜单
'menu' => json_encode(config('menu.')),
// 管理员
'admin' => [
'avatar' => '/static/admin/images/avatar.jpg',
'nickname' => $this->adminInfo['nickname']
],
// 激活菜单
'menu_select' => 1,
// 首页url
'home_url' => url('dashboard/index'),
// 后台url
'index_url' => url('index/index'),
// 退出登录url
'logout_url' => url('auth/logout'),
// 修改密码url
'pass_url' => url('auth/pass'),
// 清除缓存
'clear_cache_url' => url('index/cache')
];
$this->assign('theme',$theme);
return $this->fetch();
}
}
+68
View File
@@ -0,0 +1,68 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Order as OrderModel;
use app\common\model\Users;
class Order extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$search_type = input('get.search_type','');
$search_value = input('get.search_value','');
$status = input('get.status','');
$map = [];
if(!empty($search_type) && !empty($search_value)){
$map[] = [$search_type,'like','%'.$search_value.'%'];
}
if(!empty($status)){
$map[] = ['status','=',$status];
}
$pay_types = [
'alipay' => '支付宝',
'wxpay' => '微信'
];
$list = OrderModel::where($map)
->page($page,$limit)
->select()->each(function ($item) use($pay_types){
$item['uid'] = Users::where('id',$item['uid'])->value('username');
$item['type'] = $pay_types[$item['type']] ?? '';
$item['money'] = number_format($item['money'],2).'¥';
$item['vip_day'] = $item['vip_day'].'天';
$item['out_trade_no'] = empty($item['out_trade_no']) ? '-' : $item['out_trade_no'];
$item['create_time'] = date('Y-m-d H:i',$item['create_time']);
$item['pay_time'] = empty($item['pay_time']) ? '-' : date('Y-m-d H:i',$item['pay_time']);
return $item;
});
$count = OrderModel::count();
return json([
'code' => 0,
'msg' => '加载成功',
'count' => $count,
'data' => $list->toArray()
]);
}
return $this->fetch();
}
public function delete(){
$ids = input('get.ids');
OrderModel::where('id','in',$ids)->delete();
$this->returnSuccess('删除订单成功');
}
}
+77
View File
@@ -0,0 +1,77 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Policys;
use app\common\model\Stores;
class Policy extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$list = Policys::page($page,$limit)->field('id,name,type,max_size')->select()->each(function($item){
$item['max_size'] = countSize($item['max_size']);
$item['type'] = PolicyType($item['type']);
$item['file_num'] = Stores::where('policy_id',$item['id'])->count();
$item['store_num'] = countSize(Stores::where('policy_id',$item['id'])->sum('size'));
return $item;
});
$count = Policys::count();
return json([
'code' => 0,
'msg' => '加载成功',
'count' => $count,
'data' => $list->toArray()
]);
}else{
return $this->fetch();
}
}
public function add(){
if($this->request->isPost()){
$this->callModelMethods('Policys','addPolicy',input('post.'));
$this->returnSuccess();
}
return $this->fetch();
}
public function edit(){
$id = input('get.id');
$info = Policys::get($id);
if(empty($info)){
$this->error('存储策略数据不存在');
}
if($this->request->isPost()){
$this->callModelMethods('Policys','editPolicy',$id,input('post.'));
$this->returnSuccess();
}
$this->assign('info',$info);
return $this->fetch();
}
public function delete(){
$id = input('get.id');
$info = Policys::get($id);
if(empty($info)){
$this->returnError('存储策略不存在');
}
Policys::where('id',$id)->delete();
$this->returnSuccess('删除成功');
}
}
+116
View File
@@ -0,0 +1,116 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Policys;
use app\common\model\Profit;
use app\common\model\Stores;
use app\common\model\Users;
class Recycle extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$map = [];
// 获取筛选条件
$start_time = input('get.start_time','');
$end_time = input('get.end_time','');
$policy_id = input('get.policy','');
$ext = input('get.ext','');
$uid = input('get.uid','');
$origin_name = input('get.origin_name','');
if(!empty($start_time) && !empty($end_time)){
$map[] = ['delete_time','between time',[$start_time,$end_time]];
}
if(!empty($policy_id)){
$map[] = ['policy_id','=',$policy_id];
}
if(!empty($ext)){
$map[] = ['ext','=',$ext];
}
if(!empty($uid)){
$map[] = ['uid','=',$uid];
}
if(!empty($origin_name)){
$map[] = ['origin_name','like','%'.$origin_name.'%'];
}
//获取排序条件
$sort_key = input('get.sort_key','delete_time');
$sort = input('get.sort',0);
$order_type = empty($sort) ? 'desc' : 'asc';
$list = Stores::onlyTrashed()->where($map)->page($page,$limit)->order($sort_key,$order_type)->select()->each(function($item){
$item['icon'] = getFileIcon($item['ext'],'admin');
$item['size'] = countSize($item['size']);
$item['uid'] = Users::where('id',$item['uid'])->value('nickname');
$item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name');
return $item;
});
$count = Stores::onlyTrashed()->where($map)->count();
return json([
'code' => 0,
'msg' => '加载成功',
'count' => $count,
'data' => $list->toArray()
]);
}
$policy = Policys::field('id,name')->select();
$this->assign('policy',$policy);
return $this->fetch();
}
public function restore(){
$ids = input('get.ids');
$store = Stores::onlyTrashed()->where('id','in',$ids)->select();
if(empty($store)){
$this->returnError('数据不存在');
}
$succ = 0;
foreach ($store as $item){
$item->restore();
$succ++;
}
$this->returnSuccess('处理完成,共恢复'.$succ.'个文件');
}
public function delete(){
$ids = input('get.ids');
$store = Stores::onlyTrashed()->where('id','in',$ids)->select();
if(empty($store)){
$this->returnError('数据不存在');
}
$succ = 0;
foreach ($store as $item){
$item->delete(true);
// 删除分享信息
Profit::where('file_id',$item['id'])
->where('uid',$item['uid'])
->delete();
$succ++;
}
$this->returnSuccess('成功删除'.$succ.'个文件');
}
}
+68
View File
@@ -0,0 +1,68 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Reports;
class Report extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',20);
$list = Reports::order('create_time desc')
->page($page,$limit)
->field('id,source_name,source_url,source_username,type,contact,real_ip,status,create_time')
->select()->each(function($item){
$item['create_time'] = date('Y-m-d H:i',$item['create_time']);
return $item;
});
$count = Reports::count();
return json([
'code' => 0,
'msg' => '获取成功',
'data' => $list->toArray(),
'count' => $count
]);
}
return $this->fetch();
}
public function edit(){
$id = input('get.id');
$info = Reports::where('id',$id)->find();
if(empty($info)){
$this->error('数据不存在');
}
if($this->request->isPost()){
$status = input('post.status');
$info['status'] = $status;
$info->save();
return json(['code' => 200,'msg' => '处理成功']);
}
$this->assign('info',$info);
return $this->fetch();
}
public function delete(){
$id = input('get.id');
Reports::where('id',$id)->delete();
return json(['code' => 200,'msg' => '删除成功']);
}
}
+84
View File
@@ -0,0 +1,84 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Groups;
use app\common\model\Setting as SettingModel;
use think\facade\Cache;
class Setting extends Admin
{
public function basic(){
$this->saveOptions();
$this->assign('option',$this->getOptions());
return $this->fetch();
}
public function register(){
$this->saveOptions();
$group = Groups::field('id,group_name')->select()->toArray();
$this->assign('group',$group);
$this->assign('option',$this->getOptions());
return $this->fetch();
}
public function pay(){
$this->saveOptions();
$this->assign('option',$this->getOptions());
return $this->fetch();
}
public function vip(){
$this->saveOptions();
$group = Groups::field('id,group_name')->select()->toArray();
$this->assign('group',$group);
$this->assign('option',$this->getOptions());
return $this->fetch();
}
public function email(){
$this->saveOptions();
$this->assign('option',$this->getOptions());
return $this->fetch();
}
protected function saveOptions(){
if($this->request->isPost()){
$type = $this->request->action();
$post = input('post.');
try {
// 更新数据库
foreach ($post as $key => $item){
SettingModel::where('set_name',$key)
->where('set_type',$type)
->update(['set_value' => $item]);
}
}catch (\Throwable $e){
$this->returnError($e->getMessage());
}
// 更新缓存
$setting = SettingModel::select()->toArray();
Cache::set('_setting_config',$setting);
$this->returnSuccess('保存成功');
}
}
protected function getOptions(): array
{
$type = $this->request->action();
$settings = SettingModel::where('set_type',$type)->select();
$options = [];
foreach ($settings as $item){
$options[$item['set_name']] = $item['set_value'];
}
return $options;
}
}
+206
View File
@@ -0,0 +1,206 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Groups;
use app\common\model\Users;
use think\Exception;
class User extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',10);
$search_type = input('get.search_type','');
$search_value = input('get.search_value','');
$map = [];
if(!empty($search_type) && !empty($search_value)){
$map[] = [$search_type,'like','%'.$search_value.'%'];
}
$groups = Groups::column('group_name','id');
$default_group = config('register.default_group');
$list = Users::where($map)
->page($page,$limit)
->field('id,nickname,username,group,is_auth,amount,email,avatar,status,create_time')
->select()->each(function ($item) use ($groups,$default_group){
$group_name = $groups[$item['group']] ?? '未知';
if($item['group'] == 1){
$item['group'] = '<span class="layui-badge layui-bg-blue">'. $group_name .'</span>';
}elseif ($item['group'] == $default_group){
$item['group'] = '<span class="layui-badge layui-bg-gray">'. $group_name .'</span>';
}else{
$item['group'] = '<span class="layui-badge layui-bg-red">'. $group_name .'</span>';
}
$item['avatar'] = getUserHead($item['avatar']);
return $item;
});
$count = Users::count();
return json([
'code' => 0,
'msg' => '加载成功',
'count' => $count,
'data' => $list->toArray()
]);
}else{
return $this->fetch();
}
}
public function add(){
$default_group = config('register.default_group');
if($this->request->isPost()){
$data = input('post.');
$result = $this->validate($data,[
'username|用户帐号' => 'require|alphaNum|length:6,26',
'group|用户组' => 'require|number',
'password|登录密码' => 'require|alphaNum|length:6,18',
'repassword|重复密码' => 'require|confirm:password',
'email|安全邮箱' => 'require|email'
]);
if($result !== true) return json(['code' => 502,'msg' => $result]);
if(empty($data['group'])){
$data['group'] = $default_group;
}
//处理用户的VIP时间
if(!empty($data['group_expire'])){
$group_expire = strtotime($data['group_expire']);
}
try {
(new Users)->register($data['username'],$data['email'],$data['password'],$data['group'],[],$group_expire);
return json(['code' => 200,'msg' => '账号新增成功']);
}catch (Exception $e){
return json(['code' => 503,'msg' => $e->getMessage()]);
}
}else{
$group = Groups::field('id,group_name')->select()->toArray();
$this->assign('default_group',$default_group);
$this->assign('group',$group);
return $this->fetch();
}
}
public function del(){
$ids = input('get.ids');
if(count(explode(',',$ids)) > 20){
$this->returnError('删除失败,不能一次删除20条以上的数据');
}
$delete_users = Users::where('id','in',$ids)->field('id,group')->select()->toArray();
foreach ($delete_users as $item){
if($item['id'] == 1){
$this->returnError('删除失败,删除帐号中包含总管理员帐号');
break;
}
/**
* 待完成功能:删除用户后删除相关数据,如:上传储存的数据,订单数据,目录数据,分享数据等
*/
Users::where('id',$item['id'])->delete();
}
return json(['code' => 200,'msg' => '删除成功']);
}
public function edit(){
$id = input('get.id');
$info = Users::get($id);
if(empty($info)){
$this->error('用户数据不存在');
}
if($this->request->isPost()){
$data = input('post.');
$result = $this->validate($data,[
'email|安全邮箱' => 'email',
'password|登录密码' => 'alphaNum|length:6,18',
'group|用户组' => 'require|number'
]);
if($result !== true) return json(['code' => 502,'msg' => $result]);
$update = [];
if(!empty($data['email'])){
$update['email'] = $data['email'];
}
if(!empty($data['password'])){
$en_password = md5($data['password'] . config('app.pass_salt'));
$update['password'] = $en_password;
}
if($info['group'] == 1 && $info['id'] != $this->adminInfo['id'] && !empty($data['password']) && $this->adminInfo['id'] != 1){
$this->returnError('操作失败,您不能更改其他管理员组用户的密码');
}
if($info['id'] == $this->adminInfo['id'] && $data['group'] != $info['group']){
$this->returnError('操作失败,您不能更改自己的用户组');
}
if($info['id'] == 1 && $data['group'] != $info['group']){
$this->returnError('操作失败,您不能更改总管理员的用户组');
}
$update['group'] = $data['group'];
//处理用户的VIP时间
if($info['group_expire']<time()&&strtotime($data['group_expire'])>$info['group_expire']){
$update['group_expire'] = strtotime($data['group_expire']);
}
Users::where('id',$id)->update($update);
return json(['code' => 200,'msg' => '用户信息修改成功']);
}else{
$group = Groups::field('id,group_name')->select()->toArray();
$this->assign('group',$group);
$this->assign('info',$info);
return $this->fetch();
}
}
public function change_status(){
$id = input('get.id');
$status = input('get.status');
$info = Users::get($id);
if($info->isEmpty()){
$this->returnError('用户数据不存在');
}
if($info['id'] == 1){
$this->returnError('操作失败,您不能封禁总管理员的帐号');
}
if($info['id'] == $this->adminInfo['id']){
$this->returnError('操作失败,您不能封禁自己的帐号');
}
Users::where('id',$id)->update(['status' => $status]);
return json(['code' => 200,'msg' => '用户状态切换成功']);
}
}
+68
View File
@@ -0,0 +1,68 @@
<?php
namespace app\admin\controller;
use app\common\controller\Admin;
use app\common\model\Record;
use app\common\model\Users;
use app\common\model\Withdraw as WithdrawModel;
class Withdraw extends Admin
{
public function index(){
if($this->request->isAjax()){
$page = input('get.page',1);
$limit = input('get.limit',20);
$list = WithdrawModel::order('create_time desc')
->page($page,$limit)
->field('id,uid,money,alipay_account,alipay_name,create_time,status')
->select()->each(function($item){
$item['uid'] = Users::where('id',$item['uid'])->value('username');
$item['create_time'] = date('Y-m-d H:i',$item['create_time']);
return $item;
});
$count = WithdrawModel::count();
return json([
'code' => 0,
'msg' => '获取成功',
'data' => $list->toArray(),
'count' => $count
]);
}
return $this->fetch();
}
public function delete(){
$id = input('get.id');
WithdrawModel::where('id',$id)->delete();
return json(['code' => 200,'msg' => '删除成功']);
}
public function change(){
$id = input('get.id');
$status = input('get.status');
$info = WithdrawModel::where('id',$id)->find();
if(empty($info)){
return json(['code' => 502,'msg' => '数据记录不存在']);
}
$info['status'] = $status;
$info->save();
if($status == 2){
// 退回金额
Record::addRecord($info['uid'],0,'提现退回',$info['money'],'提现系统退回金额');
}
return json(['code' => 200,'msg' => '操作成功']);
}
}
+80
View File
@@ -0,0 +1,80 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
<title> {$Think.config.app_name} 后台管理 </title>
<!-- 样 式 文 件 -->
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<link rel="stylesheet" href="/static/admin/css/other/login.css" />
</head>
<!-- 代 码 结 构 -->
<body style="background-size: cover;">
<form class="layui-form" action="javascript:void(0);">
<div class="layui-form-item">
<img class="logo" src="/static/admin/images/logo.png" />
<div class="title">{$Think.config.app_name}Yun</div>
<div class="desc">
{$Think.config.app_name} 后台管理
</div>
</div>
<div class="layui-form-item">
<input placeholder="账 户" type="text" name="username" hover class="layui-input"/>
</div>
<div class="layui-form-item">
<input placeholder="密 码" type="password" name="password" hover class="layui-input"/>
</div>
<div class="layui-form-item">
<input placeholder="验证码 : " type="text" maxlength="4" name="captcha" hover class="code layui-input layui-input-inline"/>
<img id="codeimg" class="codeImage" style="cursor: pointer;width: calc(100% - 192px);"/>
</div>
<br>
<div class="layui-form-item">
<button class="pear-btn pear-btn-success login" lay-submit lay-filter="login">
登 入
</button>
</div>
</form>
<!-- 资 源 引 入 -->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form', 'layer', 'jquery', 'element'], function () {
var $ = layui.jquery
, layer = layui.layer
, element = layui.element
, form = layui.form;
// 登 录 提 交
form.on('submit(login)', function(data) {
layer.load();
$.ajax({
type: "POST",
data: data.field,
success: function (res) {
layer.closeAll('loading');
if (res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function () {
location.href = "{:url('index/index')}";
})
} else {
layer.msg(res.msg,{icon:2,time:1000},function () {
initCode();
})
}
}
});
return false;
});
initCode();
function initCode() {
$('#codeimg').attr("src","{:url('auth/verify')}?data=" + new Date().getTime());
}
$('#codeimg').on('click', function () {
initCode();
});
})
</script>
</body>
</html>
+151
View File
@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar"></script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-survey"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-auth">
{{#if (d.status == 0) { }}
<span class="layui-badge layui-bg-orange">未审核</span>
{{# }else if(d.status == 1){ }}
<span class="layui-badge layui-bg-blue">已审核</span>
{{# } }}
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: 'ID', field: 'id', align: 'center'},
{title: '用户帐号', field: 'uid', align: 'center'},
{title: '真实姓名', field: 'name', align: 'center'},
{title: '身份证号码', field: 'idcard', align: 'center'},
{title: '处理状态', field: 'status', align: 'center', templet: '#user-auth'},
{title: '创建时间', field: 'create_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('certify/index')}",
page: true,
limit:20,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
}
});
window.edit = function(obj) {
layer.confirm('确认通过该条实名认证请求吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('certify/edit')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
},function(){
window.refresh();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该认证内容吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('certify/delete')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+177
View File
@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>控制后台</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<link rel="stylesheet" href="/static/admin/css/other/console1.css" />
</head>
<body class="pear-container">
<div>
<div class="layui-row layui-col-space10">
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">用户数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;">
{$count.user}
</div>
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
<span class="icon pear-icon" style="font-size: 40px">&#xe6e0;</span>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">VIP用户</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;">
{$count.vip}
</div>
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
<span class="icon pear-icon" style="font-size: 40px">&#xe697;</span>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">文件数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;">
{$count.file}
</div>
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
<span class="icon pear-icon" style="font-size: 40px">&#xe6a4;</span>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs6 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">文件大小</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #28333E;">
{$count.size}
</div>
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
<span class="icon pear-icon" style="font-size: 40px">&#xe6ad;</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space10">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-tab custom-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--</div>-->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['layer', 'echarts', 'element'], function() {
var $ = layui.jquery,
layer = layui.layer,
element = layui.element,
echarts = layui.echarts;
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var option = {
tooltip: {
trigger: 'axis'
},
xAxis: [{
type: 'category',
data: [{$time_type|raw}],
axisLine: {
lineStyle: {
color: "#999"
}
}
}],
yAxis: [{
type: 'value',
splitNumber: 4,
splitLine: {
lineStyle: {
type: 'dashed',
color: '#DDD'
}
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
},
},
nameTextStyle: {
color: "#999"
},
splitArea: {
show: false
}
}],
tooltip: {
valueSuffix: ' 个',
crosshairs: true,
shared: true
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [
{
name: '注册',
type: 'line',
color: 'rgba(0,242,59,246)', marker: { radius: 6 }, data: [{$series_reg|raw}]
},
{
name: '成功订单',
type: 'line',
color: 'rgba(0,15,182,59)', marker: { radius: 6 }, data: [{$series_order|raw}]
},
{
name: '金额',
type: 'line',
color: 'rgba(0,92,219,192)', marker: { radius: 6 }, data: [{$series_money|raw}]
}
]
};
echartsRecords.setOption(option);
window.onresize = function() {
echartsRecords.resize();
}
});
</script>
</body>
</html>
+288
View File
@@ -0,0 +1,288 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="">
<div class="layui-form-item">
<div id="test6">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">开始日期</label>
<div class="layui-input-inline">
<input type="text" autocomplete="off" name="start_time" id="test-startDate-1" class="layui-input" placeholder="开始日期">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">结束日期</label>
<div class="layui-input-inline">
<input type="text" autocomplete="off" name="end_time" id="test-endDate-1" class="layui-input" placeholder="结束日期">
</div>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">排序字段</label>
<div class="layui-input-inline">
<select name="sort_key" lay-verify="required">
<option value="create_time">上传时间排序</option>
<option value="update_time">更新时间排序</option>
<option value="id">ID排序</option>
<option value="size">文件大小排序</option>
<option value="count_down">下载量排序</option>
<option value="count_open">浏览量排序</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">排序方式</label>
<div class="layui-input-inline">
<select name="sort" lay-verify="required">
<option value="0">降序</option>
<option value="1">升序</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">存储筛选</label>
<div class="layui-input-inline">
<select name="policy" lay-verify="required">
{volist name="$policy" id="vo"}
<option value="{$vo.id}">{$vo.name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文件后缀</label>
<div class="layui-input-inline">
<input type="text" name="ext" placeholder="请输入文件后缀 如 png jpg 等" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">用户UID</label>
<div class="layui-input-inline">
<input type="number" name="uid" placeholder="请输入UID" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文件名称</label>
<div class="layui-input-inline">
<input type="text" name="origin_name" placeholder="请输入文件名称" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="pear-btn pear-btn-md pear-btn-primary" style="margin-left: 36px;" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
搜索结果
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置搜索
</button>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
批量删除
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" title="下载文件" lay-event="download"><i class="layui-icon layui-icon-download-circle"></i></button>
<button class="pear-btn pear-btn-primary pear-btn-sm" title="查看文件" lay-event="info"><i class="layui-icon layui-icon-form"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" title="删除文件" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="file-icon">
<img src="{{ d.icon }}">
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common','laydate'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
var laydate = layui.laydate;
laydate.render({
elem: '#test6'
,range: ['#test-startDate-1', '#test-endDate-1']
});
let cols = [
[{type: 'checkbox'},
{title: '', field: 'icon', align: 'center',width: 40,templet: '#file-icon'},
{title: '文件名', field: 'origin_name',width: 300, align: 'left'},
{title: '大小', field: 'size', align: 'center'},
{title: '上传用户', field: 'uid', align: 'center'},
{title: '储存服务器', field: 'policy_id', align: 'center'},
{title: '文件后缀', field: 'ext', align: 'center'},
{title: '下载量', field: 'count_down', align: 'center'},
{title: '浏览量', field: 'count_open', align: 'center'},
{title: '上传时间', field: 'create_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 160}
]
]
table.render({
elem: '#user-table',
url: "{:url('file/index')}",
page: true,
cols: cols,
skin: 'line',
limit:20,
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if(obj.event === 'info'){
window.info(obj);
} else if (obj.event === 'download') {
window.download(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'batchRemove') {
window.batchRemove(obj);
}
});
form.on('submit(user-query)', function(data) {
table.reload('user-table', {
where: data.field
})
return false;
});
window.info = function(obj) {
layer.open({
type: 2,
title: '文件信息',
shade: 0.1,
area: ['600px', '600px'],
content: "{:url('file/info')}?id=" + obj.data['id']
});
}
window.download = function(obj) {
window.open("{:url('file/download')}?id=" + obj.data['id']);
}
window.remove = function(obj) {
layer.confirm('确定要删除该文件吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('file/delete')}?ids=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.batchRemove = function(obj) {
var checkIds = common.checkField(obj,'id');
if (checkIds === "") {
layer.msg("未选中数据", {
icon: 3,
time: 1000
});
return false;
}
layer.confirm('确定要删除这些文件[' + checkIds + ']吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('file/delete')}?ids=" + checkIds,
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
table.reload('user-table');
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+71
View File
@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">文件名</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.origin_name}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">文件大小</label>
<div class="layui-input-block">
<div class="layui-form-mid">{:countSize($info.size)}</div>
</div>
</div>
<br>
<div class="layui-form-item">
<label class="layui-form-label">储存策略</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$policy_name}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所属用户</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$username}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">储存地址</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$file_path}</div>
</div>
</div>
<br>
<div class="layui-form-item">
<label class="layui-form-label">上传时间</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.create_time}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">更新时间</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.update_time}</div>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
</body>
</html>
+119
View File
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">用户组名</label>
<div class="layui-input-block">
<input type="text" name="group_name" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">用户组的名称</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存储策略</label>
<div class="layui-input-block">
<select name="policy_id" lay-verify="required">
{volist name="$policy" id="vo"}
<option value="{$vo.id}">{$vo.name}</option>
{/volist}
</select>
<div class="layui-form-mid layui-word-aux">为该用户组绑定一个上传策略</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">上传大小</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="max_storage" required value="10" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">单位:</div>
<div class="layui-input-inline">
<select name="storage_size" lay-verify="required">
<option value="1">B</option>
<option value="1024">KB</option>
<option value="1048576" selected>MB</option>
<option value="1073741824">GB</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux">限制用户组单文件上传大小</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">下载限速</label>
<div class="layui-input-inline">
<input type="text" name="speed" min="0" placeholder="留空表示不限速" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux"><b>KB/s</b> 填写0表示禁止下载</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分享文件</label>
<div class="layui-input-inline">
<input type="radio" name="allow_share" value="1" title="允许">
<input type="radio" name="allow_share" value="0" title="禁止" checked>
</div>
<div class="layui-form-mid layui-word-aux">是否允许创建文件分享链接</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+118
View File
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">用户组名</label>
<div class="layui-input-block">
<input type="text" name="group_name" value="{$info.group_name}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">用户组的名称</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存储策略</label>
<div class="layui-input-block">
<select name="policy_id" lay-verify="required">
{volist name="$policy" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$info.policy_id"}selected{/eq}>{$vo.name}</option>
{/volist}
</select>
<div class="layui-form-mid layui-word-aux">为该用户组绑定一个上传策略</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">上传大小</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="number" name="max_storage" required value="{:countSize($info.max_storage,true)[0]}" lay-verify="required" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">单位:</div>
<div class="layui-input-inline">
<select name="storage_size" lay-verify="required">
{php}
$storage_size = countSize($info['max_storage'],true)[1];
{/php}
<option value="1" {eq name="$storage_size" value="1"}selected{/eq}>B</option>
<option value="1024" {eq name="$storage_size" value="1024"}selected{/eq}>KB</option>
<option value="1048576" {eq name="$storage_size" value="1048576"}selected{/eq}>MB</option>
<option value="1073741824" {eq name="$storage_size" value="1073741824"}selected{/eq}>GB</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux">限制用户组单文件上传大小</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">下载限速</label>
<div class="layui-input-inline">
<input type="text" name="speed" min="0" value="{$info.speed}" placeholder="留空表示不限速" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux"><b>KB/s</b> 填写0表示禁止下载</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分享文件</label>
<div class="layui-input-inline">
<input type="radio" name="allow_share" value="1" title="允许" {eq name="$info.allow_share" value="1"}checked{/eq}>
<input type="radio" name="allow_share" value="0" title="禁止" {eq name="$info.allow_share" value="0"}checked{/eq}>
</div>
<div class="layui-form-mid layui-word-aux">是否允许创建文件分享链接</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+158
View File
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户组管理</title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
<i class="layui-icon layui-icon-add-1"></i>
新增用户组
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-speed">
{{#if (d.speed == '') { }}
<span class="layui-badge layui-bg-blue">不限速</span>
{{# }else if(d.speed == 0){ }}
<span class="layui-badge layui-bg-orange">禁止下载</span>
{{# }else if(d.speed > 0){ }}
<span class="layui-badge-rim">{{ d.speed }} KB/s</span>
{{# } }}
</script>
<script type="text/html" id="user-share">
{{#if (d.allow_share == 0) { }}
<span class="layui-badge layui-bg-orange">禁止</span>
{{# }else if(d.allow_share == 1){ }}
<span class="layui-badge layui-bg-blue">允许</span>
{{# } }}
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: 'ID', field: 'id', align: 'center'},
{title: '用户组名称', field: 'group_name', align: 'center'},
{title: '类型', field: 'is_sys', align: 'center'},
{title: '存储策略', field: 'policy_id', align: 'center'},
{title: '用户数量', field: 'user_num', align: 'center'},
{title: '上传大小限制', field: 'max_storage', align: 'center'},
{title: '下载限速', field: 'speed', align: 'center', templet: '#user-speed'},
{title: '允许分享', field: 'allow_share', align: 'center', templet: '#user-share'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: window.location.href,
page: true,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'add') {
window.add();
} else if (obj.event === 'refresh') {
window.refresh();
}
});
window.add = function() {
layer.open({
type: 2,
title: '新增用户组',
shade: 0.1,
area: [common.isModile()?'100%':'600px', common.isModile()?'100%':'500px'],
content: "{:url('group/add')}"
});
}
window.edit = function(obj) {
layer.open({
type: 2,
title: '修改用户组',
shade: 0.1,
area: ['600px', '500px'],
content: "{:url('group/edit')}?id=" + obj.data['id']
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该用户组吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('group/delete')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+93
View File
@@ -0,0 +1,93 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title> {$Think.config.app_name} 后台管理 </title>
<!-- 依 赖 样 式 -->
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<!-- 加 载 样 式-->
<link rel="stylesheet" href="/static/admin/css/load.css" />
<!-- 布 局 样 式 -->
<link rel="stylesheet" href="/static/admin/css/admin.css" />
<script>
if(window!=top){ top.location.href = location.href; }
var skpan_config = {
title:"{$theme.title}",
logo:"{$theme.logo}",
menu: {$theme.menu|raw},
menu_select:"{$theme.menu_select}",
home_url:"{$theme.home_url}",
index_url:"{$theme.index_url}",
logout_url:"{$theme.logout_url}",
pass_url:"{$theme.pass_url}",
clear_cache_url:"{$theme.clear_cache_url}"
}
</script>
</head>
<!-- 结 构 代 码 -->
<body class="layui-layout-body pear-admin">
<!-- 布 局 框 架 -->
<div class="layui-layout layui-layout-admin">
<div class="layui-header">
<!-- 顶 部 左 侧 功 能 -->
<ul class="layui-nav layui-layout-left">
<li class="collaspe layui-nav-item"><a href="#" class="layui-icon layui-icon-shrink-right"></a></li>
<li class="refresh layui-nav-item"><a href="#" class="layui-icon layui-icon-refresh-1" loading=600></a></li>
</ul>
<!-- 顶 部 右 侧 菜 单 -->
<div id="control" class="layui-layout-control"></div>
<ul class="layui-nav layui-layout-right" lay-filter="layui_nav_right">
<li class="layui-nav-item layui-hide-xs"><a href="#" class="fullScreen layui-icon layui-icon-screen-full"></a></li>
<li class="layui-nav-item user">
<!-- 头 像 -->
<a href="javascript:;">
<img src="{$theme.admin.avatar}" class="layui-nav-img">
{$theme.admin.nickname}
</a>
<!-- 功 能 菜 单 -->
<dl class="layui-nav-child">
<dd>
<a href="javascript:void(0);" class="logout">
退出登录
</a>
</dd>
</dl>
</li>
</ul>
</div>
<!-- 侧 边 区 域 -->
<div class="layui-side layui-bg-black">
<!-- 顶 部 图 标 -->
<div class="layui-logo">
<!-- 图 表 -->
<img class="logo">
<!-- 标 题 -->
<span class="title"></span>
</div>
<!-- 侧 边 菜 单 -->
<div class="layui-side-scroll">
<div id="sideMenu"></div>
</div>
</div>
<!-- 视 图 页 面 -->
<div class="layui-body">
<!-- 内 容 页 面 -->
<div id="content"></div>
</div>
</div>
<!-- 遮 盖 层 -->
<div class="pear-cover"></div>
<!-- 移 动 端 便 捷 操 作 -->
<div class="pear-collasped-pe collaspe"><a href="#" class="layui-icon layui-icon-shrink-right"></a></div>
<!-- 加 载 动 画-->
<div class="loader-main">
<div class="loader"></div>
</div>
<!-- 依 赖 脚 本 -->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<!-- 框 架 初 始 化 -->
<script src="/static/admin/js/boostrap.js"></script>
</body>
</html>
+222
View File
@@ -0,0 +1,222 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="">
<div class="layui-form-item">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">搜索类型</label>
<div class="layui-input-inline">
<select name="search_type" lay-verify="required">
<option value="trade_no">订单号</option>
<option value="out_trade_no">易支付订单号</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">支付状态</label>
<div class="layui-input-inline">
<select name="status" lay-verify="required">
<option value="0">等待支付</option>
<option value="1">支付成功</option>
<option value="2">订单关闭</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">搜索内容</label>
<div class="layui-input-inline">
<input type="text" name="search_value" placeholder="请输入搜索内容" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
搜索结果
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置搜索
</button>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
批量删除
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-auth">
{{#if (d.status == 0) { }}
<span class="layui-badge layui-bg-orange">等待支付</span>
{{# }else if(d.status == 1){ }}
<span class="layui-badge layui-bg-blue">支付完成</span>
{{# }else if(d.status == 2){ }}
<span class="layui-badge layui-bg-red">订单关闭</span>
{{# } }}
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: '订单号', field: 'trade_no', align: 'center', width: 250},
{title: '开通用户', field: 'uid', align: 'center'},
{title: '支付方式', field: 'type', align: 'center'},
{title: '支付金额', field: 'money', align: 'center'},
{title: '开通时长', field: 'vip_day', align: 'center'},
{title: '易支付订单号', field: 'out_trade_no', align: 'center'},
{title: '支付状态', field: 'status', align: 'center', templet: '#user-auth'},
{title: '发起时间', field: 'create_time', align: 'center'},
{title: '支付时间', field: 'pay_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('order/index')}",
page: true,
limit: 20,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'batchRemove') {
window.batchRemove(obj);
}
});
form.on('submit(user-query)', function(data) {
table.reload('user-table', {
where: data.field
})
return false;
});
window.remove = function(obj) {
layer.confirm('确定要删除订单吗?<br><b style="color: red">请勿删除正在等待支付或者支付完成的订单</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('order/delete')}?ids=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.batchRemove = function(obj) {
var checkIds = common.checkField(obj,'id');
if (checkIds === "") {
layer.msg("未选中数据", {
icon: 3,
time: 1000
});
return false;
}
layer.confirm('确定要批量删除这些订单吗?<br><b style="color: red">请勿删除正在等待支付或者支付完成的订单</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('order/delete')}?ids=" + checkIds,
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
table.reload('user-table');
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+241
View File
@@ -0,0 +1,241 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<style>
.remote_field{
display: none;
}
</style>
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">策略名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" placeholder="请输入上传策略的名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">允许后缀</label>
<div class="layui-input-block">
<input type="text" name="filetype" placeholder="请输入文件后缀" class="layui-input">
<div class="layui-form-mid layui-word-aux">多个请以半角逗号","隔开,留空表示不限制。如"png,jpg"</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存储服务器</label>
<div class="layui-input-block">
<select name="type" lay-verify="required" lay-filter="server_select">
<option value="local">本地</option>
<option value="remote">远程</option>
<option value="aliyunoss">阿里云OSS</option>
<option value="txyunoss">腾讯云COS</option>
</select>
<div class="layui-form-mid layui-word-aux">文件存储的服务器</div>
</div>
</div>
<div class="other-field">
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
</div>
</div>
</form>
<script id="field_local" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
</script>
<script id="field_remote" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">远程Token</label>
<div class="layui-input-block">
<input type="text" name="access_token" placeholder="AccessToken" lay-verify="required" class="layui-input">
<div class="layui-form-mid layui-word-aux">请与远程服务端配置文件中保持一致</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">服务端URL</label>
<div class="layui-input-block">
<input type="text" name="server_uri" placeholder="服务端URL" lay-verify="required" class="layui-input">
<div class="layui-form-mid layui-word-aux">请填写合法的URL地址结尾要加"/"</div>
</div>
</div>
</script>
<script id="field_aliyunoss" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Endpoint</label>
<div class="layui-input-block">
<input type="text" name="endpoint" placeholder="Endpoint" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS Endpoint</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Bucket</label>
<div class="layui-input-block">
<input type="text" name="bucket" placeholder="Bucket" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS Bucket</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">AccessKey</label>
<div class="layui-input-block">
<input type="text" name="access_key" placeholder="AccessKey" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS AccessKey</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">AccessKeySecret</label>
<div class="layui-input-block">
<input type="text" name="access_secret" placeholder="AccessKeySecret" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS AccessKeySecret</div>
</div>
</div>
</script>
<script id="field_txyunoss" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SecretId</label>
<div class="layui-input-block">
<input type="text" name="secret_id" placeholder="SecretId" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS SecretId</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SecretKey</label>
<div class="layui-input-block">
<input type="text" name="secret_key" placeholder="SecretKey" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS SecretKey</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Bucket</label>
<div class="layui-input-block">
<input type="text" name="bucket" placeholder="Bucket" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS Bucket</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Region</label>
<div class="layui-input-block">
<input type="text" name="region" placeholder="Region" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS Region 存储桶地域</div>
</div>
</div>
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
setFieldHtml('local');
function setFieldHtml(field){
let field_name = '#field_' + field;
let html = $(field_name).html();
if(typeof html !== "undefined"){
$(".other-field").html(html);
return true;
}
$(".other-field").html("");
return false;
}
form.on('select(server_select)',function(obj){
setFieldHtml(obj.value);
});
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+241
View File
@@ -0,0 +1,241 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<style>
.remote_field{
display: none;
}
</style>
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">策略名称</label>
<div class="layui-input-block">
<input type="text" name="name" lay-verify="required" value="{$info.name}" placeholder="请输入上传策略的名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">允许后缀</label>
<div class="layui-input-block">
<input type="text" name="filetype" value="{$info.filetype}" placeholder="请输入文件后缀" class="layui-input">
<div class="layui-form-mid layui-word-aux">多个请以半角逗号","隔开,留空表示不限制。如"png,jpg"</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存储服务器</label>
<div class="layui-input-block">
<select name="type" lay-verify="required" lay-filter="server_select" disabled>
<option value="local" {eq name="$info.type" value="local"}selected{/eq}>本地</option>
<option value="remote" {eq name="$info.type" value="remote"}selected{/eq}>远程</option>
<option value="aliyunoss" {eq name="$info.type" value="aliyunoss"}selected{/eq}>阿里云OSS</option>
<option value="txyunoss" {eq name="$info.type" value="txyunoss"}selected{/eq}>腾讯云C0S</option>
</select>
<div class="layui-form-mid layui-word-aux">文件存储的服务器</div>
</div>
</div>
<div class="other-field">
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
保存修改
</button>
</div>
</div>
</form>
{eq name="$info.type" value="local"}
<script id="field_local" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" value="{$info.config.save_dir}" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
</script>
{/eq}
{eq name="$info.type" value="remote"}
<script id="field_remote" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" value="{$info.config.save_dir}" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">远程Token</label>
<div class="layui-input-block">
<input type="text" name="access_token" value="{$info.config.access_token}" placeholder="AccessToken" lay-verify="required" class="layui-input">
<div class="layui-form-mid layui-word-aux">请与远程服务端配置文件中保持一致</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">服务端URL</label>
<div class="layui-input-block">
<input type="text" name="server_uri" value="{$info.config.server_uri}" placeholder="服务端URL" lay-verify="required" class="layui-input">
<div class="layui-form-mid layui-word-aux">请填写合法的URL地址结尾要加"/"</div>
</div>
</div>
</script>
{/eq}
{eq name="$info.type" value="aliyunoss"}
<script id="field_aliyunoss" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" value="{$info.config.save_dir}" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Endpoint</label>
<div class="layui-input-block">
<input type="text" name="endpoint" value="{$info.config.endpoint}" placeholder="Endpoint" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS Endpoint</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Bucket</label>
<div class="layui-input-block">
<input type="text" name="bucket" value="{$info.config.bucket}" placeholder="Bucket" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS Bucket</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">AccessKey</label>
<div class="layui-input-block">
<input type="text" name="access_key" value="{$info.config.access_key}" placeholder="AccessKey" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS AccessKey</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">AccessKeySecret</label>
<div class="layui-input-block">
<input type="text" name="access_secret" value="{$info.config.access_secret}" placeholder="AccessKeySecret" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">OSS AccessKeySecret</div>
</div>
</div>
</script>
{/eq}
{eq name="$info.type" value="txyunoss"}
<script id="field_txyunoss" type="text/html">
<div class="layui-form-item">
<label class="layui-form-label">存储目录</label>
<div class="layui-input-block">
<input type="text" name="save_dir" value="{$info.config.save_dir}" placeholder="请输入文件存放的目录" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">请以根目录 / 开始结尾要加"/"例如/uploads/</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SecretId</label>
<div class="layui-input-block">
<input type="text" name="secret_id" value="{$info.config.secret_id}" placeholder="SecretId" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS SecretId</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SecretKey</label>
<div class="layui-input-block">
<input type="text" name="secret_key" value="{$info.config.secret_key}" placeholder="SecretKey" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS SecretKey</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Bucket</label>
<div class="layui-input-block">
<input type="text" name="bucket" value="{$info.config.bucket}" placeholder="Bucket" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS Bucket</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Region</label>
<div class="layui-input-block">
<input type="text" name="region" value="{$info.config.region}" placeholder="Region" lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">COS Region 存储桶地域</div>
</div>
</div>
</script>
{/eq}
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
function setFieldHtml(field){
let field_name = '#field_' + field;
let html = $(field_name).html();
if(typeof html !== "undefined"){
$(".other-field").html(html);
return true;
}
$(".other-field").html("");
return false;
}
setFieldHtml('{$info.type}');
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+136
View File
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
<i class="layui-icon layui-icon-add-1"></i>
添加策略
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: '策略名称', field: 'name', align: 'center'},
{title: '类型', field: 'type', align: 'center'},
{title: '文件数量', field: 'file_num', align: 'center'},
{title: '存储数据量', field: 'store_num', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('policy/index')}",
page: true,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'add') {
window.add();
} else if (obj.event === 'refresh') {
window.refresh();
}
});
window.add = function() {
layer.open({
type: 2,
title: '添加策略',
shade: 0.1,
area: [common.isModile()?'100%':'600px', common.isModile()?'100%':'600px'],
content: "{:url('Policy/add')}"
});
}
window.edit = function(obj) {
layer.open({
type: 2,
title: '修改策略',
shade: 0.1,
area: [common.isModile()?'100%':'600px', common.isModile()?'100%':'600px'],
content: "{:url('policy/edit')}?id=" + obj.data['id']
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该储存策略吗?<b style="color: red">删除后会导致上传文件不能下载,且不可恢复</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('policy/delete')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+351
View File
@@ -0,0 +1,351 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="">
<div class="layui-form-item">
<div id="test6">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">开始日期</label>
<div class="layui-input-inline">
<input type="text" autocomplete="off" name="start_time" id="test-startDate-1" class="layui-input" placeholder="开始日期">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">结束日期</label>
<div class="layui-input-inline">
<input type="text" autocomplete="off" name="end_time" id="test-endDate-1" class="layui-input" placeholder="结束日期">
</div>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">排序字段</label>
<div class="layui-input-inline">
<select name="sort_key" lay-verify="required">
<option value="delete_time">删除时间排序</option>
<option value="update_time">更新时间排序</option>
<option value="id">ID排序</option>
<option value="size">文件大小排序</option>
<option value="count_down">下载量排序</option>
<option value="count_open">浏览量排序</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">排序方式</label>
<div class="layui-input-inline">
<select name="sort" lay-verify="required">
<option value="0">降序</option>
<option value="1">升序</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">存储筛选</label>
<div class="layui-input-inline">
<select name="policy" lay-verify="required">
{volist name="$policy" id="vo"}
<option value="{$vo.id}">{$vo.name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文件后缀</label>
<div class="layui-input-inline">
<input type="text" name="ext" placeholder="请输入文件后缀 如 png jpg 等" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">用户UID</label>
<div class="layui-input-inline">
<input type="number" name="uid" placeholder="请输入UID" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">文件名称</label>
<div class="layui-input-inline">
<input type="text" name="origin_name" placeholder="请输入文件名称" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="pear-btn pear-btn-md pear-btn-primary" style="margin-left: 36px;" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
搜索结果
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置搜索
</button>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="batchBack">
<i class="layui-icon layui-icon-time"></i>
批量还原
</button>
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
彻底删除
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="back"><i class="layui-icon layui-icon-time"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="file-icon">
<img src="{{ d.icon }}">
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common','laydate'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
var laydate = layui.laydate;
laydate.render({
elem: '#test6'
,range: ['#test-startDate-1', '#test-endDate-1']
});
let cols = [
[{type: 'checkbox'},
{title: '', field: 'icon', align: 'center',width: 40,templet: '#file-icon'},
{title: '文件名', field: 'origin_name',width: 300, align: 'left'},
{title: '大小', field: 'size', align: 'center'},
{title: '上传用户', field: 'uid', align: 'center'},
{title: '储存服务器', field: 'policy_id', align: 'center'},
{title: '文件后缀', field: 'ext', align: 'center'},
{title: '下载量', field: 'count_down', align: 'center'},
{title: '浏览量', field: 'count_open', align: 'center'},
{title: '删除时间', field: 'create_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('recycle/index')}",
page: true,
cols: cols,
skin: 'line',
limit:20,
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
}else if(obj.event === 'back'){
window.restore(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'batchRemove') {
window.batchRemove(obj);
} else if (obj.event === 'batchBack'){
window.batchRestore(obj);
}
});
form.on('submit(user-query)', function(data) {
table.reload('user-table', {
where: data.field
})
return false;
});
window.restore = function(obj){
layer.confirm('确认要恢复该文件吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('recycle/restore')}?ids=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.remove = function(obj) {
layer.confirm('确定要彻底删除该文件吗?<b style="color: red">删除后储存数据会被清空,且不可恢复</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('recycle/delete')}?ids=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.batchRemove = function(obj) {
var checkIds = common.checkField(obj,'id');
if (checkIds === "") {
layer.msg("未选中数据", {
icon: 3,
time: 1000
});
return false;
}
layer.confirm('确定要删除这些文件[' + checkIds + ']吗,<b style="color: red">删除后数据不可恢复</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('recycle/delete')}?ids=" + checkIds,
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
table.reload('user-table');
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.batchRestore = function(obj){
var checkIds = common.checkField(obj,'id');
if (checkIds === "") {
layer.msg("未选中数据", {
icon: 3,
time: 1000
});
return false;
}
layer.confirm('确定要恢复这些文件[' + checkIds + ']吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('recycle/restore')}?ids=" + checkIds,
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
table.reload('user-table');
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+113
View File
@@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">文件/目录名</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.source_name}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">储存类型</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.source_type?'文件':'目录'}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所属用户</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.source_username}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">链接地址</label>
<div class="layui-input-block">
<div class="layui-form-mid"><a href="{$info.source_url}" target="_blank">{$info.source_url}</a></div>
</div>
</div>
<br>
<div class="layui-form-item">
<label class="layui-form-label">举报类型</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.type}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.contact}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">举报理由</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.content}</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
完成处理
</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
取消处理
</button>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify({status:1}),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+135
View File
@@ -0,0 +1,135 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar"></script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-survey"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-auth">
{{#if (d.status == 0) { }}
<span class="layui-badge layui-bg-orange">未处理</span>
{{# }else if(d.status == 1){ }}
<span class="layui-badge layui-bg-blue">已处理</span>
{{# } }}
</script>
<script type="text/html" id="user-url">
<a href="{{ d.source_url }}" target="_blank">{{ d.source_url }}</a>
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: '文件/目录名', field: 'source_name', align: 'center'},
{title: '链接地址', field: 'source_url', align: 'center', templet: '#user-url'},
{title: '所属用户', field: 'source_username', align: 'center'},
{title: '危害类别', field: 'type', align: 'center'},
{title: '联系方式', field: 'contact', align: 'center'},
{title: '举报IP', field: 'real_ip', align: 'center'},
{title: '处理状态', field: 'status', align: 'center', templet: '#user-auth'},
{title: '创建时间', field: 'create_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('report/index')}",
page: true,
limit:20,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
}
});
window.edit = function(obj) {
layer.open({
type: 2,
title: '处理举报',
shade: 0.1,
area: ['600px', '520px'],
content: "{:url('report/edit')}?id=" + obj.data['id']
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该举报内容吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('report/delete')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+145
View File
@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<br>
<br>
<div class="layui-form-item">
<label class="layui-form-label">站点名称</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="site_title" value="{$option.site_title}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">站点的名称,将会展示在个页面的标题尾部、邮件中。</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">站点LOGO</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="site_logo" value="{$option.site_logo}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">站点logo路径</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">网站首页</label>
<div class="layui-input-block" style="max-width: 800px;">
<select name="index_theme" lay-verify="required">
<option value="default" {eq name="$option.index_theme" value="default"}selected{/eq}>旧版主题</option>
<option value="new1" {eq name="$option.index_theme" value="new1"}selected{/eq}>新版主题</option>
</select>
<div class="layui-form-mid layui-word-aux">网站首页主题</div>
</div>
</div>
<br>
<div class="layui-form-item">
<label class="layui-form-label">SEO标题</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="site_name" value="{$option.site_name}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">位于首页meta标签内的站点标题</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SEO关键词</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="site_keywords" value="{$option.site_keywords}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">位于首页meta标签内的站点关键词</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">SEO描述</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="site_desc" placeholder="位于首页meta标签内的SEO描述" class="layui-textarea">{$option.site_desc}</textarea>
</div>
</div>
<br>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">网站头部</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="site_head" placeholder="网站头部代码,用于百度站长等工具验证" class="layui-textarea">{$option.site_head}</textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">网站底部</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="site_foot" placeholder="网站底部代码,你可以在此放置统计代码" class="layui-textarea">{$option.site_foot}</textarea>
</div>
</div>
<br>
<div class="layui-form-item">
<label class="layui-form-label">站点邮箱</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="site_email" value="{$option.site_email}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">站点的用户投诉举报邮箱</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">客服信息</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="site_kefu" placeholder="" class="layui-textarea">{$option.site_kefu}</textarea>
</div>
</div>
<br>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存设置</button>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+122
View File
@@ -0,0 +1,122 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<br>
<br>
<div class="layui-form-item">
<label class="layui-form-label">邮件服务器</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="smtp_host" value="{$option.smtp_host}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">邮箱的SMTP服务器地址</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SMTP端口</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="smtp_port" value="{$option.smtp_port}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">SSL连接SMTP服务器的远程服务器端口号</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发信昵称</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="nickname" value="{$option.nickname}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">显示在收件人邮件的发件人邮箱地址前的发件人姓名</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱帐号</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="username" value="{$option.username}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">SMTP登录的账号</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱密码</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="password" value="{$option.password}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">SMTP登录的密码 使用生成的授权码</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">找回密码模板</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="template_forget" id="edit" cols="30" rows="10">{$option.template_forget}</textarea>
<div class="layui-form-mid layui-word-aux">
模板内变量:
{username} 用户帐号
{literal}{url}{/literal} 重设密码url地址
{site_name} 站点名称
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存设置</button>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery','tinymce'],function(){
let form = layui.form;
let $ = layui.jquery;
var tinymce = layui.tinymce
var edit = tinymce.render({
elem: "#edit",
height: 400,
menubar: false, //隐藏菜单栏
plugins: "code",
toolbar: "code",
});
form.on('submit(save)', function(data){
data.field['template_forget'] = edit.getContent()
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+91
View File
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<br>
<br>
<div class="layui-form-item">
<label class="layui-form-label">易支付网关</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="api_gateway" value="{$option.api_gateway}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">
支付网关注册地址:只要是易支付即可
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">易支付商户</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="api_pid" value="{$option.api_pid}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">
请填写易支付的商户ID
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">易支付密钥</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="text" name="api_key" value="{$option.api_key}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">
请填写易支付的商户密钥
</div>
</div>
</div>
<br>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存设置</button>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
@@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<br>
<br>
<div class="layui-form-item">
<label class="layui-form-label">允许注册</label>
<div class="layui-input-block">
<input type="radio" name="allow_register" value="1" title="允许" {eq name="$option.allow_register" value="1"}checked{/eq}>
<input type="radio" name="allow_register" value="0" title="禁止" {eq name="$option.allow_register" value="0"}checked{/eq}>
</div>
<div class="layui-form-mid layui-word-aux">是否允许新用户注册</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">默认用户组</label>
<div class="layui-input-block" style="max-width: 800px;">
<select name="default_group" lay-verify="required">
{volist name="$group" id="vo"}
<option value="{$vo.id}" {eq name="$option.default_group" value="$vo.id"}selected{/eq}>{$vo.group_name}</option>
{/volist}
</select>
<div class="layui-form-mid layui-word-aux">用户注册后默认属于的用户组</div>
</div>
</div>
<br>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存设置</button>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+93
View File
@@ -0,0 +1,93 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<br>
<br>
<div class="layui-form-item">
<label class="layui-form-label">VIP用户组</label>
<div class="layui-input-block" style="max-width: 800px;">
<select name="vip_group" lay-verify="required">
{volist name="$group" id="vo"}
<option value="{$vo.id}" {eq name="$option.vip_group" value="$vo.id"}selected{/eq}>{$vo.group_name}</option>
{/volist}
</select>
<div class="layui-form-mid layui-word-aux">开通VIP后属于的用户组</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">VIP分成</label>
<div class="layui-input-block" style="max-width: 800px;">
<input type="number" name="vip_profit" value="{$option.vip_profit}" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-mid layui-word-aux">
游客通过分享者的链接开通VIP后,分享者获得的提成。请填写百分比如50%那么就填写50
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">VIP价格规则</label>
<div class="layui-input-block" style="max-width: 800px;">
<textarea name="vip_rule" placeholder="VIP价格规则" rows="10" class="layui-textarea">{$option.vip_rule}</textarea>
<div class="layui-form-mid layui-word-aux">
价格规则,一行一条,规则格式为:
价格名称|开通价格|开通时长(单位天)|显示单位|折扣显示|省钱显示|描述内容|是否推荐(推荐填写1,不推荐填写0)
</div>
</div>
</div>
<br>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存设置</button>
</div>
</div>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery'],function(){
let form = layui.form;
let $ = layui.jquery;
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+116
View File
@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">用户帐号</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="required" placeholder="请输入用户帐号" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">当前用户组</label>
<div class="layui-input-block">
<select name="group" lay-verify="required">
{volist name="$group" id="vo"}
<option value="{$vo.id}" {eq name="$default_group" value="$vo.id"}selected{/eq}>{$vo.group_name}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">设置VIP时间</label>
<div class="layui-input-block">
<input type="text" name="group_expire" value="" placeholder="非VIP默认不选" class="layui-input" id="group_expire">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">登录密码</label>
<div class="layui-input-block">
<input type="password" name="password" placeholder="请输入密码" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">重复密码</label>
<div class="layui-input-block">
<input type="password" name="repassword" placeholder="请再次输入密码" lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">安全邮箱</label>
<div class="layui-input-block">
<input type="email" name="email" placeholder="请输入密码邮箱账号 " lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery','laydate'],function(){
let form = layui.form;
let $ = layui.jquery;
let laydate = layui.laydate;
laydate.render({
elem: '#group_expire', //指定元素
type:'datetime'
});
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+154
View File
@@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">用户帐号</label>
<div class="layui-input-block">
<div class="layui-form-mid layui-word-aux">{$info.username}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">安全邮箱</label>
<div class="layui-input-block">
<input type="email" name="email" value="{$info.email}" placeholder="请输入安全邮箱,如果不修改请忽略本参数" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">修改密码</label>
<div class="layui-input-block">
<input type="password" name="password" placeholder="请输入密码,如果不修改请忽略本参数" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">实名认证</label>
<div class="layui-input-block">
<div class="layui-form-mid layui-word-aux">{$info.is_auth ? '<span class="layui-badge layui-bg-blue">认证成功</span>' : '未认证'}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">注册时间</label>
<div class="layui-input-block">
<div class="layui-form-mid layui-word-aux">{$info.create_time|date="Y-m-d H:i:s"}</div>
</div>
</div>
<hr>
<div class="layui-form-item">
<label class="layui-form-label">账户余额</label>
<div class="layui-input-block">
<div class="layui-form-mid">{$info.amount} ¥</div>
</div>
</div>
<hr>
<div class="layui-form-item">
<label class="layui-form-label">当前用户组</label>
<div class="layui-input-block">
<select name="group" lay-verify="required">
{volist name="$group" id="vo"}
<option value="{$vo.id}" {eq name="$info.group" value="$vo.id"}selected{/eq}>{$vo.group_name}</option>
{/volist}
</select>
</div>
</div>
<hr>
<div class="layui-form-item">
<label class="layui-form-label">设置VIP时间</label>
<div class="layui-input-block">
<input type="text" name="group_expire" value="<?=$info['group_expire']<time()?'':date('Y-m-d h:i:s',$info['group_expire'])?>" placeholder="非VIP默认不选" class="layui-input" id="group_expire">
</div>
</div>
<hr>
<div class="layui-form-item">
<label class="layui-form-label">最近登录</label>
<div class="layui-input-block">
<div class="layui-form-mid layui-word-aux">{:getNotNullTime($info.login_time,'暂无登录信息')}</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">登录IP地址</label>
<div class="layui-input-block">
<div class="layui-form-mid layui-word-aux">{$info.login_real_ip|default='暂无登录信息'}</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="" lay-filter="save">
<i class="layui-icon layui-icon-ok"></i>
保存更改
</button>
</div>
</div>
</form>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['form','jquery','laydate'],function(){
let form = layui.form;
let $ = layui.jquery;
let laydate = layui.laydate;
// laydate.render({
// elem: '#grade_time',
// type:'date'
// });
laydate.render({
elem: '#group_expire', //指定元素
type:'datetime'
});
form.on('submit(save)', function(data){
$.ajax({
data:JSON.stringify(data.field),
dataType:'json',
contentType:'application/json',
type:'post',
success:function(res){
//判断有没有权限
if(res && res.code == 999){
layer.msg(res.msg, {
icon: 5,
time: 2000,
})
return false;
}else if(res.code == 200){
layer.msg(res.msg,{icon:1,time:1000},function(){
parent.layer.close(parent.layer.getFrameIndex(window.name));//关闭当前页
parent.layui.table.reload("user-table");
});
}else{
layer.msg(res.msg,{icon:2,time:1000});
}
}
})
return false;
});
})
</script>
</body>
</html>
+267
View File
@@ -0,0 +1,267 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户管理</title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="">
<div class="layui-form-item">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">搜索类型</label>
<div class="layui-input-inline">
<select name="search_type" lay-verify="required">
<option value="username">帐号搜索</option>
<option value="email">邮箱搜索</option>
<option value="nickname">昵称搜索</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">搜索内容</label>
<div class="layui-input-inline">
<input type="text" name="search_value" placeholder="请输入搜索内容" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="user-query">
<i class="layui-icon layui-icon-search"></i>
搜索结果
</button>
<button type="reset" class="pear-btn pear-btn-md">
<i class="layui-icon layui-icon-refresh"></i>
重置搜索
</button>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
<i class="layui-icon layui-icon-add-1"></i>
新增账号
</button>
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
<i class="layui-icon layui-icon-delete"></i>
批量删除
</button>
</script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="edit"><i class="layui-icon layui-icon-edit"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-enable">
<input type="checkbox" name="status" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用" lay-filter="user-enable" {{ d.status == 1 ? 'checked' : '' }}>
</script>
<script type="text/html" id="user-auth">
{{#if (d.is_auth == 0) { }}
<span class="layui-badge layui-bg-orange">未实名</span>
{{# }else if(d.is_auth == 1){ }}
<span class="layui-badge layui-bg-blue">已认证</span>
{{# } }}
</script>
<script type="text/html" id="user-createTime">
{{layui.util.toDateString(d.createTime, 'yyyy-MM-dd')}}
</script>
<script type="text/html" id="user-avatar">
<img src="{{ d.avatar }}" style="width: 30px;height: 30px;border-radius: 50%">
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: 'UID', field: 'id', align: 'center'},
{title: '',field:'avatar',align: 'center',templet: '#user-avatar',width: 45},
{title: '昵称', field: 'nickname', align: 'left'},
{title: '用户帐号', field: 'username', align: 'center'},
{title: '用户等级', field: 'group', align: 'center'},
{title: '余额', field: 'amount', align: 'center'},
{title: '安全邮箱', field: 'email', align: 'center'},
{title: '实名认证', field: 'is_auth', align: 'center', templet: '#user-auth'},
{title: '账号状态', field: 'status', align: 'center', templet: '#user-enable'},
{title: '注册时间', field: 'create_time', align: 'center', templet: '#user-createTime'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('user/index')}",
page: true,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'edit') {
window.edit(obj);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'add') {
window.add();
} else if (obj.event === 'refresh') {
window.refresh();
} else if (obj.event === 'batchRemove') {
window.batchRemove(obj);
}
});
form.on('submit(user-query)', function(data) {
table.reload('user-table', {
where: data.field
})
return false;
});
form.on('switch(user-enable)', function(obj) {
let status = obj.elem.checked ? 1 : 0;
$.ajax({
url:"{:url('user/change_status')}",
type:'get',
data:{
id:this.value,
status:status
},
dataType:'JSON',
success:function(result){
layer.tips(result.msg, obj.othis);
}
})
});
window.add = function() {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: [common.isModile()?'100%':'600px', common.isModile()?'100%':'400px'],
content: "{:url('user/add')}"
});
}
window.edit = function(obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['600px', '500px'],
content: "{:url('user/edit')}?id=" + obj.data['id']
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该用户吗?<b style="color: red">删除后用户的储存数据会被清空,且不可恢复</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('user/del')}?ids=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.batchRemove = function(obj) {
var checkIds = common.checkField(obj,'id');
if (checkIds === "") {
layer.msg("未选中数据", {
icon: 3,
time: 1000
});
return false;
}
layer.confirm('确定要删除这些用户[' + checkIds + ']吗,<b style="color: red">删除后数据不可恢复</b>', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('user/del')}?ids=" + checkIds,
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
table.reload('user-table');
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>
+170
View File
@@ -0,0 +1,170 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
</head>
<body class="pear-container">
<div class="layui-card">
<div class="layui-card-body">
<table id="user-table" lay-filter="user-table"></table>
</div>
</div>
<script type="text/html" id="user-toolbar"></script>
<script type="text/html" id="user-bar">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="status_yes"><i class="layui-icon layui-icon-ok"></i></button>
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="status_no"><i class="layui-icon layui-icon-close"></i></button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="remove"><i class="layui-icon layui-icon-delete"></i></button>
</script>
<script type="text/html" id="user-auth">
{{#if (d.status == 0) { }}
<span class="layui-badge layui-bg-orange">等待处理</span>
{{# }else if(d.status == 1){ }}
<span class="layui-badge layui-bg-blue">提现成功</span>
{{# }else if(d.status == 2){ }}
<span class="layui-badge layui-bg-red">退回金额</span>
{{# } }}
</script>
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(['table', 'form', 'jquery','common'], function() {
let table = layui.table;
let form = layui.form;
let $ = layui.jquery;
let common = layui.common;
let cols = [
[{type: 'checkbox'},
{title: 'ID', field: 'id', align: 'center'},
{title: '用户帐号', field: 'uid', align: 'center'},
{title: '提现金额', field: 'money', align: 'center'},
{title: '支付宝帐号', field: 'alipay_account', align: 'center'},
{title: '支付宝姓名', field: 'alipay_name', align: 'center'},
{title: '处理状态', field: 'status', align: 'center', templet: '#user-auth'},
{title: '创建时间', field: 'create_time', align: 'center'},
{title: '操作', toolbar: '#user-bar', align: 'center', width: 130}
]
]
table.render({
elem: '#user-table',
url: "{:url('withdraw/index')}",
page: true,
limit:20,
cols: cols,
skin: 'line',
toolbar: '#user-toolbar',
defaultToolbar: [{
title: '刷新',
layEvent: 'refresh',
icon: 'layui-icon-refresh',
}, 'filter', 'print', 'exports']
});
table.on('tool(user-table)', function(obj) {
if (obj.event === 'remove') {
window.remove(obj);
} else if (obj.event === 'status_yes') {
window.edit(obj,1);
} else if (obj.event === 'status_no') {
window.edit(obj,2);
}
});
table.on('toolbar(user-table)', function(obj) {
if (obj.event === 'refresh') {
window.refresh();
}
});
window.edit = function(obj,status) {
if(status){
var msg = '确认进行提现成功操作吗?操作前请转账至对应的支付宝帐号';
}else{
var msg = '确认拒绝提现吗?拒绝后资金会退回到用户帐号内';
}
if(obj.data['status'] !== 0){
layer.msg('已经处理成功的记录禁止操作',{icon:2});
return false;
}
layer.confirm(msg, {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('withdraw/change')}?status="+status+"&id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
window.refresh();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.remove = function(obj) {
layer.confirm('确定要删除该举报内容吗?', {
icon: 3,
title: '提示'
}, function(index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: "{:url('withdraw/delete')}?id=" + obj.data['id'],
dataType: 'json',
type: 'get',
success: function(result) {
layer.close(loading);
if (result.code == 200) {
layer.msg(result.msg, {
icon: 1,
time: 1000
}, function() {
obj.del();
});
} else {
layer.msg(result.msg, {
icon: 2,
time: 1000
});
}
}
})
});
}
window.refresh = function(param) {
table.reload('user-table');
}
})
</script>
</body>
</html>