diff --git a/app/Admin/Controllers/CouponController.php b/app/Admin/Controllers/CouponController.php index 7df2bc6..1a7d148 100644 --- a/app/Admin/Controllers/CouponController.php +++ b/app/Admin/Controllers/CouponController.php @@ -8,6 +8,7 @@ use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Controllers\AdminController; use App\Models\Coupon as couponModel; +use App\Models\CouponSetting as couponSettingModel; class CouponController extends AdminController { @@ -18,24 +19,19 @@ class CouponController extends AdminController */ protected function grid() { - return Grid::make($c = new Coupon(), function (Grid $grid) { + return Grid::make(new Coupon(), function (Grid $grid) { $grid->id->sortable(); $grid->title; - $grid->start_time->display(function($time){ - return date('Y-m-d H:i:s',$time); - }); - $grid->end_time->display(function($time){ - return date('Y-m-d H:i:s',$time); - }); + $grid->start_time_text; + $grid->end_time_text; $grid->full_amount; $grid->discounts; - $grid->discount_type; + $grid->discount_type_text; $grid->inventory; $grid->inventory_use; - $grid->type; - $grid->active_type; + $grid->active_type_text; $grid->status ->using( @@ -105,27 +101,37 @@ class CouponController extends AdminController { return Form::make(new Coupon(), function (Form $form) { $form->display('id'); - $form->text('title'); - $form->text('introduce'); - $form->text('start_time'); - $form->text('end_time'); - $form->text('full_amount'); - $form->text('discounts'); - $form->text('is_new_user'); - $form->text('inventory'); - $form->text('inventory_use'); - $form->text('type'); - $form->text('market_id'); - $form->text('storetype_id'); - $form->text('category'); - $form->text('active_type'); - $form->text('status'); - $form->text('remark'); - $form->text('weigh'); - $form->text('usable_number'); - $form->text('usable_start_time'); - $form->text('usable_end_time'); - $form->text('discount_type'); + $form->text('title')->required()->maxLength(255,'最多只能输入500个字'); + $form->textarea('introduce')->required(); + + $form->text('full_amount')->width(2)->required()->floatTwo(); + $form->text('discounts')->width(2)->required()->floatTwo(); + $form->radio('discount_type')->options(config('coupon.discount_type'))->default(1)->required(); + $form->text('inventory')->width(2)->required()->type('number')->attribute('min', 1)->default(1); + + $form->datetime('start_time')->width(3)->required(); + $form->datetime('end_time')->width(3)->required(); + $form->datetime('usable_start_time')->width(3)->required(); + $form->datetime('usable_end_time')->width(3)->required(); + + $form->select('active_type')->width(3)->options(config('coupon.active_type'))->default(1); + /* 领取方式 */ + $receive = couponSettingModel::select('id','value','name')->where('category')->get(); + $form->select('receive_type')->width(3)->options([])->default(2); + + $form->select('type')->width(3)->options(config('coupon.type'))->default(1)->disable(); + $form->select('category')->width(3)->options(config('coupon.category'))->default(1)->disable(); + + /* 目前默认全平台的市场 2020-08-20*/ + $form->select('market_id')->width(3)->options(['所有市场'])->disable(); + /* 目前默认全平台的店铺分类 2020-08-20*/ + $form->select('storetype_id')->width(3)->options(['所有店铺类型'])->disable(); + + $form->radio('is_new_user')->options(config('coupon.is_new_user'))->default(2)->disable(); + + // $form->text('usable_number')->width(2)->default(1)->disable(); + $form->text('weigh')->width(2)->type('number')->attribute('min', 0)->default(0); + $form->text('remark')->maxLength(500,'最多只能输入500个字'); $form->display('created_at'); $form->display('updated_at'); diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php index 40cf396..30c1069 100644 --- a/app/Admin/bootstrap.php +++ b/app/Admin/bootstrap.php @@ -5,6 +5,7 @@ use Dcat\Admin\Grid; use Dcat\Admin\Form; use Dcat\Admin\Grid\Filter; use Dcat\Admin\Show; +use Dcat\Admin\Form\Field; /** * Dcat-admin - admin builder based on Laravel. @@ -24,3 +25,52 @@ use Dcat\Admin\Show; * Admin::js('/packages/prettydocs/js/main.js'); * */ + + // 官方例子,验证字符长度 +Field\Text::macro('len', function (int $length, ?string $error = null) { + // 前端验证逻辑扩展 + Admin::script( + <<<'JS' +Dcat.validator.extend('len', function ($el) { + console.log($el.val().length , $el.attr('data-len')); + return $el.val().length != $el.attr('data-len'); +}); +JS + ); + + // 同时添加后端验证逻辑,这个可以看需要 + $this->rules('size:'.$length); + + return $this->attribute([ + 'data-len' => $length, + 'data-len-error' => str_replace( + [':attribute', ':len'], + [$this->label, $length], + $error ?: "只能输入:len个字符" + ), + ]); +}); + +/* 验证最多包含两位小数的浮点数,可不带小数 */ +Field\Text::macro('floatTwo', function (int $bit = 2, ?string $error = null) { + // 前端验证逻辑扩展 + Admin::script( + <<<'JS' +Dcat.validator.extend('floatTwo', function ($el) { + return !(/^(([1-9]{1}\d*)|(0{1}))(\.\d{0,2})?$/.test($el.val())); +}); +JS + ); + + // 同时添加后端验证逻辑,这个可以看需要 + // $this->rules('size:'.$length); + + return $this->attribute([ + 'data-floatTwo' => '^(([1-9]{1}\d*)|(0{1}))(\.\d{0,2})?$', + 'data-floatTwo-error' => str_replace( + [':attribute', ':floatTwo'], + [$this->label, $bit], + $error ?: "只能输入数字(最多包含两位小数)" + ), + ]); +}); \ No newline at end of file diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 7d30093..51763e3 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -10,63 +10,73 @@ class Coupon extends Model { use HasDateTimeFormatter; use SoftDeletes; - + protected $table = 'ims_system_coupon_user'; - public function getStatusTextAttribute($value) + protected $appends = [ + 'status_text', + 'type_text', + 'category_text', + 'is_new_user_text', + 'discount_type_text', + 'active_type_text', + 'start_time_text', + 'end_time_text', + 'usable_start_time_text', + 'usable_end_time_text' + ]; + + public function getStatusTextAttribute() { + $value = $this->status; return isset(config('coupon.status')[$value])?config('coupon.status')[$value]:''; } - public function getTypeTextAttribute($value) + public function getTypeTextAttribute() { + $value = $this->type; return isset(config('coupon.type')[$value])?config('coupon.type')[$value]:''; } - public function getCategoryTextAttribute($value) + public function getCategoryTextAttribute() { + $value = $this->category; return isset(config('coupon.category')[$value])?config('coupon.category')[$value]:''; } - public function getIsNewUserTextAttribute($value) + public function getIsNewUserTextAttribute() { + $value = $this->is_new_user; return isset(config('coupon.is_new_user')[$value])?config('coupon.is_new_user')[$value]:''; } - public function getDiscountTypeTextAttribute($value) + public function getDiscountTypeTextAttribute() { + $value = $this->discount_type; return isset(config('coupon.discount_type')[$value])?config('coupon.discount_type')[$value]:''; } - public function getActiveTypeTextAttribute($value) + public function getActiveTypeTextAttribute() { + $value = $this->active_type; return isset(config('coupon.active_type')[$value])?config('coupon.active_type')[$value]:''; } - public function getStartTimeTextAttribute($value) + public function getStartTimeTextAttribute() { - $value = $value ? $value : ''; + $value = $this->start_time; return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } public function getEndTimeTextAttribute($value) { - $value = $value ? $value : ''; + $value = $this->usable_start_time; return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } - - // 转换 - public function getTypeAttribute($value) - { - return isset(config('coupon.type')[$value])?config('coupon.type')[$value]:''; - } - public function getDiscountTypeAttribute($value) + public function getUsableStartTimeTextAttribute() { - return isset(config('coupon.discount_type')[$value])?config('coupon.discount_type')[$value]:''; + $value = $this->start_time; + return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } - public function getActiveTypeAttribute($value) + public function getUsableEndTimeTextAttribute($value) { - return isset(config('coupon.active_type')[$value])?config('coupon.active_type')[$value]:''; + $value = $this->usable_end_time; + return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } - // public function getStartTimeAttribute($value) - // { - // $value = $value ? $value : ''; - // return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; - // } // 设置 protected function setStartTimeAttribute($value) diff --git a/app/Models/CouponReceiveType.php b/app/Models/CouponReceiveType.php new file mode 100644 index 0000000..6bb33cf --- /dev/null +++ b/app/Models/CouponReceiveType.php @@ -0,0 +1,14 @@ +