0
0
Files
Babyclass/app/Admin/Controllers/SellerController.php
2020-08-04 10:09:42 +08:00

564 lines
20 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Models\Agency;
use App\Models\Bank;
use App\Models\Category;
use App\Models\Freight;
use App\Models\Seller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use RuLong\Panel\Models\Admin;
use Validator;
class SellerController extends Controller
{
//商家列表
public function index(Request $request)
{
if (\Admin::id() != 1 && \Admin::user()->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('上传失败');
}
}
}