generated from liutk/owl-admin-base
0.4
parent
1b926b7b9e
commit
c77fed7b65
|
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Controllers;
|
||||
|
||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
||||
use App\Services\Admin\FriendLinkService;
|
||||
use App\Traits\CustomActionTrait;
|
||||
use App\Admin\Components;
|
||||
|
||||
/**
|
||||
* 合作伙伴
|
||||
*
|
||||
* @property FriendLinkService $service
|
||||
*/
|
||||
class FriendLinkController extends AdminController
|
||||
{
|
||||
use CustomActionTrait;
|
||||
protected string $serviceName = FriendLinkService::class;
|
||||
|
||||
public function list(): Page
|
||||
{
|
||||
$crud = $this->baseCRUD()->tableLayout('fixed')
|
||||
->headerToolbar([
|
||||
$this->createTypeButton('drawer', 'md'),
|
||||
...$this->baseHeaderToolBar(),
|
||||
])
|
||||
->filter($this->baseFilter()->body([
|
||||
amis()->GroupControl()->mode('horizontal')->body([
|
||||
// amis()->TextControl('id', __('admin.friend_links.id'))->columnRatio(3)
|
||||
// ->placeholder(__('admin.id')),
|
||||
amis()->TextControl('title', __('admin.friend_links.title'))->columnRatio(3)
|
||||
->placeholder(__('admin.friend_links.title')),
|
||||
]),
|
||||
]))
|
||||
->columns([
|
||||
amis()->TableColumn('id', 'ID')->sortable()->width('50px'),
|
||||
amis()->TableColumn('title', __('admin.friend_links.title')),
|
||||
amis()->TableColumn('link', __('admin.friend_links.link')),
|
||||
amis()->TableColumn('cover_url', __('admin.friend_links.cover'))->type('image')->height('50px')->width('250px')->enlargeAble(true),
|
||||
// amis()->TableColumn('description', __('admin.project_cates.description')),
|
||||
amis()->TableColumn('created_at', __('admin.created_at'))->set('type', 'datetime')->sortable()->width('150px'),
|
||||
amis()->Operation()->label(__('admin.actions'))->buttons([
|
||||
$this->rowEditTypeButton('drawer', 'md'),
|
||||
$this->rowDeleteButton(),
|
||||
])
|
||||
]);
|
||||
|
||||
return $this->baseList($crud);
|
||||
}
|
||||
|
||||
public function form($isEdit = false): Form
|
||||
{
|
||||
return $this->baseForm()->panelClassName('px-0')->body([
|
||||
amis()->Grid()->columns([
|
||||
amis()->Wrapper()->body([
|
||||
amis()->TextControl('title', __('admin.friend_links.title'))->required(true),
|
||||
amis()->TextControl('link', __('admin.friend_links.link'))->required(true),
|
||||
Components::make()->cropImageControl('cover', __('admin.friend_links.cover'))->required(true),
|
||||
amis()->TextareaControl('description', __('admin.friend_links.description')),
|
||||
Components::make()->sortControl('sort', __('admin.friend_links.sort')),
|
||||
])
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
public function detail(): Form
|
||||
{
|
||||
return $this->baseDetail()->body([]);
|
||||
}
|
||||
}
|
||||
|
|
@ -39,6 +39,7 @@ Route::group([
|
|||
$router->resource('project_photos', \App\Admin\Controllers\ProjectPhotoController::class);
|
||||
$router->resource('project_advances', \App\Admin\Controllers\ProjectAdvanceController::class);
|
||||
$router->resource('case_studies', \App\Admin\Controllers\CaseStudyController::class);
|
||||
$router->resource('friend_links', \App\Admin\Controllers\FriendLinkController::class);
|
||||
|
||||
//修改上传
|
||||
$router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Contact extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models\Filters;
|
||||
|
||||
use EloquentFilter\ModelFilter;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class FriendLinkFilter extends ModelFilter
|
||||
{
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
public function id($id)
|
||||
{
|
||||
return $this->where('id', $id);
|
||||
}
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
public function title($title)
|
||||
{
|
||||
return $this->where('title','like', '%'.$title.'%');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use EloquentFilter\Filterable;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
|
||||
class FriendLink extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use Filterable;
|
||||
|
||||
protected $appends = ['cover_url'];
|
||||
|
||||
protected function serializeDate(\DateTimeInterface $date)
|
||||
{
|
||||
return $date->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
protected $casts = [
|
||||
'created_at' => 'datetime:Y-m-d H:i:s',
|
||||
'updated_at' => 'datetime:Y-m-d H:i:s',
|
||||
];
|
||||
|
||||
protected function coverUrl():Attribute {
|
||||
return Attribute::make(
|
||||
get: fn($value) => $this->cover ? (Str::startsWith($this->cover, ['http://', 'https://']) ? $this->cover : Storage::url($this->cover)) : null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services\Admin;
|
||||
|
||||
use App\Models\FriendLink;
|
||||
use App\Models\Filters\FriendLinkFilter;
|
||||
use App\Traits\UploadTrait;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
/**
|
||||
* @method FriendLink getModel()
|
||||
* @method FriendLink|\Illuminate\Database\Query\Builder query()
|
||||
*/
|
||||
class FriendLinkService extends BaseService
|
||||
{
|
||||
use UploadTrait;
|
||||
|
||||
protected string $modelName = FriendLink::class;
|
||||
|
||||
protected string $modelFilterName = FriendLinkFilter::class;
|
||||
|
||||
public function store($data): bool
|
||||
{
|
||||
$columns = $this->getTableColumns();
|
||||
$model = $this->getModel();
|
||||
|
||||
$data['cover'] = $this->saveImage('cover', 'friend_links/cover')[0] ?? '';
|
||||
|
||||
foreach ($data as $k => $v) {
|
||||
if (!in_array($k, $columns)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$model->setAttribute($k, $v);
|
||||
}
|
||||
|
||||
return $model->save();
|
||||
}
|
||||
|
||||
public function update($primaryKey, $data): bool
|
||||
{
|
||||
$columns = $this->getTableColumns();
|
||||
$model = $this->query()->whereKey($primaryKey)->first();
|
||||
|
||||
|
||||
if(isset($data['cover'])){
|
||||
$data['cover'] = $this->saveImage('cover', 'friend_links/cover')[0] ?? '';
|
||||
}
|
||||
|
||||
foreach ($data as $k => $v) {
|
||||
if (!in_array($k, $columns)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$model->setAttribute($k, $v);
|
||||
}
|
||||
|
||||
return $model->save();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('contacts', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name')->nullable()->comment('姓名');
|
||||
$table->string('phone')->nullable()->comment('电话');
|
||||
$table->string('company')->nullable()->comment('公司名称');
|
||||
$table->unsignedTinyInteger('type')->nullable()->comment('业务需求');
|
||||
$table->string('content')->nullable()->comment('项目概况与备注');
|
||||
$table->unsignedTinyInteger('status')->default(0)->comment('状态:0未处理,1已处理');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('contacts');
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('friend_links', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title')->comment('标题');
|
||||
$table->text('description')->nullable()->comment('简介');
|
||||
$table->string('cover')->nullable()->comment('封面');
|
||||
$table->unsignedInteger('sort')->default(0)->comment('排序');
|
||||
$table->string('link')->nullable()->comment('链接地址');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('friend_links');
|
||||
}
|
||||
};
|
||||
|
|
@ -37,7 +37,7 @@ class AdminMenuSeeder extends Seeder
|
|||
]
|
||||
],
|
||||
['title'=> 'contacts', 'icon'=>'fluent-mdl2:chat-invite-friend','url'=>'/contacts', 'order'=>5],
|
||||
['title'=> 'friend_links' , 'icon'=>'carbon:ibm-cloud-direct-link-2-connect','url'=>'/contacts', 'order'=>6],
|
||||
['title'=> 'friend_links' , 'icon'=>'carbon:ibm-cloud-direct-link-2-connect','url'=>'/friend_links', 'order'=>6],
|
||||
['title' => 'admin_system', 'icon' => 'material-symbols:settings-outline', 'url' => '/system', 'order'=>7,
|
||||
'children' => [
|
||||
['title' => 'admin_users', 'icon' => '', 'url' => '/system/admin_users', 'order'=>1],
|
||||
|
|
|
|||
|
|
@ -343,4 +343,13 @@ return [
|
|||
'appendixes' => '附件',
|
||||
'published_at_remark' => '*若未设置发布时间且操作设置为显示,则默认生成发布时间',
|
||||
],
|
||||
'friend_links' => [
|
||||
'id' => '主键ID',
|
||||
'title' => '标题',
|
||||
'description'=> '简介',
|
||||
'content' => '内容',
|
||||
'cover' =>'封面',
|
||||
'sort' => '排序',
|
||||
'link'=>'链接地址'
|
||||
]
|
||||
];
|
||||
|
|
|
|||
Loading…
Reference in New Issue