0
点赞
收藏
分享

微信扫一扫

laravel-admin表格table创建与展示

奔跑的酆 2022-07-12 阅读 88

laravel-admin表格table创建与展示_字段
代码如下:

public function form()
{
$form = new Form(new XXX());
$form->text('name', '活动名称');
$form->text('slug', '活动Slug');

if ($form->isEditing()) {
$form->datetime('created_at', '创建时间')->readonly();
}

$form->table('xxx-json', '活动产品', function ($table) {
$table->select('product_id', '产品')->options(function ($id) {
$product = YYY::find($id);
return $product ? $product->pluck('pro_name', 'id') : [];
})->ajax('/admin/api/xxx-json');

$table->select('type', '权益类型')->options(self::TYPES);
$table->number('value', '数值');
});

// $form->hidden('content');// 必须要有这个,否则会报错content字段不存在\vendor\encore\laravel-admin\src\Form.php Line:900

$form->table('content', '权益', function ($table) {
$table->select('type', '类别')->options(self::OPTIONS);
$table->select('lang', '语言')->options(array_combine(Launch::LANGUAGES, Launch::LANGUAGES));
$table->text('value', '值');
});

$form->datetimeRange('start_time', 'end_time', '活动时间');
$form->select('status', '活动状态')->options(XXX::STATUS)->default(XXX::STATUS_VALID);
$form->select('style', '按钮样式')->options(XXX::STYLES)->default(XXX::STYLE_MORE);
$form->url('redirect', '跳转链接')->required();

if ($form->isEditing()) {
$form->url('link', '活动链接');
}

// hook 保存后拿到活动id然后再次保存,没有观察者好用,但是不知道观察者为啥不可用
$form->saved(function (Form $form) {
$activity = $form->model();
$activity->link = vsprintf(config('app.url') . '/share/%s?activity_id=%d', [$activity->slug, $activity->id]);
$activity->save();
});

// 设置创建人
$form->hidden('created_by')->default(Admin::user()->id);

$form->footer(function ($footer) {
// 去掉`查看`checkbox
$footer->disableViewCheck();
});
return $form;
}

编辑的时候展示:
laravel-admin表格table创建与展示_json_02

更新代码,需要转换数据为json,并对字段进行一些处理:

public function update(Request $request)
{
$activity_id = $request->route()->parameter('activity');
// Log::info('更新活动内容: ' . json_encode($request->all(), 320));
// 如果存在pk说明是行内编辑
if ($request->pk) {
$params[request('name')] = request('value');
} else {
$params = $this->validate($request, self::RULES);
// 过滤不需要的参数
foreach ($params as $field => $param) {
switch ($field) {
case 'content':
case 'products':
$data = array_filter($params[$field], function ($value) {
// 只要没被移除的
return isset($value['_remove_']) && !$value['_remove_'];
});
$params[$field] = json_encode($data, 320);
break;
}
}
}
// dd($params);
XXX::where('id', $activity_id)->update($params);
return admin_toastr('更新成功!', 'success');
}

模型里面也需要处理一下:

<?php

namespace App\Model\YYY;

use Illuminate\Database\Eloquent\Model;

class XXX extends Model
{
protected $connection = 'mysql_vip';
protected $table = 'vip_activities';
public $timestamps = true;
// 这里就是设置告诉设置的是json格式
protected $casts = [
'content' => 'json',
'products' => 'json',
];

public const STATUS_VALID = 10;
public const STATUS_DELETE = 20;
// 状态10:正常,20:删除
public const STATUS = [
self::STATUS_VALID => '正常',
self::STATUS_DELETE => '删除',
];

// 10:了解更多特权,20:立即体验
public const STYLE_MORE = 10;
public const STYLE_TRY = 20;
public const STYLES = [
self::STYLE_MORE => '了解更多特权',
self::STYLE_TRY => '立即体验',
];

protected $fillable = [
'name', 'slug', 'products', 'content', 'start_time', 'end_time', 'redirect', 'style', 'link', 'created_by', 'created_at', 'updated_at',
];

public function scopeHot($query)
{
return $query->where('share_count', ' > ', 100);
}

public function scopeTrashed($query)
{
return $query->where('status', self::STATUS_DELETE);
}

public function getContentAttribute($value)
{
// array_values取值是为了避免覆盖
return array_values(json_decode($value, true) ?: []);
}

public function setContentAttribute($value)
{
$this->attributes['content'] = json_encode(array_values($value));
}

public function getProductsAttribute($value)
{
// array_values取值是为了避免覆盖
return array_values(json_decode($value, true) ?: []);
}

public function setProductsAttribute($value)
{
$this->attributes['products'] = json_encode(array_values($value));
}
}


举报

相关推荐

0 条评论