liutk 2026-02-23 21:26:54 +08:00
parent 26dc3dfa6f
commit 250f365281
5 changed files with 190 additions and 0 deletions

View File

@ -0,0 +1,99 @@
<?php
namespace App\Admin\Controllers;
use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Services\Admin\ContactService;
use App\Traits\CustomActionTrait;
use App\Admin\Components;
use App\Models\{Keyword};
use Slowlyo\OwlAdmin\Admin;
/**
* 在线询价
*
* @property ContactService $service
*/
class ContactController extends AdminController
{
use CustomActionTrait;
protected string $serviceName = ContactService::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('name', __('admin.contacts.name'))->columnRatio(3)
->placeholder(__('admin.contacts.name')),
amis()->TextControl('phone', __('admin.contacts.phone'))->columnRatio(3)
->placeholder(__('admin.contacts.phone')),
amis()->selectControl('type', __('admin.contacts.type'))->options(Keyword::allChildrenOfKey('contact_types')->pluck('name', 'id'))
->placeholder(__('admin.contacts.type'))->columnRatio(3),
]),
]))
->columns([
// amis()->TableColumn('id', __('admin.id'))->sortable(true)->width('50px'),
amis()->TableColumn('name', __('admin.contacts.name'))->width('300px'),
amis()->TableColumn('phone', __('admin.contacts.phone'))->width('300px'),
amis()->TableColumn('type', __('admin.contacts.type'))->type('mapping')
->map(Keyword::allChildrenOfKey('contact_types')->pluck('name', 'id')->toArray())
->itemSchema(amis()->Tag()->label('${item}')->color(Admin::setting()->get('system_theme_setting')['theme_color'] ?? '#1677ff')),
amis()->TableColumn('phone', __('admin.contacts.phone'))->width('300px'),
amis()->TableColumn('status', __('admin.contacts.status'))->type('switch'),
amis()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true),
amis()->TableColumn('updated_at', __('admin.updated_at'))->type('datetime')->sortable(true),
amis()->Operation()->label(__('admin.actions'))->buttons([
$this->rowShowTypeButton('drawer', 'md'),
])
]);
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('name', __('admin.project_articles.name'))->required(true),
amis()->TextareaControl('description', __('admin.project_articles.description')),
// amis()->selectControl('cate', __('admin.project_articles.cate'))->options(ProjectCate::get()->pluck('title', 'id'))->required(true),
Components::make()->keywordsTagControl('t_ids', __('admin.articles.tags'), 'case_study_tag')->required(true),
Components::make()->cropImageControl('cover', __('admin.project_articles.cover'), 0.775)->required(true),
Components::make()->sortControl('sort', __('admin.project_articles.sort')),
// amis()->DateTimeControl('published_at', __('admin.project_articles.published_at'))->format('YYYY-MM-DD HH:mm:ss')->description(__('admin.project_articles.published_at_remark')),
amis()->SwitchControl('is_enable', __('admin.project_articles.is_enable'))->value(false),
// amis()->SwitchControl('is_recommend', __('admin.project_articles.is_recommend'))->value(false),
// Components::make()->fileControl('appendixes', __('admin.articles.appendixes'), '.xsl,.xlsx,.txt,.doc,.docx,.pdf,.pptx'),
])->md(4),
amis()->Wrapper()->body([
Components::make()->fuEditorControl('content', __('admin.project_articles.content'))->required(true),
])->md(8)
]),
]);
}
public function detail(): Form
{
return $this->baseDetail()->panelClassName('px-0')->body([
amis()->Grid()->columns([
amis()->Wrapper()->body([
amis()->TextControl('name', __('admin.contacts.name'))->disabled(true),
amis()->TextControl('phone', __('admin.contacts.phone'))->disabled(true),
amis()->TextControl('company', __('admin.contacts.company'))->disabled(true),
amis()->selectControl('type', __('admin.contacts.type'))->options(Keyword::allChildrenOfKey('contact_types')->pluck('name', 'id'))->disabled(true),
amis()->TextareaControl('content', __('admin.contacts.content'))->disabled(true),
amis()->DateTimeControl('created_at', __('admin.contacts.created_at'))->format('YYYY-MM-DD HH:mm:ss')->disabled(true),
amis()->SwitchControl('status', __('admin.contacts.status'))->disabled(true),
]),
]),
]);
}
}

View File

@ -42,6 +42,7 @@ Route::group([
$router->resource('friend_links', \App\Admin\Controllers\FriendLinkController::class);
$router->resource('honors', \App\Admin\Controllers\HonorController::class);
$router->resource('timelines', \App\Admin\Controllers\TimelineController::class);
$router->resource('contacts', \App\Admin\Controllers\ContactController::class);
//修改上传
$router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']);

View File

@ -0,0 +1,44 @@
<?php
namespace App\Models\Filters;
use EloquentFilter\ModelFilter;
use Illuminate\Support\Arr;
class ContactFilter extends ModelFilter
{
/**
* 主键
*/
public function id($id)
{
return $this->where('id', $id);
}
/**
* 姓名
*/
public function name($name)
{
return $this->where('name','like', $name.'%');
}
/**
* 手机号
*/
public function phone($phone)
{
return $this->where('phone','like', $phone.'%');
}
/**
* 获取分类下的文章
*/
public function type($type)
{
return $this->where('type', $type);
}
public function status($status){
return $this->where('status', $status);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace App\Services\Admin;
use App\Models\Filters\ContactFilter;
use App\Models\Contact;
use Illuminate\Support\Arr;
/**
* @method Article getModel()
* @method Article|\Illuminate\Database\Query\Builder query()
*/
class ContactService extends BaseService
{
protected string $modelName = Contact::class;
protected string $modelFilterName = ContactFilter::class;
public function update($primaryKey, $data): bool
{
$columns = $this->getTableColumns();
$model = $this->query()->whereKey($primaryKey)->first();
foreach ($data as $k => $v) {
if (!in_array($k, $columns)) {
continue;
}
$model->setAttribute($k, $v);
}
return $model->save();
}
}

View File

@ -375,4 +375,15 @@ return [
'is_recommend' => '推荐',
'sort' => '排序',
],
'contacts' => [
'id' => '主键ID',
'name' => '姓名',
'phone'=> '手机号',
'company' =>'公司',
'type' => '业务需求类别',
'created_at' => '提交时间',
'updated_at' => '更新时间',
'status' => '处理状态',
'content' => '需求描述',
],
];