pay
parent
1686325d66
commit
0e395eb986
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
namespace App\Admin\Actions\Show;
|
||||
|
||||
use App\Admin\Forms\UserEditVip as UserEditVipForm;
|
||||
use App\Admin\Forms\UserEditAgent as UserEditAgentForm;
|
||||
use Dcat\Admin\Show\AbstractTool;
|
||||
use Dcat\Admin\Widgets\Modal;
|
||||
|
||||
class UserEditVip extends AbstractTool
|
||||
class UserEditAgent extends AbstractTool
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
|
|
@ -22,7 +22,7 @@ class UserEditVip extends AbstractTool
|
|||
|
||||
public function render()
|
||||
{
|
||||
$form = UserEditVipForm::make()->payload(['id'=>$this->getKey()]);
|
||||
$form = UserEditAgentForm::make()->payload(['id'=>$this->getKey()]);
|
||||
return Modal::make()
|
||||
->lg()
|
||||
->title($this->title)
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers;
|
||||
|
||||
use App\Exceptions\BizException;
|
||||
use App\Models\Agent;
|
||||
use Dcat\Admin\Admin;
|
||||
use Dcat\Admin\Form;
|
||||
use Dcat\Admin\Grid;
|
||||
use Dcat\Admin\Http\Controllers\AdminController;
|
||||
use Dcat\Admin\Show;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class AgentController extends AdminController
|
||||
{
|
||||
/**
|
||||
* Make a grid builder.
|
||||
*
|
||||
* @return Grid
|
||||
*/
|
||||
protected function grid()
|
||||
{
|
||||
return Grid::make(new Agent(), function (Grid $grid) {
|
||||
$grid->column('sort');
|
||||
$grid->column('name');
|
||||
$grid->column('ratio')->display(function ($value) {
|
||||
return $value . '%';
|
||||
});
|
||||
$grid->column('growth_value');
|
||||
|
||||
$grid->model()->orderBy('sort', 'asc');
|
||||
|
||||
/** 操作 **/
|
||||
//新增
|
||||
if (Admin::user()->can('dcat.admin.vips.create')) {
|
||||
$grid->disableCreateButton(false);
|
||||
$grid->enableDialogCreate();
|
||||
}
|
||||
//修改
|
||||
$grid->showQuickEditButton(Admin::user()->can('dcat.admin.vips.edit'));
|
||||
//删除以及自定义操作
|
||||
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
||||
$actions->disableDelete(Admin::user()->cannot('dcat.admin.vips.destroy'));
|
||||
});
|
||||
|
||||
$grid->filter(function (Grid\Filter $filter) {
|
||||
$filter->panel(false);
|
||||
$filter->like('name')->width(3);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a show builder.
|
||||
*
|
||||
* @param mixed $id
|
||||
*
|
||||
* @return Show
|
||||
*/
|
||||
protected function detail($id)
|
||||
{
|
||||
return Show::make($id, new Agent(), function (Show $show) {
|
||||
$show->field('id');
|
||||
$show->field('name');
|
||||
$show->field('sort');
|
||||
$show->filed('slug');
|
||||
$show->column('ratio')->as(function ($value) {
|
||||
return $value . '%';
|
||||
});
|
||||
$show->field('growth_value');
|
||||
$show->field('created_at');
|
||||
$show->field('updated_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a form builder.
|
||||
*
|
||||
* @return Form
|
||||
*/
|
||||
protected function form()
|
||||
{
|
||||
return Form::make(new Agent(), function (Form $form) {
|
||||
$form->display('id');
|
||||
$form->number('sort')->min(1)->required()->help('不可重复')->rules(function (Form $form) {
|
||||
$rule = Rule::unique('vips');
|
||||
if ($id = $form->model()->id) {
|
||||
$rule->ignore($id);
|
||||
}
|
||||
return $rule;
|
||||
});
|
||||
$form->text('name')->required();
|
||||
$form->radio('slug')->options(Agent::$typeMap)->default(Agent::TYPE_FAVOITE);
|
||||
$form->number('ratio')->min(0)->max(100)->help('例如: 60%, 填写 60 即可');
|
||||
$form->number('growth_value')->min(0)->default(0)->help('升级到此等级所需的成长值');
|
||||
});
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$vip = Agent::findOrFail($id);
|
||||
if ($vip->hasUser()) {
|
||||
throw new BizException(__('vip.options.deny_message'));
|
||||
}
|
||||
return parent::destroy($id);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@ use App\Admin\Actions\Grid\UserResetAccountPassword;
|
|||
use App\Admin\Actions\Grid\UserResetPassword;
|
||||
use App\Admin\Actions\Show\UserEditBank;
|
||||
use App\Admin\Actions\Show\UserEditPhone;
|
||||
use App\Admin\Actions\Show\UserEditVip;
|
||||
use App\Admin\Actions\Show\UserEditAgent;
|
||||
use App\Admin\Renderable\Grid\Filter\PriceBetween;
|
||||
use App\Admin\Renderable\UserBalanceLogSimpleTable;
|
||||
use App\Admin\Renderable\UserFansSimpleTable;
|
||||
|
|
@ -42,7 +42,7 @@ class UserController extends AdminController
|
|||
*/
|
||||
protected function grid()
|
||||
{
|
||||
$builder = User::with(['userInfo', 'wallet', 'balance', 'userInfo.inviterInfo.user', 'userVip.vip']);
|
||||
$builder = User::with(['userInfo', 'wallet', 'balance', 'userInfo.inviterInfo.user', 'agent']);
|
||||
return Grid::make($builder, function (Grid $grid) {
|
||||
$grid->model()->whereNotNull('phone');
|
||||
$grid->column('id')->sortable()->if(function () {
|
||||
|
|
@ -62,7 +62,7 @@ class UserController extends AdminController
|
|||
$modal->title('成长值');
|
||||
return UserSalesValueLogSimpleTable::make(['id'=>$this->id]);
|
||||
})->setHeaderAttributes(['style' => 'color:#5b69bc']);
|
||||
$grid->column('userVip.vip.name');
|
||||
$grid->column('agent.name', '代理');
|
||||
// $grid->column('wallet.balance')->display(function ($value) {
|
||||
// $value = bcdiv($value, 100, 2);
|
||||
// if ($this->wallet?->is_frozen) {
|
||||
|
|
@ -154,8 +154,8 @@ class UserController extends AdminController
|
|||
$column->row(Show::make($id, $builder, function (Show $show) {
|
||||
$show->row(function (Show\Row $show) {
|
||||
$show->width(6)->field('id');
|
||||
$show->width(6)->field('vip', '代理')->as(function () {
|
||||
return $this->userVip ? $this->userVip->vip->name . '(' .$this->userVip->vip->ratio. '%)' : '';
|
||||
$show->width(6)->field('agent', '代理')->as(function () {
|
||||
return $this->agent ? $this->agent->name . '(' .$this->agent->ratio. '%)' : '';
|
||||
})->badge();
|
||||
$show->width(6)->field('phone');
|
||||
$show->field('user_info.inviter_info.user.phone');
|
||||
|
|
@ -199,8 +199,8 @@ class UserController extends AdminController
|
|||
// $tools->append(new UserEditBank());
|
||||
// }
|
||||
// 设置代理等级
|
||||
if (Admin::user()->can('dcat.admin.users.edit_vip')) {
|
||||
$tools->append(new UserEditVip());
|
||||
if (Admin::user()->can('dcat.admin.users.agent')) {
|
||||
$tools->append(new UserEditAgent());
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers;
|
||||
|
||||
use App\Models\UserVip;
|
||||
use Dcat\Admin\Form;
|
||||
use Dcat\Admin\Grid;
|
||||
use Dcat\Admin\Show;
|
||||
use Dcat\Admin\Http\Controllers\AdminController;
|
||||
|
||||
class UserVipController extends AdminController
|
||||
{
|
||||
/**
|
||||
* Make a grid builder.
|
||||
*
|
||||
* @return Grid
|
||||
*/
|
||||
protected function grid()
|
||||
{
|
||||
return Grid::make(UserVip::with(['user', 'vip']), function (Grid $grid) {
|
||||
$grid->column('user.phone');
|
||||
$grid->column('vip.name');
|
||||
$grid->column('times')->display(function ($v) {
|
||||
return data_get($v, 'text');
|
||||
});
|
||||
$grid->column('success_time');
|
||||
$grid->column('created_at');
|
||||
|
||||
$grid->disableViewButton(false);
|
||||
|
||||
$grid->filter(function (Grid\Filter $filter) {
|
||||
$filter->panel(false);
|
||||
$filter->like('name')->width(3);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a show builder.
|
||||
*
|
||||
* @param mixed $id
|
||||
*
|
||||
* @return Show
|
||||
*/
|
||||
protected function detail($id)
|
||||
{
|
||||
return Show::make($id, UserVip::with(['user', 'vip']), function (Show $show) {
|
||||
$show->field('id');
|
||||
$show->field('user_id');
|
||||
$show->field('vip_id');
|
||||
$show->field('times')->as(function ($v) {
|
||||
return data_get($v, 'text');
|
||||
});;
|
||||
$show->field('success_time');
|
||||
$show->field('created_at');
|
||||
$show->field('updated_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a form builder.
|
||||
*
|
||||
* @return Form
|
||||
*/
|
||||
protected function form()
|
||||
{
|
||||
return Form::make(new UserVip(), function (Form $form) {
|
||||
$form->display('id');
|
||||
$form->text('user_id');
|
||||
$form->text('vip_id');
|
||||
$form->text('times');
|
||||
$form->text('success_time');
|
||||
|
||||
$form->display('created_at');
|
||||
$form->display('updated_at');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -9,7 +9,6 @@ use Dcat\Admin\Form;
|
|||
use Dcat\Admin\Grid;
|
||||
use Dcat\Admin\Http\Controllers\AdminController;
|
||||
use Dcat\Admin\Show;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class VipController extends AdminController
|
||||
{
|
||||
|
|
@ -21,16 +20,16 @@ class VipController extends AdminController
|
|||
protected function grid()
|
||||
{
|
||||
return Grid::make(new Vip(), function (Grid $grid) {
|
||||
$grid->column('sort');
|
||||
|
||||
$grid->column('id');
|
||||
$grid->column('name');
|
||||
$grid->column('ratio')->display(function ($value) {
|
||||
return $value . '%';
|
||||
$grid->column('times')->display(function ($v) {
|
||||
return data_get($v, 'text');
|
||||
});
|
||||
$grid->column('growth_value');
|
||||
$grid->column('price');
|
||||
$grid->column('sort')->editable();
|
||||
$grid->column('status')->switch();
|
||||
|
||||
$grid->model()->orderBy('sort', 'asc');
|
||||
|
||||
/** 操作 **/
|
||||
//新增
|
||||
if (Admin::user()->can('dcat.admin.vips.create')) {
|
||||
$grid->disableCreateButton(false);
|
||||
|
|
@ -62,12 +61,12 @@ class VipController extends AdminController
|
|||
return Show::make($id, new Vip(), function (Show $show) {
|
||||
$show->field('id');
|
||||
$show->field('name');
|
||||
$show->field('sort');
|
||||
$show->filed('slug');
|
||||
$show->column('ratio')->as(function ($value) {
|
||||
return $value . '%';
|
||||
$show->field('times')->as(function ($v) {
|
||||
return data_get($v, 'text');
|
||||
});
|
||||
$show->field('growth_value');
|
||||
$show->filed('price');
|
||||
$show->filed('sort');
|
||||
$show->field('status');
|
||||
$show->field('created_at');
|
||||
$show->field('updated_at');
|
||||
});
|
||||
|
|
@ -82,17 +81,15 @@ class VipController extends AdminController
|
|||
{
|
||||
return Form::make(new Vip(), function (Form $form) {
|
||||
$form->display('id');
|
||||
$form->number('sort')->min(1)->required()->help('不可重复')->rules(function (Form $form) {
|
||||
$rule = Rule::unique('vips');
|
||||
if ($id = $form->model()->id) {
|
||||
$rule->ignore($id);
|
||||
}
|
||||
return $rule;
|
||||
});
|
||||
$form->text('name')->required();
|
||||
$form->radio('slug')->options(Vip::$typeMap)->default(Vip::TYPE_FAVOITE);
|
||||
$form->number('ratio')->min(0)->max(100)->help('例如: 60%, 填写 60 即可');
|
||||
$form->number('growth_value')->min(0)->default(0)->help('升级到此等级所需的成长值');
|
||||
$form->embeds('times', function ($form) {
|
||||
$form->number('num', '数量')->min(0)->required();
|
||||
$form->select('unit', '单位')->options(Vip::$timeMap)->required();
|
||||
$form->text('text', '描述')->required();
|
||||
});
|
||||
$form->number('price')->min(0);
|
||||
$form->number('sort')->min(0);
|
||||
$form->switch('status')->default(1);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
namespace App\Admin\Forms;
|
||||
|
||||
use App\Models\{User, Vip};
|
||||
use App\Models\{User, Agent};
|
||||
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
|
||||
class UserEditAgent extends Form implements LazyRenderable
|
||||
{
|
||||
use LazyWidget;
|
||||
|
||||
|
|
@ -34,24 +34,12 @@ class UserEditVip extends Form implements LazyRenderable
|
|||
{
|
||||
$id = $this->payload['id'] ?? 0;
|
||||
$user = User::findOrFail($id);
|
||||
$vip_id = $input['vip'];
|
||||
$agent_id = $input['agent'];
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
if ($user->userVip) {
|
||||
if ($vip_id) {
|
||||
$user->userVip->update([
|
||||
'vip_id' => $vip_id
|
||||
]);
|
||||
} else {
|
||||
$user->userVip->delete();
|
||||
}
|
||||
} else {
|
||||
if ($vip_id) {
|
||||
$user->userVip()->create([
|
||||
'vip_id' => $vip_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
$user->update([
|
||||
'agent_id' => $agent_id
|
||||
]);
|
||||
DB::commit();
|
||||
} catch (Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
|
@ -68,11 +56,10 @@ class UserEditVip extends Form implements LazyRenderable
|
|||
public function form()
|
||||
{
|
||||
$id = $this->payload['id'] ?? 0;
|
||||
$user = User::findOrFail($id);
|
||||
$vips = Vip::orderBy('sort')->get();
|
||||
$user = User::with(['agent'])->findOrFail($id);
|
||||
$agents = Agent::orderBy('sort')->get();
|
||||
|
||||
$this->text('user_vip', '当前代理')->value(data_get($user, 'userVip.vip.name', '无'))->disable();
|
||||
|
||||
$this->select('vip')->options($vips->pluck('name', 'id'));
|
||||
$this->text('user_agent', '当前代理')->value(data_get($user, 'agent.name', '无'))->disable();
|
||||
$this->select('agent')->options($agents->pluck('name', 'id'));
|
||||
}
|
||||
}
|
||||
|
|
@ -12,15 +12,15 @@ class UserFansSimpleTable extends LazyRenderable
|
|||
{
|
||||
$userId = $this->payload['id'] ?? 0;
|
||||
$builder = UserInfo::query();
|
||||
$builder->with(['user.userVip.vip'])->where('inviter_id', $userId);
|
||||
$builder->with(['user.agent'])->where('inviter_id', $userId);
|
||||
return Grid::make($builder, function (Grid $grid) {
|
||||
$grid->column('user_id', 'ID');
|
||||
$grid->column('user.phone', '手机号')->link(function ($value) {
|
||||
return admin_url('users/'.$this->user_id);
|
||||
});
|
||||
$grid->column('user.userVip.vip.name', '代理');
|
||||
$grid->column('user.userVip.vip.ratio', '提成比例')->display(function ($v) {
|
||||
return $v.'%';
|
||||
$grid->column('user.agent.name', '代理');
|
||||
$grid->column('user.agent.ratio', '提成比例')->display(function ($v) {
|
||||
return $v ? $v.'%' : '';
|
||||
});
|
||||
$grid->column('growth_value', '成长值');
|
||||
$grid->column('created_at', '注册时间');
|
||||
|
|
|
|||
|
|
@ -13,16 +13,16 @@ class UserInviterSimpleTable extends LazyRenderable
|
|||
$userId = $this->payload['id'] ?? 0;
|
||||
$userInfo = UserInfo::where('user_id', $userId)->first();
|
||||
$builder = UserInfo::query();
|
||||
$builder->with(['user.userVip.vip'])->whereIn('user_id', $userInfo->parent_ids)->latest('depth');
|
||||
$builder->with(['user.agent'])->whereIn('user_id', $userInfo->parent_ids)->latest('depth');
|
||||
return Grid::make($builder, function (Grid $grid) {
|
||||
$grid->column('user_id', 'ID');
|
||||
$grid->column('user.phone', '手机号')->link(function ($value) {
|
||||
return admin_url('users/'.$this->user_id);
|
||||
});
|
||||
|
||||
$grid->column('user.userVip.vip.name', '代理');
|
||||
$grid->column('user.userVip.vip.ratio', '提成比例')->display(function ($v) {
|
||||
return $v.'%';
|
||||
$grid->column('user.agent.name', '代理');
|
||||
$grid->column('user.agent.ratio', '提成比例')->display(function ($v) {
|
||||
return $v ? $v.'%' : '';
|
||||
});
|
||||
$grid->column('growth_value', '成长值');
|
||||
$grid->column('created_at', '注册时间');
|
||||
|
|
|
|||
|
|
@ -88,8 +88,6 @@ Route::group([
|
|||
|
||||
$router->resource('users', 'UserController');
|
||||
|
||||
$router->resource('vips', 'VipController');
|
||||
|
||||
$router->resource('messages', 'MessageController')->only([
|
||||
'index', 'create', 'store', 'edit', 'update', 'destroy',
|
||||
]);
|
||||
|
|
@ -182,4 +180,9 @@ Route::group([
|
|||
$router->resource('store', 'Store\StoreController');
|
||||
|
||||
$router->resource('profit', 'OrderProfitController');
|
||||
|
||||
$router->resource('agent', 'AgentController');
|
||||
|
||||
$router->resource('user-vip', 'UserVipController')->only(['index', 'show']);
|
||||
$router->resource('vip', 'VipController');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -38,9 +38,13 @@ class ModelFillable extends Command
|
|||
public function handle()
|
||||
{
|
||||
$table = $this->argument('table');
|
||||
$ignore = ['id', 'created_at', 'updated_at', 'deleted_at'];
|
||||
|
||||
if (Schema::hasTable($table)) {
|
||||
$list = Schema::getColumnListing($table);
|
||||
$list = array_filter($list, function ($value) use ($ignore) {
|
||||
return !in_array($value, $ignore);
|
||||
});
|
||||
$this->info("protected \$fillable = ['".implode('\', \'', $list)."'];");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||
|
||||
class Agent extends Model
|
||||
{
|
||||
use HasFactory, HasDateTimeFormatter;
|
||||
|
||||
const TYPE_FAVOITE = 'favoite';
|
||||
const TYPE_AGENT = 'agent';
|
||||
|
||||
protected $fillable = ['name', 'slug', 'growth_value', 'sort', 'ratio'];
|
||||
|
||||
public static $typeMap = [
|
||||
self::TYPE_FAVOITE => '爱好者',
|
||||
self::TYPE_AGENT => '代理'
|
||||
];
|
||||
|
||||
public function users()
|
||||
{
|
||||
return $this->hasMany(User::class, 'agent_id');
|
||||
}
|
||||
}
|
||||
|
|
@ -49,6 +49,8 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
'register_ip',
|
||||
'status',
|
||||
'status_remark',
|
||||
'agent_id',
|
||||
'vip_expired'
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
@ -58,6 +60,7 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
'phone_verified_at' => 'datetime',
|
||||
'email_verified_at' => 'datetime',
|
||||
'last_login_at' => 'datetime',
|
||||
'vip_expired' => 'datetime',
|
||||
'status' => 'int',
|
||||
];
|
||||
|
||||
|
|
@ -85,11 +88,11 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
}
|
||||
|
||||
/**
|
||||
* 用户的VIP信息
|
||||
* 用户的VIP购买记录
|
||||
*/
|
||||
public function userVip()
|
||||
public function vips()
|
||||
{
|
||||
return $this->hasOne(UserVip::class, 'user_id');
|
||||
return $this->hasMany(UserVip::class, 'user_id');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -152,7 +155,7 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
*/
|
||||
public function isVip(): bool
|
||||
{
|
||||
return $this->userInfo?->growth_value >= 650;
|
||||
return $this->vip_expired && $this->vip_expired->gt(now()) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -263,6 +266,11 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
return $this->hasMany(BargainOrder::class);
|
||||
}
|
||||
|
||||
public function agent()
|
||||
{
|
||||
return $this->belongsTo(Agent::class, 'agent_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我的粉丝总数
|
||||
*
|
||||
|
|
|
|||
|
|
@ -9,14 +9,20 @@ class UserVip extends Model
|
|||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['vip_id', 'growth_value'];
|
||||
protected $fillable = ['user_id', 'vip_id', 'name', 'price', 'times', 'gift', 'status', 'success_time'];
|
||||
|
||||
protected $attributes = [
|
||||
'growth_value' => 0
|
||||
];
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'user_id');
|
||||
}
|
||||
|
||||
public function vip()
|
||||
{
|
||||
return $this->belongsTo(Vip::class, 'vip_id');
|
||||
}
|
||||
|
||||
public function pay()
|
||||
{
|
||||
return $this->morphOne(PayLog::class, 'payable');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,21 +5,37 @@ namespace App\Models;
|
|||
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Casts\JsonArray;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class Vip extends Model
|
||||
{
|
||||
use HasFactory, HasDateTimeFormatter;
|
||||
|
||||
const TYPE_FAVOITE = 'favoite';
|
||||
const TYPE_AGENT = 'agent';
|
||||
const TIME_YEAR = 'year';
|
||||
const TIME_MONTH = 'month';
|
||||
const TIME_DAY = 'day';
|
||||
|
||||
protected $fillable = ['growth_value', 'name', 'ratio', 'slug', 'sort'];
|
||||
protected $fillable = ['name', 'times', 'sort', 'status', 'gift', 'price'];
|
||||
|
||||
public static $typeMap = [
|
||||
self::TYPE_FAVOITE => '爱好者',
|
||||
self::TYPE_AGENT => '代理'
|
||||
protected $casts = [
|
||||
'times' => 'json',
|
||||
'gift' => 'json'
|
||||
];
|
||||
|
||||
public static $timeMap = [
|
||||
self::TIME_YEAR => '年',
|
||||
self::TIME_MONTH => '月',
|
||||
self::TIME_DAY => '天',
|
||||
];
|
||||
|
||||
protected static function booted()
|
||||
{
|
||||
static::addGlobalScope('sort', function (Builder $builder) {
|
||||
$builder->orderBy('sort', 'asc');
|
||||
});
|
||||
}
|
||||
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany(User::class, 'user_vips', 'vip_id', 'user_id');
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\{User, Order, SalesValueLog, Vip, OrderProfit};
|
||||
use App\Models\{User, Order, SalesValueLog, Agent, OrderProfit};
|
||||
use App\Services\Payment\WxpayService;
|
||||
use App\Enums\SocialiteType;
|
||||
use App\Exceptions\BizException;
|
||||
|
|
@ -42,7 +42,7 @@ class DistributeService
|
|||
]);
|
||||
$user->userInfo()->increment('growth_value', $sales_value);
|
||||
// 自动升级代理
|
||||
$levels = Vip::orderBy('sort')->get();
|
||||
$levels = Agent::orderBy('sort')->get();
|
||||
$level_up = '';
|
||||
foreach($levels->reverse() as $item) {
|
||||
if ($user->userInfo->growth_value >= $item->growth_value) {
|
||||
|
|
@ -50,47 +50,47 @@ class DistributeService
|
|||
}
|
||||
}
|
||||
if ($level_up && $level_up->slug === 'favoite') {
|
||||
$user->userVip()->updateOrCreate([], [
|
||||
'vip_id' => $level_up->id,
|
||||
'growth_value' => $level_up->growth_value
|
||||
$user->update([
|
||||
'agent_id' => $level_up->id,
|
||||
]);
|
||||
}
|
||||
|
||||
// 上级返现
|
||||
// 上级返利
|
||||
$parent_ids = array_reverse($user->userInfo->parent_ids);
|
||||
$parents = User::with(['userInfo', 'userVip.vip'])->whereIn('id', $parent_ids)->get();
|
||||
$parents = User::with(['userInfo', 'agent'])->whereIn('id', $parent_ids)->get();
|
||||
// 过滤掉不是代理身份的用户
|
||||
// 过滤掉当前等级 大于 下一级的等级的用户
|
||||
$filtered = $parents->filter(function ($item, $key) use ($parents) {
|
||||
if (!$item->userVip) {
|
||||
if (!$item->agent) {
|
||||
return false;
|
||||
}
|
||||
$next = $parents->get($key + 1);
|
||||
if ($next && $next->userVip) {
|
||||
return $item->userVip->vip->sort < $next->userVip->vip->sort;
|
||||
if ($next && $next->agent) {
|
||||
return $item->agent->sort < $next->agent->sort;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
// 生成返现记录
|
||||
// 生成返利记录
|
||||
$profit_list = [];
|
||||
$money_sum = 0;
|
||||
foreach($filtered->reverse() as $item) {
|
||||
$vip = $item->userVip->vip??'';
|
||||
if (!$vip) {
|
||||
$agent = $item->agent??'';
|
||||
if (!$agent) {
|
||||
continue;
|
||||
}
|
||||
$money = floor($sales_value * $vip->ratio) / 100 - $money_sum;
|
||||
$money = floor($sales_value * $agent->ratio) / 100 - $money_sum;
|
||||
array_unshift($profit_list, [
|
||||
'from_user_id' => $user->id,
|
||||
'user_id' => $item->id,
|
||||
'role' => $vip->slug . '-' . $vip->sort,
|
||||
'role_name' => $vip->name,
|
||||
'ratio' => $vip->ratio,
|
||||
'role' => $agent->slug . '-' . $agent->sort,
|
||||
'role_name' => $agent->name,
|
||||
'ratio' => $agent->ratio,
|
||||
'growth_value' => $sales_value,
|
||||
'money' => $money
|
||||
]);
|
||||
$money_sum += $money;
|
||||
}
|
||||
// 订单保存返利金额
|
||||
$order->update([
|
||||
'profit' => $money_sum
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\{User, Vip, UserVip};
|
||||
use App\Exceptions\BizException;
|
||||
use App\Enums\{PayWay, SocialiteType};
|
||||
use App\Services\Payment\WxpayService;
|
||||
|
||||
class VipService
|
||||
{
|
||||
public function buy(User $user, Vip $vip)
|
||||
{
|
||||
if (!$vip->status) {
|
||||
throw new BizException('该会员卡已关闭');
|
||||
}
|
||||
$user_vip = $user->vips()->create([
|
||||
'vip_id' => $vip->id,
|
||||
'name' => $vip->name,
|
||||
'price' => $vip->price,
|
||||
'times' => $vip->times,
|
||||
'gift' => $vip->gift,
|
||||
]);
|
||||
|
||||
return $user_vip;
|
||||
}
|
||||
|
||||
public function pay(UserVip $userVip, $pay_way)
|
||||
{
|
||||
if ($userVip->status == 2) {
|
||||
throw new BizException('支付处理中,请勿重复操作');
|
||||
}
|
||||
$userVip->update([
|
||||
'status' => 2
|
||||
]);
|
||||
$pay_log = $user_vip->pay()->create([
|
||||
'pay_sn' => serial_number(),
|
||||
'pay_way' => $pay_way
|
||||
]);
|
||||
// 微信小程序支付
|
||||
if ($pay_log->pay_way === PayWay::WxpayMiniProgram->value) {
|
||||
$openid = $user->socialites()->where('socialite_type', SocialiteType::WechatMiniProgram)->value('socialite_id');
|
||||
if (!$openid) {
|
||||
throw new BizException('未找到用户的微信授权信息, 无法使用微信支付');
|
||||
}
|
||||
$params = [
|
||||
'body' => app_settings('app.app_name').'-会员-' . $userVip->name,
|
||||
'out_trade_no' => $pay_log->pay_sn,
|
||||
'total_fee' => $userVip->price,
|
||||
'trade_type' => 'JSAPI',
|
||||
'openid' => $openid,
|
||||
];
|
||||
}
|
||||
throw new BizException('未知的支付方式');
|
||||
}
|
||||
}
|
||||
|
|
@ -15,8 +15,24 @@ class CreateVipsTable extends Migration
|
|||
{
|
||||
Schema::create('vips', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name')->comment('等级名称');
|
||||
$table->unsignedBigInteger('growth_value')->default(0)->comment('等级成长值');
|
||||
$table->string('name')->comment('名称');
|
||||
$table->text('times')->comment('时效{num,unit,text}');
|
||||
$table->decimal('price', 12, 2)->default(0)->comment('价格');
|
||||
$table->unsignedInteger('sort')->default(1)->comment('排序(asc)');
|
||||
$table->tinyInteger('status')->default(1)->comment('状态');
|
||||
$table->text('gift')->nullable()->comment('赠品');
|
||||
$table->timestamps();
|
||||
});
|
||||
Schema::create('user_vips', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('user_id')->unique()->comment('用户ID');
|
||||
$table->unsignedBigInteger('vip_id')->comment('会员ID');
|
||||
$table->string('name')->comment('名称');
|
||||
$table->decimal('price', 12, 2)->default(0)->comment('价格');
|
||||
$table->text('times')->comment('时效{num,unit,text}');
|
||||
$table->text('gift')->nullable()->comment('赠品');
|
||||
$table->tinyInteger('status')->default(0)->comment('状态(0: 待支付, 1: 支付成功)');
|
||||
$table->timestamp('success_time')->nullable()->comment('购买时间');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
@ -29,5 +45,6 @@ class CreateVipsTable extends Migration
|
|||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('vips');
|
||||
Schema::dropIfExists('user_vips');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateUserVipsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('user_vips', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('user_id')->unique()->comment('用户ID');
|
||||
$table->unsignedBigInteger('vip_id')->comment('会员等级ID');
|
||||
$table->unsignedBigInteger('growth_value')->comment('当前会员成长值');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('user_vips');
|
||||
}
|
||||
}
|
||||
|
|
@ -22,6 +22,7 @@ class CreateOrdersTable extends Migration
|
|||
$table->unsignedBigInteger('reduced_amount')->default(0)->comment('减免金额');
|
||||
$table->unsignedBigInteger('shipping_fee')->default(0)->comment('运费');
|
||||
$table->unsignedBigInteger('products_total_amount')->comment('商品总额');
|
||||
$table->unsignedBigInteger('user_coupon_id')->nullable()->comment('用户优惠券ID');
|
||||
$table->unsignedBigInteger('total_amount')->comment('订单总额(支付金额)=商品总额+运费-优惠券金额-会员优惠-减免金额');
|
||||
$table->string('note')->nullable()->comment('客户备注');
|
||||
$table->string('remark')->nullable()->comment('订单备注');
|
||||
|
|
@ -35,9 +36,22 @@ class CreateOrdersTable extends Migration
|
|||
$table->string('consignee_zone')->nullable()->comment('收货人所在地区');
|
||||
$table->string('consignee_address')->nullable()->comment('收货人详细地址');
|
||||
$table->tinyInteger('status')->default(0)->comment('订单状态: 0 待付款, 1 已付款, 9 已完成, 10 已取消');
|
||||
$table->tinyInteger('shipping_state')->index()->default(0)->comment('发货状态');
|
||||
$table->timestamp('completed_at')->nullable()->comment('订单完成时间');
|
||||
$table->timestamps();
|
||||
|
||||
$table->unsignedDecimal('sales_value', 18, 2)->default(0.00)->comment('总销售值');
|
||||
$table->decimal('profit')->default(0)->comment('产生的提成');
|
||||
$table->unsignedBigInteger('store_id')->nullable()->comment('关联门店');
|
||||
$table->unsignedBigInteger('inviter_id')->nullable()->comment('关联员工');
|
||||
$table->string('source_type')->nullable()->comment('来源');
|
||||
$table->unsignedBigInteger('source_id')->nullable()->comment('来源');
|
||||
|
||||
$table->unsignedTinyInteger('is_change')->default(0)->comment('是否是换货后生成的新订单');
|
||||
$table->string('out_trade_no')->nullable()->comment('外部交易单号');
|
||||
$table->timestamp('auto_complete_at')->nullable()->comment('订单自动完成时间');
|
||||
$table->unsignedBigInteger('bargain_amount')->nullable()->default(0)->comment('砍价金额');
|
||||
|
||||
$table->unique('sn');
|
||||
$table->index(['user_id', 'status']);
|
||||
$table->index('status');
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddCouponIdToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('user_coupon_id')->nullable()->comment('用户优惠券ID');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['user_coupon_id']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddShippingStateToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->tinyInteger('shipping_state')->index()->default(0)->comment('发货状态');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['shipping_state']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddSalesValueToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->unsignedDecimal('sales_value', 18, 2)->default(0.00)->comment('总销售值');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['sales_value']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddIsChangeToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
//
|
||||
$table->unsignedTinyInteger('is_change')->default(0)->comment('是否是换货后生成的新订单');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
//
|
||||
$table->dropColumn('is_change');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTradeOutNoToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->string('out_trade_no')->nullable()->comment('外部交易单号');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['out_trade_no']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddAutoCompleteAtToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->timestamp('auto_complete_at')->nullable()->comment('订单自动完成时间');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['auto_complete_at']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddBargainToOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
//
|
||||
$table->unsignedBigInteger('bargain_amount')->nullable()->default(0)->comment('砍价金额');
|
||||
// $table->unsignedBigInteger('bargain_order_id')->nullable()->comment('关联砍价单ID');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
//
|
||||
$table->dropColumn(['bargain_amount']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,10 @@ class AddRoleToUserInfos extends Migration
|
|||
$table->tinyInteger('is_company')->default(0)->comment('是否员工');
|
||||
$table->string('invite_qrcode')->nullable()->comment('小程序邀请码');
|
||||
});
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('agent_id')->nullable()->comment('代理身份');
|
||||
$table->timestamp('vip_expired')->nullable()->comment('会员有效期');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -28,7 +32,10 @@ class AddRoleToUserInfos extends Migration
|
|||
public function down()
|
||||
{
|
||||
Schema::table('user_infos', function (Blueprint $table) {
|
||||
$table->dropColumn(['profit', 'is_company']);
|
||||
$table->dropColumn(['profit', 'is_company', 'invite_qrcode', 'agent_id']);
|
||||
});
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn(['agent_id']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddInvitorIdToOrders extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->decimal('profit')->default(0)->comment('产生的提成');
|
||||
$table->unsignedBigInteger('store_id')->nullable()->comment('关联门店');
|
||||
$table->unsignedBigInteger('inviter_id')->nullable()->comment('关联员工');
|
||||
$table->string('source_type')->nullable()->comment('来源');
|
||||
$table->unsignedBigInteger('source_id')->nullable()->comment('来源');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('orders', function (Blueprint $table) {
|
||||
$table->dropColumn(['store_id', 'inviter_id']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddSlugToVips extends Migration
|
||||
class CreateAgentsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
|
|
@ -13,10 +13,14 @@ class AddSlugToVips extends Migration
|
|||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('vips', function (Blueprint $table) {
|
||||
Schema::create('agents', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name')->comment('等级名称');
|
||||
$table->string('slug')->comment('标识');
|
||||
$table->unsignedBigInteger('growth_value')->default(0)->comment('等级成长值');
|
||||
$table->unsignedInteger('sort')->comment('等级');
|
||||
$table->integer('ratio')->comment('返佣比例, 10 => 10%');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -27,8 +31,6 @@ class AddSlugToVips extends Migration
|
|||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('vips', function (Blueprint $table) {
|
||||
$table->dropColumn(['slug', 'ratio', 'sort']);
|
||||
});
|
||||
Schema::dropIfExists('agents');
|
||||
}
|
||||
}
|
||||
|
|
@ -24,18 +24,27 @@ class AdminMenuSeeder extends Seeder
|
|||
'uri' => '/',
|
||||
],
|
||||
[
|
||||
'title' => '会员管理',
|
||||
'title' => '用户管理',
|
||||
'icon' => 'fa fa-users',
|
||||
'uri' => '',
|
||||
'children' => [
|
||||
[
|
||||
'title' => '会员列表',
|
||||
'title' => '用户列表',
|
||||
'icon' => '',
|
||||
'uri' => 'users',
|
||||
],
|
||||
['title' => '代理等级', 'icon' => '', 'uri' => 'vips']
|
||||
['title' => '代理等级', 'icon' => '', 'uri' => 'agent']
|
||||
],
|
||||
],
|
||||
[
|
||||
'title' => '会员卡管理',
|
||||
'icon' => 'fa fa-credit-card-alt',
|
||||
'uri' => '',
|
||||
'children' => [
|
||||
['title' => '会员卡', 'icon' => '', 'uri' => 'vip'],
|
||||
['title' => '购买记录', 'icon' => '', 'uri' => 'user-vip'],
|
||||
]
|
||||
],
|
||||
[
|
||||
'title' => '商城管理',
|
||||
'icon' => 'fa fa-shopping-bag',
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ class AdminPermissionSeeder extends Seeder
|
|||
'reset_account_password'=>['name' =>'修改安全密码'],
|
||||
'edit_phone'=>['name' =>'修改手机号'],
|
||||
'edit_bank'=>['name'=>'修改银行卡'],
|
||||
'edit_vip'=>['name'=>'设置代理'],
|
||||
'agent'=>['name'=>'设置代理'],
|
||||
],
|
||||
],
|
||||
'article_categories' =>[
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\Vip;
|
||||
use App\Models\Agent;
|
||||
|
||||
class VipSeeder extends Seeder
|
||||
class AgentSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
|
|
@ -23,6 +23,6 @@ class VipSeeder extends Seeder
|
|||
['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);
|
||||
Agent::insert($list);
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,8 @@ class DatabaseSeeder extends Seeder
|
|||
AdminMenuSeeder::class,
|
||||
AdminPermissionSeeder::class,
|
||||
AppSettingSeeder::class,
|
||||
VipSeeder::class,
|
||||
AgentSeeder::class,
|
||||
VipsTableSeeder::class,
|
||||
AdminUserSeeder::class,
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -58,13 +58,9 @@ class UserSeeder extends Seeder
|
|||
'email' => $email,
|
||||
'email_verified_at' => $time,
|
||||
'register_ip' => $faker->ipv4,
|
||||
'status' => 1
|
||||
'status' => 1,
|
||||
'agent_id' => ($vip && $vip <= 6) ? $vip : null
|
||||
], $inviter);
|
||||
if ($vip && $vip <= 6) {
|
||||
$user->userVip()->create([
|
||||
'vip_id' => $vip
|
||||
]);
|
||||
}
|
||||
return $user;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\{Vip, UserVip};
|
||||
|
||||
class VipsTableSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
Vip::truncate();
|
||||
UserVip::truncate();
|
||||
$time = now();
|
||||
$list = [
|
||||
['name' => '年卡', 'times' => json_encode(['text' => '1年', 'num' => 1, 'unit' => 'year']), 'price' => 100, 'created_at' => $time, 'updated_at' => $time],
|
||||
['name' => '季卡', 'times' => json_encode(['text' => '3月', 'num' => 3, 'unit' => 'month']), 'price' => 25, 'created_at' => $time, 'updated_at' => $time],
|
||||
['name' => '月卡', 'times' => json_encode(['text' => '1月', 'num' => 1, 'unit' => 'month']), 'price' => 10, 'created_at' => $time, 'updated_at' => $time],
|
||||
];
|
||||
Vip::insert($list);
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ namespace Dcat\Admin {
|
|||
|
||||
/**
|
||||
* @property Grid\Column|Collection width
|
||||
* @property Grid\Column|Collection filed
|
||||
* @property Grid\Column|Collection id
|
||||
* @property Grid\Column|Collection cover
|
||||
* @property Grid\Column|Collection content
|
||||
|
|
@ -69,6 +70,8 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection state
|
||||
* @property Grid\Column|Collection tracking_number
|
||||
* @property Grid\Column|Collection sales_value
|
||||
* @property Grid\Column|Collection growth_value
|
||||
* @property Grid\Column|Collection ratio
|
||||
* @property Grid\Column|Collection v
|
||||
* @property Grid\Column|Collection cate
|
||||
* @property Grid\Column|Collection is_force
|
||||
|
|
@ -150,6 +153,9 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection is_failed
|
||||
* @property Grid\Column|Collection checked_at
|
||||
* @property Grid\Column|Collection last_news
|
||||
* @property Grid\Column|Collection store_id
|
||||
* @property Grid\Column|Collection products
|
||||
* @property Grid\Column|Collection others
|
||||
* @property Grid\Column|Collection spu_id
|
||||
* @property Grid\Column|Collection specs
|
||||
* @property Grid\Column|Collection weight
|
||||
|
|
@ -167,28 +173,28 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection from_user_id
|
||||
* @property Grid\Column|Collection role
|
||||
* @property Grid\Column|Collection role_name
|
||||
* @property Grid\Column|Collection growth_value
|
||||
* @property Grid\Column|Collection ratio
|
||||
* @property Grid\Column|Collection money
|
||||
* @property Grid\Column|Collection paid_at
|
||||
* @property Grid\Column|Collection pay_way
|
||||
* @property Grid\Column|Collection pay_no
|
||||
* @property Grid\Column|Collection pay_data
|
||||
* @property Grid\Column|Collection max
|
||||
* @property Grid\Column|Collection failed_reason
|
||||
* @property Grid\Column|Collection shipping_fee
|
||||
* @property Grid\Column|Collection products_total_amount
|
||||
* @property Grid\Column|Collection user_coupon_id
|
||||
* @property Grid\Column|Collection note
|
||||
* @property Grid\Column|Collection pay_sn
|
||||
* @property Grid\Column|Collection pay_way
|
||||
* @property Grid\Column|Collection pay_at
|
||||
* @property Grid\Column|Collection completed_at
|
||||
* @property Grid\Column|Collection user_coupon_id
|
||||
* @property Grid\Column|Collection shipping_state
|
||||
* @property Grid\Column|Collection completed_at
|
||||
* @property Grid\Column|Collection profit
|
||||
* @property Grid\Column|Collection inviter_id
|
||||
* @property Grid\Column|Collection source_type
|
||||
* @property Grid\Column|Collection source_id
|
||||
* @property Grid\Column|Collection is_change
|
||||
* @property Grid\Column|Collection out_trade_no
|
||||
* @property Grid\Column|Collection auto_complete_at
|
||||
* @property Grid\Column|Collection store_id
|
||||
* @property Grid\Column|Collection profit
|
||||
* @property Grid\Column|Collection inviter_id
|
||||
* @property Grid\Column|Collection payable_type
|
||||
* @property Grid\Column|Collection payable_id
|
||||
* @property Grid\Column|Collection tokenable_type
|
||||
|
|
@ -233,6 +239,7 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection expires_at
|
||||
* @property Grid\Column|Collection socialite_type
|
||||
* @property Grid\Column|Collection socialite_id
|
||||
* @property Grid\Column|Collection product_sku_id
|
||||
* @property Grid\Column|Collection tag_id
|
||||
* @property Grid\Column|Collection taggable_id
|
||||
* @property Grid\Column|Collection taggable_type
|
||||
|
|
@ -255,7 +262,10 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection path
|
||||
* @property Grid\Column|Collection real_inviter_id
|
||||
* @property Grid\Column|Collection is_company
|
||||
* @property Grid\Column|Collection invite_qrcode
|
||||
* @property Grid\Column|Collection vip_id
|
||||
* @property Grid\Column|Collection gift
|
||||
* @property Grid\Column|Collection success_time
|
||||
* @property Grid\Column|Collection phone_verified_at
|
||||
* @property Grid\Column|Collection email
|
||||
* @property Grid\Column|Collection email_verified_at
|
||||
|
|
@ -264,12 +274,16 @@ namespace Dcat\Admin {
|
|||
* @property Grid\Column|Collection register_ip
|
||||
* @property Grid\Column|Collection status_remark
|
||||
* @property Grid\Column|Collection old_password
|
||||
* @property Grid\Column|Collection agent_id
|
||||
* @property Grid\Column|Collection vip_expired
|
||||
* @property Grid\Column|Collection price
|
||||
* @property Grid\Column|Collection rate
|
||||
* @property Grid\Column|Collection service_amount
|
||||
* @property Grid\Column|Collection account_amount
|
||||
* @property Grid\Column|Collection withdrawable
|
||||
*
|
||||
* @method Grid\Column|Collection width(string $label = null)
|
||||
* @method Grid\Column|Collection filed(string $label = null)
|
||||
* @method Grid\Column|Collection id(string $label = null)
|
||||
* @method Grid\Column|Collection cover(string $label = null)
|
||||
* @method Grid\Column|Collection content(string $label = null)
|
||||
|
|
@ -327,6 +341,8 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection state(string $label = null)
|
||||
* @method Grid\Column|Collection tracking_number(string $label = null)
|
||||
* @method Grid\Column|Collection sales_value(string $label = null)
|
||||
* @method Grid\Column|Collection growth_value(string $label = null)
|
||||
* @method Grid\Column|Collection ratio(string $label = null)
|
||||
* @method Grid\Column|Collection v(string $label = null)
|
||||
* @method Grid\Column|Collection cate(string $label = null)
|
||||
* @method Grid\Column|Collection is_force(string $label = null)
|
||||
|
|
@ -408,6 +424,9 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection is_failed(string $label = null)
|
||||
* @method Grid\Column|Collection checked_at(string $label = null)
|
||||
* @method Grid\Column|Collection last_news(string $label = null)
|
||||
* @method Grid\Column|Collection store_id(string $label = null)
|
||||
* @method Grid\Column|Collection products(string $label = null)
|
||||
* @method Grid\Column|Collection others(string $label = null)
|
||||
* @method Grid\Column|Collection spu_id(string $label = null)
|
||||
* @method Grid\Column|Collection specs(string $label = null)
|
||||
* @method Grid\Column|Collection weight(string $label = null)
|
||||
|
|
@ -425,28 +444,28 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection from_user_id(string $label = null)
|
||||
* @method Grid\Column|Collection role(string $label = null)
|
||||
* @method Grid\Column|Collection role_name(string $label = null)
|
||||
* @method Grid\Column|Collection growth_value(string $label = null)
|
||||
* @method Grid\Column|Collection ratio(string $label = null)
|
||||
* @method Grid\Column|Collection money(string $label = null)
|
||||
* @method Grid\Column|Collection paid_at(string $label = null)
|
||||
* @method Grid\Column|Collection pay_way(string $label = null)
|
||||
* @method Grid\Column|Collection pay_no(string $label = null)
|
||||
* @method Grid\Column|Collection pay_data(string $label = null)
|
||||
* @method Grid\Column|Collection max(string $label = null)
|
||||
* @method Grid\Column|Collection failed_reason(string $label = null)
|
||||
* @method Grid\Column|Collection shipping_fee(string $label = null)
|
||||
* @method Grid\Column|Collection products_total_amount(string $label = null)
|
||||
* @method Grid\Column|Collection user_coupon_id(string $label = null)
|
||||
* @method Grid\Column|Collection note(string $label = null)
|
||||
* @method Grid\Column|Collection pay_sn(string $label = null)
|
||||
* @method Grid\Column|Collection pay_way(string $label = null)
|
||||
* @method Grid\Column|Collection pay_at(string $label = null)
|
||||
* @method Grid\Column|Collection completed_at(string $label = null)
|
||||
* @method Grid\Column|Collection user_coupon_id(string $label = null)
|
||||
* @method Grid\Column|Collection shipping_state(string $label = null)
|
||||
* @method Grid\Column|Collection completed_at(string $label = null)
|
||||
* @method Grid\Column|Collection profit(string $label = null)
|
||||
* @method Grid\Column|Collection inviter_id(string $label = null)
|
||||
* @method Grid\Column|Collection source_type(string $label = null)
|
||||
* @method Grid\Column|Collection source_id(string $label = null)
|
||||
* @method Grid\Column|Collection is_change(string $label = null)
|
||||
* @method Grid\Column|Collection out_trade_no(string $label = null)
|
||||
* @method Grid\Column|Collection auto_complete_at(string $label = null)
|
||||
* @method Grid\Column|Collection store_id(string $label = null)
|
||||
* @method Grid\Column|Collection profit(string $label = null)
|
||||
* @method Grid\Column|Collection inviter_id(string $label = null)
|
||||
* @method Grid\Column|Collection payable_type(string $label = null)
|
||||
* @method Grid\Column|Collection payable_id(string $label = null)
|
||||
* @method Grid\Column|Collection tokenable_type(string $label = null)
|
||||
|
|
@ -491,6 +510,7 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection expires_at(string $label = null)
|
||||
* @method Grid\Column|Collection socialite_type(string $label = null)
|
||||
* @method Grid\Column|Collection socialite_id(string $label = null)
|
||||
* @method Grid\Column|Collection product_sku_id(string $label = null)
|
||||
* @method Grid\Column|Collection tag_id(string $label = null)
|
||||
* @method Grid\Column|Collection taggable_id(string $label = null)
|
||||
* @method Grid\Column|Collection taggable_type(string $label = null)
|
||||
|
|
@ -513,7 +533,10 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection path(string $label = null)
|
||||
* @method Grid\Column|Collection real_inviter_id(string $label = null)
|
||||
* @method Grid\Column|Collection is_company(string $label = null)
|
||||
* @method Grid\Column|Collection invite_qrcode(string $label = null)
|
||||
* @method Grid\Column|Collection vip_id(string $label = null)
|
||||
* @method Grid\Column|Collection gift(string $label = null)
|
||||
* @method Grid\Column|Collection success_time(string $label = null)
|
||||
* @method Grid\Column|Collection phone_verified_at(string $label = null)
|
||||
* @method Grid\Column|Collection email(string $label = null)
|
||||
* @method Grid\Column|Collection email_verified_at(string $label = null)
|
||||
|
|
@ -522,6 +545,9 @@ namespace Dcat\Admin {
|
|||
* @method Grid\Column|Collection register_ip(string $label = null)
|
||||
* @method Grid\Column|Collection status_remark(string $label = null)
|
||||
* @method Grid\Column|Collection old_password(string $label = null)
|
||||
* @method Grid\Column|Collection agent_id(string $label = null)
|
||||
* @method Grid\Column|Collection vip_expired(string $label = null)
|
||||
* @method Grid\Column|Collection price(string $label = null)
|
||||
* @method Grid\Column|Collection rate(string $label = null)
|
||||
* @method Grid\Column|Collection service_amount(string $label = null)
|
||||
* @method Grid\Column|Collection account_amount(string $label = null)
|
||||
|
|
@ -533,6 +559,7 @@ namespace Dcat\Admin {
|
|||
|
||||
/**
|
||||
* @property Show\Field|Collection width
|
||||
* @property Show\Field|Collection filed
|
||||
* @property Show\Field|Collection id
|
||||
* @property Show\Field|Collection cover
|
||||
* @property Show\Field|Collection content
|
||||
|
|
@ -590,6 +617,8 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection state
|
||||
* @property Show\Field|Collection tracking_number
|
||||
* @property Show\Field|Collection sales_value
|
||||
* @property Show\Field|Collection growth_value
|
||||
* @property Show\Field|Collection ratio
|
||||
* @property Show\Field|Collection v
|
||||
* @property Show\Field|Collection cate
|
||||
* @property Show\Field|Collection is_force
|
||||
|
|
@ -671,6 +700,9 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection is_failed
|
||||
* @property Show\Field|Collection checked_at
|
||||
* @property Show\Field|Collection last_news
|
||||
* @property Show\Field|Collection store_id
|
||||
* @property Show\Field|Collection products
|
||||
* @property Show\Field|Collection others
|
||||
* @property Show\Field|Collection spu_id
|
||||
* @property Show\Field|Collection specs
|
||||
* @property Show\Field|Collection weight
|
||||
|
|
@ -688,28 +720,28 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection from_user_id
|
||||
* @property Show\Field|Collection role
|
||||
* @property Show\Field|Collection role_name
|
||||
* @property Show\Field|Collection growth_value
|
||||
* @property Show\Field|Collection ratio
|
||||
* @property Show\Field|Collection money
|
||||
* @property Show\Field|Collection paid_at
|
||||
* @property Show\Field|Collection pay_way
|
||||
* @property Show\Field|Collection pay_no
|
||||
* @property Show\Field|Collection pay_data
|
||||
* @property Show\Field|Collection max
|
||||
* @property Show\Field|Collection failed_reason
|
||||
* @property Show\Field|Collection shipping_fee
|
||||
* @property Show\Field|Collection products_total_amount
|
||||
* @property Show\Field|Collection user_coupon_id
|
||||
* @property Show\Field|Collection note
|
||||
* @property Show\Field|Collection pay_sn
|
||||
* @property Show\Field|Collection pay_way
|
||||
* @property Show\Field|Collection pay_at
|
||||
* @property Show\Field|Collection completed_at
|
||||
* @property Show\Field|Collection user_coupon_id
|
||||
* @property Show\Field|Collection shipping_state
|
||||
* @property Show\Field|Collection completed_at
|
||||
* @property Show\Field|Collection profit
|
||||
* @property Show\Field|Collection inviter_id
|
||||
* @property Show\Field|Collection source_type
|
||||
* @property Show\Field|Collection source_id
|
||||
* @property Show\Field|Collection is_change
|
||||
* @property Show\Field|Collection out_trade_no
|
||||
* @property Show\Field|Collection auto_complete_at
|
||||
* @property Show\Field|Collection store_id
|
||||
* @property Show\Field|Collection profit
|
||||
* @property Show\Field|Collection inviter_id
|
||||
* @property Show\Field|Collection payable_type
|
||||
* @property Show\Field|Collection payable_id
|
||||
* @property Show\Field|Collection tokenable_type
|
||||
|
|
@ -754,6 +786,7 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection expires_at
|
||||
* @property Show\Field|Collection socialite_type
|
||||
* @property Show\Field|Collection socialite_id
|
||||
* @property Show\Field|Collection product_sku_id
|
||||
* @property Show\Field|Collection tag_id
|
||||
* @property Show\Field|Collection taggable_id
|
||||
* @property Show\Field|Collection taggable_type
|
||||
|
|
@ -776,7 +809,10 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection path
|
||||
* @property Show\Field|Collection real_inviter_id
|
||||
* @property Show\Field|Collection is_company
|
||||
* @property Show\Field|Collection invite_qrcode
|
||||
* @property Show\Field|Collection vip_id
|
||||
* @property Show\Field|Collection gift
|
||||
* @property Show\Field|Collection success_time
|
||||
* @property Show\Field|Collection phone_verified_at
|
||||
* @property Show\Field|Collection email
|
||||
* @property Show\Field|Collection email_verified_at
|
||||
|
|
@ -785,12 +821,16 @@ namespace Dcat\Admin {
|
|||
* @property Show\Field|Collection register_ip
|
||||
* @property Show\Field|Collection status_remark
|
||||
* @property Show\Field|Collection old_password
|
||||
* @property Show\Field|Collection agent_id
|
||||
* @property Show\Field|Collection vip_expired
|
||||
* @property Show\Field|Collection price
|
||||
* @property Show\Field|Collection rate
|
||||
* @property Show\Field|Collection service_amount
|
||||
* @property Show\Field|Collection account_amount
|
||||
* @property Show\Field|Collection withdrawable
|
||||
*
|
||||
* @method Show\Field|Collection width(string $label = null)
|
||||
* @method Show\Field|Collection filed(string $label = null)
|
||||
* @method Show\Field|Collection id(string $label = null)
|
||||
* @method Show\Field|Collection cover(string $label = null)
|
||||
* @method Show\Field|Collection content(string $label = null)
|
||||
|
|
@ -848,6 +888,8 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection state(string $label = null)
|
||||
* @method Show\Field|Collection tracking_number(string $label = null)
|
||||
* @method Show\Field|Collection sales_value(string $label = null)
|
||||
* @method Show\Field|Collection growth_value(string $label = null)
|
||||
* @method Show\Field|Collection ratio(string $label = null)
|
||||
* @method Show\Field|Collection v(string $label = null)
|
||||
* @method Show\Field|Collection cate(string $label = null)
|
||||
* @method Show\Field|Collection is_force(string $label = null)
|
||||
|
|
@ -929,6 +971,9 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection is_failed(string $label = null)
|
||||
* @method Show\Field|Collection checked_at(string $label = null)
|
||||
* @method Show\Field|Collection last_news(string $label = null)
|
||||
* @method Show\Field|Collection store_id(string $label = null)
|
||||
* @method Show\Field|Collection products(string $label = null)
|
||||
* @method Show\Field|Collection others(string $label = null)
|
||||
* @method Show\Field|Collection spu_id(string $label = null)
|
||||
* @method Show\Field|Collection specs(string $label = null)
|
||||
* @method Show\Field|Collection weight(string $label = null)
|
||||
|
|
@ -946,28 +991,28 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection from_user_id(string $label = null)
|
||||
* @method Show\Field|Collection role(string $label = null)
|
||||
* @method Show\Field|Collection role_name(string $label = null)
|
||||
* @method Show\Field|Collection growth_value(string $label = null)
|
||||
* @method Show\Field|Collection ratio(string $label = null)
|
||||
* @method Show\Field|Collection money(string $label = null)
|
||||
* @method Show\Field|Collection paid_at(string $label = null)
|
||||
* @method Show\Field|Collection pay_way(string $label = null)
|
||||
* @method Show\Field|Collection pay_no(string $label = null)
|
||||
* @method Show\Field|Collection pay_data(string $label = null)
|
||||
* @method Show\Field|Collection max(string $label = null)
|
||||
* @method Show\Field|Collection failed_reason(string $label = null)
|
||||
* @method Show\Field|Collection shipping_fee(string $label = null)
|
||||
* @method Show\Field|Collection products_total_amount(string $label = null)
|
||||
* @method Show\Field|Collection user_coupon_id(string $label = null)
|
||||
* @method Show\Field|Collection note(string $label = null)
|
||||
* @method Show\Field|Collection pay_sn(string $label = null)
|
||||
* @method Show\Field|Collection pay_way(string $label = null)
|
||||
* @method Show\Field|Collection pay_at(string $label = null)
|
||||
* @method Show\Field|Collection completed_at(string $label = null)
|
||||
* @method Show\Field|Collection user_coupon_id(string $label = null)
|
||||
* @method Show\Field|Collection shipping_state(string $label = null)
|
||||
* @method Show\Field|Collection completed_at(string $label = null)
|
||||
* @method Show\Field|Collection profit(string $label = null)
|
||||
* @method Show\Field|Collection inviter_id(string $label = null)
|
||||
* @method Show\Field|Collection source_type(string $label = null)
|
||||
* @method Show\Field|Collection source_id(string $label = null)
|
||||
* @method Show\Field|Collection is_change(string $label = null)
|
||||
* @method Show\Field|Collection out_trade_no(string $label = null)
|
||||
* @method Show\Field|Collection auto_complete_at(string $label = null)
|
||||
* @method Show\Field|Collection store_id(string $label = null)
|
||||
* @method Show\Field|Collection profit(string $label = null)
|
||||
* @method Show\Field|Collection inviter_id(string $label = null)
|
||||
* @method Show\Field|Collection payable_type(string $label = null)
|
||||
* @method Show\Field|Collection payable_id(string $label = null)
|
||||
* @method Show\Field|Collection tokenable_type(string $label = null)
|
||||
|
|
@ -1012,6 +1057,7 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection expires_at(string $label = null)
|
||||
* @method Show\Field|Collection socialite_type(string $label = null)
|
||||
* @method Show\Field|Collection socialite_id(string $label = null)
|
||||
* @method Show\Field|Collection product_sku_id(string $label = null)
|
||||
* @method Show\Field|Collection tag_id(string $label = null)
|
||||
* @method Show\Field|Collection taggable_id(string $label = null)
|
||||
* @method Show\Field|Collection taggable_type(string $label = null)
|
||||
|
|
@ -1034,7 +1080,10 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection path(string $label = null)
|
||||
* @method Show\Field|Collection real_inviter_id(string $label = null)
|
||||
* @method Show\Field|Collection is_company(string $label = null)
|
||||
* @method Show\Field|Collection invite_qrcode(string $label = null)
|
||||
* @method Show\Field|Collection vip_id(string $label = null)
|
||||
* @method Show\Field|Collection gift(string $label = null)
|
||||
* @method Show\Field|Collection success_time(string $label = null)
|
||||
* @method Show\Field|Collection phone_verified_at(string $label = null)
|
||||
* @method Show\Field|Collection email(string $label = null)
|
||||
* @method Show\Field|Collection email_verified_at(string $label = null)
|
||||
|
|
@ -1043,6 +1092,9 @@ namespace Dcat\Admin {
|
|||
* @method Show\Field|Collection register_ip(string $label = null)
|
||||
* @method Show\Field|Collection status_remark(string $label = null)
|
||||
* @method Show\Field|Collection old_password(string $label = null)
|
||||
* @method Show\Field|Collection agent_id(string $label = null)
|
||||
* @method Show\Field|Collection vip_expired(string $label = null)
|
||||
* @method Show\Field|Collection price(string $label = null)
|
||||
* @method Show\Field|Collection rate(string $label = null)
|
||||
* @method Show\Field|Collection service_amount(string $label = null)
|
||||
* @method Show\Field|Collection account_amount(string $label = null)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'labels' => [
|
||||
'Agent' => '代理等级',
|
||||
'agents' => '代理等级',
|
||||
],
|
||||
'fields' => [
|
||||
'name' => '等级名称',
|
||||
'growth_value' => '升级',
|
||||
'sort' => '等级',
|
||||
'ratio' => '比例',
|
||||
'slug' => '类别'
|
||||
],
|
||||
'options' => [
|
||||
'deny' => '删除失败',
|
||||
'deny_message'=> '该等级下还有用户, 无法删除',
|
||||
],
|
||||
];
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
return [
|
||||
'labels' => [
|
||||
'UserVip' => '购买记录',
|
||||
'user-vip' => '购买记录',
|
||||
],
|
||||
'fields' => [
|
||||
'user_id' => '用户',
|
||||
'vip_id' => '会员卡',
|
||||
'times' => '时效',
|
||||
'success_time' => '购买时间',
|
||||
'user' => [
|
||||
'phone' => '用户',
|
||||
],
|
||||
'vip' => [
|
||||
'name' => '会员卡'
|
||||
]
|
||||
],
|
||||
'options' => [
|
||||
],
|
||||
];
|
||||
|
|
@ -16,11 +16,7 @@ return [
|
|||
'last_login_at' => '最近登录时间',
|
||||
'register_ip' => '注册IP',
|
||||
'created_at' => '注册时间',
|
||||
'userVip'=>[
|
||||
'vip' => [
|
||||
'name' => '代理',
|
||||
],
|
||||
],
|
||||
'agent' => '代理',
|
||||
'userInfo'=>[
|
||||
'avatar' => '头像',
|
||||
'nickname' => '昵称',
|
||||
|
|
|
|||
|
|
@ -2,15 +2,17 @@
|
|||
|
||||
return [
|
||||
'labels' => [
|
||||
'Vip' => '会员等级',
|
||||
'vips' => '会员等级',
|
||||
'Vip' => '会员卡',
|
||||
'vips' => '会员卡',
|
||||
],
|
||||
'fields' => [
|
||||
'name' => '等级名称',
|
||||
'growth_value' => '升级',
|
||||
'sort' => '等级',
|
||||
'name' => '名称',
|
||||
'sort' => '排序',
|
||||
'ratio' => '比例',
|
||||
'slug' => '类别'
|
||||
'times' => '时效',
|
||||
'gift' => '赠品',
|
||||
'price' => '价格',
|
||||
'status' => '状态'
|
||||
],
|
||||
'options' => [
|
||||
'deny' => '删除失败',
|
||||
|
|
|
|||
Loading…
Reference in New Issue