Award.php 3.5 KB
<?php

namespace App\Admin\Forms\Steps\Draw;

use App\Admin\Traits\FormFieldTrait;
use App\Models\Turntable\TurnTable;
use App\Models\Turntable\TurnTableAward;
use Encore\Admin\Widgets\StepForm;
use App\Models\Turntable\TurnTableAward as AwardModel;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

class Award extends StepForm
{
    use FormFieldTrait;
    /**
     * The form title.
     *
     * @var string
     */
    public $title = '设置奖品(至少设置一个奖品,各奖品中奖概率之和不可大于100%)';

    /**
     * Handle the form request.
     *
     * @param Request $request
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request)
    {
        // 进行报价
        $result = $this->save($this->all());
        if (!$result) {
            return back();
        }
        //  清空session
        $this->clear();

        //admin_success(trans('admin.save_succeeded'));
        admin_toastr(trans('admin.save_succeeded'));
        $route_prefix = config('admin.route.prefix');
        return redirect('/' . $route_prefix . '/turntables');
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        // 获取上一部的数据
        $request = $this->all();
        // 获取方案信息
        $turntable        = Arr::get($request, 'turntable');

        // 获取方案id:如果是更新的
        $turntable_id = Arr::get($turntable, 'id');
        if (!$turntable_id) {
            // 获取当前的url
            $current_url = request()->url();

            if (Str::endsWith($current_url, '/create')) {
                $turntable_id    = Arr::get($turntable, 'id');
            } else {
                $turntable_id    =   Arr::get(Arr::get($request, 'award'), 'id');
            }
        }
        $model = TurnTable::find($turntable_id);
        $awards = $model->awards;
        $levels = TurnTableAward::AWARD_LEVELS;

        $this->html(
            view(
                'admin::turntable.award',
                compact('turntable_id', 'awards', 'levels')
            ),
            ''
        )->setWidth(12, 0);
    }

    /**
     * 进行方案报价
     *
     * @param $request
     * @return bool
     */
    public function save($request)
    {
        $turntable       = Arr::get($request, 'turntable');
        // 获取大转盘id:如果是更新的
        $turntable_id    = Arr::get($turntable, 'id');
        $turntable = TurnTable::find($turntable_id);

        // 获取奖品
        $awards  = Arr::get(Arr::get($request, 'award'), 'awards');

        $name = collect(data_get($awards, '*.name'))->reject(function($value){
            return !$value;
        })->all();
        if (empty($name)) {
            admin_error('至少设置一个奖品');
            return false;
        }

        $probability = collect(data_get($awards, '*.probability'))->sum();
        if ($probability > 100) {
            admin_error('中奖概率不能大于100%');
            return false;
        }

        foreach ($awards as $award) {
            // 获取删除的标志
            $name = Arr::get($award, 'name');
            $id = Arr::get($award, 'id');
            $model = AwardModel::find($id);

            if ($name) {
                unset($award['id']);
                if ($model) {
                    AwardModel::where('id', $id)->update($award);
                } else {
                    $turntable->awards()->createMany([$award]);
                }
            }
        }

        return $turntable;
    }
}