first commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\ExtendService;
|
||||
|
||||
class Extend extends BaseController {
|
||||
|
||||
public function index(Request $request, ExtendService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public function audit(Request $request, ExtendService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->audit($request);
|
||||
$this->data['message'] = '审核完成!';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\FieldsService;
|
||||
|
||||
class Field extends BaseController {
|
||||
|
||||
/**
|
||||
* @title 获取字段列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, FieldsService $service) {
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
$this->data['message'] = '获取成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 添加字段
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function add(Request $request, FieldsService $service) {
|
||||
try {
|
||||
$this->data['data'] = $service->create($request);
|
||||
$this->data['message'] = '添加成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 编辑字段
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function edit(Request $request, FieldsService $service) {
|
||||
try {
|
||||
$this->data['data'] = $service->update($request);
|
||||
$this->data['message'] = '编辑成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 删除字段
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function delete(Request $request, FieldsService $service) {
|
||||
try {
|
||||
$this->data['data'] = $service->delete($request);
|
||||
$this->data['message'] = '删除成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 字段列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function lists(Request $request, FieldsService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getFieldList($request);
|
||||
$this->data['message'] = '获取成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 列表字段配置
|
||||
*
|
||||
* @param Request $request
|
||||
* @param FieldsService $service
|
||||
* @return void
|
||||
*/
|
||||
public function setting(Request $request, FieldsService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getFieldSetting($request);
|
||||
$this->data['message'] = '获取成功';
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\MemberService;
|
||||
|
||||
class Index extends BaseController{
|
||||
|
||||
/**
|
||||
* @title 会员列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 添加会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function add(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->create($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 修改会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function edit(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->update($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 删除会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function delete(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->delete($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 导入会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function import(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->import($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 导出会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function export(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->export($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\LevelService;
|
||||
|
||||
class Level extends BaseController{
|
||||
|
||||
/**
|
||||
* @title 会员列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param LevelService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, LevelService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 添加会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param LevelService $service
|
||||
* @return void
|
||||
*/
|
||||
public function add(Request $request, LevelService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->create($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 修改会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param LevelService $service
|
||||
* @return void
|
||||
*/
|
||||
public function edit(Request $request, LevelService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->update($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 删除会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param LevelService $service
|
||||
* @return void
|
||||
*/
|
||||
public function delete(Request $request, LevelService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->delete($request);
|
||||
} catch (\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\LevelService;
|
||||
use Modules\Member\Services\FieldsService;
|
||||
use Modules\Member\Services\ExtendService;
|
||||
|
||||
class Extend extends BaseController {
|
||||
|
||||
/**
|
||||
* title 会员扩展列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param ExtendService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, ExtendService $service){
|
||||
try {
|
||||
$request->mergeIfMissing(['status' => 1]);
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
public function detail(Request $request, ExtendService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDetail($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
public function field(Request $request, FieldsService $service){
|
||||
try {
|
||||
$request->mergeIfMissing(['status' => 1]);
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
public function level(Request $request, LevelService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
public function save(Request $request, ExtendService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->update($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\MemberService;
|
||||
|
||||
class Index extends BaseController {
|
||||
|
||||
/**
|
||||
* @title 用户列表
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDataList($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
/**
|
||||
* @title 手机号绑定
|
||||
*
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function mobile(MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->bindMobile($this->request->param());
|
||||
} catch (\think\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 微信绑定
|
||||
*
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function upwechat(MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->updateWechatInfo($this->request->param());
|
||||
} catch (\think\Exception $e) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $e->getMessage();
|
||||
}
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public function edit(Request $request, MemberService $service){
|
||||
try {
|
||||
$request->mergeIfMissing(['uid' => auth('api')->user()['uid']]);
|
||||
$this->data['data'] = $service->update($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public function editpasswd(Request $request, MemberService $service){
|
||||
try {
|
||||
$request->mergeIfMissing(['uid' => auth('api')->user()['uid']]);
|
||||
$this->data['data'] = $service->updatePasswd($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public function card(Request $request, MemberService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->getDetail($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return $this->data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\BaseController;
|
||||
use Modules\Member\Services\AuthService;
|
||||
|
||||
class Login extends BaseController {
|
||||
|
||||
/**
|
||||
* @title 登录
|
||||
*
|
||||
* @param Request $request
|
||||
* @param AuthService $service
|
||||
* @return void
|
||||
*/
|
||||
public function index(Request $request, AuthService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->userLogin($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 退出
|
||||
*
|
||||
* @param Request $request
|
||||
* @param AuthService $service
|
||||
* @return void
|
||||
*/
|
||||
public function logout(Request $request, AuthService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->userLogout($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 注册
|
||||
*
|
||||
* @param Request $request
|
||||
* @param AuthService $service
|
||||
* @return void
|
||||
*/
|
||||
public function register(Request $request, AuthService $service){
|
||||
try {
|
||||
$this->data['data'] = $service->userRegister($request);
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['code'] = 0;
|
||||
$this->data['message'] = $th->getMessage();
|
||||
}
|
||||
|
||||
return response()->json($this->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 获取当前登录用户信息
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function user(){
|
||||
$type = request('type', 'wechat');
|
||||
$user = auth('api')->user();
|
||||
|
||||
$user->level = $user->level()->first();
|
||||
$user->social = $user->social()->where('type', $type)->first();
|
||||
$user->store = $user->store()->first();
|
||||
$user->pm = $user->pm()->where('status', 1)->first();
|
||||
$this->data['data'] = $user;
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\Social\Wechat\OauthService;
|
||||
use Modules\Member\Services\AuthService;
|
||||
use App\Http\Controllers\BaseController;
|
||||
|
||||
class Social extends BaseController{
|
||||
|
||||
public function wechat(Request $request, OauthService $service){
|
||||
if($request->filled('code')){
|
||||
if($request->filled('url')){
|
||||
return redirect($request->input('url') . '?code=' . $request->input('code', ''));
|
||||
}
|
||||
}else{
|
||||
$res = $service->oauth($request);
|
||||
return redirect($res);
|
||||
}
|
||||
}
|
||||
|
||||
public function login(Request $request, OauthService $service){
|
||||
$type = $request->input('type', 'wechat');
|
||||
if($request->filled('code')){
|
||||
switch ($type) {
|
||||
case 'wechat':
|
||||
try {
|
||||
$wechatInfo = $service->wechatLogin($request->input('code', ''));
|
||||
$request->merge([
|
||||
'username' => $wechatInfo['openid'],
|
||||
'nickname' => $wechatInfo['nickname'],
|
||||
'password' => uniqid()
|
||||
]);
|
||||
$member = app(AuthService::class)->userRegister($request, $wechatInfo, 'wechat');
|
||||
$token = auth('api')->login($member);
|
||||
$this->data['data'] = [
|
||||
'access_token' => $token,
|
||||
'token_type' => 'bearer',
|
||||
'expires_in' => auth('api')->factory()->getTTL() * 60
|
||||
];
|
||||
} catch (\Throwable $th) {
|
||||
$this->data['message'] = $th->getMessage();
|
||||
$this->data['code'] = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
$this->data['message'] = "非法操作!";
|
||||
$this->data['code'] = 0;
|
||||
}
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Member\Events;
|
||||
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class LoginBefore {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(public $username = '', public $password = ''){
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return array<int, \Illuminate\Broadcasting\Channel>
|
||||
*/
|
||||
public function broadcastOn(): array {
|
||||
return [
|
||||
new PrivateChannel('channel-name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Member\Events;
|
||||
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Modules\Member\Models\Member;
|
||||
|
||||
class LoginEvent {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(public Member $member, public $openid = '', public $type = ''){
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return array<int, \Illuminate\Broadcasting\Channel>
|
||||
*/
|
||||
public function broadcastOn(): array {
|
||||
return [
|
||||
new PrivateChannel('channel-name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Events;
|
||||
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Modules\Member\Models\Member;
|
||||
|
||||
class MemberUpdate {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(public Member $member){
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return array<int, \Illuminate\Broadcasting\Channel>
|
||||
*/
|
||||
public function broadcastOn(): array{
|
||||
return [
|
||||
new PrivateChannel('channel-name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Events;
|
||||
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Modules\Member\Models\Member;
|
||||
|
||||
class Registered {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(public Member $member, public $openid = '', public $type = ''){
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return array<int, \Illuminate\Broadcasting\Channel>
|
||||
*/
|
||||
public function broadcastOn(): array{
|
||||
return [
|
||||
new PrivateChannel('channel-name'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Jobs;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Modules\Member\Models\Member;
|
||||
use Modules\Member\Models\Fields;
|
||||
use Modules\System\Models\Tasks;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Dcat\EasyExcel\Excel;
|
||||
use Dcat\EasyExcel\Contracts\Sheet as SheetInterface;
|
||||
use Dcat\EasyExcel\Support\SheetCollection;
|
||||
|
||||
class MemberExport implements ShouldQueue {
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
protected $params;
|
||||
protected $tasks;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
public function __construct($params, Tasks $tasks) {
|
||||
$this->params = $params;
|
||||
$this->tasks = $tasks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle(): void {
|
||||
$file = $this->params['fileName'] ? 'export/' . $this->params['fileName'] : 'member_' . date('YmdHis') . '.xlsx';
|
||||
|
||||
//扩展字段
|
||||
$fields = Fields::all();
|
||||
Excel::export()->chunk(function(int $page) use($fields){
|
||||
$chunkSize = 1000;
|
||||
$query = Member::with(['extend', 'level'])->forPage($page, $chunkSize);
|
||||
logger($query->toSql());
|
||||
if ($query->count() == 0) {
|
||||
$this->tasks->status = 1;
|
||||
$this->tasks->save();
|
||||
return;
|
||||
}
|
||||
$data = $query->get();
|
||||
$exportData = [];
|
||||
foreach ($data as $key => $value) {
|
||||
$item = [
|
||||
'用户名' => $value->username,
|
||||
'昵称' => $value->nickname,
|
||||
'手机号' => $value->mobile,
|
||||
'邮箱' => $value->email,
|
||||
];
|
||||
foreach ($fields as $field) {
|
||||
$item[$field->title] = $value->extend ? $value->extend->{$field->name} : '';
|
||||
}
|
||||
$item['等级'] = $value->level ? $value->level->title : '未设置等级';
|
||||
$item['等级到期时间'] = $value->level_expire_time;
|
||||
$item['登录次数'] = $value->login_count;
|
||||
$item['注册时间'] = $value->created_at;
|
||||
|
||||
$exportData[] = $item;
|
||||
}
|
||||
return $exportData;
|
||||
})->disk(Storage::disk('public'))->store($file);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Jobs;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Modules\Member\Models\Member;
|
||||
use Modules\Member\Models\Fields;
|
||||
use Modules\Member\Models\MemberExtend;
|
||||
use Modules\System\Models\Tasks;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Dcat\EasyExcel\Excel;
|
||||
use Dcat\EasyExcel\Contracts\Sheet as SheetInterface;
|
||||
use Dcat\EasyExcel\Support\SheetCollection;
|
||||
|
||||
class MemberImport implements ShouldQueue {
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
protected $file;
|
||||
protected $tasks;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*/
|
||||
public function __construct($file, Tasks $tasks) {
|
||||
$this->file = Storage::disk('public')->path($file);
|
||||
$this->tasks = $tasks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*/
|
||||
public function handle(): void {
|
||||
//扩展字段
|
||||
$fields = Fields::all();
|
||||
Excel::import($this->file)->each(function (SheetInterface $sheet) use($fields) {
|
||||
$chunkSize = 100;
|
||||
$sheet->chunk($chunkSize, function (SheetCollection $collection) {
|
||||
$collection->each(function ($row) {
|
||||
if (empty($row)){
|
||||
$this->tasks->status = 1;
|
||||
$this->tasks->save();
|
||||
return true;
|
||||
}
|
||||
|
||||
$member = Member::updateOrCreate([
|
||||
'username' => $row['用户名'],
|
||||
'mobile' => $row['手机号'],
|
||||
'email' => $row['邮箱']
|
||||
], [
|
||||
'nickname' => $row['昵称'],
|
||||
'password' => $row['手机号'],
|
||||
]);
|
||||
|
||||
if ($member->id) {
|
||||
if($member->extend()->exists()){
|
||||
$extend = $member->extend()->first();
|
||||
}else{
|
||||
$extend = new MemberExtend();
|
||||
$extend->member_id = $member->id;
|
||||
}
|
||||
foreach ($fields as $field) {
|
||||
$extend->{$field->name} = $row[$field->title];
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Listeners;
|
||||
|
||||
use Modules\Member\Events\LoginBefore;
|
||||
use Modules\Member\Models\Member;
|
||||
|
||||
class UpMemberPaswd {
|
||||
|
||||
/**
|
||||
* @title 会员登录后更新用户信息
|
||||
*
|
||||
* @param LoginEvent $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(LoginBefore $event) {
|
||||
$username = $event->username;
|
||||
$password = $event->password;
|
||||
|
||||
$member = Member::where('username', '=', $username)->whereNotNull('old_password')->first();
|
||||
if($member){
|
||||
if(md5($password . $member->salt) === $member->old_password){
|
||||
$member->password = $password;
|
||||
$member->old_password = '';
|
||||
$member->salt = '';
|
||||
$member->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Listeners;
|
||||
|
||||
use Modules\Member\Events\Registered;
|
||||
use Modules\Member\Models\Member;
|
||||
|
||||
class UpdateMember {
|
||||
|
||||
/**
|
||||
* @title 会员登录后更新用户信息
|
||||
*
|
||||
* @param LoginEvent $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Registered $event) {
|
||||
$member = $event->member;
|
||||
$openid = $event->openid;
|
||||
$type = $event->type;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
|
||||
use Modules\Member\Observers\FieldObserver;
|
||||
|
||||
#[ObservedBy([FieldObserver::class])]
|
||||
class Fields extends BaseModel {
|
||||
|
||||
protected $table = 'member_extends_fields';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use Tymon\JWTAuth\Contracts\JWTSubject;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class Member extends Authenticatable implements JWTSubject {
|
||||
use Notifiable;
|
||||
|
||||
protected $table = 'member';
|
||||
protected $primaryKey = 'uid';
|
||||
protected $fillable = ['username', 'nickname', 'email', 'mobile', 'password', 'status'];
|
||||
protected $hidden = ['password', 'deleted_at'];
|
||||
protected $dateFormat = 'Y-m-d H:i:s';
|
||||
protected $with = ['invite:uid,nickname,username,level_id', 'extend', 'level', 'store', 'social', 'pm'];
|
||||
|
||||
/**
|
||||
* Get the identifier that will be stored in the subject claim of the JWT.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getJWTIdentifier() {
|
||||
return $this->getKey();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a key value array, containing any custom claims to be added to the JWT.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getJWTCustomClaims() {
|
||||
return [];
|
||||
}
|
||||
|
||||
protected function casts(): array {
|
||||
return [
|
||||
'created_at' => 'datetime:Y-m-d H:i:s',
|
||||
'updated_at' => 'datetime:Y-m-d H:i:s',
|
||||
'deleted_at' => 'datetime:Y-m-d H:i:s',
|
||||
];
|
||||
}
|
||||
|
||||
public function password() : Attribute {
|
||||
return new Attribute(
|
||||
set: fn ($value) => Hash::make($value),
|
||||
);
|
||||
}
|
||||
|
||||
public function avatar(): Attribute {
|
||||
return new Attribute(
|
||||
get: fn ($value) => $value ?? request()->root() . '/storage/avatar/default_avatar.jpg',
|
||||
);
|
||||
}
|
||||
|
||||
public function routeNotificationForMail(Notification $notification): array|string{
|
||||
return [$this->email => $this->nickname];
|
||||
}
|
||||
|
||||
public function invite(){
|
||||
return $this->hasOne(Member::class, 'uid', 'invite_uid');
|
||||
}
|
||||
|
||||
public function extend(){
|
||||
return $this->hasOne(MemberExtends::class, 'member_id', 'uid');
|
||||
}
|
||||
|
||||
public function social(){
|
||||
return $this->hasMany(\Modules\Wechat\Models\MemberSocial::class, 'member_id', 'uid');
|
||||
}
|
||||
|
||||
public function level(){
|
||||
return $this->hasOne(MemberLevel::class, 'id', 'level_id');
|
||||
}
|
||||
|
||||
public function address(){
|
||||
return $this->hasMany(MemberAddress::class, 'member_id', 'id');
|
||||
}
|
||||
|
||||
public function pm(){
|
||||
return $this->hasOne(Pm::class, 'member_id', 'pm_uid');
|
||||
}
|
||||
|
||||
public function store(){
|
||||
return $this->hasOne(Store::class, 'member_id', 'store_uid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberAccount extends BaseModel {
|
||||
|
||||
protected $table = 'member_account';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberAddress extends BaseModel {
|
||||
|
||||
protected $table = 'member_address';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberBank extends BaseModel {
|
||||
|
||||
protected $table = 'member_bank';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberCoupon extends BaseModel {
|
||||
|
||||
protected $table = 'member_coupon';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberExtends extends BaseModel {
|
||||
|
||||
protected $table = 'member_extends';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
|
||||
public function member(){
|
||||
return $this->belongsTo(Member::class, 'member_id', 'uid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberLevel extends BaseModel {
|
||||
|
||||
protected $table = 'member_level';
|
||||
protected $fillable = ['title', 'name', 'icon', 'sort', 'status', 'remark', 'created_at', 'updated_at'];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
|
||||
public function members(){
|
||||
return $this->belongsToMany(Member::class, 'member_has_level', 'level_id', 'member_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberScore extends BaseModel {
|
||||
|
||||
protected $table = 'member_score';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberStore extends BaseModel {
|
||||
|
||||
protected $table = 'member_store';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class MemberWallet extends BaseModel {
|
||||
|
||||
protected $table = 'member_wallet';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class Pm extends BaseModel {
|
||||
|
||||
protected $table = 'member_pm';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
|
||||
public function members(){
|
||||
return $this->belongsTo(Member::class, 'member_id', 'uid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Models;
|
||||
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class Store extends BaseModel {
|
||||
|
||||
protected $table = 'member_store';
|
||||
protected $fillable = [];
|
||||
// protected $hidden = ['deleted_at'];
|
||||
|
||||
public function members(){
|
||||
return $this->belongsTo(Member::class, 'member_id', 'uid');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Member\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class Member extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*/
|
||||
public function via($notifiable): array
|
||||
{
|
||||
$via = [];
|
||||
if ($notifiable->email) {
|
||||
$via[] = 'mail';
|
||||
}
|
||||
if ($notifiable->mobile) {
|
||||
$via[] = 'sms';
|
||||
}
|
||||
return $via;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*/
|
||||
public function toMail($notifiable): MailMessage
|
||||
{
|
||||
return (new MailMessage)
|
||||
->subject('通知主题')
|
||||
->greeting('你好!')
|
||||
->line('The introduction to the notification.')
|
||||
->action('Notification Action', 'https://laravel.com')
|
||||
->line('Thank you for using our application!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array representation of the notification.
|
||||
*/
|
||||
public function toArray($notifiable): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Observers;
|
||||
|
||||
use Modules\Member\Models\Fields;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class FieldObserver {
|
||||
|
||||
public $type = [
|
||||
'string' => 'string',
|
||||
'audio' => 'string',
|
||||
'video' => 'string',
|
||||
'editor' => 'longText',
|
||||
'text' => 'text',
|
||||
'image' => 'string',
|
||||
'images' => 'text',
|
||||
'file' => 'string',
|
||||
'files' => 'text',
|
||||
'number' => 'integer',
|
||||
'bool' => 'boolean',
|
||||
'date' => 'date',
|
||||
'datetime' => 'dateTime',
|
||||
'select' => 'string',
|
||||
'radio' => 'string',
|
||||
'checkbox' => 'text'
|
||||
];
|
||||
/**
|
||||
* 处理 "created" 事件。
|
||||
*/
|
||||
public function created(Fields $fields): void {
|
||||
$table = 'member_extends';
|
||||
if(Schema::hasTable($table)){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$type = $this->type[$fields->type] ? $this->type[$fields->type] : 'string';
|
||||
if($fields->length){
|
||||
$field = $table->{$type}($fields->name, length: $fields->length);
|
||||
}else{
|
||||
$field = $table->{$type}($fields->name);
|
||||
}
|
||||
if($fields->default_value){
|
||||
$field = $field->default($fields->default_value);
|
||||
}
|
||||
if($fields->type == 'required'){
|
||||
$field = $field->nullable();
|
||||
}
|
||||
$field = $field->comment($fields->title)->after($fields->after);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理 "updated" 事件。
|
||||
*/
|
||||
public function updated(Fields $fields): void {
|
||||
$table = 'member_extends';
|
||||
if (!Schema::hasTable($table) && !Schema::hasColumn($table, $fields->name)) {
|
||||
return;
|
||||
}
|
||||
if($fields->isDirty('name') && Schema::hasColumn($table, $fields->getOriginal('name'))){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$table->renameColumn($fields->getOriginal('name'), $fields->name);
|
||||
});
|
||||
}
|
||||
|
||||
if($fields->isDirty()){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$type = $this->type[$fields->type] ? $this->type[$fields->type] : 'string';
|
||||
if($fields->length){
|
||||
$field = $table->{$type}($fields->name, length: $fields->length);
|
||||
}else{
|
||||
$field = $table->{$type}($fields->name);
|
||||
}
|
||||
if($fields->default_value){
|
||||
$field = $table->default($fields->default_value);
|
||||
}else{
|
||||
if($fields->type == 'required'){
|
||||
$field = $field->nullable(false);
|
||||
}else{
|
||||
$field = $field->nullable();
|
||||
}
|
||||
}
|
||||
$field->after($fields->after)->comment($fields->title)->change();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function deleted(Fields $fields): void {
|
||||
if($fields->status == 1){
|
||||
$table = 'member_extends';
|
||||
if (Schema::hasTable($table) && Schema::hasColumn($table, $fields->name)) {
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$table->dropColumn($fields->name);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The event handler mappings for the application.
|
||||
*
|
||||
* @var array<string, array<int, string>>
|
||||
*/
|
||||
protected $listen = [
|
||||
\Modules\Member\Events\LoginBefore::class => [
|
||||
\Modules\Member\Listeners\UpMemberPaswd::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Indicates if events should be discovered.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected static $shouldDiscoverEvents = true;
|
||||
|
||||
/**
|
||||
* Configure the proper event listeners for email verification.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function configureEmailVerification(): void
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Member\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class MemberServiceProvider extends ServiceProvider
|
||||
{
|
||||
protected string $moduleName = 'Member';
|
||||
|
||||
protected string $moduleNameLower = 'member';
|
||||
|
||||
/**
|
||||
* Boot the application events.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
$this->registerCommands();
|
||||
$this->registerCommandSchedules();
|
||||
$this->registerTranslations();
|
||||
$this->registerConfig();
|
||||
$this->registerViews();
|
||||
$this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->register(EventServiceProvider::class);
|
||||
$this->app->register(RouteServiceProvider::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register commands in the format of Command::class
|
||||
*/
|
||||
protected function registerCommands(): void
|
||||
{
|
||||
// $this->commands([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register command Schedules.
|
||||
*/
|
||||
protected function registerCommandSchedules(): void
|
||||
{
|
||||
// $this->app->booted(function () {
|
||||
// $schedule = $this->app->make(Schedule::class);
|
||||
// $schedule->command('inspire')->hourly();
|
||||
// });
|
||||
}
|
||||
|
||||
/**
|
||||
* Register translations.
|
||||
*/
|
||||
public function registerTranslations(): void
|
||||
{
|
||||
$langPath = resource_path('lang/modules/'.$this->moduleNameLower);
|
||||
|
||||
if (is_dir($langPath)) {
|
||||
$this->loadTranslationsFrom($langPath, $this->moduleNameLower);
|
||||
$this->loadJsonTranslationsFrom($langPath);
|
||||
} else {
|
||||
$this->loadTranslationsFrom(module_path($this->moduleName, 'lang'), $this->moduleNameLower);
|
||||
$this->loadJsonTranslationsFrom(module_path($this->moduleName, 'lang'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register config.
|
||||
*/
|
||||
protected function registerConfig(): void
|
||||
{
|
||||
$this->publishes([module_path($this->moduleName, 'config/config.php') => config_path($this->moduleNameLower.'.php')], 'config');
|
||||
$this->mergeConfigFrom(module_path($this->moduleName, 'config/config.php'), $this->moduleNameLower);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register views.
|
||||
*/
|
||||
public function registerViews(): void
|
||||
{
|
||||
$viewPath = resource_path('views/modules/'.$this->moduleNameLower);
|
||||
$sourcePath = module_path($this->moduleName, 'resources/views');
|
||||
|
||||
$this->publishes([$sourcePath => $viewPath], ['views', $this->moduleNameLower.'-module-views']);
|
||||
|
||||
$this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower);
|
||||
|
||||
$componentNamespace = str_replace('/', '\\', config('modules.namespace').'\\'.$this->moduleName.'\\'.ltrim(config('modules.paths.generator.component-class.path'), config('modules.paths.app_folder', '')));
|
||||
Blade::componentNamespace($componentNamespace, $this->moduleNameLower);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*
|
||||
* @return array<string>
|
||||
*/
|
||||
public function provides(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string>
|
||||
*/
|
||||
private function getPublishableViewPaths(): array
|
||||
{
|
||||
$paths = [];
|
||||
foreach (config('view.paths') as $path) {
|
||||
if (is_dir($path.'/modules/'.$this->moduleNameLower)) {
|
||||
$paths[] = $path.'/modules/'.$this->moduleNameLower;
|
||||
}
|
||||
}
|
||||
|
||||
return $paths;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
|
||||
class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Called before routes are registered.
|
||||
*
|
||||
* Register any model bindings or pattern based filters.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
parent::boot();
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the routes for the application.
|
||||
*/
|
||||
public function map(): void
|
||||
{
|
||||
$this->mapApiRoutes();
|
||||
|
||||
$this->mapWebRoutes();
|
||||
|
||||
$this->mapAdminRoutes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the "web" routes for the application.
|
||||
*
|
||||
* These routes all receive session state, CSRF protection, etc.
|
||||
*/
|
||||
protected function mapWebRoutes(): void
|
||||
{
|
||||
Route::middleware('web')->group(module_path('Member', '/routes/web.php'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the "api" routes for the application.
|
||||
*
|
||||
* These routes are typically stateless.
|
||||
*/
|
||||
protected function mapApiRoutes(): void
|
||||
{
|
||||
Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Member', '/routes/api.php'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the "api" routes for the application.
|
||||
*
|
||||
* These routes are typically stateless.
|
||||
*/
|
||||
protected function mapAdminRoutes(): void
|
||||
{
|
||||
Route::middleware('api')->prefix('admin')->name('admin.')->group(module_path('Member', '/routes/admin.php'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Services;
|
||||
|
||||
use Modules\Member\Models\Member;
|
||||
use Modules\Member\Events\LoginBefore;
|
||||
use Modules\Member\Events\LoginEvent;
|
||||
use Modules\Member\Events\Registered;
|
||||
|
||||
class AuthService {
|
||||
|
||||
/**
|
||||
* @title 会员登录
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function userLogin($request){
|
||||
$request->validate([
|
||||
'username' => 'required',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
$username = $request->input('username');
|
||||
$password = $request->input('password');
|
||||
LoginBefore::dispatch($username, $password);
|
||||
|
||||
$token = auth('api')->attempt(['mobile' => $username, 'password' => $password]);
|
||||
|
||||
if (!$token) {
|
||||
throw new \Exception("登錄失敗!", 1000);
|
||||
}else{
|
||||
LoginEvent::dispatch(auth('api')->user(), $request->input('openid', ''), $request->input('type'));
|
||||
// 判断是否到期
|
||||
$user = auth('api')->user();
|
||||
if(isset($user['level_expire_time']) && $user['level_expire_time'] != ''){
|
||||
$level_expire_time = strtotime($user['level_expire_time']);
|
||||
if($level_expire_time < time()){
|
||||
throw new \Exception("您的會員已到期,請聯系管理員!", 1004);
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'access_token' => $token,
|
||||
'token_type' => 'bearer',
|
||||
'expires_in' => auth('api')->factory()->getTTL() * 60
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @title UID登录
|
||||
* @description 提供给第三方登录接口
|
||||
*
|
||||
* @param [type] $uid
|
||||
* @param array $params 第三方登录参数
|
||||
* @param string $type 第三方登录类型
|
||||
* @return void
|
||||
*/
|
||||
public function userLoginByUid($uid, $params = [], $type = 'wechat'){
|
||||
$member = Member::find($uid);
|
||||
if(!$member){
|
||||
throw new \Exception("用户不存在!", 1000);
|
||||
}
|
||||
|
||||
$token = auth('api')->login($member);
|
||||
|
||||
if (!$token) {
|
||||
throw new \Exception("登录失败!", 1000);
|
||||
}else{
|
||||
LoginEvent::dispatch(auth('api')->user(), $params, $type);
|
||||
return [
|
||||
'access_token' => $token,
|
||||
'token_type' => 'bearer',
|
||||
'expires_in' => auth('api')->factory()->getTTL() * 60
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 会员注册
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function userRegister($request){
|
||||
$request->validate([
|
||||
'username' => 'required|unique:member,username',
|
||||
'password' => 'required',
|
||||
'mobile' => 'nullable|unique:member,mobile',
|
||||
], [
|
||||
'username.unique' => '用户名已存在!',
|
||||
'mobile.unique' => '手机号已存在!',
|
||||
'username.required' => '用户名不能为空!',
|
||||
'password.required' => '密码不能为空!'
|
||||
]);
|
||||
|
||||
$member = Member::where('username', '=', $request->input('username'))->first();
|
||||
if(!$member){
|
||||
$data = [
|
||||
'username' => $request->input('username'),
|
||||
'password' => $request->input('password'),
|
||||
'nickname' => $request->input('nickname', ''),
|
||||
'avatar' => $request->input('avatar', ''),
|
||||
'mobile' => $request->input('mobile', 0),
|
||||
];
|
||||
|
||||
$member = Member::updateOrCreate($data);
|
||||
}
|
||||
Registered::dispatch($member, $request->input('openid', ''), $request->input('type', ''));
|
||||
$token = auth('api')->login($member);
|
||||
return [
|
||||
'access_token' => $token,
|
||||
'token_type' => 'bearer',
|
||||
'expires_in' => auth('api')->factory()->getTTL() * 60
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 会员退出
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function userLogout($request){
|
||||
auth('api')->logout();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Services;
|
||||
|
||||
use Modules\Member\Models\Fields;
|
||||
use Modules\Member\Models\MemberExtends;
|
||||
|
||||
class ExtendService {
|
||||
|
||||
public function getDataList($request){
|
||||
$map = [];
|
||||
|
||||
$query = MemberExtends::with('member:uid,username,nickname,avatar,level_id,level_expire_time');
|
||||
|
||||
if ($request->filled('member_id')){
|
||||
$query->where('member_id', $request->input('member_id'));
|
||||
}
|
||||
|
||||
if ($request->filled('keyword')){
|
||||
$map[] = ['name', 'like', '%' . $request->input('keyword') . '%'];
|
||||
}
|
||||
if ($request->filled('name')){
|
||||
$map[] = ['name', 'like', '%' . $request->input('name') . '%'];
|
||||
}
|
||||
|
||||
if ($request->filled('status')){
|
||||
$map[] = ['status', '=', $request->input('status')];
|
||||
}
|
||||
|
||||
$query->where($map);
|
||||
|
||||
$query->orderBy($request->input('order', 'id'), $request->input('sort', 'desc'));
|
||||
if ($request->filled('page')){
|
||||
$data = [
|
||||
'total' => $query->count(),
|
||||
'page' => (int) $request->input('page', 1),
|
||||
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 30))->get(),
|
||||
];
|
||||
}else{
|
||||
$data = $query->limit($request->input('limit', 10))->get();
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getDetail($request){
|
||||
if ($request->filled('member_id')){
|
||||
$member_id = $request->input('member_id');
|
||||
} else {
|
||||
$member_id = auth('api')->user()['uid'];
|
||||
}
|
||||
|
||||
$extends = MemberExtends::with('member:uid,username,nickname,avatar,level_id,level_expire_time', 'member.level')->where('member_id', $member_id)->first();
|
||||
|
||||
if (!$extends){
|
||||
throw new \Exception('用户数据不存在');
|
||||
}
|
||||
if ($extends->status == 0){
|
||||
throw new \Exception('用户数据审核中');
|
||||
}
|
||||
if ($extends->status == 2){
|
||||
throw new \Exception('用户数据审核未通过');
|
||||
}
|
||||
|
||||
return $extends ?? [];
|
||||
}
|
||||
|
||||
public function update($request){
|
||||
$field = Fields::all();
|
||||
|
||||
if ($request->filled('member_id')){
|
||||
$member_id = $request->input('member_id');
|
||||
} else {
|
||||
$member_id = auth('api')->user()['uid'];
|
||||
}
|
||||
|
||||
$extends = MemberExtends::where('member_id', $member_id)->first();
|
||||
if (!$extends){
|
||||
$extends = new MemberExtends();
|
||||
$extends->member_id = $member_id;
|
||||
}
|
||||
|
||||
foreach ($field as $key => $value) {
|
||||
if ($request->filled($value['name']) && $request->input($value['name']) != ''){
|
||||
$extends->{$value['name']} = $request->input($value['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$extends->status = 0;
|
||||
$extends->save();
|
||||
return $extends;
|
||||
}
|
||||
|
||||
public function audit($request){
|
||||
$request->validate([
|
||||
'id' => 'required',
|
||||
'member_id' => 'required',
|
||||
'level_id' => 'required',
|
||||
'status' => 'required|integer|in:0,1,2',
|
||||
'level_expire_time' => 'required|date',
|
||||
], [
|
||||
'id.required' => 'ID不能为空',
|
||||
'member_id.required' => '用户ID不能为空',
|
||||
'level_id.required' => '等级ID不能为空',
|
||||
'status.required' => '审核状态不能为空',
|
||||
'status.integer' => '审核状态必须为数字',
|
||||
'status.in' => '审核状态值错误',
|
||||
'level_expire_time.required' => '等级过期时间不能为空',
|
||||
'level_expire_time.date' => '等级过期时间格式错误',
|
||||
]);
|
||||
|
||||
$extends = MemberExtends::where('id', $request->input('id'))->first();
|
||||
|
||||
if (!$extends){
|
||||
throw new \Exception('审核数据不存在');
|
||||
}
|
||||
|
||||
$extends->status = $request->input('status');
|
||||
$extends->card_number = 'NF9' . str_pad($extends->member_id, 6, '0', STR_PAD_LEFT);
|
||||
|
||||
$extends->save();
|
||||
|
||||
if ($request->input('status') == 1){
|
||||
$member = $extends->member()->first();
|
||||
$member->level_id = $request->input('level_id');
|
||||
$member->level_expire_time = $request->input('level_expire_time');
|
||||
if ($extends->name){
|
||||
$member->nickname = $extends->name;
|
||||
}
|
||||
if ($extends->mobile){
|
||||
$member->mobile = $extends->mobile;
|
||||
}
|
||||
if ($extends->email){
|
||||
$member->email = $extends->email;
|
||||
}
|
||||
$member->save();
|
||||
}
|
||||
return $extends;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Services;
|
||||
|
||||
use Modules\Member\Models\Fields;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class FieldsService {
|
||||
|
||||
/**
|
||||
* @title 字段列表
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function getDataList($request) {
|
||||
$map = [];
|
||||
|
||||
if ($request->filled('status')) {
|
||||
$map[] = ['status', '=', $request->input('status')];
|
||||
}
|
||||
|
||||
$query = Fields::where($map);
|
||||
|
||||
if($request->filled('page')){
|
||||
$data = [
|
||||
'total' => $query->count(),
|
||||
'page' => $request->input('page', 1),
|
||||
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 10))->get(),
|
||||
];
|
||||
}else{
|
||||
$data = $query->limit($request->input('limit', 10))->get();
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 创建字段
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function create($request) {
|
||||
$request->validate([
|
||||
'name' => 'required|unique:cms_model_field',
|
||||
'title' => 'required',
|
||||
'type' => 'required',
|
||||
]);
|
||||
$field = new Fields();
|
||||
|
||||
foreach ($field->setFilterFields($request->all()) as $key => $value) {
|
||||
$field->$key = $value;
|
||||
}
|
||||
|
||||
$field->save();
|
||||
return $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 更新字段
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function update($request) {
|
||||
$request->validate([
|
||||
'name' => 'required|unique:cms_model_field,name,' . $request->input('id'),
|
||||
'title' => 'required',
|
||||
'type' => 'required',
|
||||
]);
|
||||
$field = Fields::find($request->input('id'));
|
||||
|
||||
foreach ($field->setFilterFields($request->all()) as $key => $value){
|
||||
$field->$key = $value;
|
||||
}
|
||||
|
||||
$field->save();
|
||||
return $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 删除字段
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function delete($request) {
|
||||
if($request->filled('id')){
|
||||
try {
|
||||
$field = Fields::findOrFail($request->input('id'));
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception("模型不存在!", 1);
|
||||
}
|
||||
$field->delete();
|
||||
}
|
||||
if($request->filled('ids')){
|
||||
try {
|
||||
$field = Fields::whereIn('id', $request->input('ids'));
|
||||
$field->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception($th->getMessage(), 1);
|
||||
}
|
||||
}
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function getFieldList($request){
|
||||
$fields = Schema::getColumnListing('member_extends');
|
||||
|
||||
$data = [];
|
||||
foreach ($fields as $value) {
|
||||
if ($value !== $request->input('name'))
|
||||
$data[] = ['title' => $value, 'values' => $value];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getFieldSetting($request){
|
||||
$map = [];
|
||||
|
||||
$query = Fields::with('model:id,title,name,icon');
|
||||
|
||||
if ($request->filled('model')) {
|
||||
$query->whereHas('model', function($q) use($request) {
|
||||
$q->where('name', $request->input('model'));
|
||||
});
|
||||
}
|
||||
|
||||
$data = $query->get();
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Services;
|
||||
|
||||
use Modules\Member\Models\MemberLevel;
|
||||
|
||||
class LevelService {
|
||||
|
||||
/**
|
||||
* @title 获取会员列表
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function getDataList($request){
|
||||
$map = [];
|
||||
|
||||
if ($request->filled('title')) {
|
||||
$map[] = ['title', 'like', '%' . $request->input('title') . '%'];
|
||||
}
|
||||
if ($request->filled('name')) {
|
||||
$map[] = ['name', 'like', '%' . $request->input('name') . '%'];
|
||||
}
|
||||
$query = MemberLevel::where($map)->orderBy('id', 'desc');
|
||||
|
||||
if ($request->filled('page')) {
|
||||
$data = [
|
||||
'total' => $query->count(),
|
||||
'page' => $request->input('page', 1),
|
||||
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 30))->get(),
|
||||
];
|
||||
}else{
|
||||
$data = $query->limit($request->input('limit', 30))->get();
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 添加会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function create($request){
|
||||
$request->validate([
|
||||
'title' => 'required|max:255',
|
||||
'name' => 'required|max:255|alpha_dash:ascii|unique:member_level,name',
|
||||
]);
|
||||
|
||||
$data = [
|
||||
'title' => $request->input('title', ''),
|
||||
'name' => $request->input('name', ''),
|
||||
'icon' => $request->input('icon', ''),
|
||||
'sort' => $request->input('sort', 0),
|
||||
'status' => $request->input('status', 1),
|
||||
'remark' => $request->input('remark', ''),
|
||||
];
|
||||
|
||||
$level = MemberLevel::create($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 修改会员
|
||||
*
|
||||
* @param Request $request
|
||||
* @param MemberService $service
|
||||
* @return void
|
||||
*/
|
||||
public function update($request){
|
||||
$request->validate([
|
||||
'title' => 'required|max:255',
|
||||
'name' => 'required|max:255|alpha_dash:ascii|unique:member_level,name,' . $request->input('id'),
|
||||
]);
|
||||
|
||||
try {
|
||||
$level = MemberLevel::findOrFail($request->input('id'));
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception("会员不存在!", 1);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'title'=> $request->input('title', ''),
|
||||
'name' => $request->input('name', ''),
|
||||
'icon' => $request->input('icon', ''),
|
||||
'sort' => $request->input('sort', 0),
|
||||
'status' => $request->input('status', 1),
|
||||
'remark' => $request->input('remark', ''),
|
||||
];
|
||||
$level->update($data);
|
||||
return $level;
|
||||
}
|
||||
|
||||
public function delete($request){
|
||||
if($request->filled('id')){
|
||||
try {
|
||||
$level = MemberLevel::findOrFail($request->input('id'));
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception("会员等级不存在!", 1);
|
||||
}
|
||||
$level->members()->detach();
|
||||
$level->delete();
|
||||
}
|
||||
if($request->filled('ids')){
|
||||
try {
|
||||
$level = MemberLevel::whereIn('id', $request->input('ids'));
|
||||
foreach ($level->get() as $item) {
|
||||
$item->members()->detach(); //删除关联
|
||||
}
|
||||
$level->delete();
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception($th->getMessage(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
return $level;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Services;
|
||||
|
||||
use Modules\Member\Models\Member;
|
||||
use Modules\Member\Events\MemberUpdate;
|
||||
|
||||
class MemberService {
|
||||
|
||||
/**
|
||||
* @title 获取会员列表
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function getDataList($request){
|
||||
$map = [];
|
||||
|
||||
if ($request->filled('username')) {
|
||||
$map[] = ['username', 'like', '%' . $request->input('username') . '%'];
|
||||
}
|
||||
if ($request->filled('mobile')) {
|
||||
$map[] = ['mobile', 'like', '%' . $request->input('mobile') . '%'];
|
||||
}
|
||||
if ($request->filled('email')) {
|
||||
$map[] = ['email', 'like', '%' . $request->input('email') . '%'];
|
||||
}
|
||||
|
||||
$query = Member::with(['social', 'level'])->where($map)->orderBy('uid', 'desc');
|
||||
|
||||
if ($request->filled('title')) {
|
||||
$query->whereAny(['nickname', 'username'], 'like', '%' . $request->input('title') . '%');
|
||||
}
|
||||
$data = [
|
||||
'total' => $query->count(),
|
||||
'page' => $request->input('page', 1),
|
||||
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 10))->get(),
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getDetail($request){
|
||||
$request->validate([
|
||||
'id_card' => 'required',
|
||||
], [
|
||||
'id_card.required' => '身份证号不能为空!',
|
||||
]);
|
||||
|
||||
$query = Member::with(['level', 'extend']);
|
||||
if ($request->filled('id_card')) {
|
||||
$query->whereHas('extend', function ($query) use ($request) {
|
||||
$query->where('id_card', $request->input('id_card'));
|
||||
});
|
||||
}
|
||||
|
||||
if ($request->is('api/*')) {
|
||||
$query->select(['nickname', 'uid', 'level_id']);
|
||||
}
|
||||
|
||||
if ($query->exists()) {
|
||||
return $query->first();
|
||||
} else {
|
||||
throw new \Exception("会员不存在!", 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 创建用户
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function create($request){
|
||||
$request->validate([
|
||||
'username' => 'required|unique:member',
|
||||
'nickname' => 'required',
|
||||
'mobile' => 'required|unique:member',
|
||||
'password' => 'required|min:6|max:16'
|
||||
], [
|
||||
'username.required' => '用户名不能为空!',
|
||||
'username.unique' => '用户名已存在!',
|
||||
'nickname.required' => '昵称不能为空!',
|
||||
'mobile.required' => '手机号不能为空!',
|
||||
'mobile.unique' => '手机号已存在!',
|
||||
'password.required' => '密码不能为空!',
|
||||
'password.min' => '密码长度不能小于6位!',
|
||||
'password.max' => '密码长度不能大于16位!'
|
||||
]);
|
||||
|
||||
$member = new Member;
|
||||
|
||||
if ($request->filled('username')) {
|
||||
$member->username = $request->input('username');
|
||||
}
|
||||
if ($request->filled('nickname')) {
|
||||
$member->nickname = $request->input('nickname');
|
||||
}
|
||||
if ($request->filled('avatar')) {
|
||||
$member->avatar = $request->input('avatar');
|
||||
}
|
||||
if ($request->filled('email')) {
|
||||
$member->email = $request->input('email');
|
||||
}
|
||||
if ($request->filled('gender')) {
|
||||
$member->gender = $request->input('gender');
|
||||
}
|
||||
if ($request->filled('birthday')) {
|
||||
$member->birthday = $request->input('birthday');
|
||||
}
|
||||
if ($request->filled('date_type')) {
|
||||
$member->date_type = $request->input('date_type');
|
||||
}
|
||||
if ($request->filled('mobile')) {
|
||||
$member->mobile = $request->input('mobile');
|
||||
}
|
||||
if ($request->filled('level_expire_time')) {
|
||||
$member->level_expire_time = $request->input('level_expire_time');
|
||||
}
|
||||
if ($request->filled('password')) {
|
||||
$member->password = $request->input('password');
|
||||
}
|
||||
if ($request->filled('status')) {
|
||||
$member->status = $request->input('status');
|
||||
}
|
||||
$member->invite_uid = $request->input('invite_uid', '1890000001');
|
||||
$member->pm_uid = $request->input('pm_uid', '1890000001');
|
||||
$member->store_uid = $request->input('store_uid', '1890000001');
|
||||
$member->level_id = $request->input('level_id', '1');
|
||||
|
||||
$member->save();
|
||||
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* @title 更新用户
|
||||
*
|
||||
* @param [type] $request
|
||||
* @return void
|
||||
*/
|
||||
public function update($request){
|
||||
$request->validate([
|
||||
'username' => 'unique:member,username,'.$request->input('uid').',uid',
|
||||
'mobile' => 'unique:member,mobile,'.$request->input('uid').',uid',
|
||||
],[
|
||||
'username.unique' => '用户名已存在!',
|
||||
'mobile.unique' => '手机号已存在!',
|
||||
]);
|
||||
if ($request->filled('uid')) {
|
||||
$members = Member::where('uid', $request->input('uid'))->first();
|
||||
}
|
||||
if ($request->is('api/*') && auth('api')->user()) {
|
||||
$members = Member::where('uid', auth('api')->user()['uid'])->first();
|
||||
}
|
||||
|
||||
if ($request->filled('username')) {
|
||||
$members->username = $request->input('username');
|
||||
}
|
||||
if ($request->filled('nickname')) {
|
||||
$members->nickname = $request->input('nickname');
|
||||
}
|
||||
if ($request->filled('avatar')) {
|
||||
$members->avatar = $request->input('avatar');
|
||||
}
|
||||
if ($request->filled('email')) {
|
||||
$members->email = $request->input('email');
|
||||
}
|
||||
if ($request->filled('gender')) {
|
||||
$members->gender = $request->input('gender');
|
||||
}
|
||||
if ($request->filled('birthday')) {
|
||||
$members->birthday = $request->input('birthday');
|
||||
}
|
||||
if ($request->filled('date_type')) {
|
||||
$members->date_type = $request->input('date_type');
|
||||
}
|
||||
if ($request->filled('mobile')) {
|
||||
$members->mobile = $request->input('mobile');
|
||||
}
|
||||
if ($request->filled('password')) {
|
||||
$members->password = $request->input('password');
|
||||
}
|
||||
if ($request->filled('level_expire_time')) {
|
||||
$members->level_expire_time = $request->input('level_expire_time');
|
||||
}
|
||||
|
||||
$members->save();
|
||||
|
||||
MemberUpdate::dispatch($members);
|
||||
return $members;
|
||||
}
|
||||
|
||||
public function delete($request){
|
||||
if(!$request->filled('uid')){
|
||||
throw new \Exception("非法操作!", 1);
|
||||
}
|
||||
|
||||
if (is_array($request->input('uid'))) {
|
||||
// 批量删除
|
||||
$mebers = Member::whereIn('uid', $request->input('uid'))->get();
|
||||
if ($mebers->isEmpty()) {
|
||||
throw new \Exception("会员不存在!", 1);
|
||||
}
|
||||
$member = Member::destroy(request()->input('uid'));
|
||||
|
||||
return $member;
|
||||
}else{
|
||||
// 单个删除
|
||||
try {
|
||||
$mebers = Member::findOrFail($request->input('uid'));
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception("会员不存在!", 1);
|
||||
}
|
||||
$mebers->delete();
|
||||
return $mebers;
|
||||
}
|
||||
}
|
||||
|
||||
public function updatePasswd($request){
|
||||
$request->validate([
|
||||
'password' => 'required|min:6|max:16'
|
||||
], [
|
||||
'password.required' => '密码不能为空!',
|
||||
'password.min' => '密码长度不能小于6位!',
|
||||
'password.max' => '密码长度不能大于16位!'
|
||||
]);
|
||||
if ($request->is('api/*')) {
|
||||
$request->validate([
|
||||
'old_password' => 'required',
|
||||
'password' => 'confirmed'
|
||||
], [
|
||||
'old_password.required' => '旧密码不能为空!',
|
||||
'password.confirmed' => '两次密码不一致!'
|
||||
]);
|
||||
}
|
||||
if(!$request->filled('uid')){
|
||||
throw new \Exception("非法操作!", 1);
|
||||
}
|
||||
|
||||
try {
|
||||
$mebers = Member::findOrFail($request->input('uid'));
|
||||
} catch (\Throwable $th) {
|
||||
throw new \Exception("会员不存在!", 1);
|
||||
}
|
||||
|
||||
if(!$request->filled('password')){
|
||||
throw new \Exception("密码不能为空!", 1);
|
||||
}
|
||||
|
||||
$mebers->password = $request->input('password');
|
||||
|
||||
$mebers->save();
|
||||
return $mebers;
|
||||
}
|
||||
|
||||
public function import($request){
|
||||
$file = $request->file('file');
|
||||
|
||||
if ($file->isValid()) {
|
||||
$ext = $file->extension();
|
||||
|
||||
if (in_array($ext, ['csv', 'xlsx']) === false) {
|
||||
throw new \Exception("请上传csv文件");
|
||||
}
|
||||
|
||||
$path = $file->store('import/'.date('Ymd'), 'public');
|
||||
|
||||
$tasks = app()->tasks->create([
|
||||
'title' => '会员数据导入',
|
||||
'type' => 'import',
|
||||
'file' => $path,
|
||||
'params' => $request->except('file'),
|
||||
'status' => 0,
|
||||
]);
|
||||
if ($tasks->id) {
|
||||
\Modules\Member\Jobs\MemberImport::dispatch($path, $tasks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request){
|
||||
$tasks = app()->tasks->create([
|
||||
'title' => '会员数据导出',
|
||||
'type' => 'export',
|
||||
'file' => 'export/' . $request->input('fileName', time().'xlsx'),
|
||||
'status' => 0,
|
||||
]);
|
||||
|
||||
if ($tasks->id) {
|
||||
\Modules\Member\Jobs\MemberExport::dispatch($request->all(), $tasks);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user