微信绑定手机号
parent
f93753fd7d
commit
210413542b
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Actions\Show;
|
||||||
|
|
||||||
|
use App\Admin\Forms\UserEditPhone as UserEditPhoneForm;
|
||||||
|
use Dcat\Admin\Show\AbstractTool;
|
||||||
|
use Dcat\Admin\Widgets\Modal;
|
||||||
|
|
||||||
|
class UserEditVip extends AbstractTool
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected $title = '<i class="feather icon-box"></i> 设置代理';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮样式定义,默认 btn btn-white waves-effect
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $style = 'btn-warning';
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$form = UserEditPhoneForm::make()->payload(['id'=>$this->getKey()]);
|
||||||
|
return Modal::make()
|
||||||
|
->lg()
|
||||||
|
->title($this->title)
|
||||||
|
->body($form)
|
||||||
|
->button("<a href=\"javascript:void(0)\" class=\"btn btn-sm {$this->style}\">{$this->title}</a> ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,6 @@ use App\Admin\Forms\Settings\Ios;
|
||||||
use App\Admin\Forms\Settings\Kuaidi100;
|
use App\Admin\Forms\Settings\Kuaidi100;
|
||||||
use App\Admin\Forms\Settings\Unipush;
|
use App\Admin\Forms\Settings\Unipush;
|
||||||
use App\Admin\Forms\Settings\Withdraw;
|
use App\Admin\Forms\Settings\Withdraw;
|
||||||
use App\Admin\Forms\Settings\Distribution;
|
|
||||||
use App\Admin\Repositories\Setting;
|
use App\Admin\Repositories\Setting;
|
||||||
use Dcat\Admin\Admin;
|
use Dcat\Admin\Admin;
|
||||||
use Dcat\Admin\Form;
|
use Dcat\Admin\Form;
|
||||||
|
|
@ -115,7 +114,6 @@ class SettingController extends AdminController
|
||||||
'android' => ['name' => 'Android配置', 'form' => new Android(), 'route' => admin_route('settings.index', ['type'=>'android'])],
|
'android' => ['name' => 'Android配置', 'form' => new Android(), 'route' => admin_route('settings.index', ['type'=>'android'])],
|
||||||
'kuaidi100' => ['name' => '快递100配置', 'form' => new Kuaidi100(), 'route' => admin_route('settings.index', ['type'=>'kuaidi100'])],
|
'kuaidi100' => ['name' => '快递100配置', 'form' => new Kuaidi100(), 'route' => admin_route('settings.index', ['type'=>'kuaidi100'])],
|
||||||
'unipush' => ['name' => 'Uni-push配置', 'form' => new Unipush(), 'route' => admin_route('settings.index', ['type'=>'unipush'])],
|
'unipush' => ['name' => 'Uni-push配置', 'form' => new Unipush(), 'route' => admin_route('settings.index', ['type'=>'unipush'])],
|
||||||
'distribution' => ['name' => '分销配置', 'form' => new Distribution(), 'route' => admin_route('settings.index', ['type'=>'distribution'])],
|
|
||||||
'custom' => ['name' => '自定义配置', 'form' => new Custom(), 'route' => admin_route('settings.index', ['type'=>'custom'])],
|
'custom' => ['name' => '自定义配置', 'form' => new Custom(), 'route' => admin_route('settings.index', ['type'=>'custom'])],
|
||||||
];
|
];
|
||||||
if (isset($tabs[$type])) {
|
if (isset($tabs[$type])) {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ use App\Admin\Actions\Grid\UserResetAccountPassword;
|
||||||
use App\Admin\Actions\Grid\UserResetPassword;
|
use App\Admin\Actions\Grid\UserResetPassword;
|
||||||
use App\Admin\Actions\Show\UserEditBank;
|
use App\Admin\Actions\Show\UserEditBank;
|
||||||
use App\Admin\Actions\Show\UserEditPhone;
|
use App\Admin\Actions\Show\UserEditPhone;
|
||||||
|
use App\Admin\Actions\Show\UserEditVip;
|
||||||
use App\Admin\Renderable\Grid\Filter\PriceBetween;
|
use App\Admin\Renderable\Grid\Filter\PriceBetween;
|
||||||
use App\Admin\Renderable\UserBalanceLogSimpleTable;
|
use App\Admin\Renderable\UserBalanceLogSimpleTable;
|
||||||
use App\Admin\Renderable\UserFansSimpleTable;
|
use App\Admin\Renderable\UserFansSimpleTable;
|
||||||
|
|
@ -160,15 +161,15 @@ class UserController extends AdminController
|
||||||
|
|
||||||
$show->field('user_info.growth_value');
|
$show->field('user_info.growth_value');
|
||||||
|
|
||||||
$show->field('wallet.balance')->as(function ($value) {
|
// $show->field('wallet.balance')->as(function ($value) {
|
||||||
$value = bcdiv($value, 100, 2);
|
// $value = bcdiv($value, 100, 2);
|
||||||
return $value;
|
// return $value;
|
||||||
})->prepend('¥');
|
// })->prepend('¥');
|
||||||
$show->field('balance.balance')->as(function ($value) {
|
// $show->field('balance.balance')->as(function ($value) {
|
||||||
$value = bcdiv($value, 100, 2);
|
// $value = bcdiv($value, 100, 2);
|
||||||
return $value;
|
// return $value;
|
||||||
})->prepend('¥');
|
// })->prepend('¥');
|
||||||
$show->field('user_info.points');
|
// $show->field('user_info.points');
|
||||||
});
|
});
|
||||||
$show->row(function (Show\Row $show) {
|
$show->row(function (Show\Row $show) {
|
||||||
$show->width(6)->field('last_login_ip');
|
$show->width(6)->field('last_login_ip');
|
||||||
|
|
@ -189,17 +190,21 @@ class UserController extends AdminController
|
||||||
if (Admin::user()->can('dcat.admin.users.edit_bank')) {
|
if (Admin::user()->can('dcat.admin.users.edit_bank')) {
|
||||||
$tools->append(new UserEditBank());
|
$tools->append(new UserEditBank());
|
||||||
}
|
}
|
||||||
|
// 设置代理等级
|
||||||
|
if (Admin::user()->can('dcat.admin.users.edit_vip')) {
|
||||||
|
$tools->append(new UserEditVip());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
$row->column(7, function ($column) use ($id) {
|
$row->column(7, function ($column) use ($id) {
|
||||||
$tab = Tab::make();
|
$tab = Tab::make();
|
||||||
// 可提明细
|
// 可提明细
|
||||||
$tab->add('可提明细', UserWalletLogSimpleTable::make(['id'=>$id]));
|
// $tab->add('可提明细', UserWalletLogSimpleTable::make(['id'=>$id]));
|
||||||
// 余额明细
|
// 余额明细
|
||||||
$tab->add('余额明细', UserBalanceLogSimpleTable::make(['id'=>$id]));
|
// $tab->add('余额明细', UserBalanceLogSimpleTable::make(['id'=>$id]));
|
||||||
// 粉丝列表
|
// 粉丝列表
|
||||||
$tab->add('粉丝列表', UserFansSimpleTable::make(['id'=>$id]));
|
// $tab->add('粉丝列表', UserFansSimpleTable::make(['id'=>$id]));
|
||||||
// 上级列表
|
// 上级列表
|
||||||
$tab->add('上级列表', UserInviterSimpleTable::make(['id'=>$id]));
|
$tab->add('上级列表', UserInviterSimpleTable::make(['id'=>$id]));
|
||||||
$column->row(Box::make('用户记录', $tab));
|
$column->row(Box::make('用户记录', $tab));
|
||||||
|
|
|
||||||
|
|
@ -21,24 +21,27 @@ class VipController extends AdminController
|
||||||
protected function grid()
|
protected function grid()
|
||||||
{
|
{
|
||||||
return Grid::make(new Vip(), function (Grid $grid) {
|
return Grid::make(new Vip(), function (Grid $grid) {
|
||||||
$grid->column('id')->sortable();
|
$grid->column('sort');
|
||||||
$grid->column('name');
|
$grid->column('name');
|
||||||
$grid->column('growth_value')->sortable();
|
$grid->column('ratio')->display(function ($value) {
|
||||||
|
return $value . '%';
|
||||||
|
});
|
||||||
|
$grid->column('growth_value');
|
||||||
|
|
||||||
$grid->model()->orderBy('growth_value', 'asc');
|
$grid->model()->orderBy('sort', 'asc');
|
||||||
|
|
||||||
/** 操作 **/
|
/** 操作 **/
|
||||||
//新增
|
//新增
|
||||||
if (Admin::user()->can('dcat.admin.vips.create')) {
|
// if (Admin::user()->can('dcat.admin.vips.create')) {
|
||||||
$grid->disableCreateButton(false);
|
// $grid->disableCreateButton(false);
|
||||||
$grid->enableDialogCreate();
|
// $grid->enableDialogCreate();
|
||||||
}
|
// }
|
||||||
//修改
|
//修改
|
||||||
$grid->showQuickEditButton(Admin::user()->can('dcat.admin.vips.edit'));
|
$grid->showQuickEditButton(Admin::user()->can('dcat.admin.vips.edit'));
|
||||||
//删除以及自定义操作
|
//删除以及自定义操作
|
||||||
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
// $grid->actions(function (Grid\Displayers\Actions $actions) {
|
||||||
$actions->disableDelete(Admin::user()->cannot('dcat.admin.vips.destroy'));
|
// $actions->disableDelete(Admin::user()->cannot('dcat.admin.vips.destroy'));
|
||||||
});
|
// });
|
||||||
|
|
||||||
$grid->filter(function (Grid\Filter $filter) {
|
$grid->filter(function (Grid\Filter $filter) {
|
||||||
$filter->panel(false);
|
$filter->panel(false);
|
||||||
|
|
@ -59,6 +62,9 @@ class VipController extends AdminController
|
||||||
return Show::make($id, new Vip(), function (Show $show) {
|
return Show::make($id, new Vip(), function (Show $show) {
|
||||||
$show->field('id');
|
$show->field('id');
|
||||||
$show->field('name');
|
$show->field('name');
|
||||||
|
$show->column('ratio')->as(function ($value) {
|
||||||
|
return $value . '%';
|
||||||
|
});
|
||||||
$show->field('growth_value');
|
$show->field('growth_value');
|
||||||
$show->field('created_at');
|
$show->field('created_at');
|
||||||
$show->field('updated_at');
|
$show->field('updated_at');
|
||||||
|
|
@ -75,6 +81,7 @@ class VipController extends AdminController
|
||||||
return Form::make(new Vip(), function (Form $form) {
|
return Form::make(new Vip(), function (Form $form) {
|
||||||
$form->display('id');
|
$form->display('id');
|
||||||
$form->text('name')->required();
|
$form->text('name')->required();
|
||||||
|
$form->number('ratio')->min(0)->max(100)->help('例如: 60%, 填写 60 即可');
|
||||||
$form->number('growth_value')->min(0)->default(0);
|
$form->number('growth_value')->min(0)->default(0);
|
||||||
|
|
||||||
$form->display('created_at');
|
$form->display('created_at');
|
||||||
|
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Admin\Forms\Settings;
|
|
||||||
|
|
||||||
use App\Models\Setting;
|
|
||||||
use App\Services\{SettingService, DistributeService};
|
|
||||||
use Dcat\Admin\Widgets\Form;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分销设置
|
|
||||||
*/
|
|
||||||
class Distribution extends Form
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the form request.
|
|
||||||
*
|
|
||||||
* @param array $input
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function handle(array $input)
|
|
||||||
{
|
|
||||||
Setting::where('key', 'distribution')->updateOrCreate([
|
|
||||||
'key' => 'distribution',
|
|
||||||
], ['value' => $input]);
|
|
||||||
|
|
||||||
//清配置缓存
|
|
||||||
app(SettingService::class)->cleanCache('distribution');
|
|
||||||
|
|
||||||
return $this
|
|
||||||
->response()
|
|
||||||
->success('配置更新成功!')
|
|
||||||
->refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a form here.
|
|
||||||
*/
|
|
||||||
public function form()
|
|
||||||
{
|
|
||||||
$values = Setting::where('key', 'distribution')->value('value');
|
|
||||||
$levels = DistributeService::$levels;
|
|
||||||
$favoite = $levels['favoite'];
|
|
||||||
$agent = $levels['agent'];
|
|
||||||
$this->fieldset('爱好者-返利', function (Form $form) use ($favoite) {
|
|
||||||
foreach($favoite as $item) {
|
|
||||||
$form->number('favoite-profit-' . $item['level'], $item['name'])->min(0)->max(100)->help('例如: 40, 即表示: 40%');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$this->fieldset('爱好者-升级', function (Form $form) use ($favoite) {
|
|
||||||
foreach($favoite as $item) {
|
|
||||||
$form->number('favoite-level-' . $item['level'], $item['name'])->min(0)->help('例如: 1000');
|
|
||||||
}
|
|
||||||
})->collapsed();
|
|
||||||
$this->fieldset('代理-返利', function (Form $form) use ($agent) {
|
|
||||||
foreach($agent as $item) {
|
|
||||||
$form->number('agent-profit-' . $item['level'], $item['name'])->min(0)->max(100)->help('例如: 40, 即表示: 40%');
|
|
||||||
}
|
|
||||||
})->collapsed();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function default()
|
|
||||||
{
|
|
||||||
$values = Setting::where('key', 'distribution')->value('value');
|
|
||||||
return $values;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Forms;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Dcat\Admin\Contracts\LazyRenderable;
|
||||||
|
use Dcat\Admin\Traits\LazyWidget;
|
||||||
|
use Dcat\Admin\Widgets\Form;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class UserEditVip extends Form implements LazyRenderable
|
||||||
|
{
|
||||||
|
use LazyWidget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Model|Authenticatable|HasPermissions|null $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function authorize($user): bool
|
||||||
|
{
|
||||||
|
return $user->can('dcat.admin.users.edit_vip');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the form request.
|
||||||
|
*
|
||||||
|
* @param array $input
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle(array $input)
|
||||||
|
{
|
||||||
|
$id = $this->payload['id'] ?? 0;
|
||||||
|
$user = User::findOrFail($id);
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
$user->update($input);
|
||||||
|
DB::commit();
|
||||||
|
} catch (Throwable $th) {
|
||||||
|
DB::rollBack();
|
||||||
|
report($th);
|
||||||
|
return $this->response()->error('操作失败:'.$th->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->response()->success(__('admin.update_succeeded'))->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build a form here.
|
||||||
|
*/
|
||||||
|
public function form()
|
||||||
|
{
|
||||||
|
$id = $this->payload['id'] ?? 0;
|
||||||
|
$user = User::findOrFail($id);
|
||||||
|
|
||||||
|
$this->text('old_phone', '旧手机号')->value($user->phone)->disable();
|
||||||
|
|
||||||
|
$this->mobile('phone')->rules('unique:users,phone', ['unique'=>'该手机号已存在'])->required();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -100,23 +100,26 @@ class MiniprogramController extends Controller
|
||||||
// 检测手机号是否已经注册
|
// 检测手机号是否已经注册
|
||||||
$old_user = User::where('phone', $phone)->where('status', User::STATUS_ACTIVE)->where('id', '!=', $user->id)->first();
|
$old_user = User::where('phone', $phone)->where('status', User::STATUS_ACTIVE)->where('id', '!=', $user->id)->first();
|
||||||
if ($old_user) {
|
if ($old_user) {
|
||||||
// 禁用老用户
|
// 禁用新用户
|
||||||
$old_user->update([
|
$user->update([
|
||||||
'phone' => '',
|
'phone' => '',
|
||||||
'status' => User::STATUS_DISABLED,
|
'status' => User::STATUS_DISABLED,
|
||||||
'status_remark' => '手机号重复: ' . $phone
|
'status_remark' => '手机号重复: ' . $phone
|
||||||
]);
|
]);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
if ($user->phone !== $phone) {
|
|
||||||
$user->update([
|
$user->update([
|
||||||
'phone' => $phone,
|
'phone' => $phone,
|
||||||
'phone_verified_at' => now(),
|
'phone_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$token = $old_user->createToken(SocialiteType::WechatMiniProgram->value);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
return response()->noContent();
|
|
||||||
|
return response()->json([
|
||||||
|
'token' => $token->plainTextToken
|
||||||
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,19 +9,6 @@ use App\Models\{User, Order, SalesValueLog};
|
||||||
*/
|
*/
|
||||||
class DistributeService
|
class DistributeService
|
||||||
{
|
{
|
||||||
public static $levels = [
|
|
||||||
'favoite' => [
|
|
||||||
['name' => '金', 'level' => 'v3'],
|
|
||||||
['name' => '银', 'level' => 'v2'],
|
|
||||||
['name' => '铜', 'level' => 'v1'],
|
|
||||||
],
|
|
||||||
'agent' => [
|
|
||||||
['name' => '省', 'level' => 'v3'],
|
|
||||||
['name' => '市', 'level' => 'v2'],
|
|
||||||
['name' => '区', 'level' => 'v1'],
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户下单后, 更新成长值, 添加返现记录
|
* 用户下单后, 更新成长值, 添加返现记录
|
||||||
*
|
*
|
||||||
|
|
@ -54,14 +41,5 @@ class DistributeService
|
||||||
if ($parents->count() === 0) {
|
if ($parents->count() === 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$setting = new SettingService();
|
|
||||||
$conf = $setting->get('distribution');
|
|
||||||
foreach($parents as $item) {
|
|
||||||
$slug = explode('-', $item->userInfo->role);
|
|
||||||
$role = $slug[0];
|
|
||||||
$level = $slug[1];
|
|
||||||
$ratio = data_get($conf, $role . '-profit-' . $level);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ class AdminPermissionSeeder extends Seeder
|
||||||
'reset_account_password'=>['name' =>'修改安全密码'],
|
'reset_account_password'=>['name' =>'修改安全密码'],
|
||||||
'edit_phone'=>['name' =>'修改手机号'],
|
'edit_phone'=>['name' =>'修改手机号'],
|
||||||
'edit_bank'=>['name'=>'修改银行卡'],
|
'edit_bank'=>['name'=>'修改银行卡'],
|
||||||
|
'edit_vip'=>['name'=>'设置代理'],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'article_categories' =>[
|
'article_categories' =>[
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ class DatabaseSeeder extends Seeder
|
||||||
$this->call([
|
$this->call([
|
||||||
AdminSeeder::class,
|
AdminSeeder::class,
|
||||||
AppSettingSeeder::class,
|
AppSettingSeeder::class,
|
||||||
|
VipSeeder::class,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (! App::isProduction()) {
|
if (! App::isProduction()) {
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,15 @@ class VipSeeder extends Seeder
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
|
$time = now();
|
||||||
$list = [
|
$list = [
|
||||||
['name' => '省级代理', 'slug' => 'agent', 'sort' => 1]
|
['name' => '省级代理', 'slug' => 'agent', 'growth_value' => 90000, 'ratio' => 60, 'sort' => 1, 'created_at' => $time, 'updated_at' => $time],
|
||||||
|
['name' => '市级代理', 'slug' => 'agent', 'growth_value' => 80000, 'ratio' => 50, 'sort' => 2, 'created_at' => $time, 'updated_at' => $time],
|
||||||
|
['name' => '区级代理', 'slug' => 'agent', 'growth_value' => 70000, 'ratio' => 40, 'sort' => 3, 'created_at' => $time, 'updated_at' => $time],
|
||||||
|
['name' => '金级爱好者', 'slug' => 'favoite', 'growth_value' => 50000, 'ratio' => 30, 'sort' => 4, 'created_at' => $time, 'updated_at' => $time],
|
||||||
|
['name' => '银级爱好者', 'slug' => 'favoite', 'growth_value' => 50000, 'ratio' => 20, 'sort' => 5, 'created_at' => $time, 'updated_at' => $time],
|
||||||
|
['name' => '铜级爱好者', 'slug' => 'favoite', 'growth_value' => 5000, 'ratio' => 10, 'sort' => 6, 'created_at' => $time, 'updated_at' => $time],
|
||||||
];
|
];
|
||||||
|
Vip::insert($list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ return [
|
||||||
'fields' => [
|
'fields' => [
|
||||||
'name' => '等级名称',
|
'name' => '等级名称',
|
||||||
'growth_value' => '等级成长值',
|
'growth_value' => '等级成长值',
|
||||||
|
'sort' => '排序',
|
||||||
|
'ratio' => '比例'
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
'deny' => '删除失败',
|
'deny' => '删除失败',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue