seller->type != 'seller') { return $this->error('您没有权限'); } $name = $request->name; $orderField = $request->orderField; $orderDirection = $request->orderDirection; $numPerPage = $request->numPerPage ?: 30; $type = 'seller'; $title = '商家'; $sellers = Seller::withCount('admins') ->withCount('orders') ->withCount('goods') ->where('type', $type) ->when(\Admin::id() > 1, function ($query) { $query->where('id', \Admin::user()->seller_id); }) ->when($name, function ($query) use ($name) { $query->where('name', 'like', "%{$name}%"); }) ->when($orderField, function ($query) use ($orderField, $orderDirection) { $query->orderBy($orderField, $orderDirection); })->paginate($numPerPage); return view('Admin::sellers.index', compact('sellers', 'type', 'title')); } public function search(Request $request) { $name = $request->name; $numPerPage = $request->numPerPage ?: 30; $type = 'organ'; $sellers = Seller::where('type', $type) ->when($name, function ($query) use ($name) { $query->where('name', 'like', "%{$name}%"); }) ->paginate($numPerPage); return view('Admin::sellers.search', compact('sellers', 'type', 'title')); } //机构列表 public function organ(Request $request) { if (\Admin::id() != 1 && \Admin::user()->seller->type != 'organ') { return $this->error('您没有权限'); } $name = $request->name; $orderField = $request->orderField; $orderDirection = $request->orderDirection; $numPerPage = $request->numPerPage ?: 30; $type = 'organ'; $title = '机构'; $sellers = Seller::withCount('admins') ->withCount('orders') ->withCount('goods') ->withCount('lesson') ->where('type', $type) ->when(\Admin::id() > 1, function ($query) { $query->where('id', \Admin::user()->seller_id); }) ->when($name, function ($query) use ($name) { $query->where('name', 'like', "%{$name}%"); }) ->when($orderField, function ($query) use ($orderField, $orderDirection) { $query->orderBy($orderField, $orderDirection); })->paginate($numPerPage); return view('Admin::sellers.index', compact('sellers', 'type', 'title')); } public function show(Seller $seller) { $freights = Freight::where('seller_id', $seller->id)->get(); return view('Admin::sellers.show', compact('seller', 'freights')); } public function create(Request $request) { $pid = ($request->type == 'organ') ? 1 : 2; $provinces = \OpenArea::index(0); $categoies = Category::treeSelect($pid); $agencys = Agency::where('status', 1)->get(); $salesmans = User::where('is_salesman', 1)->get(); return view('Admin::sellers.create', compact('provinces', 'categoies', 'agencys', 'salesmans')); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|max:50', 'mobile' => 'required', 'wechat_id' => 'required', 'province_sn' => 'required', 'city_sn' => 'required', 'area_sn' => 'required', 'address' => 'required', 'description' => 'required|min:4', 'content' => 'required|min:4', 'storage_id' => 'required', ], [ 'name.required' => '名称必须填写', 'name.min' => '名称最少为:min字符', 'name.max' => '名称最多为:max字符', 'mobile.required' => '电话必须填写', 'wechat_id.required' => '微信二维码必须上传', 'province_sn.required' => '请选择省', 'city_sn.required' => '请选择市', 'area_sn.required' => '请选择区', 'address.required' => '地址必须填写', 'description.required' => '简介必须填写', 'description.min' => '简介最少:min个字', 'content.required' => '内容必须填写', 'content.min' => '内容最少:min个字', 'storage_id.required' => 'Logo必须上传', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } if (Seller::create($request->all())) { return $this->success('', 'close'); } else { return $this->error(); } } public function edit(Seller $seller) { $banks = Bank::orderBy('sort', 'asc')->get(); $provinces = \OpenArea::index(0); $cities = \OpenArea::index($seller->province_sn); $areas = \OpenArea::index($seller->city_sn); $pid = ($seller->type == 'organ') ? 1 : 2; $categoies = Category::treeSelect($pid); $agencys = Agency::where('status', 1)->get(); $salesmans = User::where('is_salesman', 1)->get(); return view('Admin::sellers.edit', compact('seller', 'banks', 'categoies', 'provinces', 'cities', 'areas', 'agencys', 'salesmans')); } public function update(Request $request, Seller $seller) { $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|max:50', 'mobile' => 'required', 'wechat_id' => 'required', 'province_sn' => 'required', 'city_sn' => 'required', 'area_sn' => 'required', 'address' => 'required', 'description' => 'required|min:4', 'content' => 'required|min:4', 'storage_id' => 'required', ], [ 'name.required' => '名称必须填写', 'name.min' => '名称最少为:min字符', 'name.max' => '名称最多为:max字符', 'mobile.required' => '电话必须填写', 'wechat_id.required' => '微信二维码必须上传', 'province_sn.required' => '请选择省', 'city_sn.required' => '请选择市', 'area_sn.required' => '请选择区', 'address.required' => '地址必须填写', 'description.required' => '简介必须填写', 'description.min' => '简介最少:min个字', 'content.required' => '内容必须填写', 'content.min' => '内容最少:min个字', 'storage_id.required' => 'Logo必须上传', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } if ($seller->update($request->all())) { return $this->success('', 'close'); } else { return $this->error(); } } public function destroy(Seller $seller) { //删除 if ($seller->canDel()) { if ($seller->delete()) { if ($seller->admins) { $seller->admins()->delete(); } return $this->success(); } else { return $this->error(); } } else { if ($seller->canCancel()) { $seller->status = 0; $seller->save(); } else { return $this->error('请下架所有商品,再关闭商户'); } } } public function setting(Request $request) { if ($request->isMethod('PUT')) { $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|max:50', 'description' => 'required|min:4', 'storage_id' => 'required', ], [ 'name.required' => '商户名称必须填写', 'name.min' => '商户名称最少为:min字符', 'name.max' => '商户名称最多为:max字符', 'description.required' => '简介必须填写', 'description.min' => '简介最少:min个字', 'storage_id.required' => 'Logo必须上传', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } $seller = Seller::find(\Admin::user()->seller_id); if ($seller->update($request->all())) { return $this->success('操作成功'); } else { return $this->error(); } } $banks = Bank::orderBy('sort', 'asc')->get(); $seller = Seller::find(\Admin::user()->seller_id); return view('Admin::sellers.setting', compact('seller', 'banks')); } public function freights(Request $request) { $freights = Freight::where('seller_id', \Admin::user()->seller_id)->get(); return view('Admin::sellers.freights', compact('freights')); } public function freightsEdit(Request $request, Freight $freight) { if ($request->isMethod('PUT')) { $validator = Validator::make($request->all(), [ 'basic' => 'required|numeric', 'heavy' => 'required|numeric', 'added' => 'required|numeric', ], [ 'basic.required' => '基本邮费必须填写', 'basic.numeric' => '基本邮费必须是数字', 'heavy.required' => '起重必须填写', 'heavy.numeric' => '起重必须是数字', 'added.required' => '续重必须填写', 'added.numeric' => '续重必须是数字', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } $freight->update([ 'basic' => $request->basic, 'heavy' => $request->heavy, 'added' => $request->added, ]); return $this->success('', 'close'); } else { return view('Admin::sellers.freightsEdit', compact('freight')); } } public function users(Request $request, Seller $seller) { $username = $request->username; $nickname = $request->nickname; $orderField = $request->orderField; $orderDirection = $request->orderDirection; $numPerPage = $request->numPerPage ?: 30; $seller_id = $request->seller_id ?? \Admin::user()->seller_id; $admins = Admin::where('seller_id', $seller->id) ->where('id', '<>', 1) ->when($username, function ($query) use ($username) { return $query->where('username', 'like', "%{$username}%"); }) ->when($nickname, function ($query) use ($nickname) { return $query->where('nickname', 'like', "%{$nickname}%"); })->when($orderField, function ($query) use ($orderField, $orderDirection) { $query->orderBy($orderField, $orderDirection); })->with('lastLogin')->withCount('logins')->paginate($numPerPage); return view('Admin::sellers.users', compact('admins', 'seller')); } public function usersCreate() { return view('Admin::sellers.usersCreate'); } public function usersStore(Request $request) { $validator = Validator::make($request->all(), [ 'username' => ['required', 'between:4,32', 'unique:admins'], 'password' => 'required|between:6,32', 'nickname' => 'nullable|between:2,16', ], [ 'username.required' => '用户名称必须填写', 'username.between' => '用户名称长度应在:min-:max位之间', 'username.unique' => '用户名称已经存在', 'password.required' => '登录密码必须填写', 'password.between' => '登录密码长度应在:min-:max位之间', 'nickname.between' => '用户昵称长度应在:min-:max位之间', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } try { DB::transaction(function () use ($request) { $admin = Admin::create([ 'username' => $request->username, 'password' => $request->password, 'nickname' => $request->nickname, 'seller_id' => $request->seller_id ?? \Admin::user()->seller_id, ]); DB::table('admin_role_user')->insert([ 'role_id' => $request->role_id, 'admin_id' => $admin->id, 'created_at' => now(), 'updated_at' => now(), ]); }); return $this->success('操作成功', 'close'); } catch (\Exception $e) { return $this->error('操作失败' . $e->getmessage()); } } public function usersEdit(Admin $admin) { return view('Admin::sellers.usersEdit', compact('admin')); } public function usersUpdate(Request $request, Admin $admin) { $validator = Validator::make($request->all(), [ 'password' => 'required|between:6,32', 'nickname' => 'nullable|between:2,16', ], [ 'password.required' => '登录密码必须填写', 'password.between' => '登录密码长度应在:min-:max位之间', 'nickname.between' => '用户昵称长度应在:min-:max位之间', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } try { DB::transaction(function () use ($request, $admin) { $admin->update([ 'password' => $request->password, 'nickname' => $request->nickname, ]); //这里还需要更新管理员的操作权限 }); return $this->success('操作成功', 'close'); } catch (\Exception $e) { return $this->error('操作失败' . $e->getmessage()); } } public function usersDestroy(Admin $admin) { if ($admin->delete()) { //同时删除管理员的权限 return $this->success(); } else { return $this->error(); } } public function manager(Seller $seller) { $adminids = DB::table('admin_role_user')->where('role_id', 1)->pluck('admin_id'); $manager = Admin::where('seller_id', $seller->id)->whereIN('id', $adminids)->first(); return $manager ? view('Admin::sellers.manager', compact('manager', 'seller')) : view('Admin::sellers.managerCreate', compact('seller')); } public function managerUpdate(Request $request, Admin $admin) { $validator = Validator::make($request->all(), [ 'password' => 'required|between:6,32', 'nickname' => 'nullable|between:2,16', ], [ 'password.required' => '登录密码必须填写', 'password.between' => '登录密码长度应在:min-:max位之间', 'nickname.between' => '用户昵称长度应在:min-:max位之间', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } try { DB::transaction(function () use ($request, $admin) { $admin->update([ 'password' => $request->password, 'nickname' => $request->nickname, 'seller_id' => $request->seller_id, ]); //这里还需要更新管理员的操作权限 }); return $this->success('操作成功', 'close'); } catch (\Exception $e) { return $this->error('操作失败' . $e->getmessage()); } } public function managerStore(Request $request, Seller $seller) { $validator = Validator::make($request->all(), [ 'username' => ['required', 'between:4,32', 'unique:admins'], 'password' => 'required|between:6,32', 'nickname' => 'nullable|between:2,16', ], [ 'username.required' => '用户名称必须填写', 'username.between' => '用户名称长度应在:min-:max位之间', 'username.unique' => '用户名称已经存在', 'password.required' => '登录密码必须填写', 'password.between' => '登录密码长度应在:min-:max位之间', 'nickname.between' => '用户昵称长度应在:min-:max位之间', ]); if ($validator->fails()) { return $this->error($validator->errors()->first()); } try { DB::transaction(function () use ($request, $seller) { $admin = Admin::create([ 'username' => $request->username, 'password' => $request->password, 'nickname' => $request->nickname, 'seller_id' => $seller->id, ]); DB::table('admin_role_user')->insert([ 'role_id' => $request->role_id, 'admin_id' => $admin->id, 'created_at' => now(), 'updated_at' => now(), ]); }); return $this->success('操作成功', 'close'); } catch (\Exception $e) { return $this->error('操作失败' . $e->getmessage()); } } public function bindUser(Seller $seller) { $users = User::whereHas('identity', function ($query) { $query->where('identity_id', '>=', 0); })->doesntHave('seller')->get(); if ($users->count() == 0) { return $this->error('没有用户', 'close'); } return view('Admin::sellers.bindUser', compact('seller', 'users')); } public function dobindUser(Request $request, Seller $seller) { if (empty($request->user_id)) { return $this->error('用户必须选择'); } $user = User::find($request->user_id); if (empty($user)) { return $this->error('用户信息有误'); } if ($user->seller) { return $this->error('用户已绑定商户'); } $seller->user_id = $request->user_id; if ($seller->save()) { // $uids = UserRelation::where('bloodline', 'like', "%," . $user->id . ",%") // ->pluck('user_id') // ->toArray(); // User::whereIn('id', $uids)->update(['seller_id' => $seller->id]); return $this->success('操作成功', 'close'); } else { return $this->error('操作失败'); } } //取消绑定 public function cancelUser(Request $request, Seller $seller) { if (!$seller->user) { return $this->error('没有绑定用户'); } $seller->user_id = null; if ($seller->save()) { return $this->success('操作成功'); } else { return $this->error('操作失败'); } } public function certificate(Request $request, Seller $seller) { return view('Admin::sellers.certificate', compact('seller')); } public function docertificate(Request $request, Seller $seller) { if ($seller->update($request->all())) { return $this->success('上传成功', 'close'); } else { return $this->error('上传失败'); } } }