Goods.php 7.1 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * Steps 表单: Groupon Step Form-分类
+-----------------------------------------------------------------------------------------------------------------------
 * PHP version 7
 *
 * @category  App\Admin\Forms\Steps\Groupon
 * @package   App\Admin\Forms\Steps\Groupon
 * @author    Richer <yangzi1028@163.com>
 * @date      2022年5月7日15:14:47
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Forms\Steps\Groupon;

use App\Admin\Traits\FormFieldTrait;
use App\Models\GiftCard\GiftCard;
use App\Models\Goods\GoodsSku;
use App\Models\Groupon\Goods as GrouponGoods;
use App\Models\Goods\Goods as GeneralGoods;
use App\Admin\Rewrite\Widgets\StepForm;
use App\Models\Traits\GoodsTrait;
use Encore\Admin\Facades\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

/**
 * Class Other
 *
 * @category  App\Admin\Forms\Steps\Groupon
 * @package   App\Admin\Forms\Steps\Groupon
 * @author    Richer <yangzi1028@163.com>
 * @date      2022年5月7日15:14:47
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
class Goods extends StepForm
{
    use FormFieldTrait, GoodsTrait;
    /**
     * The form title.
     *
     * @var string
     */
    public $title = '商品信息';

    /**
     * The form.
     *
     * @var string
     */
    public $form = null;

    public $suffix = 'groupon-goods';

    /**
     * Other constructor.
     * @param array $data
     */
    public function __construct($data = [])
    {
        $this->model = new GrouponGoods();

        $this->form = $this;

        parent::__construct($data);
    }

    /**
     * The form title.
     *
     * @var string
     */
    public $model = null;

    /**
     * Handle the form request.
     *
     * @param Request $request
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request)
    {
        $this->save($request);
        $this->clear();
        admin_toastr(trans('admin.save_succeeded'));
        $route_prefix = config('admin.route.prefix');
        $url = '/'.$route_prefix.'/'.$this->suffix;
        return redirect($url);
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        Admin::script(' $(".step-submit").on("click", function() {$(this).text("Loading...").addClass("disabled");});');

        $base = $this->getBase();
        $id = $this->getId() ;
        if ($id) {
            $this->hidden('id')->default($this->getId());
        }

        $type = $this->getType();
        $this->form = $this;
        $groupable_id = optional($base)->groupable_id;
        $skus = optional($base)->skus;
        $goods_skus = [];
        if ($groupable_id) {
            $goods_skus = $this->getGoodsSkusOptions($groupable_id);
        }
        $price = optional($base)->price;
        $stock = optional($base)->stock;
        $member_number = optional($base)->member_number;

        $this->form->html(
            view(
                'admin::groupon.skus',
                compact('skus', 'goods_skus', 'type', 'price', 'stock', 'member_number')
            ),
            __('goods_specification')
        )->setWidth(10, 1)->setGroupClass('col-md-12');

        /*if ($type === GeneralGoods::OBJ_NAME) {
//            $this->formSingleSelectField('groupable_id', __('goods_name'), GeneralGoods::getSelectOptions('init'), 1);
            $groupable_id = optional($base)->groupable_id;
            $skus = optional($base)->skus;
            $goods_skus = [];
            if ($groupable_id) {
                $goods_skus = $this->getGoodsSkusOptions($groupable_id);
            }
//            dump($goods_skus);

            $this->form->html(
                view(
                    'admin::groupon.skus',
                    compact('skus', 'goods_skus', 'type')
                ),
                __('goods_specification')
            )->setWidth(10, 1)->setGroupClass('col-md-12');
//            $this->form->table('skus', __('goods_specification'), function ($table) {
//                $table->select('sku_id', __('goods_specification'))->required();
//                $table->currency('price', __('groupon_price'))->symbol('¥')->required();
//                $table->number('stock', __('stock'))->required();
//                $table->number('member_number', __('member_number'))->required();
//            })->setWidth(10, 1)->setGroupClass('col-md-12');
        } else {
//            $this->formSingleSelectField('groupable_id', __('goods_name'), GiftCard::getSelectOptions('init'), 1);

            $this->formCurrencyField('price', __('groupon_price'), 1);//->setWidth(6, 3)->setGroupClass('col-md-4');
            $this->formNumberField('stock', __('stock'), 1);//->setWidth(6, 3)->setGroupClass('col-md-4');
            $this->formNumberField('member_number', __('member_number'), 1);//->setWidth(6, 3)->setGroupClass('col-md-4');
        }*/
    }

    /**
     * 渲染不同模块的特殊字段
     */
    public function renderSpecialFields()
    {
    }

    /**
     * The data of the form.
     *
     * @return array $data
     */
    public function data()
    {
        return optional($this->getBase())->toArray();
    }

    /**
     * 获取 id
     *
     * @return int|null
     */
    private function getId()
    {
        return optional($this->getBase())->id;
    }

    /**
     * 获取 type
     *
     * @return int|null
     */
    private function getType()
    {
        return optional($this->getBase())->groupable_type;
    }

    /**
     * 获取基础信息模型对象
     *
     * @return array
     */
    protected function getBase()
    {
        return Arr::get(session('steps'), 'type');
    }

    /**
     * 保存方案:新增或者更新
     *
     * @param $request
     * @return mixed
     */
    public function save($request)
    {

        $id = $request->id;
        // 获取信息
        $data = $request->all();

        $skus_rq = $request->skus;

        if ($skus_rq && is_array($skus_rq)) {
            // 组合新的
            $skus = [];
            foreach ($skus_rq as $sku) {
                if (Arr::get($sku, '_remove_') != 1) {
//                    unset($sku['_remove_']);
                    $skus[] = $sku;
                }
            }
            $data['skus']  = my_json_encode($skus);
            $prices = data_get($skus, '*.price');
            $stocks = data_get($skus, '*.stock');
            $member_numbers = data_get($skus, '*.member_number');
            sort($prices);
            $price = Arr::first($prices);
            $data['price'] = $price;
            sort($stocks);
            $stock = Arr::first($stocks);
            $data['stock'] = $stock;
            sort($member_numbers);
            $member_number = Arr::first($member_numbers);
            $data['member_number'] = $member_number;
        }

        $this->model->where('id', $id)->update($data);
        return true;
    }
}