作者 Richer

初始化

要显示太多修改。

为保证性能只显示 34 of 34+ 个文件。

root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
... ...
APP_NAME=ai-chat.weigoutong.com
APP_NAME_ZH=AI助手
APP_ENV=production
APP_KEY=base64:3I5SI8L6rBQRvOZranhb5Zt+OS7h3WqWWgrdkHTbnFE=
APP_DEBUG=true
APP_URL=http://ai-chat.weigoutong.com
APP_DOMAIN = ai-chat.weigoutong.com
LOG_CHANNEL=daily
DB_CONNECTION=mysql
DB_PORT=3306
DB_HOST=localhost
DB_DATABASE=ai-chat
DB_USERNAME=root
DB_PASSWORD=4deec965296ff346
# 远程数据库 美国服务器使用该配置
#DB_CONNECTION_REMOTE=mysql
#DB_PORT_REMOTE=3306
#DB_HOST_REMOTE=rm-uf63r3yhy6806wdpjqo.mysql.rds.aliyuncs.com
#DB_DATABASE_REMOTE=xzy.chatgpt
#DB_USERNAME_REMOTE=root
#DB_PASSWORD_REMOTE=zhangxinkeji@2003
# 远程数据库 本地服务器使用该配置
DB_CONNECTION_REMOTE=mysql
DB_PORT_REMOTE=3306
DB_HOST_REMOTE=47.251.45.96
DB_DATABASE_REMOTE=ai-chat
DB_USERNAME_REMOTE=ai-chat
DB_PASSWORD_REMOTE=5E7mKZ3jKMTrD6wK
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=database
SESSION_DRIVER=redis
SESSION_LIFETIME=120
#REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=NULL
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
JWT_SECRET=3QnPNbxLuAN1DToiUSi9IKVtjN8yh0XZE0n3U77owdGF4GqhJfakCMqFyWDc0c75
# alipay 配置
ALI_APP_ID=
ALI_PUBLIC_KEY=
ALI_PRIVATE_KEY=
# wechat 配置
WECHAT_OFFICIAL_ACCOUNT_APPID=
WECHAT_OFFICIAL_ACCOUNT_SECRET=
WECHAT_MCH_ID=1642977981
WECHAT_KEY=WXJ776688wxj776688LY15366249213W
WECHAT_MINI_APPID=wxd7941b64f8b9291b
WECHAT_MINI_SECRET=b4d742d47f9f08d3242ca8a426326a7a
#openai
OPENAI_API_KEY=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
#OPENAI_API_KEY=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
OPENAI_ORGANIZATION=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
... ...
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
... ...
/node_modules
/public/hot
/public/storage
/storage/*.key
/storage/*
/storage
/vendor
.env
.env.backup
.phpunit.result.cache
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
_ide_helper.php
_ide_helper_models.php
/.idea/
/backup
/vendor0711
/vendor0721
vendor0711.zip
... ...
php:
preset: laravel
disabled:
- unused_use
finder:
not-name:
- index.php
- server.php
js:
finder:
not-name:
- webpack.mix.js
css: true
... ...
## 初始化
```shell
#生成APP_KEY
php artisan key:generate
#生成JWT KEY
php artisan jwt:secret
# 目录 初始化 软连接
php artisan storage:link
# 目录权限
chmod -R 777 storage
# composer 初始化
composer update -o -vvv --no-dev --classmap-authoritative --ignore-platform-reqs
# 禁用相关函数
putenv proc_open
#
composer require symfony/symfony:5.4.x -w --ignore-platform-reqs
# 启动调度器
crontab -u www -e
# 生产
00 01 * * * /usr/bin/php /mnt/www.xxx.com/artisan schedule:run >> /mnt/www.xxx.com/storage/logs/schedule.log 2>&1
# 本地
* * * * * /usr/local/bin/php /Users/Nova/Projects/cloud/artisan schedule:run >> /Users/Nova/Projects/cloud/storage/logs/schedule.log 2>&1
# 测试
00 01 * * * /usr/bin/php /mnt/umiu/artisan schedule:run >> /mnt/umiu/storage/logs/schedule.log 2>&1
```
## 生产环境优化
```
配置信息缓存#:php artisan config:cache
路由缓存#:php artisan route:cache
类映射加载优化#:php artisan optimize --force (清除命令:php artisan clear-compiled)
自动加载优化:composer dumpautoload -o
使用 Memcached 来存储会话:SESSION_DRIVER=memcached
使用专业缓存驱动器:CACHE_DRIVER=redis
```
## 缓存清理
```
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```
## Composer 扩展包
```
1、alibabacloud/client 阿里云sdk
2、catlane/chunk-file-upload 单文件上传
3、dingo/api 框架接口
5、encore/laravel-admin laravel-admin
5、fruitcake/laravel-cors 跨域
6、intervention/image image 扩展
7、jpush/jpush 极光推送
8、maatwebsite/excel excel 扩展
9、overtrue/easy-sms 短信功能
10、overtrue/laravel-wechat 微信
11、overtrue/wechat 微信
12、simplesoftwareio/simple-qrcode 二维码
13、spatie/laravel-activitylog 日志
14、tymon/jwt-auth jwt
15、yansongda/laravel-pay 支付功能
```
## 规范
```
html:id、name 命名用"-"分割
css:命名用"-"分割
Jobs:将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间。
```
## 响应
```
错误:
Http Status Code 非200
Response {"code":0,"msg":"","data":{}}
```
## fix
```
composer overtrue/wechat
/Users/Nova/Projects/cloud/vendor/overtrue/wechat/src/Kernel/ServerGuard.php
line 323
if (0 === stripos($content, '<')) {
fix
if (0 === stripos(trim($content), '<')) {
```
## 其他
```
忽略PHP版本更新 composer update --ignore-platform-reqs
```
## 自定义artisan
```
目前的系统都是继承自基类,基本的方法都已经实现,需要开发新的功能的时候,只需要建立新的类即可,可以通过artisan来自动创建需要的类
路由:{name}s
控制层:{Name}Controller extends BaseController
表单验证层:{Name}Request
逻辑层: {Name}Service
模型层:{Name}
转换成:{Name}Transform
管理端gird类:{Name}Grid
管理端form类:{Name}Form
管理端控制层:{Name}Controller
机构端控制层:{Name}Controller
使用命令 php artisan make:api User --title=用户
1、会在 api路由中增加 $api->resource('users', UserController::class); 注意该文件是在路由文件最后,需要移动到对应的位置
2、会在 app\Http\Api\V1\Controllers 创建 controller 文件 UsersController
3、会在 app\Models 创建 model 文件 User
4、会在 app\Services 创建 service 文件 UserService
5、会在 app\Transformers 创建 transformer 文件 UserTransformer
6、会在 app\Http\Requests 创建 request 文件 UserCreateRequest 和 UserUpdateRequest
7、会在 app\Policies 创建 policy 文件 UserPolicy
8、会在 app\Admin\Grids 创建 grid 文件 UserGrid
9、会在 app\Admin\Forms 创建 form 文件 UserForm
10、会在 app\Admin\Controllers 创建 controller 文件 UsersController
10、会在 app\Agency\Controllers 创建 controller 文件 UsersController
```
... ...
## 初始化
```shell
#生成APP_KEY
php artisan key:generate
#生成JWT KEY
php artisan jwt:secret
# 目录 初始化 软连接
php artisan storage:link
# 目录权限
chmod -R 777 storage
# composer 初始化
composer update -o -vvv --no-dev --classmap-authoritative --ignore-platform-reqs
# 禁用相关函数
putenv proc_open
#
composer require symfony/symfony:5.4.x -w --ignore-platform-reqs
# 启动调度器
crontab -u www -e
# 生产
00 01 * * * /usr/bin/php /mnt/www.xxx.com/artisan schedule:run >> /mnt/www.xxx.com/storage/logs/schedule.log 2>&1
# 本地
* * * * * /usr/local/bin/php /Users/Nova/Projects/cloud/artisan schedule:run >> /Users/Nova/Projects/cloud/storage/logs/schedule.log 2>&1
# 测试
00 01 * * * /usr/bin/php /mnt/umiu/artisan schedule:run >> /mnt/umiu/storage/logs/schedule.log 2>&1
```
## 生产环境优化
```
配置信息缓存#:php artisan config:cache
路由缓存#:php artisan route:cache
类映射加载优化#:php artisan optimize --force (清除命令:php artisan clear-compiled)
自动加载优化:composer dumpautoload -o
使用 Memcached 来存储会话:SESSION_DRIVER=memcached
使用专业缓存驱动器:CACHE_DRIVER=redis
```
## 缓存清理
```
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```
## Composer 扩展包
```
1、alibabacloud/client 阿里云sdk
2、catlane/chunk-file-upload 单文件上传
3、dingo/api 框架接口
5、encore/laravel-admin laravel-admin
5、fruitcake/laravel-cors 跨域
6、intervention/image image 扩展
7、jpush/jpush 极光推送
8、maatwebsite/excel excel 扩展
9、overtrue/easy-sms 短信功能
10、overtrue/laravel-wechat 微信
11、overtrue/wechat 微信
12、simplesoftwareio/simple-qrcode 二维码
13、spatie/laravel-activitylog 日志
14、tymon/jwt-auth jwt
15、yansongda/laravel-pay 支付功能
```
## 规范
```
html:id、name 命名用"-"分割
css:命名用"-"分割
Jobs:将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间。
```
## 响应
```
错误:
Http Status Code 非200
Response {"code":0,"msg":"","data":{}}
```
## fix
```
composer overtrue/wechat
/Users/Nova/Projects/cloud/vendor/overtrue/wechat/src/Kernel/ServerGuard.php
line 323
if (0 === stripos($content, '<')) {
fix
if (0 === stripos(trim($content), '<')) {
```
## 其他
```
忽略PHP版本更新 composer update --ignore-platform-reqs
```
## 自定义artisan
```
目前的系统都是继承自基类,基本的方法都已经实现,需要开发新的功能的时候,只需要建立新的类即可,可以通过artisan来自动创建需要的类
路由:{name}s
控制层:{Name}Controller extends BaseController
表单验证层:{Name}Request
逻辑层: {Name}Service
模型层:{Name}
转换成:{Name}Transform
管理端gird类:{Name}Grid
管理端form类:{Name}Form
管理端控制层:{Name}Controller
机构端控制层:{Name}Controller
使用命令 php artisan make:api User --title=用户
1、会在 api路由中增加 $api->resource('users', UserController::class); 注意该文件是在路由文件最后,需要移动到对应的位置
2、会在 app\Http\Api\V1\Controllers 创建 controller 文件 UsersController
3、会在 app\Models 创建 model 文件 User
4、会在 app\Services 创建 service 文件 UserService
5、会在 app\Transformers 创建 transformer 文件 UserTransformer
6、会在 app\Http\Requests 创建 request 文件 UserCreateRequest 和 UserUpdateRequest
7、会在 app\Policies 创建 policy 文件 UserPolicy
8、会在 app\Admin\Grids 创建 grid 文件 UserGrid
9、会在 app\Admin\Forms 创建 form 文件 UserForm
10、会在 app\Admin\Controllers 创建 controller 文件 UsersController
10、会在 app\Agency\Controllers 创建 controller 文件 UsersController
要将 ChatGPT 集成到 Laravel 中,可以将 ChatGPT API 请求封装为 Laravel 服务。该服务可以在需要使用 ChatGPT 的地方被注入,并可在应用程序的其余部分中使用。
首先,您需要创建服务类。该类可以使用 Guzzle Http 软件包来发出 API 请求。然后,在 config/services.php 文件中添加 ChatGPT 服务的配置。最后,您可以通过 Laravel 中的依赖注入容器使用服务。
以下是代码示例:
创建服务类
namespace App\Services;
use GuzzleHttp\Client;
class ChatGPTService
{
protected $http;
public function __construct(Client $http)
{
$this->http = $http;
}
public function generateResponse($input)
{
$response = $this->http->post('https://api.openai.com/v1/engines/davinci-codex/completions', [
'headers' => [
'Authorization' => 'Bearer API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'prompt' => $input.'\n\n',
'max_tokens' => 100,
'temperature' => 0.8,
],
]);
return json_decode((string) $response->getBody(), true);
}
}
添加配置信息到 services.php
'chatgpt' => [
'api_key' => env('CHATGPT_API_KEY'),
],
注册服务类到服务容器
$this->app->singleton(ChatGPTService::class, function ($app) {
$httpClient = new \GuzzleHttp\Client();
return new ChatGPTService($httpClient);
});
现在您可以在控制器或其他服务中注入 ChatGPT 服务,并使用它来生成响应。例如:
public function index(ChatGPTService $chatGPTService)
{
$chatResponse = $chatGPTService->generateResponse('Hello!');
return view('welcome', ['response' => $chatResponse]);
}
其中,'Hello!' 是 ChatGPT 服务的输入,可以将其替换为实际的用户输入。
```
... ...
<?php
namespace App\Admin\Actions\Importer;
use Encore\Admin\Actions\Action;
use Illuminate\Http\Request;
class FarmerImport extends Action
{
protected $selector = '.farmer-import';
public function handle(Request $request)
{
// $request ...
return $this->response()->success('Success message...')->refresh();
}
public function html()
{
return <<<HTML
<a class="btn btn-sm btn-default farmer-import">导入数据</a>
HTML;
}
}
... ...
<?php
namespace App\Admin\Actions\Post;
use Encore\Admin\Actions\Action;
use Illuminate\Http\Request;
class \ImportPost extends Action
{
protected $selector = '.import-post';
public function handle(Request $request)
{
// $request ...
return $this->response()->success('Success message...')->refresh();
}
public function html()
{
return <<<HTML
<a class="btn btn-sm btn-default import-post">导入数据</a>
HTML;
}
}
\ No newline at end of file
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 关于我们 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2022年2月16日14:15:18
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Rewrite\Form;
use App\Models\AboutUs;
use Encore\Admin\Form\Tools;
use Encore\Admin\Layout\Content;
use Symfony\Component\HttpFoundation\Response;
/**
* Class AboutUsController.
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2022年2月16日14:15:18
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class AboutUsController extends BaseController
{
// 使用Grid和Form的trait
/**
* AboutUsController constructor.
*
* @param AboutUs $model 注入model
*/
public function __construct(AboutUs $model)
{
// 资源显示的中文名称
$this->title = $model::OBJ_NAME_ZH;
// 资源显示的名称
$this->type = $model::OBJ_NAME;
// 表名称
$this->table = $model::TABLE;
// 是否可查看
$this->can_view = true;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* User setting page.
*
* @param Content $content
*
* @return Content
*/
public function getAboutUs(Content $content)
{
// 获取 boss
$boss = $this->model->first();
$form = $this->settingForm();
$form->tools(
function (Tools $tools) {
$tools->disableList();
$tools->disableDelete();
$tools->disableView();
}
);
if ($boss) {
return $content
->title(trans('admin.user_setting'))
->body($form->edit(optional($boss)->id));
} else {
return $content
->title(trans('admin.user_setting'))
->body($form);
}
}
/**
* Update user setting.
*
* @return Response
*/
public function postAboutUs()
{
return $this->settingForm()->store();
}
/**
* Update user setting.
*
* @return Response
*/
public function putAboutUs()
{
return $this->settingForm()->update(1);
}
/**
* Model-form for user setting.
*
* @return Form
*/
protected function settingForm()
{
$form = new Form($this->model);
$form->text('title', '标题')->required()->setWidth(10, 1)->setGroupClass('col-md-12');
$form->editor('body', '详情')->required()->help('请上传小于1G的视频...')->setWidth(10, 1)->setGroupClass('col-md-12');
// $this->formRichTextField('body', '详情', 1);
// $form->textarea('name', trans('admin.name'))->rules('required')->setWidth(10, 1)->setGroupClass('col-md-12');
$form->setAction(admin_url('about-us'));
$form->saved(function () {
admin_toastr(trans('admin.update_succeeded'));
return redirect(admin_url('about-us'));
});
return $form;
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 管理端用户角色 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Admin
* @package App\Admin\Controllers\Admin
* @author Richer <yangzi1028@163.com>
* @date 2021年6月23日14:47:37
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Admin;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Admin\RoleForm;
use App\Admin\Grids\Admin\RoleGrid;
use App\Models\Admin\Role;
use Encore\Admin\Form;
use Encore\Admin\Grid;
/**
* Class RolesController.
*
* @category App\Admin\Controllers\Admin
* @package App\Admin\Controllers\Admin
* @author Richer <yangzi1028@163.com>
* @date 2021年6月23日14:47:37
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class RolesController extends BaseController
{
// 使用Grid和Form的trait
use RoleGrid, RoleForm;
/**
* RolesController constructor.
*
* @param Role $model 注入model
*/
public function __construct(Role $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid1()
{
$grid = new Grid($this->model);
$grid->column('id', 'ID')->sortable();
// $grid->column('slug', __('slug'));
$grid->column('name', __('name'));
$grid->column('permissions', __('permission'))->pluck('name')->label();
$grid->column('created_at', __('created_at'));
$grid->column('updated_at', __('updated_at'));
$grid->actions(function (Grid\Displayers\Actions $actions) {
if ($actions->row->slug == 'administrator') {
$actions->disableDelete();
}
});
$grid->tools(function (Grid\Tools $tools) {
$tools->batch(function (Grid\Tools\BatchActions $actions) {
$actions->disableDelete();
});
});
return $grid;
}
/**
* Make a form builder.
*
* @return Form
*/
public function form1($id = null)
{
$permissionModel = config('admin.database.permissions_model');
$roleModel = config('admin.database.roles_model');
$form = new Form(new $roleModel());
$form->display('id', 'ID');
$form->text('slug', __('slug'))->rules('required');
$form->text('name', __('name'))->rules('required');
$form->listbox('permissions', __('permissions'))->options($permissionModel::all()->pluck('name', 'id'));
$form->display('created_at', __('created_at'));
$form->display('updated_at', __('updated_at'));
return $form;
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 会员 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @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\Controllers\Admin;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Admin\UserForm;
use App\Admin\Grids\Admin\UserGrid;
use App\Admin\Grids\User\UserInfoGrid;
use App\Models\Admin\User;
use App\Models\User\UserInfo;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use Illuminate\Support\Facades\Hash;
/**
* Class UserInfosController.
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @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/
*/
class UserInfosController extends BaseController
{
// 使用Grid和Form的trait
use UserInfoGrid, UserForm;
/**
* UsersController constructor.
*
* @param UserInfo $model 注入model
*/
public function __construct(UserInfo $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid1()
{
$grid = new Grid($this->model);
$grid->column('id', 'ID')->sortable();
$grid->column('username', trans('admin.username'));
$grid->column('name', trans('admin.name'));
$grid->column('roles', trans('admin.roles'))->pluck('name')->label();
$grid->column('created_at', trans('admin.created_at'));
$grid->column('updated_at', trans('admin.updated_at'));
$grid->actions(function (Grid\Displayers\Actions $actions) {
if ($actions->getKey() == 1) {
$actions->disableDelete();
}
});
$grid->tools(function (Grid\Tools $tools) {
$tools->batch(function (Grid\Tools\BatchActions $actions) {
$actions->disableDelete();
});
});
return $grid;
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
$userModel = config('admin.database.users_model');
$show = new Show($userModel::findOrFail($id));
$show->field('id', 'ID');
$show->field('username', trans('admin.username'));
$show->field('name', trans('admin.name'));
$show->field('roles', trans('admin.roles'))->as(function ($roles) {
return $roles->pluck('name');
})->label();
$show->field('permissions', trans('admin.permissions'))->as(function ($permission) {
return $permission->pluck('name');
})->label();
$show->field('created_at', trans('admin.created_at'));
$show->field('updated_at', trans('admin.updated_at'));
return $show;
}
/**
* Make a form builder.
*
* @return Form
*/
public function form1()
{
$userModel = config('admin.database.users_model');
$permissionModel = config('admin.database.permissions_model');
$roleModel = config('admin.database.roles_model');
$form = new Form(new $userModel());
$userTable = config('admin.database.users_table');
$connection = config('admin.database.connection');
$form->display('id', 'ID');
$form->text('username', trans('admin.username'))
->creationRules(['required', "unique:{$connection}.{$userTable}"])
->updateRules(['required', "unique:{$connection}.{$userTable},username,{{id}}"]);
$form->text('name', trans('admin.name'))->rules('required');
$form->image('avatar', trans('admin.avatar'));
$form->password('password', trans('admin.password'))->rules('required|confirmed');
$form->password('password_confirmation', trans('admin.password_confirmation'))->rules('required')
->default(function ($form) {
return $form->model()->password;
});
$form->ignore(['password_confirmation']);
$form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id'));
$form->multipleSelect('permissions', trans('admin.permissions'))->options($permissionModel::all()->pluck('name', 'id'));
$form->display('created_at', trans('admin.created_at'));
$form->display('updated_at', trans('admin.updated_at'));
$form->saving(function (Form $form) {
if ($form->password && $form->model()->password != $form->password) {
$form->password = Hash::make($form->password);
}
});
return $form;
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 会员 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @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\Controllers\Admin;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Admin\UserForm;
use App\Admin\Grids\Admin\UserGrid;
use App\Models\Admin\User;
use App\Models\Area\Area;
use App\Models\Area\Village;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use Illuminate\Support\Facades\Hash;
/**
* Class UsersController.
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @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/
*/
class UsersController extends BaseController
{
// 使用Grid和Form的trait
use UserGrid, UserForm;
/**
* UsersController constructor.
*
* @param User $model 注入model
*/
public function __construct(User $model)
{
// 资源显示的中名称
$this->title = '安全负责人管理';
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid1()
{
$grid = new Grid($this->model);
$grid->column('id', 'ID')->sortable();
$grid->column('username', trans('admin.username'));
$grid->column('name', trans('admin.name'));
$grid->column('roles', trans('admin.roles'))->pluck('name')->label();
$grid->column('created_at', trans('admin.created_at'));
$grid->column('updated_at', trans('admin.updated_at'));
$grid->actions(function (Grid\Displayers\Actions $actions) {
if ($actions->getKey() == 1) {
$actions->disableDelete();
}
});
$grid->tools(function (Grid\Tools $tools) {
$tools->batch(function (Grid\Tools\BatchActions $actions) {
$actions->disableDelete();
});
});
return $grid;
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
$userModel = config('admin.database.users_model');
$show = new Show($userModel::findOrFail($id));
$show->field('id', 'ID');
$show->field('username', trans('admin.username'));
$show->field('name', trans('admin.name'));
$show->field('roles', trans('admin.roles'))->as(function ($roles) {
return $roles->pluck('name');
})->label();
$show->field('permissions', trans('admin.permissions'))->as(function ($permission) {
return $permission->pluck('name');
})->label();
$show->field('created_at', trans('admin.created_at'));
$show->field('updated_at', trans('admin.updated_at'));
return $show;
}
/**
* Make a form builder.
*
* @return Form
*/
public function form1()
{
$userModel = config('admin.database.users_model');
$permissionModel = config('admin.database.permissions_model');
$roleModel = config('admin.database.roles_model');
$form = new Form(new $userModel());
$userTable = config('admin.database.users_table');
$connection = config('admin.database.connection');
$form->display('id', 'ID');
$form->text('username', trans('admin.username'))
->creationRules(['required', "unique:{$connection}.{$userTable}"])
->updateRules(['required', "unique:{$connection}.{$userTable},username,{{id}}"]);
$form->text('name', trans('admin.name'))->rules('required');
$form->image('avatar', trans('admin.avatar'));
$form->password('password', trans('admin.password'))->rules('required|confirmed');
$form->password('password_confirmation', trans('admin.password_confirmation'))->rules('required')
->default(function ($form) {
return $form->model()->password;
});
$form->ignore(['password_confirmation']);
$form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id'));
$form->multipleSelect('permissions', trans('admin.permissions'))->options($permissionModel::all()->pluck('name', 'id'));
$form->display('created_at', trans('admin.created_at'));
$form->display('updated_at', trans('admin.updated_at'));
$form->saving(function (Form $form) {
if ($form->password && $form->model()->password != $form->password) {
$form->password = Hash::make($form->password);
}
});
return $form;
}
/**
* @return \Illuminate\Http\JsonResponse
*/
public function areas()
{
$id = request('user_id');
// 获取当前用户的全部区域
$userAreas = optional(optional($this->model->find($id))->areas)->toArray();
$userVillages = [];
$userGroups = [];
if ($userAreas) {
foreach ($userAreas as $userArea) {
if ($userArea['area_type'] === Area::VILLAGE) {
$userVillages[] = $userArea['area_id'];
} elseif ($userArea['area_type'] === Area::GROUP) {
$userGroups[] = $userArea['area_id'];
}
}
}
// 获取全部的社区和村并进行组合
$villages = Village::where('status', config('constants.STATUS_OK'))->get(['id','title'])->map(function ($village) use ($userVillages, $userGroups) {
$groups = $village->groups()->where('status', config('constants.STATUS_OK'))->get(['id','title','village_id'])->map(function ($group) use ($userGroups) {
// $buildings = $group->buildings()->where('status', config('constants.STATUS_OK'))->get(['id','title','group_id'])->map(function ($building) {
// return [
// 'id' => $building->id ,
// 'title' => $building->title ,
// ];
// })->toArray();
$checked = '';
if (in_array($group->id, $userGroups)) {
$checked = 'checked';
}
return [
'id' => $group->id ,
'title' => $group->title ,
'checked' => $checked ,
// 'children' => $buildings
];
})->toArray();
$checked = '';
if (in_array($village->id, $userVillages)) {
$checked = 'checked';
}
return [
'id' => $village->id ,
'title' => $village->title ,
'children' => $groups,
'checked' => $checked
];
})->toArray();
return response()->json($villages);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: Advertisement 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年4月20日14:26:14
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Forms\AdvertisementForm;
use App\Admin\Grids\AdvertisementGrid;
use App\Models\Advertisement;
/**
* Class AdvertisementsController.
*
* @package App\Admin\Controllers
*/
class AdvertisementsController extends BaseController
{
use AdvertisementGrid, AdvertisementForm;
/**
* AdvertisementsController constructor.
*
* @param Advertisement $model 注入model
*/
public function __construct(Advertisement $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-社区 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年1月27日10:57:55
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Area\AreaForm;
use App\Admin\Grids\Area\AreaGrid;
use App\Models\Area\Area;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
/**
* Class VillagesController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年6月16日15:40:14
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class AreasController extends BaseController
{
// 使用Grid和Form的trait
use AreaGrid, AreaForm;
/**
* CommunitiesController constructor.
*
* @param Area $model 注入model
*/
public function __construct(Area $model)
{
// 资源显示的中文名称
$this->title = $model::OBJ_NAME;
// 资源显示的名称
$this->type = $model::OBJ_NAME;
// 所在级别
$this->level = $model::LEVEL;
// 表名称
$this->table = $model::TABLE;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* @return JsonResponse
*/
public function getSelectOptions()
{
$list = $this->model::getSelectOptions(request('q'), 'link');
return response()->json($list);
}
/**
* @return JsonResponse
*/
public function getSelectOptionsByProvince()
{
$list = $this->model::getSelectOptionsByProvince(request('q'), 'link');
return response()->json($list);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\City;
/**
* Class CitiesController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class CitiesController extends AreasController
{
/**
* CitiesController constructor.
*
* @param City $model 注入model
*/
public function __construct(City $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\City;
use App\Models\Area\County;
/**
* Class CountiesController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class CountiesController extends AreasController
{
/**
* CountiesController constructor.
*
* @param County $model 注入model
*/
public function __construct(County $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\Group;
use App\Models\Area\Village;
/**
* Class GroupsController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class GroupsController extends AreasController
{
/**
* GroupsController constructor.
*
* @param Group $model 注入model
*/
public function __construct(Group $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\Province;
/**
* Class ProvincesController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class ProvincesController extends AreasController
{
/**
* ProvincesController constructor.
*
* @param Province $model 注入model
*/
public function __construct(Province $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\City;
use App\Models\Area\County;
use App\Models\Area\Township;
/**
* Class TownshipsController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class TownshipsController extends AreasController
{
/**
* TownshipsController constructor.
*
* @param Township $model 注入model
*/
public function __construct(Township $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 区域-省份 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Area;
use App\Models\Area\City;
use App\Models\Area\County;
use App\Models\Area\Township;
use App\Models\Area\Village;
/**
* Class VillagesController.
*
* @category App\Admin\Controllers\Area
* @package App\Admin\Controllers\Area
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日19:37:49
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class VillagesController extends AreasController
{
/**
* VillagesController constructor.
*
* @param Village $model 注入model
*/
public function __construct(Village $model)
{
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
namespace App\Admin\Controllers\Auth;
use App\Models\Area\Area;
use App\Admin\Rewrite\Auth\Database\OperationLog;
use Encore\Admin\Controllers\LogController as BaseController;
use Encore\Admin\Grid;
use Illuminate\Support\Str;
class LogController extends BaseController
{
/**
* {@inheritdoc}
*/
protected function title()
{
return trans('admin.operation_log');
}
/**
* @return Grid
*/
protected function grid()
{
$menuModel = config('admin.database.menu_model');
$menu = $menuModel::get()->toArray();
$operations = [];
foreach ($menu as $key => $value) {
if ($value['uri']) {
$operation['url'] = 'admin'.$value['uri'];
if ($value['uri'] == '/') {
$operation['url'] = 'admin';
}
} else {
$operation['url'] = '';
}
$operation['title'] = $value['title'];
$operations[] = $operation;
}
// 增加其他的设置
$grid = new Grid(new OperationLog());
$ignore_path = ['admin/_handle_renderable_', 'admin/user/card','admin/user/password','admin/user/card-reader'];
$grid->model()->whereNotIn('path', $ignore_path)
->where('path', 'NOT LIKE', '%select-options%')
// ->where('path', 'NOT LIKE' ,'%handle-page%')
->where('path', 'NOT LIKE', '%_handle_renderable_%')
->where('path', 'NOT LIKE', '%_handle_action_%')
->orderBy('id', 'DESC');
$grid->column('id', 'ID')->sortable();
$grid->column('user.name', '访问用户');
$grid->path('访问地址')->label('info');
$grid->method_zh('请求方法')->label('primary');
$grid->ip('ip地址')->label('primary');
$grid->show('操作描述')->display(function () use ($operations) {
$path = $this->path;
$method = $this->method;
$input = json_decode($this->input, true);
$operate = '';
if (Str::contains($path, 'area/village/select-options')) {
return '查询 '.Area::VILLAGE_ZH.' options 数据';
} elseif (Str::contains($path, 'area/group/select-options')) {
return '查询 '.Area::GROUP_ZH.' options 数据';
} elseif (Str::contains($path, 'area/building/select-options')) {
return '查询 '.Area::BUILDING_ZH.' options 数据';
} elseif (Str::contains($path, 'area/room/select-options')) {
return '查询 '.Area::ROOM_ZH.' options 数据';
} elseif (Str::contains($path, 'admin/map-data')) {
return '查询 地图 数据';
} elseif (Str::contains($path, 'auth/menu')) {
return '进入 菜单 列表';
} elseif (Str::contains($path, 'map/room')) {
return '地图 查询 房间';
} elseif (Str::contains($path, 'map/data-page')) {
return '地图 地图 数据';
} elseif (Str::contains($path, 'admin/report-locks')) {
return '进入 智能门锁报告 列表';
} elseif (Str::contains($path, 'admin/user/password')) {
return '打开 用户密码 界面';
} elseif (Str::contains($path, 'admin/user/password')) {
return '打开 用户密码 界面';
}
// if ($path == 'admin/area/room/select-options') {
// dump($path);
// }
foreach ($operations as $key => $value) {
if ($value['url']) {
if (Str::startsWith($path, $value['url'])) {
//
if ($path == $value['url']) {
if ($method == 'GET') {
$operate = '进入'.$value['title'] .'列表';
} elseif ($method == 'POST') {
$operate = '新增'.$value['title'];
}
} else {
// 定义操作
$behind = 'ID为<span style="font-weight:bold;font-size:18px;padding:0 3px;">
{id}</span>的<span style="font-weight:bold; padding:0 3px;">'.
$value['title'].
'</span>';
$action = '';
$id = 0;
if (Str::endsWith($path, 'edit')) {
$operate = '进入'.$value['title'] .'编辑页面';
} elseif (Str::endsWith($path, 'create')) {
$operate = '进入'.$value['title'] .'新增页面';
} elseif (Str::endsWith($path, 'chunk-file-upload')) {
return '上传大视频';
} else {
if (strstr($path, 'audit/pass')) {
if ($method == 'PUT') {
$temp = explode('/', $path);
$id =$temp[count($temp)-1];
// $operate = '审核不通过ID为<span class="label label-info">'.$id.'</span>的'.$value['title'];
$action ='<span style="color: green">审核通过</span>';
}
} elseif (strstr($path, 'audit/refusal')) {
if ($method == 'PUT') {
$temp = explode('/', $path);
$id =$temp[count($temp)-1];
// $operate = '审核不通过ID为<span class="label label-info">'.$id.'</span>的'.$value['title'];
$action ='<span style="color:red">审核不通过</span>';
}
} elseif (strstr($path, 'offline')) {
if ($method == 'PUT') {
$temp = explode('/', $path);
$id =$temp[count($temp)-1];
//
$action ='<span style="color:#f39c12">下架</span>';
}
} elseif (strstr($path, 'online')) {
if ($method == 'PUT') {
$temp = explode('/', $path);
$id =$temp[count($temp)-1];
$action ='<span style="color:#398439">上架</span>';
}
} elseif (strstr($path, 'cancelTopping')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/cancelTopping', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#f39c12">取消置顶</span>';
}
} elseif (strstr($path, 'setTopping')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/setTopping', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#398439">置顶</span>';
}
} elseif (strstr($path, 'enable')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/enable', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#398439">启用</span>';
}
} elseif (strstr($path, 'disable')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/disable', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#f39c12">禁用</span>';
}
} elseif (strstr($path, 'restore')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/restore', '', $path));
$id =$temp[count($temp)-1];
$action ='<span class="text text-success">恢复</span>';
}
} elseif (strstr($path, 'drill')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/drill', '', $path));
$id =$temp[count($temp)-1];
$action ='<span class="text text-warning">演习</span>';
}
} elseif (strstr($path, 'notify')) {
if ($method == 'POST') {
$temp = explode('/', str_replace('/notify', '', $path));
$id =$temp[count($temp)-1];
$action ='<span class="text text-success">通知</span>';
}
} elseif (strstr($path, 'update')) {
if ($method == 'PUT') {
$temp = explode('/', str_replace('/update', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#398439">更新</span>';
}
} elseif (strstr($path, 'info')) {
if ($method == 'GET') {
$temp = explode('/', str_replace('/info', '', $path));
$id =$temp[count($temp)-1];
$action ='<span style="color:#398439">查看</span>';
}
} else {
$id = str_replace($value['url'] .'/', '', $path);
// if ($path == 'admin/warnings/16/users') {
// dump($path);dump($value['url']);
// dump($value['title']);
//
// }
if ($method == 'GET') {
$id = str_replace('/edit', '', $id);
$action ='编辑';
if ($path =='admin/auth/login') {
return '<span style="color: green">登录</span>';
} elseif ($path =='admin/auth/logout') {
return '<span style="color:#999">退出登录</span>';
} elseif ($path =='admin/statistics/users') {
return '查看数据面板会员统计图';
} elseif ($path =='admin/statistics/orders') {
return '查看数据面板订单统计图';
} elseif ($path =='admin/statistics/sales') {
return '查看数据面板销售额统计图';
} elseif (strstr($path, 'quotations')) {
return '查看方案的报价单';
}
} elseif ($method == 'DELETE') {
$temp = explode('/', str_replace('/notify', '', $path));
$id =$temp[count($temp)-1];
$action ='<span class="text text-danger">删除</span>';
} elseif ($method == 'PUT') {
$action ='<span style="color:#398439">更新</span>';
}
}
$behind = str_replace('{id}', $id, $behind);
$operate = '<span style="font-weight:bold;padding:0 3px;">'.$action .'</span>'. $behind;
}
}
}
}
}
return $operate;
});
$grid->column('created_at', trans('admin.created_at'));
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableEdit();
$actions->disableView();
});
$grid->disableCreateButton();
$grid->disableExport();
$grid->disableRowSelector();
$grid->filter(function (Grid\Filter $filter) {
// $userModel = config('admin.database.users_model');
$filter->between('created_at', '操作时间')->date();
// $filter->equal('user_id', 'User')->select($userModel::all()->pluck('name', 'id'));
$filter->equal('method')->select(OperationLog::$methodShows)->placeholder('请求方法');
// $filter->like('path');
// $filter->equal('ip');
//去掉默认的搜索
$filter->disableIdFilter();
});
return $grid;
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 重写laravel-admin Auth控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* @copyright Copyright
* @author Richer
* @package App\Admin\Controllers
* @version 2020年3月23日,14:13:13
* @link
*/
namespace App\Admin\Controllers\Auth;
use App\Admin\Rewrite\Controllers\BaseMenuController;
class MenuController extends BaseMenuController
{
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 重写laravel-admin Auth控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* @copyright Copyright
* @author Richer
* @package App\Admin\Controllers
* @version 2020年3月23日,14:13:13
* @link
*/
namespace App\Admin\Controllers\Auth;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Admin\PermissionForm;
use App\Admin\Grids\Admin\PermissionGrid;
use App\Models\Admin\Permission;
class PermissionController extends BaseController
{
// 使用Grid和Form的trait
use PermissionGrid, PermissionForm;
/**
* RoleController constructor.
*
* @param Permission $model 注入model
*/
public function __construct(Permission $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 重写laravel-admin Auth控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* @copyright Copyright
* @author Richer
* @package App\Admin\Controllers
* @version 2020年3月23日,14:13:13
* @link
*/
namespace App\Admin\Controllers\Auth;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\Admin\RoleForm;
use App\Admin\Grids\Admin\RoleGrid;
use App\Admin\Rewrite\Controllers\BaseRoleController;
use App\Models\Admin\Role;
class RoleController extends BaseController
{
// 使用Grid和Form的trait
use RoleGrid, RoleForm;
/**
* RoleController constructor.
*
* @param Role $model 注入model
*/
public function __construct(Role $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 重写 laravel-admin 用户 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Auth
* @package App\Admin\Controllers\Auth
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日13:56:38
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers\Auth;
use App\Admin\Controllers\BaseController;
use App\Admin\Forms\User\AdminForm;
use App\Admin\Forms\User\UserForm;
use App\Admin\Grids\User\AdminGrid;
use App\Admin\Grids\User\UserGrid;
use App\Models\User\Admin;
use App\Models\User\User;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use Illuminate\Support\Facades\Hash;
/**
* Class UserController
*
* @category App\Admin\Controllers\Auth
* @package App\Admin\Controllers\Auth
* @author Richer <yangzi1028@163.com>
* @date 2021年11月3日13:56:38
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class UserController extends BaseController
{
// 使用Grid和Form的trait
use AdminGrid, AdminForm;
/**
* UsersController constructor.
*
* @param Admin $model 注入model
*/
public function __construct(Admin $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否可导出
$this->can_export = false;
// 是否列表是否开启row selector
$this->grid_row_selector = false;
// 是否看见回收站
// $this->show_trashed = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AuthController as BaseAuthController;
use Illuminate\Support\Facades\Validator;
class AuthController extends BaseAuthController
{
/**
* Get a validator for an incoming login request.
*
* @param array $data
*
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function loginValidator(array $data)
{
return Validator::make($data, [
$this->username() => 'required',
'password' => 'required',
// 'captcha' => 'required|captcha',
]);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: 管理端 控制类 基类
* 控制层:后台控制层基类,提供了对后台对象的增、删、改、查、文件上传、审核等操作
* 后台所有控制层子类继承该类即可,只需在子类中进行参数的配置
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers\Admin
* @package App\Admin\Controllers\Admin
* @author Richer <yangzi1028@163.com>
* @date 2021年6月23日14:47:37
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Extensions\Actions\Audit;
use App\Admin\Extensions\Actions\Disable;
use App\Admin\Extensions\Actions\Enable;
use App\Admin\Extensions\Actions\Offline;
use App\Admin\Extensions\Actions\Online;
use App\Admin\Extensions\CustomActions;
use App\Admin\Grids\Filter\AreaFilter;
use App\Admin\Rewrite\Facades\Admin;
use App\Admin\Traits\GridFilterTrait;
use App\Models\System\AuditRecord;
use App\Models\System\OperationLog;
use App\Models\Traits\AdministrativeDivisionTrait;
use App\Models\User\User;
use App\Admin\Rewrite\Grid;
use App\Admin\Rewrite\Form;
//use Encore\Admin\Grid;
//use Encore\Admin\Form;
use App\Admin\Rewrite\Show;
use Encore\Admin\Layout\Content;
use Encore\Admin\Controllers\AdminController;
use App\Admin\Traits\FormFieldTrait;
use App\Admin\Traits\GridFieldTrait;
use App\Admin\Traits\ShowFieldTrait;
use Exception;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
/**
* Class BaseController
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2020年11月13日 01:26:09
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class BaseController extends AdminController
{
use GridFieldTrait, FormFieldTrait, ShowFieldTrait, GridFilterTrait, AreaFilter, AdministrativeDivisionTrait;
/**
* 模型
*
* @var Model
*/
protected $model;
/**
* 用户
*
* @var User
*/
protected $user = null;
/**
* 是否可以新增
*
* @var boolean
*/
protected $can_create = false;
/**
* 是否可以删除
*
* @var boolean
*/
protected $can_delete = false;
/**
* 是否可以编辑
*
* @var boolean
*/
protected $can_edit = false;
/**
* 是否可以查看详情
*
* @var boolean
*/
protected $can_view = false;
/**
* 是否可以审核
*
* @var boolean
*/
protected $can_audit = false;
/**
* 是否可以导出
*
* @var boolean
*/
protected $can_export = false;
/**
* 是否可以上架
*
* @var boolean
*/
protected $can_unshelve = false;
/**
* 是否可以推荐
*
* @var boolean
*/
protected $can_recommend = false;
/**
* 是否可禁用
*
* @var bool
*/
protected $can_disable = false;
/**
* 是否展示软删除的回收站
*
* @var bool
*/
protected $show_trashed = false;
/**
* 是否可以导入
*
* @var bool
*/
protected $can_import = false;
/**
* 列表是否开启row selector
*
* @var bool
*/
protected $grid_row_selector = false;
/**
* 是否开启列表操作下来菜单形式
*/
protected $dropdownActions = false;
/**
* 资源显示的中名称
*
* @var string
*/
protected $title;
/**
* 资源描述
*
* @var array
*/
protected $description = [];
/**
* 资源是否有tab标签
*
* @var string
*/
protected $tab = [];
/**
* 资源是否有子类,并且子类tab的名称
*
* @var string
*/
protected $hasMany = [];
/**
* 当前对象的Grid对象实例
*
* @var \Encore\Admin\Grid
*/
protected $grid = null;
/**
* 当前对象的Form对象实例
*
* @var Form
*/
protected $form = null;
/**
* 当前对象的Form对象实例
*
* @var \Encore\Admin\Show
*/
protected $show = null;
/**
* 执行构造方法
* BaseController constructor.
*
* @param null $model 模型
*/
public function __construct($model = null)
{
$this->model = $model;
$this->user = Admin::user();
}
/**
* 审核列表 interface.
*
* @param Content $content 内容
*
* @return Content
*/
public function audit(Content $content)
{
return $content
->header($this->title.'审核列表')
->description($this->description)
->body($this->grid());
}
/**
* Edit interface.
*
* @param mixed $id id
* @param Content $content content
*
* @return Content
*/
public function edit($id, Content $content)
{
return $content
->title($this->title())
->description($this->description['edit'] ?? __('edit'))
->body($this->form($id)->edit($id));
}
/**
* 基类方法:渲染生成grid对象
*
* @return Grid
*/
protected function grid()
{
$this->grid = new Grid($this->model);
// 设置列表标题
$this->setGridTitle();
// 增加 tab
$this->setGridTab();
// 设置默认排序规则
$this->setGridOrder();
// 设置默认查询条件
$this->setGridQuery();
// 渲染表格头筛选条件
$this->renderGridFilter();
// 渲染表格导出
$this->renderGridExporter();
// 渲染字段
$this->renderGridFields();
// 渲染数据操作 action
$this->renderGridActions();
// 渲染顶部自定义工具
$this->renderGridTools();
return $this->grid;
}
/**
* 设置默认排序规则
*
* @return void $grid grid
*/
public function setGridTitle()
{
// $this->grid->setTitle('admin.'.$this->title);
$this->grid->setTitle($this->title);
}
/**
* 设置 tab
*/
public function setGridTab()
{
//
}
/**
* 设置默认排序规则
*
*/
public function setGridOrder()
{
if (!request('_sort')) {
$this->grid->model()->latest();
} else {
$this->setGridOrderSpecial();
}
}
/**
* 设置特殊的查询规则
*/
public function setGridOrderSpecial()
{
$_sort = request('_sort');
$column = Arr::get($_sort, 'column');
switch ($column) {
case 'name':// 中文排序字段
case 'title':// 中文排序字段
$_sort['convert'] = 1;
break;
case 'user.username':
$_sort['column'] = 'mobile';
break;
case 'gender_show':
$_sort['column'] = 'gender';
break;
}
request()->offsetSet('_sort', $_sort);
}
/**
* 设置默认查询条件
* 增加数据权限的判断。步骤:
* 1、判断用户是否是超级管理员,并判断用户的pid,如果pid为0 则为平台总用户,不进行数据权限的判断
* 2、如果pid大于0 则为 平台子管理员,则需要进行数据权限的判断
*
* @return void $grid grid
*/
public function setGridQuery()
{
// add by Richer 于 2021年8月31日16:59:30 回收站
if (request('trashed') == 1) {
$this->grid->model()->onlyTrashed();
}
$this->buildQuery($this->grid->model());
}
/**
* 渲染grid字段
*
* @return void
*/
public function renderGridFields()
{
//
}
/**
* 为grid增加筛选条件
*
* @return void
*/
public function renderGridFilter()
{
//
}
/**
* 为grid增加筛选条件
*
* @return void
*/
public function renderGridExporter()
{
//
}
/**
* 为grid的行增加操作按钮
*
* @param bool $disable 是否可用
*
* @return void
*/
public function renderGridActions($disable = false)
{
// 设置行操作的样式1.7.3版本以后的操作样式,如果表格字段多或者操作按钮过多可以将按钮进行修改
$this->setActionClass();
// 渲染每行的操作
$this->setRowActions();
// TODO 需要根据数据权限和功能权限来判断
// 禁用系统的新增按钮
if (!$this->can_create) {
$this->grid->disableCreateButton();
}
// 禁用 导出按钮
if (!$this->show_trashed) {
$this->grid->disableTrashedButton();
}
// 禁用 导入按钮
if (!$this->can_import) {
$this->grid->disableImportButton();
}
// $this->grid->disableTools();
}
/**
* 为grid渲染工具
*
* @return void
*/
public function renderGridTools()
{
$this->grid->tools(
function ($tools) {
//关闭批量删除
$tools->batch(
function ($batch) {
$batch->disableDelete();
}
);
// 去掉筛选的按钮
$tools -> disableFilterButton();
// 去掉刷新的按钮
$tools -> disableRefreshButton();
}
);
// 禁用导出数据按钮
if ($this->can_export === false) {
$this->grid->disableExport();
}
//禁用行选择checkbox
if ($this->grid_row_selector === false) {
$this->grid->disableRowSelector();
}
// 禁用选择列
// $this->grid->disableColumnSelector();
}
/**
* 设置行操作的样式
*
* @return void $grid grid
*/
public function setActionClass()
{
// 设置为1.7.3版本以后的操作样式
if ($this->dropdownActions === true) {
$this->grid->setActionClass(\App\Admin\Rewrite\Grid\Displayers\DropdownActions::class);
}
// 渲染批量操作按钮
$this->grid->tools(
function (Grid\Tools $tools) {
//
}
);
// 自定义按钮操作
$this->setCustomActions();
}
/**
* 自定义按钮
*/
public function setCustomActions()
{
//
}
/**
* 设置每行的操作
* 根据每个模块设置的权限来判断当前的操作
*
* @return void $grid grid
*/
protected function setRowActions()
{
// 基本权限
$can_edit = $this->can_edit;
$can_delete = $this->can_delete;
$can_view = $this->can_view;
$can_audit = $this->can_audit;
$can_unshelve = $this->can_unshelve;
$can_recommend = $this->can_recommend;
$can_disable = $this->can_disable;
$dropdownActions = $this->dropdownActions;
$self = $this;
// 对表格的每行数据进行权限的判断和操作按钮的生成
$this->grid->actions(
function ($actions) use (
$self,
$can_view,
$can_edit,
$can_delete,
$can_audit,
$can_unshelve,
$can_recommend,
$can_disable,
$dropdownActions
) {
// 当前数据的主键
$id = $actions->getKey();
// 当前的url
$url = $actions->getResource();
// 禁用系统相关按钮
$actions->disableView();
// 查看按钮
if ($can_view === true) {
if ($dropdownActions === false) {
$actions -> disableView();
$actions->append(CustomActions::renderView($id, $url));
}
}
// 编辑按钮
$actions -> disableEdit();
if ($can_edit === true) {
if ($dropdownActions === false) {
$actions->append(CustomActions::renderEdit($id, $url));
}
}
// 删除按钮
$actions -> disableDelete();
if ($can_delete === true) {
if ($dropdownActions === false) {
$actions->append(CustomActions::renderDelete($id, $url));
}
}
// 可审核
if ($can_audit && $actions->row->audited_status == config('constants.UNAUDITED')) {
if ($dropdownActions === true) {
$actions->add(new Audit());
} else {
$actions->append(CustomActions::renderAudit($id, $url));
}
}
// 可上下架
if ($can_unshelve) {
// 下架按钮
if ($actions->row->unshelved_status == config('constants.SHELVED')) {
if ($dropdownActions === true) {
$actions->add(new Offline());
} else {
//
$actions->append(CustomActions::renderUnshelvedBtn($id, $url));
}
}
if ($actions->row->unshelved_status == config('constants.UNSHELVED')) {
// 上架按钮
if ($dropdownActions === true) {
$actions->add(new Online());
} else {
$actions->append(CustomActions::renderShelvedBtn($id, $url));
}
}
}
// 可取消
if ($can_recommend) {
// 下架按钮
if ($actions->row->recommended_status == config('constants.UN_RECOMMENDED')) {
if ($dropdownActions === true) {
// $actions->add(new Offline());
} else {
//
$actions->append(CustomActions::renderRecommendBtn($id, $url));
}
}
if ($actions->row->recommended_status == config('constants.RECOMMENDED')) {
// 上架按钮
if ($dropdownActions === true) {
// $actions->add(new Online());
} else {
$actions->append(CustomActions::renderUnRecommendBtn($id, $url));
}
}
}
// 可禁用
if ($can_disable && request('trashed') != 1) {
if ($actions->row->status == config('constants.ENABLE')) {
if ($dropdownActions === true) {
$actions->add(new Disable());
} else {
$actions->append(CustomActions::renderDisable($id, $url));
}
} else {
if ($dropdownActions === true) {
$actions->add(new Enable());
} else {
$actions->append(CustomActions::renderEnable($id, $url));
}
}
}
// add by Richer 于 2021年8月31日17:11:06 软删除恢复
if (request('trashed') == 1) {
$actions->append(CustomActions::renderRestore($id, $url));
}
// 自定义按钮操作
$self->setRowCustomActions($actions);
}
);
}
/**
* 自定义每行的操作
* 根据每个模块设置的权限来判断当前的操作
*
* @param $actions
* @return void $grid grid
*/
public function setRowCustomActions($actions)
{
//
}
/**
* 外部href
*
* @return string
*/
public function href()
{
// 获取列表的路径
$path = request()->getUri();
$url = \Arr::first(explode('?', $path));
$param = \Arr::last(explode('?', $path));
if ($param) {
//
}
$edit_path = $url.'/edit?'.$param;
// 创建审核的提交数据
$pjax_url = $path;
return $pjax_url;
}
/**
* 基类方法渲染生成form对象
*
* @param Int $id 用户id
*
* @return Form
*/
protected function form($id = null)
{
// 实例form对象
$this->form = new Form($this->model);
// 渲染自定义工具
$this->renderFormTools();
// 渲染 form 字段
$this->renderFormFields($id);
// 在表单提交前调用,对表单进行处理
$this->submitted();
// 保存前回调
$this->saving();
// 保存后回调
$this->saved();
return $this->form;
}
/**
* 为grid渲染工具
*
* @return void
*/
public function renderFormTools()
{
// if ($this->form->isCreating()) {
// dump(1);
// $this->form->tools(function(Form\Tools $tools) use ($this->form) {
// });
// }
}
/**
* 渲染表单字段
*
* @param Int $id 用户id
*
* @return void
*/
public function renderFormFields($id)
{
// 判断当前的form表单是否有tab
$tabs = $this->tab;
$column = 1;//当前form表单显示的列数
switch (count($tabs)) {
case 1:
$this->form->tab(
$tabs[0]['comment'],
function ($form) use ($id, $column) {
// 为form设置通用字段
$this -> setTab1FormCommonFields($form, $id, $column);
}
);
break;
case 2:
$this->form->tab(
$tabs[0]['comment'],
function ($form) use ($id, $column) {
// 为form设置通用字段
$this -> setTab1FormCommonFields($form, $id, $column);
}
)->tab(
$tabs[1]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this -> setTab2FormCommonFields($form, $id);
}
);
break;
case 3:
$this->form->tab(
$tabs[0]['comment'],
function ($form) use ($id, $column) {
// 为form设置通用字段
$this->setTab1FormCommonFields($form, $id, $column);
}
)->tab(
$tabs[1]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this->setTab2FormCommonFields($form, $id);
}
)->tab(
$tabs[2]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this->setTab3FormCommonFields($form, $id);
}
);
break;
case 4:
$this->form->tab(
$tabs[0]['comment'],
function ($form) use ($id, $column) {
// 为form设置通用字段
$this->setTab1FormCommonFields($form, $id, $column);
}
)->tab(
$tabs[1]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this->setTab2FormCommonFields($form, $id);
}
)->tab(
$tabs[2]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this->setTab3FormCommonFields($form, $id);
}
)->tab(
$tabs[3]['comment'],
function ($form) use ($id) {
// 设置子类信息;设置第二个tab的form
$this->setTab4FormCommonFields($form, $id);
}
);
break;
default:
// 为form设置通用字段
$this->setTab1FormCommonFields($this->form, $id, $column);
break;
}
}
/**
* 基类方法:为form表单设置通用字段
*
* @param Form $form form
* @param integer $id 用户id
* @param integer $column form表单显示几列
*
* @return void
*/
protected function setTab1FormCommonFields($form, $id, $column = 2)
{
// 设置专用字段
$this -> setTab1FormSpecialFields($form, $id);
}
/**
* 基类方法:为form表单设置专用特殊字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab1FormSpecialFields($form, $id)
{
//
}
/**
* 设置第二个tab的form字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab2FormCommonFields($form, $id)
{
// 设置每个子类的特殊字段
$this -> setTab2FormSpecialFields($form, $id);
}
/**
* 基类方法:为form表单第二个tab设置专用特殊字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab2FormSpecialFields($form, $id)
{
//
}
/**
* 设置第二个tab的form字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab3FormCommonFields($form, $id)
{
// 设置每个子类的特殊字段
$this -> setTab3FormSpecialFields($form, $id);
}
/**
* 基类方法:为form表单第二个tab设置专用特殊字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab3FormSpecialFields($form, $id)
{
//
}
/**
* 设置第4个tab的form字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab4FormCommonFields($form, $id)
{
// 设置每个子类的特殊字段
$this -> setTab4FormSpecialFields($form, $id);
}
/**
* 设置第4tab的form字段
*
* @param Form $form form
* @param integer $id 用户id
*
* @return void
*/
public function setTab4FormSpecialFields($form, $id)
{
//
}
/**
* 在表单提交前调用
*
* @return void
*/
protected function submitted()
{
$this->form->submitted(
function (Form $form) {
//...
}
);
}
/**
* 保存前回调
*
* @return void
*/
protected function saving()
{
//保存前回调
$this->form->saving(
function (Form $form) {
// 只有后台新增的数据才设置,更新的时候不进行设置
// 获取操作
$actions = request()->route()->getAction();
$table = $this->model->getTable();
// 如果是以@store结尾则为新增操作
if (Str::endsWith($actions['uses'], '@store')) {
$user = Admin::user();
$table = $this->model->getTable();
// 设置用户ID
if (Schema::hasColumn($table, 'admin_id')) {
// 隐藏域的值:默认创建时当前登录用户创建
$form->model()->setAttribute('admin_id', $user->id);
}
// 设置店铺ID
if (Schema::hasColumn($table, 'shop_id')) {
// 隐藏域的值:默认创建时当前登录用户创建
// $form->model()->setAttribute('shop_id', $user->shop_id);
}
if (Schema::hasColumn($table, 'user_model')) {
// 如果没有用户,默认设置为当前操作的用户
$form->model()->setAttribute('user_model', 'admin');
}
if (Schema::hasColumn($table, 'created_by')) {
// 隐藏域的值:默认创建时当前登录用户创建
$form->model()->setAttribute('created_by', Admin::user()->id);
}
if (Schema::hasColumn($table, 'created_model')) {
// 如果没有用户,默认设置为当前操作的用户
$form->model()->setAttribute('created_model', 'admin');
}
} else {
if (Schema::hasColumn($table, 'updated_by')) {
// 隐藏域的值:默认创建时当前登录用户创建
$form->model()->setAttribute('updated_by', Admin::user()->id);
}
if (Schema::hasColumn($table, 'updated_model')) {
// 如果没有用户,默认设置为当前操作的用户
$form->model()->setAttribute('updated_model', 'admin');
}
}
}
);
}
/**
* 保存后回调
*
* @return void
*/
protected function saved()
{
// 保存后回调
$this->form->saved(function (Form $form) {
//...
});
}
/**
* 基类方法:渲染生成show
*
* @param Int $id 用户id
*
* @return Show
*/
protected function detail($id)
{
// 根据主键和模型实例化show对象
$this ->show = new Show($this ->model->find($id));
// 渲染自定义工具
$this->renderShowTools();
// 渲染 Show 字段
$this->renderShowFields();
return $this->show;
}
/**
* 为详情show渲染工具
*
* @return void
*/
protected function renderShowTools()
{
// 设置页面左上角的标题和右上角的工具栏
$this->show->panel()->style('')->title(__($this->title). ' ' . __('detail'))->tools(
function ($tools) {
// TODO 需要根据权限来判断 =====
$tools->disableEdit();// 禁用编辑按钮
$tools->disableDelete();// 禁用删除按钮
}
);
}
/**
* 为详情show渲染字段
*
* @return void
*/
protected function renderShowFields()
{
//
}
/**
* 置顶 推荐
*
* @param Int $id 用户id
*
* @return JsonResponse
*/
public function recommend($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->recommended_status = config('constants.RECOMMENDED');
$model->recommended_at = date('Y-m-d H:i:s');
$model->recommended_by = $this->getUser()->id;
$result = $model->save();
// 判断操作结果
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('set_recommend_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' => __('set_recommend_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 取消推荐
*
* @param Int $id 用户id
*
* @return JsonResponse
*/
public function unRecommend($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->recommended_status = config('constants.UN_RECOMMENDED');
$model->recommended_at = null;
$model->recommended_by = 0;
$result = $model->save();
// 判断操作结果
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('cancel_recommend_succeeded'),
]
);
} else {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => __('cancel_recommend_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 下架
* update by Richer 于 2020年3月31日16:34:49 业务逻辑修改
* 下架的资源需要将公共库的数据删除
*
* @param Int $id 用户id
*
* @return JsonResponse
*/
public function unshelve($id)
{
try {
$user = $this->getUser();
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->unshelved_status = 1;
$model->unshelved_opinion = request('unshelved_opinion');
$model->unshelved_at = date('Y-m-d H:i:s');
$model->unshelved_by = $user->id;
$result = $model->save();
// 判断操作结果
if ($result) {
// // 操作成功后记录操作日志
// $model->operationLogs()->create([
// 'user_id' => $user->id,
// 'user_type' => 'admin',
// 'type' => OperationLog::UNSHELVE,
// 'path' => request()->path(),
// 'method' => request()->method(),
// 'ip' => request()->ip(),
// 'input' => request()->all(),
// ]);
return response()->json(
[
'status' => 1,
'message' => __('unshelved_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' => __('unshelved_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 上架
*
* @param Int $id 用户id
*
* @return JsonResponse
*/
public function shelve($id)
{
try {
$user = $this->getUser();
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->unshelved_status = config('constants.SHELVED');
$model->unshelved_opinion= '';
$model->unshelved_at = null;
$model->unshelved_by = 0;
$result = $model->save();
// 判断操作结果
if ($result) {
// 通知用户已经上架
// User::find($object->user_id)->notify(new \App\Notifications\Online($object));
// 操作成功后记录操作日志
// $model->operationLogs()->create([
// 'user_id' => $user->id,
// 'user_type' => 'admin',
// 'type' => OperationLog::SHELVE,
// 'path' => request()->path(),
// 'method' => request()->method(),
// 'ip' => request()->ip(),
// 'input' => request()->all(),
// ]);
return response()->json(
[
'status' => 1,
'message' => __('shelved_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' => __('shelved_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 禁用
*
* @param Int $id id
*
* @return JsonResponse
*/
public function disable($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->status = config('constants.DISABLE');
$result = $model->save();
// 判断操作结果
// 判断操作结果
if ($result) {
return response()->json(
[
'status' => 1,
'message' => __('disable_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' => __('disable_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 启用
*
* @param Int $id 用户id
*
* @return JsonResponse
*/
public function enable($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->status = config('constants.ENABLE');
$result = $model->save();
// 判断操作结果
if ($result) {
return response()->json(
[
'status' => 1,
'message' => __('enable_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' => __('enable_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => __('no_data'),
]
);
}
}
/**
* 审核通过:多级审核
*
* @param integer $id 主键id
*
* @return JsonResponse
* @throws \Exception
*/
public function pass($id)
{
DB::beginTransaction();
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
// 判断审核权限
$can_audit = $this->checkCanAudit($model);
if ($can_audit === false) {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
// 用户的角色来设置审核状态
$user = $this->getUser();
$audited_status = config('constants.AUDIT_PASSED');
$audited_at = date('Y-m-d H:i:s');
$audited_by = $user->id;
$audited_opinion = request('audit_opinion');
// 村管理审核员
switch (true) {
case $user->isRole('village.auditor'):
$model->status = $model::FIRST_AUDIT_PASSED;;
break;
case $user->isRole('village.leader'):
$model->status = $model::PUBLISHED;
break;
// case $user->isRole('village.auditor'):
// $model->first_audited_status = $audited_status;
// $model->first_audited_at = $audited_at;
// $model->first_audited_by = $audited_by;
// $model->first_audited_opinion = $audited_opinion;
// break;
// case $user->isRole('village.leader'):
// $model->second_audited_status = $audited_status;
// $model->second_audited_at = $audited_at;
// $model->second_audited_by = $audited_by;
// $model->second_audited_opinion = $audited_opinion;
// $model->status = $model::PUBLISHED;
// $model->released_at = $audited_at;
// break;
}
$result = $model->save();
if ($result) {
// 将审核结果写入到审核记录中
$auditRecord = [
'user_id' => $audited_by,
'user_type' => 'admin',
'audited_by' => $audited_by,
'audited_status' => $audited_status,
'audited_at' => $audited_at,
'audited_opinion' => $audited_opinion,
];
$model->auditRecords()->create($auditRecord);
// 事务提交
DB::commit();
return response()->json(
[
'status' => 1,
'message' =>__('audit_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
} catch (Exception $e) {
DB::rollBack();
return response()->json(
[
'status' => 0,
'message' => $e->getMessage(),
]
);
}
// try {
// // 获取数据,如果没有获取到抛出异常
// $model = $this->model->findOrFail($id);
// $model->audited_status = config('constants.AUDIT_PASSED');
// $model->audited_at = date('Y-m-d H:i:s');
// $model->audited_by = Admin::user()->id;
//
// $result = $model->save();
//
// if ($result) {
// return response()->json(
// [
// 'status' => 1,
// 'message' =>__('audit_succeeded'),
// ]
// );
// } else {
// return response()->json(
// [
// 'status' => 0,
// 'message' =>__('audit_failed'),
// ]
// );
// }
// } catch (ModelNotFoundException $e) {
// return response()->json(
// [
// 'status' => 0,
// 'message' => __('no_data'),
// ]
// );
// }
}
/**
* 审核不通过
*
* @param integer $id 主键id
*
* @return JsonResponse
* @throws \Exception
*/
public function refuse($id)
{
DB::beginTransaction();
try {
$audited_opinion = request('audit_opinion');
if (!$audited_opinion) {
return response()->json(
[
'status' => 0,
'message' =>'请输入审核意见!',
]
);
}
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
// 判断审核权限
$can_audit = $this->checkCanAudit($model);
if ($can_audit === false) {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
// 用户的角色来设置审核状态
$user = $this->getUser();
$audited_status = config('constants.AUDIT_NOT_PASSED');
$audited_at = date('Y-m-d H:i:s');
$audited_by = $user->id;
$model->status = $model::AUDIT_NOT_PASSED;
//
//
// // 村管理审核员
// switch (true) {
// case $user->isRole('village.auditor'):
// $model->first_audited_status = $audited_status;
// $model->first_audited_at = $audited_at;
// $model->first_audited_by = $audited_by;
// $model->first_audited_opinion = $audited_opinion;
// // TODO 是否要清空以前的审批记录
// $model->submitted_status = 0;
// $model->submitted_at = null;
// $model->submitted_by = 0;
// $model->second_audited_status = config('constants.UNAUDITED');
// $model->second_audited_at = null;
// $model->second_audited_by = 0;
// $model->second_audited_opinion = 0;
// break;
// case $user->isRole('village.leader'):
// $model->second_audited_status = $audited_status;
// $model->second_audited_at = $audited_at;
// $model->second_audited_by = $audited_by;
// $model->second_audited_opinion = $audited_opinion;
// break;
// }
$result = $model->save();
if ($result) {
// 将审核结果写入到审核记录中
$auditRecord = [
'user_id' => $audited_by,
'user_type' => 'admin',
'audited_by' => $audited_by,
'audited_status' => $audited_status,
'audited_at' => $audited_at,
'audited_opinion' => $audited_opinion,
];
$model->auditRecords()->create($auditRecord);
// 事务提交
DB::commit();
return response()->json(
[
'status' => 1,
'message' =>__('audit_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
} catch (Exception $e) {
DB::rollBack();
return response()->json(
[
'status' => 0,
'message' => $e->getMessage(),
]
);
}
try {
//
$audited_opinion = request('audit_opinion');
if (!$audited_opinion) {
return response()->json(
[
'status' => 0,
'message' =>'请输入审核意见!',
]
);
}
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->audited_status = config('constants.AUDIT_NOT_PASSED');
$model->audited_opinion = $audited_opinion;
$model->audited_at = date('Y-m-d H:i:s');
$model->audited_by = Admin::user()->id;
$result = $model->save();
if ($result) {
return response()->json(
[
'status' => 1,
'message' =>__('audit_succeeded'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => '当前数据不存在!',
]
);
}
}
/**
* 提交审核
*
* @param integer $id 主键id
*
* @return JsonResponse
* @throws \Exception
*/
public function submit($id)
{
DB::beginTransaction();
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
// 判断审核权限
$can_audit = $this->checkCanSubmitAudit($model);
if ($can_audit === false) {
return response()->json(
[
'status' => 0,
'message' =>__('提交审核失败。'),
]
);
}
$audited_opinion = request('audit_opinion');
$user = $this->getUser();
$audited_by = $user->id;
$audited_at = date('Y-m-d H:i:s');
$model->status = $model::SUBMITTED;
$model->submitted_at = $audited_at;
$model->submitted_by = $audited_by;
$result = $model->save();
if ($result) {
// 将审核结果写入到审核记录中
$auditRecord = [
'user_id' => $audited_by,
'user_type' => 'admin',
'audited_by' => $audited_by,
'audited_status' => AuditRecord::SUBMITTED,
'audited_at' => $audited_at,
'audited_opinion' => $audited_opinion,
];
$model->auditRecords()->create($auditRecord);
DB::commit();
return response()->json(
[
'status' => 1,
'message' =>__('提交审核成功。'),
]
);
} else {
return response()->json(
[
'status' => 0,
'message' =>__('audit_failed'),
]
);
}
} catch (Exception $e) {
DB::rollBack();
return response()->json(
[
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 恢复软删除数据
*
* @param integer $id 主键id
*
* @return JsonResponse
* @throws \Exception
*/
public function restore($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->onlyTrashed()->findOrFail($id);
$model->deleted_at = null;
$model->restored_at = now()->toDateTimeString();
$model->restored_by = Admin::user()->id;
$model->restored_opinion = request('restored_opinion', '');
$result = $model->save();
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('restore') . __('succeeded'),
]
);
} else {
return response()->json(
[
'code' => 1001,
'status' => 0,
'message' => __('restore') . __('failed'),
]
);
}
} catch (ModelNotFoundException $e) {
return response()->json(
[
'status' => 0,
'message' => '当前数据不存在!',
]
);
}
}
/**
* 获取当前登录用户信息
*
* @return User|\Illuminate\Contracts\Auth\Authenticatable|null
*/
public function getUser()
{
return $this->user ?? $this->user = \Admin::user();
}
/**
* 根据用户角色构建查询语句
*
* @param null $query 查询语句
* @param null $user 用户
* @param null $user_role 用户角色
* @return mixed
*/
public function buildQuery($query, $user = null, $user_role = null)
{
if (!$user) {
$user = $this->getUser();
}
// 只有管理员和录入员才能进行添加和编辑
if (!$user->isAdministrator() && !$user->isRole('village.reporter')) {
$this->can_create = false;
// 是否可编辑
$this->can_edit = false;
// 是否可删除
$this->can_delete = false;
}
// // 根据角色来判断
// $role = Admin::user()->roles->pluck('slug')->first();
// switch ($role) {
// case 'Admin':
// $this->can_delete = false;
// break;
// case 'KPO/NPT':
// $this->can_create = false;
// $this->can_edit = false;
// $this->can_delete = false;
// $this->can_import = false;
// break;
// case 'Teacher':// 获取我的全部学生
// case 'PL':
// break;
// }
return $query;
}
/**
*
*/
public function importPage()
{
$model = $this->model;
return view('admin::grid.import', compact('model')) ;
}
/**
* 是否是管理客户端
*
* @return bool
*/
public function isAdminClient()
{
return config('admin.route.prefix') === 'admin';
}
/**
* 是否是机构户端
*
* @return bool
*/
public function isAgencyClient()
{
return config('admin.route.prefix') === 'agency';
}
/**
* 验证是否能进行提交审核操作
*
* @param $model
* @param $status
* @return bool
*/
public function checkCanSubmitAudit($model, $status = 0)
{
$can = false;
$user = Admin::user();
if ($model->status == $model::UNSUBMITTED || $model->status == $model::AUDIT_NOT_PASSED) {
if ($user->isRole('village.reporter') || $user->isAdministrator()) {
$can = true;
}
}
return $can;
if ($model->status == $status) {
// 判断审核状态,如果一级审核未审核或者二级审核状态为 不通过
$audited_status = $model->first_audited_status;
$audited_at = $model->first_audited_at;
$submitted_at = $model->submitted_at;
// 判断用户的角色
if (($user->isRole('village.reporter') || $user->isAdministrator())) {
if ($model->submitted_status == 0 || ($audited_status == config('constants.AUDIT_NOT_PASSED') && $audited_at > $submitted_at)) {
$can = true;
}
}
}
return $can;
}
/**
* 验证是否能进行审核操作
* 1、村管理录入员 发布信息
* 2、村管理审核员审核,通过后进入村领导审核,不通过则退回到 村管理录入员
* 3、村领导审核通过后则直接发布,不通过则直接退回到 村管理录入员
* @param $model
* @param $status
* @return bool
*/
public function checkCanAudit($model, $status = 0)
{
$can_audit = false;
$user = $this->getUser();
switch ($model->status) {
// case $model::UNSUBMITTED: // 未提交审核
// case $model::AUDIT_NOT_PASSED: // 已提交审核
// if (($user->isRole('village.reporter') || $user->isAdministrator())) {
// $can_audit = true;
// }
// break;
case $model::SUBMITTED: // 已提交审核
if ($user->isRole('village.auditor')) {
$can_audit = true;
}
break;
case $model::FIRST_AUDIT_PASSED: // 一级审核通过
if ($user->isRole('village.leader')) {
$can_audit = true;
}
break;
}
return $can_audit;
if ($model->status == $status) {
// 判断用户的角色
// 判断审核状态,如果一级审核未审核或者二级审核状态为 不通过
$first_audited_status = $model->first_audited_status;
$first_audited_at = $model->first_audited_at;
$second_audited_status = $model->second_audited_status;
$second_audited_at = $model->second_audited_at;
$third_audited_status = $model->third_audited_status;
$submitted_at = $model->submitted_at;
$submitted_status = $model->submitted_status;
$user = Admin::user();
switch (true) {
case $first_audited_status == config('constants.AUDIT_NOT_PASSED'):
if ($user->isRole('village.auditor') && $submitted_status == 1 && $submitted_at > $first_audited_at) {
$can_audit = true;
}
break;
case $first_audited_status == config('constants.UNAUDITED'):
case $second_audited_status == config('constants.AUDIT_NOT_PASSED'):
if ($user->isRole('village.auditor') && (!$second_audited_at || $second_audited_at > $first_audited_at)) {
$can_audit = true;
}
if ($user->isRole('village.leader') && (!$second_audited_at || $second_audited_at < $first_audited_at)) {
$can_audit = true;
}
break;
case $second_audited_status == config('constants.UNAUDITED'):
if ($user->isRole('village.leader')) {
$can_audit = true;
}
break;
case $third_audited_status == config('AUDIT_NOT_PASSED.UNAUDITED'):
// if ($user->isRole('village.leader')) {
// $can_audit = true;
// }
break;
}
}
return $can_audit;
}
/**
* 渲染自定义的分页 ajax
*
* @param $paginator
* @param null $transformer
* @param array $params
* @return array
*/
public function renderPaginator($paginator, $transformer = null, $params = [])
{
// dump($paginator);
// 追加查询条件
if ($params) {
array_walk($params, function ($param, $key) use (&$paginator) {
$paginator->appends($key, $param);
});
}
$items = $paginator->items() ;
// 对数据进行转换
$data = [];
if ($transformer) {
foreach ($items as $vo) {
$data[] = $transformer->transform($vo);
}
} else {
$data = $items;
}
// 获取当前的页码
$page = request('page', 1);
// 全部数据
$total = $paginator->total();
// 全部页码
$lastPage = $paginator->lastPage();
// 当前页码
$currentPage = $paginator->currentPage();
// 中间的页码数组
$elements = [];
$len = $lastPage - 2;
$center_page = 8;
// 创建数组
if ($lastPage <= 10) {
for ($i = 1; $i <= $lastPage; $i++) {
$elements[0][$i] = $i;
}
} else {
if ($currentPage < $center_page) {
for ($i = 1; $i <= $center_page; $i++) {
$elements[0][$i] = $i;
}
$elements[1] = '...';
for ($i = $lastPage-1; $i <= $lastPage; $i++) {
$elements[2][$i] = $i;
}
}/*elseif($currentPage === $lastPage /2){
// for ($i = $lastPage /2 - 4; $i <= $lastPage /2 - 4; $i++) {
// $elements[0][$i] = $i;
// }
// $elements[1] = '...';
// for ($i = $center_page + 1; $i <= $center_page + 4; $i++) {
// $elements[2][$i] = $i;
// }
// $elements[2]['...'] = '...';
// for ($i = $lastPage-1; $i <= $lastPage; $i++) {
// $elements[2][$i] = $i;
// }
}*/ elseif ($currentPage <= $lastPage /2 + 1) {
for ($i = 1; $i <= $center_page - 4; $i++) {
$elements[0][$i] = $i;
}
$elements[1] = '...';
for ($i = $center_page + 1; $i <= $center_page + 4; $i++) {
$elements[2][$i] = $i;
}
$elements[2]['...'] = '...';
for ($i = $lastPage-1; $i <= $lastPage; $i++) {
$elements[2][$i] = $i;
}
} else {
for ($i = 1; $i <= 2; $i++) {
$elements[0][$i] = $i;
}
$elements[1] = '...';
for ($i = $lastPage-$center_page-1; $i <= $lastPage; $i++) {
$elements[2][$i] = $i;
}
}
}
//dd($elements);
$prev = ($page - 1) > 0 ? $page - 1 : 1;
$next = ($page + 1) < $total ? $page + 1 : $total;
return [
'items' => $data,
'prev' => $prev,
'next' => $next,
'total' => $total,
'lastPage' => $lastPage,
'page' => $page,
'pageSize' => request('per_page', 10),
'paginator' => $paginator,
'elements' => $elements,
'url' => request()->url(),
];
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: Bus 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年2月28日14:35:45
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Forms\BusForm;
use App\Admin\Grids\BusGrid;
use App\Admin\Shows\BusShow;
use App\Models\Bus;
use App\Models\User\User;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
/**
* Class BusesController
* @package App\Admin\Controllers
*/
class BusesController extends BaseController
{
use BusGrid, BusForm, BusShow;
/**
* BusesController constructor.
*
* @param Bus $model 注入model
*/
public function __construct(Bus $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = true;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: Category 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年4月20日14:26:14
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Forms\CategoryForm;
use App\Admin\Grids\CategoryGrid;
use App\Jobs\Category\CategoryLabelCreatedJob;
use App\Models\Category\Category;
use App\Models\Category\CategoryExample;
use App\Models\Category\CategoryLabel;
use App\Models\Category\CategoryLabelItem;
use App\Models\Label;
use App\Models\LabelItem;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
/**
* Class CategoriesController.
*
* @package App\Admin\Controllers
*/
class CategoriesController extends BaseController
{
use CategoryGrid, CategoryForm;
/**
* CategoriesController constructor.
*
* @param Category $model 注入model
*/
public function __construct(Category $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* 获取 实例
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|JsonResponse
*/
public function examples($id)
{
$list = null;
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$list = $model->examples()->get();
return view('admin::category.examples', compact('id', 'list')) ;
} catch (ModelNotFoundException $e) {
return view('admin::category.examples', compact('id', 'list')) ;
}
}
/**
* 添加实例界面
*
* @param $id
*/
public function examplePage($id)
{
$example_id = request('example_id', 0);
$example = null;
if ($example_id) {
$example = CategoryExample::find($example_id);
}
// 获取数据,如果没有获取到抛出异常
return view('admin::category.example', compact('id', 'example_id','example')) ;
}
/**
* 添加站点
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function addExample($id)
{
try {
$example_id = request('example_id', 0);
if ($example_id > 0) {
// 获取数据,如果没有获取到抛出异常
$model = CategoryExample::findOrFail($example_id);
$model->question = request('question');
$model->answer = request('answer');
$model->save();
} else {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$model->examples()->create([
'question' => request('question'),
'answer' => request('answer'),
]);
}
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('operate_succeeded'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 线路更新站点的顺序
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function deleteExample($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$result = $model->examples()->where('id', request('id'))->delete();
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' =>__('operate_succeeded'),
]
);
}
return response()->json(
[
'code' => 1,
'status' => 1,
'message' =>__('操作失败。'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 获取 实例
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|JsonResponse
*/
public function labels($id)
{
$list = null;
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$list = $model->labels()->get();
return view('admin::category.labels', compact('id', 'list')) ;
} catch (ModelNotFoundException $e) {
return view('admin::category.labels', compact('id', 'list')) ;
}
}
/**
* 添加 标签 界面
*
* @param $id
*/
public function labelPage($id)
{
$label_id = request('label_id', 0);
$label = null;
if ($label_id) {
$label = CategoryLabel::find($label_id);
}
// 获取数据,如果没有获取到抛出异常
return view('admin::category.label', compact('id', 'label_id','label')) ;
}
/**
* 添加 标签
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function addLabel($id)
{
try {
$label_id = request('label_id', 0);
if ($label_id > 0) {
// 获取数据,如果没有获取到抛出异常
$model = CategoryLabel::findOrFail($label_id);
$model->name = request('name');
$model->can_multiple = request('can_multiple', 0);
$model->semantics = request('semantics');
$model->description = request('description');
$model->save();
} else {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$result = $model->labels()->create([
'name' => request('name'),
'semantics' => request('semantics'),
'description' => request('description'),
'can_multiple' => request('can_multiple', 0),
]);
// 同步到远程服务器
// CategoryLabelCreatedJob::dispatch($result);
}
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('operate_succeeded'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 删除 标签
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function deleteLabel($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$result = $model->labels()->where('id', request('id'))->delete();
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' =>__('operate_succeeded'),
]
);
}
return response()->json(
[
'code' => 1,
'status' => 1,
'message' =>__('操作失败。'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 添加 标签明细 界面
*
* @param $id
*/
public function labelItemPage($id)
{
$label_item_id = request('label_item_id', 0);
$label_item = null;
if ($label_item_id) {
$label_item = CategoryExample::find($label_item_id);
}
// 获取数据,如果没有获取到抛出异常
return view('admin::category.label-item', compact('id', 'label_item_id','label_item')) ;
}
/**
* 添加 标签明细
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function addLabelItem($id)
{
try {
$label_id = request('label_item_id', 0);
if ($label_id > 0) {
// 获取数据,如果没有获取到抛出异常
$model = CategoryLabelItem::findOrFail($label_id);
$model->name = request('name');
$model->description = request('description');
$model->save();
} else {
// 获取数据,如果没有获取到抛出异常
$model = CategoryLabel::findOrFail($id);
$model->items()->create([
'name' => request('name'),
'description' => request('description'),
]);
}
return response()->json(
[
'code' => 0,
'status' => 1,
'message' => __('operate_succeeded'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
/**
* 删除 标签明细
*
* @param integer $id 主键id
*
* @return JsonResponse
*/
public function deleteLabelItem($id)
{
try {
// 获取数据,如果没有获取到抛出异常
$result = CategoryLabelItem::where('id', request('id'))->delete();
if ($result) {
return response()->json(
[
'code' => 0,
'status' => 1,
'message' =>__('operate_succeeded'),
]
);
}
return response()->json(
[
'code' => 1,
'status' => 1,
'message' =>__('操作失败。'),
]
);
} catch (\Exception $e) {
return response()->json(
[
'code' => 1,
'status' => 0,
'message' => $e->getMessage(),
]
);
}
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: ChatRecord 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年4月24日13:45:56
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Grids\ChatRecordGrid;
use App\Models\Chat\ChatRecord;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
/**
* Class ChatRecordsController.
*
* @package App\Admin\Controllers
*/
class ChatRecordsController extends BaseController
{
use ChatRecordGrid;
/**
* ChatRecordsController constructor.
*
* @param ChatRecord $model 注入model
*/
public function __construct(ChatRecord $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = false;
// 是否可编辑
$this->can_edit = false;
// 是否可删除
$this->can_delete = false;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
/**
* 获取 聊天明细记录
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|JsonResponse
*/
public function items($id)
{
$list = null;
try {
// 获取数据,如果没有获取到抛出异常
$model = $this->model->findOrFail($id);
$list = $model->items()->with(['user'])->oldest()->get();
// dd($list->toArray());
// nl2br(1);
return view('admin::chat.items', compact('id', 'model','list')) ;
} catch (ModelNotFoundException $e) {
return view('admin::chat.items', compact('id', 'list')) ;
}
}
}
... ...
<?php
namespace App\Admin\Controllers;
use App\Admin\Forms\ExampleForm;
use App\Admin\Grids\ExampleGrid;
use App\Admin\Shows\ExampleShow;
use App\Models\Example;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
/**
* Class ExamplesController.
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2020年11月13日 01:26:09
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class ExamplesController extends BaseController
{
use ExampleGrid,
ExampleForm,
ExampleShow;
/**
* ExamplesController constructor.
*
* @param Example $model 注入model
*/
public function __construct(Example $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = true;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否可导出
$this->can_export = true;
// 是否可下架
$this->can_unshelve = true;
// 是否可审核
$this->can_audit = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: Feedback 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年4月20日14:26:14
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Forms\FeedbackForm;
use App\Admin\Grids\FeedbackGrid;
use App\Models\Feedback;
/**
* Class FeedbacksController.
*
* @package App\Admin\Controllers
*/
class FeedbacksController extends BaseController
{
use FeedbackGrid, FeedbackForm;
/**
* FeedbacksController constructor.
*
* @param Feedback $model 注入model
*/
public function __construct(Feedback $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 管理端控制层: HelpCenter 控制类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Controllers
* @package App\Admin\Controllers
* @author Richer <yangzi1028@163.com>
* @date 2023年4月20日14:26:14
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Controllers;
use App\Admin\Forms\HelpCenterForm;
use App\Admin\Grids\HelpCenterGrid;
use App\Models\HelpCenter;
/**
* Class HelpCentersController.
*
* @package App\Admin\Controllers
*/
class HelpCentersController extends BaseController
{
use HelpCenterGrid, HelpCenterForm;
/**
* HelpCentersController constructor.
*
* @param HelpCenter $model 注入model
*/
public function __construct(HelpCenter $model)
{
// 资源显示的中名称
$this->title = $model::OBJ_NAME_ZH;
// 是否可查看
$this->can_view = false;
// 是否可新增
$this->can_create = true;
// 是否可编辑
$this->can_edit = true;
// 是否可删除
$this->can_delete = true;
// 是否开启下拉菜单
$this->dropdownActions = false;
// 执行父类构造方法
parent::__construct($model);
}
}
... ...