diff --git a/app/Admin/Controllers/Activity/IndexController.php b/app/Admin/Controllers/Activity/IndexController.php index d77f4a5..bff3eb9 100644 --- a/app/Admin/Controllers/Activity/IndexController.php +++ b/app/Admin/Controllers/Activity/IndexController.php @@ -5,67 +5,17 @@ namespace App\Admin\Controllers\Activity; use App\Models\Activity; use App\Models\ActivityRule; use App\Models\User; -use Encore\Admin\Controllers\HasResourceActions; +use Encore\Admin\Controllers\AdminController; use Encore\Admin\Form; use Encore\Admin\Grid; -use Encore\Admin\Layout\Content; use Illuminate\Support\MessageBag; -use Illuminate\Routing\Controller as AdminController; class IndexController extends AdminController { - use HasResourceActions; - protected $title = '活动管理'; - /** - * Get content title. - * @return string - */ - protected function title() - { - return $this->title; - } - - /** - * Index interface. - * @param Content $content - * @return Content - */ - public function index(Content $content) - { - return $content->title($this->title()) - ->description($this->description['index'] ?? trans('admin.list')) - ->body($this->grid()); - } - - /** - * Edit interface. - * @param mixed $id - * @param Content $content - * @return Content - */ - public function edit($id, Content $content) - { - return $content->title($this->title()) - ->description($this->description['edit'] ?? trans('admin.edit')) - ->body($this->form($id)->edit($id)); - } - - /** - * Create interface. - * @param Content $content - * @return Content - */ - public function create(Content $content) - { - return $content->title($this->title()) - ->description($this->description['create'] ?? trans('admin.create')) - ->body($this->form()); - } - - protected function grid() + protected function grid(): Grid { $grid = new Grid(new Activity); $grid->model()->withCount('coupons'); @@ -146,7 +96,7 @@ class IndexController extends AdminController * Make a form builder. * @return Form */ - protected function form($id = '') + protected function form(): Form { $form = new Form(new Activity); @@ -185,26 +135,62 @@ class IndexController extends AdminController ->default(1) ->help('同一订单,多次核销时校验,订单每满100元可核销一笔。'); - $grantdef = $verificationsdef = ''; - if ($id) { - $grantdef = Activity::find($id)->grants()->pluck('user_id')->toArray(); - $verificationsdef = Activity::find($id)->verifications()->pluck('user_id')->toArray(); - } - - $users = User::with('info')->whereHas('identity', function ($q) { - $q->where('identity_id', 1); - })->orderBy('id', 'desc')->get()->pluck('nickname', 'id'); + $users = User::query() + ->with('info') + ->whereHas('identity', function ($q) { + $q->where('identity_id', 1); + }) + ->orderBy('id', 'desc') + ->get() + ->pluck('nickname', 'id'); $form->listbox('grants.user_id', '可发券渠道') ->options($users) - ->default($grantdef) + ->default(function ($form) { + if ($form->isEditing()) { + return $form->model()->grants()->pluck('user_id')->toArray(); + } else { + return []; + } + }) ->required(); $form->listbox('verifications.user_id', '可核券渠道') ->options($users) - ->default($verificationsdef) + ->default(function ($form) { + if ($form->isEditing()) { + return $form->model()->verifications()->pluck('user_id')->toArray(); + } else { + return []; + } + }) ->required(); + $form->radio('verify_shop', '网点校验') + ->options(Activity::VERIFY_SHOPS) + ->default(Activity::VERIFY_SHOP_NO) + ->when(Activity::VERIFY_SHOP_YES, function (Form $form) use ($users) { + $form->listbox('shops.user_id', '可核券渠道') + ->options(function () { + return User::query() + ->with('info') + ->whereHas('identity', function ($q) { + $q->where('identity_id', 2); + }) + ->where('status', 1) + ->orderBy('id', 'desc') + ->get() + ->pluck('nickname', 'id'); + }) + ->default(function ($form) { + if ($form->isEditing()) { + return $form->model()->shops()->pluck('user_id')->toArray(); + } else { + return []; + } + }); + }); + $form->saving(function (Form $form) { $request = request(); @@ -243,9 +229,22 @@ class IndexController extends AdminController $form->end_at = $form->end_at . ' 23:59:59'; } + $shops = isset(request()->shops) ? array_filter(request()->shops['user_id']) : []; + + if (request()->verify_shop == Activity::VERIFY_SHOP_YES && empty($shops)) { + $error = new MessageBag([ + 'title' => '错误', + 'message' => '必须设置可核销的网点', + ]); + + return back()->withInput()->with(compact('error')); + + } + }); $form->saved(function (Form $form) { + //设置发券渠道 $users = []; foreach ($form->grants['user_id'] as $key => $user_id) { if ($user_id) { @@ -258,6 +257,8 @@ class IndexController extends AdminController } } $form->model()->grants()->whereNotIn('user_id', $users)->delete(); + + //设置核销渠道 $users = []; foreach ($form->verifications['user_id'] as $key => $user_id) { if ($user_id) { @@ -270,6 +271,20 @@ class IndexController extends AdminController } } $form->model()->verifications()->whereNotIn('user_id', $users)->delete(); + + //设置核销网点 + $users = []; + foreach ($form->shops['user_id'] as $key => $user_id) { + if ($user_id) { + $form->model() + ->shops() + ->updateOrCreate([ + 'user_id' => $user_id, + ]); + $users[] = $user_id; + } + } + $form->model()->shops()->whereNotIn('user_id', $users)->delete(); }); return $form; diff --git a/app/Admin/Controllers/Activity/LogController.php b/app/Admin/Controllers/Activity/LogController.php index e3bcaf7..848327b 100644 --- a/app/Admin/Controllers/Activity/LogController.php +++ b/app/Admin/Controllers/Activity/LogController.php @@ -3,16 +3,10 @@ namespace App\Admin\Controllers\Activity; use App\Admin\Renderable\Activity\Grants; -use App\Models\Activity; use App\Models\ActivityCouponLog; -use App\Models\ActivityGrant; -use App\Models\ActivityRule; -use App\Models\User; use Encore\Admin\Controllers\HasResourceActions; -use Encore\Admin\Form; use Encore\Admin\Grid; use Encore\Admin\Layout\Content; -use Illuminate\Support\MessageBag; use Illuminate\Routing\Controller as AdminController; class LogController extends AdminController @@ -33,7 +27,7 @@ class LogController extends AdminController /** * Index interface. - * @param Content $content + * @param Content $content * @return Content */ public function index(Content $content) @@ -69,20 +63,20 @@ class LogController extends AdminController $grid->column('id', '#ID#'); $grid->column('code', '卡券编号'); $grid->column('type', '分类') - ->using(ActivityCouponLog::TYPES) - ->label([ - 1 => 'default', - 2 => 'warning', - 3 => 'info', - ]); + ->using(ActivityCouponLog::TYPES) + ->label([ + 1 => 'default', + 2 => 'warning', + 3 => 'info', + ]); $grid->column('status', '状态') - ->using(ActivityCouponLog::STATUS) - ->label([ - 1 => 'default', - 2 => 'warning', - 3 => 'info', - ]); + ->using(ActivityCouponLog::STATUS) + ->label([ + 1 => 'default', + 2 => 'warning', + 3 => 'info', + ]); $grid->column('remark', '处理结果'); diff --git a/app/Models/Activity.php b/app/Models/Activity.php index b545f82..2ccb8d9 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -3,6 +3,9 @@ namespace App\Models; use App\Models\Traits\BelongsToUser; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\DB; class Activity extends Model @@ -36,6 +39,13 @@ class Activity extends Model self::CHANNEL_UNION => '银联', ]; + const VERIFY_SHOP_YES = 1; + const VERIFY_SHOP_NO = 0; + const VERIFY_SHOPS = [ + self::VERIFY_SHOP_YES => '是', + self::VERIFY_SHOP_NO => '否', + ]; + /** * 默认加载的关联 * @var array @@ -52,7 +62,7 @@ class Activity extends Model } //活动类型 固定期限 延期 - public function getTypeTextAttribute() + public function getTypeTextAttribute(): string { return self::TYPES[$this->type] ?? '未知'; } @@ -64,26 +74,46 @@ class Activity extends Model } //关联卡券规则 ysd-full100-10 - public function rule() + public function rule(): BelongsTo { return $this->belongsTo(ActivityRule::class, 'activity_rule_id'); } //关联券表 - public function coupons() + public function coupons(): HasMany { return $this->hasMany(ActivityCoupon::class); } /** - * Notes: 关联可发券渠道 + * Notes: 关联可发券渠道中间表 * @Author: 玄尘 * @Date : 2020/8/21 11:09 */ - public function grants() + public function grants(): HasMany { return $this->hasMany(ActivityGrant::class); + } + /** + * Notes: 可发券的渠道 + * @Author: 玄尘 + * @Date : 2021/4/25 11:36 + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function grant_users(): BelongsToMany + { + return $this->belongsToMany(User::class, 'activity_grants')->using(ActivityGrant::class); + } + + /** + * Notes: 关联可核券网点中间表 + * @Author: 玄尘 + * @Date : 2020/8/21 11:09 + */ + public function shops(): HasMany + { + return $this->hasMany(ActivityShop::class); } /** @@ -91,10 +121,19 @@ class Activity extends Model * @Author: 玄尘 * @Date : 2020/8/21 11:09 */ - public function verifications() + public function verifications(): HasMany { return $this->hasMany(ActivityVerification::class); + } + /** + * Notes: 可核销的渠道 + * @Author: 玄尘 + * @Date : 2021/4/25 11:37 + */ + public function verify_users(): BelongsToMany + { + return $this->belongsToMany(User::class, 'activity_verifications')->using(ActivityVerification::class); } /** diff --git a/app/Models/ActivityGrant.php b/app/Models/ActivityGrant.php index 4d9c6be..f076843 100644 --- a/app/Models/ActivityGrant.php +++ b/app/Models/ActivityGrant.php @@ -4,9 +4,12 @@ namespace App\Models; use App\Models\Traits\BelongsToActivity; use App\Models\Traits\BelongsToUser; +use Illuminate\Database\Eloquent\Relations\Pivot; -class ActivityGrant extends Model +class ActivityGrant extends Pivot { + public $table = 'activity_grants'; + use BelongsToActivity, BelongsToUser; } diff --git a/app/Models/ActivityShop.php b/app/Models/ActivityShop.php new file mode 100644 index 0000000..dcd291e --- /dev/null +++ b/app/Models/ActivityShop.php @@ -0,0 +1,16 @@ +