564 lines
20 KiB
PHP
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('上传失败');
|
|
|
|
}
|
|
}
|
|
}
|