UserInfoForm.php 8.4 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 管理端表单 trait层:渲染生成 会员 form 表单
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Forms\User
 * @package   App\Admin\Forms\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日 17:57:14
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Forms\User;

use App\Models\Traits\AreaTrait;
use App\Models\User\User;
use App\Models\User\UserIDCard;
use App\Models\User\UserIDCardReader;
use Encore\Admin\Form;
use Illuminate\Support\Arr;

/**
 * Class UserInfoForm.
 *
 * @category  App\Admin\Forms\User
 * @package   App\Admin\Forms\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日 17:57:14
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
trait UserInfoForm
{
    use AreaTrait;

    /**
     * 渲染表单字段
     *
     * @param Int $id 用户id
     *
     * @return void
    */
    public function renderFormFields($id)
    {
//        $this->generateFormTextField($this->form, 'username', '用户名', 12, true, 2)
//            ->creationRules(['required', "unique:users"])
//            ->updateRules(['required', "unique:users,username,{{id}}"]);
        $this->generateFormTextField($this->form, 'name', '姓名', 20, true, 2);
        $this->generateFormMobileField($this->form, 'mobile', '手机号码', 20, true, 2)
            ->creationRules(['required',"unique:user_infos"])
            ->updateRules(['required', "unique:user_infos,mobile,{{id}}"]);

        $this->generateFormTextField($this->form, 'ID_number', '身份证', 20, 1, 2);

        // 分割线
//        $this->form->divider();

        $this->form->divider('人证核验仪器读取数据');

        $this->generateFormTextField($this->form, 'idcard.name', '姓名', null, 1, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.ID_number', '身份证', null, 1, 2)->readonly();
        $this->generateFormDateField($this->form, 'idcard.birthday', '出生日期', 0, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.nation', '民族', null, 0, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.gender', '性别', null, 0, 2)->readonly();
//        $this->generateFormRadioField($this->form, 'IDCard.gender', '性别', User::GENDER_OPTIONS, 0, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.issued', '签发机关', null, 0, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.valid_date', '有效期', null, 0, 2)->readonly();
        $this->generateFormTextField($this->form, 'idcard.address', '住址', null, 0, 2)->readonly();
        $this->generateFormSingleImageField($this->form, 'idcard.ID_image', '图片')->readonly();

        $this->form->html("", "<a class='btn btn-sm btn-success' href='javascript:;' onclick='showIDReader()'>人证核验</a>");

        $this->form->divider();

//        $this->generateFormSingleSelectField($this->form, 'role_id', '通知角色', Role::all()->pluck('name', 'id'), true);
//        $this->generateFormMultipleSelectField($this->form, 'toAreas', '负责区域', $this->getAreaTrees(), true);
//        $this->generateFormTreeCheckboxField($this->form, 'toAreas', '负责区域', $this->toTree());
    }

    /**
     * 保存前回调
     *
     * @return void
     */
    public function saving()
    {
        parent::saving();
        //保存前回调
        $this->form->saving(function (Form $form) {
            // 设置密码
//            $form->model()->setAttribute('password', bcrypt(config('constants.PASSWORD')));
            $IDCard = request('idcard');
//            dump( $IDCard);
//            dd( Arr::get(array_flip(User::GENDER_OPTIONS), $IDCard['gender']));
            if ($IDCard) {
                // 更新用户的信息
                $form->model()->setAttribute('name', Arr::get($IDCard, 'name'));
                $form->model()->setAttribute('ID_number', Arr::get($IDCard, 'ID_number'));
                $form->model()->setAttribute('birthday', Arr::get($IDCard, 'birthday'));
                $form->model()->setAttribute('nation', Arr::get($IDCard, 'nation'));
                $form->model()->setAttribute('issued', Arr::get($IDCard, 'issued'));
                $form->model()->setAttribute('address', Arr::get($IDCard, 'address'));
                $form->model()->setAttribute('valid_date', Arr::get($IDCard, 'valid_date'));
                $form->model()->setAttribute('ID_image', Arr::get($IDCard, 'ID_image'));
                $form->model()->setAttribute('gender', get_gender_from_ID_number($IDCard['ID_number']));

                $form->name         = $IDCard['name'];
                $form->ID_number    = $IDCard['ID_number'];
                $form->birthday     = $IDCard['birthday'];
                $form->nation       = $IDCard['nation'];
                $form->issued       = $IDCard['issued'];
                $form->address      = $IDCard['address'];
                $form->valid_date   = $IDCard['valid_date'];
                $form->ID_image     = Arr::get($IDCard, 'ID_image');
//                $form->model()->setAttribute('gender', get_gender_from_ID_number($IDCard['ID_number']));
//                $form->gender       = get_gender_from_ID_number($IDCard['ID_number']) ?? Arr::get(array_flip(User::GENDER_OPTIONS), $IDCard['gender'] ?? 0);
            }
        });
    }

    /**
     *  保存后回调
     *
     * @return void
     */
    protected function saved()
    {
        parent::saved();
        // 保存后回调
        $this->form->saved(function (Form $form) {
            //...
            $model = $form->model();
            $IDCard = request('IDCard');
            if ($IDCard) {
//                // 更新用户身份信息
//                $IDCard = [
//                    "name"          => $IDCard['name'],
//                    "ID_number"     => $IDCard['ID_number'],
//                    "birthday"      => $IDCard['birthday'],
//                    "nation"        => $IDCard['nation'],
//                    "gender"        => $IDCard['gender'],
//                    "issued"        => $IDCard['issued'],
//                    "valid_date"    => $IDCard['valid_date'],
//                    "address"       => $IDCard['address'],
//                    "ID_image"      => Arr::get($IDCard, 'ID_image'),
//                ];
//                // 插入 或者 更新
//                $query = [
//                    'user_id'       => $model->id,
//                ];
//                $model->IDCard()->updateOrCreate($query, $IDCard);

                // 插入核验记录
                $model->IDCardReaders()->create($IDCard);
            }

            // TODO add by Richer 于 2021年8月4日16:42:54 暂时将用户信息也创建
            $user = $model->user;
            if (!$user) {
                $rs = $model->user()->create(
                    [
                        'username' => $model->mobile,
                        'name' => $model->name,
                        'mobile' => $model->mobile,
                        'password' => bcrypt(config('constants.PASSWORD')),
                        'gender' => $model->gender,
                        'ID_number' => $model->ID_number,
                        'birthday' => $model->birthday,
                        'nation' => $model->nation,
                        'issued' => $model->issued,
                        'address' => $model->address,
                        'valid_date' => $model->valid_date,
                    ]
                );

                $model->user_id = $rs->id;
                $model->save();
            } else {
                $user->name = $model->name;
                $user->mobile = $model->mobile;
                $user->gender = $model->gender;
                $user->ID_number = $model->ID_number;
                $user->birthday = $model->birthday;
                $user->nation = $model->nation;
                $user->issued = $model->issued;
                $user->address = $model->address;
                $user->valid_date = $model->valid_date;
                $user->save();
            }
        });
    }
}