323 lines
13 KiB
PHP
323 lines
13 KiB
PHP
<?php
|
|
/**
|
|
* 分组控制器
|
|
*/
|
|
namespace app\admin\controller;
|
|
use Repository\LogRepository;
|
|
|
|
class Organize extends Base
|
|
{
|
|
// 平台列表
|
|
public function index()
|
|
{
|
|
$odb = db('organize');
|
|
if(request()->isAjax()){
|
|
// $where = isset($this->where['group_id']) ? ['id' => $this->where['group_id']] : [];
|
|
$result = $odb->where($this->where)->order('id desc')->select();
|
|
foreach($result as $key=>$vo){
|
|
// 优化显示状态
|
|
if(1 == $vo['status']){
|
|
$result[$key]['status'] = '<span class="label label-primary">启用</span>';
|
|
}else{
|
|
$result[$key]['status'] = '<span class="label label-danger">禁用</span>';
|
|
}
|
|
|
|
// 统计分组人数
|
|
$result[$key]['users_num'] = db('users')->where('organize_id', $vo['id'])->count();
|
|
|
|
// 生成操作按钮
|
|
$result[$key]['operate'] = $this->makeBtn($vo['id']);
|
|
|
|
// 管理员名称
|
|
$admin = db('admins')->where('id', $vo['admin_id'])->field('user_name')->find();
|
|
$result[$key]['admin_name'] = isset($admin['user_name']) ? $admin['user_name'] : '暂无';
|
|
// 平台名称
|
|
$group = db('groups')->where('id', $vo['group_id'])->field('name')->find();
|
|
$result[$key]['group_name'] = isset($group['name']) ? $group['name'] : '暂无';
|
|
}
|
|
|
|
$return['total'] = $odb->where($this->where)->count(); //总数据
|
|
$return['rows'] = $result;
|
|
|
|
return json($return);
|
|
|
|
}
|
|
|
|
return $this->fetch();
|
|
}
|
|
|
|
/**
|
|
* 添加分组
|
|
*/
|
|
public function addOrganize()
|
|
{
|
|
$adb = db('admins');
|
|
$rdb = db('role');
|
|
$odb = db('organize');
|
|
$gdb = db('groups');
|
|
if(request()->isPost()){
|
|
|
|
$param = input('post.');
|
|
$param['name'] = htmlentities($param['name']);
|
|
|
|
$has = $odb->field('id')->where('name', $param['name'])->find();
|
|
if(!empty($has)){
|
|
return json(['code' => -1, 'data' => '', 'msg' => '该分组已经存在']);
|
|
}
|
|
// 检测客服的限制金额是否为正整数
|
|
if(!preg_match("/^[0-9]*$/",$param['money']) && !empty($param['money'])){
|
|
return json(['code' => -6, 'data' => '', 'msg' => '可充值总额度只能为正整数或为0']);
|
|
}
|
|
|
|
if(empty($param['group_id']) && $this->is_root){
|
|
return json(['code' => -4, 'data' => '', 'msg' => '请选择平台']);
|
|
} elseif(empty($param['group_id']) && $this->role_name == '平台管理员') {
|
|
$param['group_id'] = $this->where['group_id'];
|
|
}
|
|
|
|
// 减去平台的金额
|
|
$group = $gdb->where('id', $param['group_id'])->find();
|
|
if ($param['money'] > $group['money']) return json(['code' => -6, 'data' => '', 'msg' => '分配金额超出平台充值余额']);
|
|
|
|
// 检测是否有平台管理员角色
|
|
$role = $rdb->where('name', '组长')->field('id')->find();
|
|
if (!$role) return json(['code' => -1, 'data' => '', 'msg' => "请先添加名称为'组长'的角色"]);
|
|
|
|
$rule = "/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/";
|
|
|
|
if (!preg_match($rule, $param['password'])) {
|
|
return json(['code' => -2, 'data' => '', 'msg' => '密码必须是8-16位的字母和数字组成!']);
|
|
}
|
|
|
|
$has = $adb->field('id')->where('user_name', $param['user_name'])->find();
|
|
if(!empty($has)){
|
|
return json(['code' => -1, 'data' => '', 'msg' => '该管理员已经存在']);
|
|
}
|
|
$param['date'] = date('Y-m-d H:i');
|
|
|
|
try{
|
|
// 先添加管理员
|
|
$admin_data = [
|
|
'user_name' => $param['user_name'],
|
|
'password' => password_hash($param['password'], PASSWORD_DEFAULT),
|
|
'user_avatar' => config('img_take_prefix').'/static/common/images/avatar.png',
|
|
'status' => 1,
|
|
];
|
|
$add_admin = $adb->insertGetId($admin_data);
|
|
db('admin_role')->insertGetId(['role_id' => $role['id'], 'admin_id' => $add_admin]);
|
|
$param['admin_id'] = $add_admin;
|
|
unset($param['user_name']);
|
|
unset($param['password']);
|
|
$add = $odb->insert($param);
|
|
$gdb->where('id', $param['group_id'])->setDec('money', $param['money']);
|
|
// 资金流动记录
|
|
$this->saveMoneyFlowLog($group['admin_id'], 'o_' . $add_admin, $param['money'], "'{$param['name']}'小组分配金额");
|
|
}catch(\Exception $e){
|
|
return json(['code' => -2, 'data' => '', 'msg' => $e->getMessage()]);
|
|
}
|
|
LogRepository::write('分组管理', '成功添加分组--'.$param['name']);
|
|
return json(['code' => 1, 'data' => '', 'msg' => '添加成功']);
|
|
}
|
|
$group = $gdb->where('status', 1)->order('id desc')->select();
|
|
$this->assign([
|
|
'status' => config('kf_status'),
|
|
'group' => $group,
|
|
]);
|
|
|
|
return $this->fetch('addOrganize');
|
|
}
|
|
|
|
/**
|
|
* 编辑分组
|
|
*/
|
|
public function editOrganize()
|
|
{
|
|
$adb = db('admins');
|
|
$rdb = db('role');
|
|
$odb = db('organize');
|
|
$gdb = db('groups');
|
|
if(request()->isAjax()){
|
|
$param = input('post.');
|
|
$param['name'] = htmlentities($param['name']);
|
|
$has = $odb->field('id, group_id')->where('name', $param['name'])->where('id', '<>', $param['id'])->find();
|
|
if(!empty($has)){
|
|
return json(['code' => -1, 'data' => '', 'msg' => '该分组已经存在']);
|
|
}
|
|
$info = $odb->where('id', $param['id'])->find();
|
|
|
|
// 检测客服的限制金额是否为正整数
|
|
if(!preg_match("/^[0-9]*$/",$param['money']) && !empty($param['money'])){
|
|
return json(['code' => -6, 'data' => '', 'msg' => '可充值总额度只能为正整数或为0']);
|
|
}
|
|
|
|
// 减去平台的金额
|
|
$group = $gdb->where('id', $info['group_id'])->find();
|
|
$money = $param['money'] > $group['money'] ? intval($param['money'] - $group['money']) : 0;
|
|
if ($money > $group['money']) return json(['code' => -6, 'data' => '', 'msg' => '分配金额超出平台充值余额']);
|
|
|
|
try{
|
|
$odb->where('id', $param['id'])->update($param);
|
|
if ($money > 0) {
|
|
$gdb->where('id', $info['group_id'])->setDec('moeny', $money);
|
|
// 资金流动记录
|
|
$compare = $param['money'] > $group['money'];
|
|
$money = $compare ? $param['money'] - $group['money'] : abs($param['money'] - $group['money']);
|
|
if ($compare) {
|
|
$this->saveMoneyFlowLog($group['admin_id'], 'o_' . $info['admin_id'], $money, "'{$param['name']}'小组分配金额");
|
|
}
|
|
}
|
|
}catch(\Exception $e){
|
|
return json(['code' => -2, 'data' => '', 'msg' => $e->getMessage()]);
|
|
}
|
|
|
|
return json(['code' => 1, 'data' => '', 'msg' => '编辑成功']);
|
|
}
|
|
|
|
$id = input('param.id/d');
|
|
$info = $odb->where('id', $id)->find();
|
|
|
|
$this->assign([
|
|
'info' => $info,
|
|
'status' => config('kf_status'),
|
|
]);
|
|
return $this->fetch('editOrganize');
|
|
}
|
|
|
|
// 删除分组
|
|
public function delOrganize()
|
|
{
|
|
$odb = db('organize');
|
|
if(request()->isAjax()){
|
|
$id = input('param.id/d');
|
|
|
|
// 查询该分组下是否有客服
|
|
$has = db('users')->where('organize_id', $id)->count();
|
|
if($has > 0){
|
|
return json(['code' => -2, 'data' => '', 'msg' => '该分组下有客服,不可删除']);
|
|
}
|
|
|
|
try{
|
|
$oinfo = $odb->where('id', $id)->find();
|
|
$odb->where('id', $id)->delete();
|
|
if (isset($oinfo['admin_id'])) {
|
|
db('admins')->where('id', $oinfo['admin_id'])->delete();
|
|
}
|
|
}catch(\Exception $e){
|
|
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
|
|
}
|
|
|
|
return json(['code' => 1, 'data' => '', 'msg' => '删除成功']);
|
|
}
|
|
}
|
|
|
|
// 生成按钮
|
|
private function makeBtn($id)
|
|
{
|
|
$operate = '<a href="' . url('Organize/editOrganize', ['id' => $id]) . '">';
|
|
$operate .= '<button type="button" class="btn btn-primary btn-sm"><i class="fa fa-paste"></i> 编辑</button></a> ';
|
|
|
|
// if ($this->is_root) {
|
|
$operate .= '<a href="javascript:userGroup(' . $id . ')"><button type="button" class="btn btn-danger btn-sm">';
|
|
$operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
|
|
// }
|
|
|
|
//$operate .= '<a href="' . url('groups/manageUser') . '">';
|
|
//$operate .= '<button type="button" class="btn btn-info btn-sm"><i class="fa fa-user-plus"></i> 管理组员</button></a>';
|
|
|
|
return $operate;
|
|
}
|
|
|
|
/**
|
|
* 根据平台获取分组
|
|
*/
|
|
public function groupGetOrganize()
|
|
{
|
|
$odb = db('organize');
|
|
$group_id = input('group_id');
|
|
$organize = $odb->where('group_id', $group_id)->select();
|
|
return resultJson(1, '获取成功', $organize);
|
|
}
|
|
|
|
// 管理员列表
|
|
public function groupAdminList()
|
|
{
|
|
if(request()->isAjax()){
|
|
|
|
$param = input('param.');
|
|
|
|
$limit = $param['pageSize'];
|
|
$offset = ($param['pageNumber'] - 1) * $limit;
|
|
|
|
$where = [];
|
|
if (!empty($param['searchText'])) {
|
|
$where['user_name'] = ['like', '%' . $param['searchText'] . '%'];
|
|
}
|
|
|
|
$result = db('admins')
|
|
->where($where)
|
|
->limit($offset, $limit)
|
|
->select();
|
|
foreach($result as $key=>$vo){
|
|
// 优化显示状态
|
|
if(1 == $vo['status']){
|
|
$result[$key]['status'] = '<span class="label label-primary">启用</span>';
|
|
}else{
|
|
$result[$key]['status'] = '<span class="label label-danger">禁用</span>';
|
|
}
|
|
|
|
// 获取权限名称
|
|
$role = db('admin_role')
|
|
->alias('a')
|
|
->where('admin_id', $vo['id'])
|
|
->join('role r',"r.id=a.role_id")
|
|
->field('name')
|
|
->find();
|
|
$result[$key]['role_name'] = $role ? $role['name'] : '暂无角色';
|
|
|
|
// 查找平台
|
|
$platform = db('groups')->where('admin_id', $vo['id'])->find();
|
|
$result[$key]['platform_name'] = $platform ? $platform['name'] : '暂无';
|
|
if ($role['name'] == '组长') {
|
|
$platform = db('organize')->where('admin_id', $vo['id'])->find();
|
|
if ($platform) {
|
|
$platform = db('groups')->where('id', $platform['group_id'])->find();
|
|
}
|
|
$result[$key]['platform_name'] = $platform ? $platform['name'] : '暂无';
|
|
}
|
|
|
|
// 上次登录时间
|
|
$result[$key]['last_login_time'] = empty($vo['last_login_time']) ? '' : date('Y-m-d H:i:s', $vo['last_login_time']);
|
|
|
|
// 生成操作按钮
|
|
if(1 != $vo['id']){
|
|
$result[$key]['operate'] = $this->makeBtnGroupAdmin($vo['id']);
|
|
}
|
|
}
|
|
$result_datas = [];
|
|
foreach($result as $k => $vo) {
|
|
if ($vo['role_name'] != '组长' || ($this->role_name == '平台管理员' && $this->group_name != $vo['platform_name'])) continue;
|
|
$result_datas[] = $vo;
|
|
}
|
|
|
|
$result_data['total'] = db('admins')->where($where)->count(); //总数据
|
|
$result_data['rows'] = $result_datas;
|
|
|
|
return json($result_data);
|
|
|
|
}
|
|
|
|
return $this->fetch();
|
|
}
|
|
|
|
// 生成按钮
|
|
private function makeBtnGroupAdmin($id)
|
|
{
|
|
$operate = '<a href="' . url('admins/editadmin', ['id' => $id]) . '">';
|
|
$operate .= '<button type="button" class="btn btn-primary btn-sm"><i class="fa fa-paste"></i> 编辑</button></a> ';
|
|
|
|
$operate .= '<a href="javascript:userDel(' . $id . ')"><button type="button" class="btn btn-danger btn-sm">';
|
|
$operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
|
|
|
|
return $operate;
|
|
}
|
|
} |