| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541 |
- <?php
- /**
- * Created by PhpStorm.
- * User: dingran
- * Date: 2019/3/10
- * Time: 下午12:37
- */
- namespace app\platform\modules\user\controllers;
- use app\common\events\UserActionEvent;
- use app\common\helpers\Url;
- use app\platform\controllers\BaseController;
- use app\platform\modules\system\models\SystemSetting;
- use app\platform\modules\user\models\AdminUser;
- use app\platform\modules\user\models\Role;
- use app\platform\modules\user\requests\AdminUserCreateRequest;
- use app\platform\modules\user\requests\AdminUserUpdateRequest;
- use app\platform\modules\user\models\YzUserProfile;
- use app\platform\modules\application\models\UniacidApp;
- use app\platform\modules\application\models\AppUser;
- use app\platform\controllers\ResetpwdController;
- use Illuminate\Support\Facades\Hash;
- use Illuminate\Validation\Rule;
- use app\common\helpers\Cache;
- class AdminUserController extends BaseController
- {
- protected $fields = [
- 'name' => '',
- 'phone' => '',
- 'roles' => [],
- ];
- /**
- * Display a listing of the resource.(显示用户列表.)
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function index()
- {
- $param = request();
- $users = AdminUser::getList($param);
- return $this->successJson('成功', $users);
- }
- /**
- * Show the form for creating a new resource And Store a newly created resource in storage.(添加用户)
- *
- * @return \Illuminate\Http\JsonResponse
- * @throws \app\common\exceptions\AppException
- */
- public function create()
- {
- $data = request()->user;
- $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
- if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
- return $this->errorJson(['密码不能含有中文']);
- }
- if($loginset['password_verify'] == 1)
- {
- $validatePassword = validatePassword($data['password']);
- if ($validatePassword !== true) {
- return $this->errorJson($validatePassword);
- }
- }
- if (!$data) {
- return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
- }
- return $this->returnMessage(0, $data);
- }
- /**
- * Show the form for editing the specified resource And Update the specified resource in storage.(修改用户)
- *
- * @return \Illuminate\Http\JsonResponse
- * @throws \app\common\exceptions\AppException
- */
- public function edit()
- {
- $uid = request()->uid;
- $data = request()->user;
- if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
- return $this->errorJson(['密码不能含有中文']);
- }
- if (!$uid) {
- return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
- }
- $user = AdminUser::with('hasOneProfile')->with(['hasOneAppUser' => function ($query) {
- return $query->select('uid', 'role_name', 'role');
- }])->find($uid);
- if ($data) {
- return $this->returnMessage(1, $data, $user);
- }
- return $this->successJson('成功', $user);
- }
- /**
- * Remove the specified resource from storage.
- *
- * @param $uid
- * @return \Illuminate\Http\RedirectResponse
- */
- public function destroy($uid)
- {
- $tag = AdminUser::find((int)$uid);
- foreach ($tag->roles as $v) {
- $tag->roles()->detach($v);
- }
- if ($tag && $tag->$uid != 1) {
- /*********************用户被删除BUG-log*********************/
- $find = base_path().'\storage\logs\user_admin_delete_log.log';
- if(!file_exists($find)){
- fopen($find,'a');
- }
- $array = [];
- $array['deleteid'] = $uid;
- $array['uid'] = \YunShop::app()->uid;
- $array['uniacid'] = \YunShop::app()->uniacid;
- $array['acid'] = \YunShop::app()->acid;
- $array['username'] = \YunShop::app()->username;
- $array['siteurl'] = \YunShop::app()->siteurl;
- $array['time'] = date('Y-m-d H:i:s',time());
- $txt = "app\platform\modules\user\controllers\AdminUserController.php\n";
- $txt .= json_encode($array,true)."\n\n";
- file_put_contents($find,$txt, FILE_APPEND);
- \Log::debug("====用户被删除BUG-log===",$array);
- /*********************用户被删除BUG-log*********************/
- $tag->delete();
- } else {
- return redirect()->back()
- ->withErrors("删除失败");
- }
- return redirect()->back()
- ->withSuccess("删除成功");
- }
- /**
- * 修改状态
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function status()
- {
- $uid = request()->uid;
- $status = request()->status;
- if (!$uid || !$status) {
- return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
- }
- if($status == '2')
- {
- $updateArr = ['status'=>$status,'change_password_at'=>time()];
- }else{
- $updateArr = ['status'=>$status];
- }
- $result = AdminUser::where('uid', $uid)->update($updateArr);
- $status == '2' ? $state = '有效' : $state = '无效' ;
- if ($result) {
- \Log::info('状态修改成功,现状态'.$state);
- return $this->check(AdminUser::returnData('1'));
- } else {
- return $this->check(AdminUser::returnData('0', AdminUser::FAIL));
- }
- }
- /**
- * 修改密码
- *
- * @return \Illuminate\Http\JsonResponse
- * @throws \app\common\exceptions\AppException
- */
- public function change()
- {
- $uid = request()->uid;
- $data = request()->user;
- if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
- return $this->errorJson(['密码不能含有中文']);
- }
- $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
- if($loginset['password_verify'] == 1)
- {
- $validatePassword = validatePassword($data['password']);
- if ($validatePassword !== true) {
- return $this->errorJson($validatePassword);
- }
- }
- if (!$uid || !$data) {
- return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
- }
- $user = AdminUser::getData($uid);
- return $this->returnMessage(1, $data, $user);
- }
- public function userChange()
- {
- $data = request()->user;
- $data['password'] = trim($data['password']);
- if (!$data['password'] || $data['password'] != $data['confirm_password']) {
- return $this->errorJson('两次密码输入不一致');
- }
- if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $data['password'])>0) {
- return $this->errorJson('密码不能含有中文');
- }
- $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
- if($loginset['password_verify'] == 1)
- {
- $validatePassword = validatePassword($data['password']);
- if ($validatePassword !== true) {
- return $this->errorJson($validatePassword);
- }
- }
- $user = \Auth::guard('admin')->user();
- if(Hash::check($user->password, $data['original_password']))
- {
- return $this->errorJson('原密码填写有误');
- }
- $user->password = bcrypt($data['password']);
- $user->save();
- \Auth::guard('admin')->logoutOtherDevices($data['password']);
- return $this->successJson('修改成功');
- }
- /**
- * 单个用户平台列表
- */
- public function applicationList()
- {
- $uid = request()->uid;
- $page = intval(request()->page);
- $page_size = 15;
- // 如果page小于且等于1 就等于0 (因为offset是从0开始取数据)
- if ($page<=1) {
- $page = 0;
- $offset = ($page)*$page_size;
- } else {
- $offset = ($page-1)*$page_size;
- }
- // 获取与用户关联的平台角色信息
- $user = AdminUser::with(['hasManyAppUser' => function ($query) use ($offset, $page_size) {
- $query->with('hasOneApp');
- $query->offset($offset)->limit($page_size);
- }])->where('uid', $uid)->first();
- $total = AppUser::where('uid', $uid)->count();
- $avg = $page <= 1 ? intval(floor($total / $page_size)) : intval(ceil($total / $page_size));
- // 获取创始人
- $uniacid_app = UniacidApp::where('creator', $uid);
- $user['total'] = $uniacid_app->count();
- $sign = false;
- if ($page >= $avg) {
- $sign = true;
- $offset = 0;
- $rem = $total % $page_size;
- $mod = 0;
- if ($page == $avg) {
- $mod = $rem;
- } else {
- $offset = ($page-$avg)*$page_size;
- }
- $uniacid_apps = $uniacid_app->offset($offset-$rem)->limit($page_size-$mod)->get();
- }
- $user['total'] += $total;
- if (!$user) {
- return $this->errorJson(['未获取到该用户']);
- } elseif ($user->hasManyAppUser->isEmpty() && $uniacid_apps->isEmpty()) {
- return $this->successJson('该用户暂时没有平台');
- }
- $user = $user->toArray();
- if ($sign && !$uniacid_apps->isEmpty()) {
- $uniacid_apps = $uniacid_apps->toArray();
- // 添加创始人数据
- foreach ($uniacid_apps as $item) {
- array_push($user['has_many_app_user'], ['role_name' => '创始人', 'has_one_app' => $item ? : [] ]);
- }
- }
- $user['current_page'] = $page ? : 1;
- $user['per_page'] = $page_size;
- return $this->successJson('成功', $user);
- }
- /**
- * 店员列表
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function clerkList()
- {
- $parames = request();
- $user = AdminUser::where('type', 3)->searchUsers($parames)->with(['hasOneProfile'])->orderBy('uid','DESC')->paginate();
- foreach ($user as &$item) {
- $item['status'] == 2 ? $item['state'] = '有效' : null;
- $item['status'] == 3 ? $item['state'] = '已禁用' : null;
- $item['create_at'] = $item['created_at']->format('Y年m月d日');
- $item->hasOneAppUser['app_name'] = $item->hasOneAppUser->hasOneApp->name;
- }
- return $this->successJson('成功', $user);
- }
- /**
- * 修改当前用户信息
- *
- * @return \Illuminate\Http\JsonResponse
- * @throws \app\common\exceptions\AppException
- */
- public function modifyCurrentUser()
- {
- $data = request()->user;
- if (!$data) {
- return $this->check(AdminUser::returnData('0', AdminUser::PARAM));
- }
- $loginset = SystemSetting::settingLoad('loginset', 'system_loginset');
- if ($loginset['password_verify'] == 1) {
- $validatePassword = validatePassword($data['password']);
- if ($validatePassword !== true) {
- return $this->errorJson($validatePassword);
- }
- }
- $user = \Auth::guard('admin')->user();
- return $this->returnMessage(1, $data, $user);
- }
- /**
- * 发送手机验证码
- *
- * @return \Illuminate\Http\JsonResponse|string
- */
- public function sendCode()
- {
- $user = \Auth::guard('admin')->user();
- if (request()->mobile != $user['hasOneProfile']['mobile']) {
- return $this->errorJson(['您输入的手机与登录的账号不符合']);
- }
- request()->offsetSet('username', $user['username']);
- return (new ResetpwdController)->SendCode();
- }
- /**
- * 修改手机号
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function modifyMobile()
- {
- $data = request()->data;
- $user = \Auth::guard('admin')->user();
- if (request()->data['old_mobile'] != $user['hasOneProfile']['mobile']) {
- return $this->errorJson(['您输入的手机与登录的账号不符合']);
- }
- $data['avatar'] = $user['hasOneProfile']['avatar'];
- if (AdminUser::saveProfile($data, $user)) {
- return $this->check(AdminUser::returnData('0', AdminUser::FAIL));
- } else {
- return $this->check(AdminUser::returnData('1'));
- }
- }
- /**
- * 发送新手机号验证码
- *
- * @return \Illuminate\Http\JsonResponse|string
- */
- public function sendNewCode()
- {
- $mobile = request()->mobile;
- $state = \YunShop::request()->state ? : '86';
- return (new ResetpwdController)->send($mobile, $state);
- }
- /**
- * 返回消息
- *
- * @param $sign 1: 修改, 0: 添加
- * @param null $data 参数
- * @param array $user 用户信息
- * @return \Illuminate\Http\JsonResponse
- */
- public function returnMessage($sign, $data = null, $user = [])
- {
- if ($sign && !$user) {
- return $this->check(AdminUser::returnData('0', AdminUser::NO_DATA));
- }
- $validate = $this->validate($this->rules(), $data, $this->message());
- if ($sign) {
- $validate = $this->validate($this->rules($user), $data, $this->message());
- }
- if ($validate) {
- return $validate;
- }
- return $this->check(AdminUser::saveData($data, $user));
- }
- /**
- * 处理表单验证
- *
- * @param array $rules
- * @param \Request|null $request
- * @param array $messages
- * @param array $customAttributes
- * @return \Illuminate\Http\JsonResponse
- */
- public function validate($rules, $request = null, $messages = [], $customAttributes = [])
- {
- if (!isset($request)) {
- $request = request();
- }
- $validator = $this->getValidationFactory()->make($request, $rules, $messages, $customAttributes);
- if ($validator->fails()) {
- return $this->errorJson($validator->errors()->all());
- }
- }
- /**
- * 表单验证规则
- *
- * @param $user
- * @param $data
- * @return array
- */
- public function rules($user = [], $data = [])
- {
- $rules = [];
- if (request()->path() == "admin/user/create") {
- $rules = [
- // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users',
- // 'username' => 'required|unique:yz_admin_users',
- 'username' => [
- 'required',
- Rule::unique('yz_admin_users')->where(function($q){
- return $q->whereNull('deleted_at');
- })
- ],
- // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile',
- 'mobile' => [
- 'required',
- 'regex:/^1[3456789]\d{9}$/',
- Rule::unique('yz_users_profile')->where(function($q){
- return $q->whereNull('deleted_at');
- })
- ]
- ];
- }else if(request()->path() == "admin/user/edit") {
- $rules = [
- // 'username' => 'required|regex:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_\-]{3,30}$/u|unique:yz_admin_users,username,'.$user['uid'].',uid',
- // 'username' => 'required|unique:yz_admin_users,username,'.$user['uid'].',uid',
- 'username' => [
- 'required',
- Rule::unique('yz_admin_users')->where(function($q) use($user){
- return $q->whereNull('deleted_at')->where('uid','<>',$user['uid']);
- })
- ],
- // 'mobile' => 'required|regex:/^1[3456789]\d{9}$/|unique:yz_users_profile,mobile,'.$user['hasOneProfile']['id'],
- 'mobile' => [
- 'required',
- 'regex:/^1[3456789]\d{9}$/',
- Rule::unique('yz_users_profile')->where(function($q) use($user){
- return $q->whereNull('deleted_at')->where('id','<>',$user['hasOneProfile']['id']);
- })
- ]
- ];
- }
- if (request()->path() != "admin/user/edit") {
- if (request()->path() == "admin/user/modify_user" && !$data['password']) {
- return $rules;
- }
- $rules['password'] = 'required';
- $rules['re_password'] = 'same:password';
- }
- return $rules;
- }
- /**
- * 表单验证自定义错误消息
- *
- * @return array
- */
- public function message()
- {
- return [
- 'username.required' => '用户名不能为空',
- 'username.regex' => '用户名格式不正确',
- 'username.unique' => '用户名已存在',
- 'mobile.required' => '手机号不能为空',
- 'mobile.regex' => '手机号格式不正确',
- 'mobile.unique' => '手机号已存在',
- 'password.required' => '密码不能为空',
- 're_password.same' => '两次密码不一致',
- ];
- }
- /**
- * 返回 json 信息
- *
- * @param $param
- * @return \Illuminate\Http\JsonResponse
- */
- public function check($param)
- {
- if ($param['sign'] == 1) {
- return $this->successJson('成功');
- } else {
- return $this->errorJson([$param['message']]);
- }
- }
- }
|