From fb202ee3aaa977ca511f72f7a7bbfa55fd470a8b Mon Sep 17 00:00:00 2001 From: xuanchen <122383162@qq.com> Date: Sun, 27 Sep 2020 16:53:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/admin.php | 10 +- config/excel.php | 305 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+), 5 deletions(-) create mode 100644 config/excel.php diff --git a/config/admin.php b/config/admin.php index e930396..1ac6c6a 100644 --- a/config/admin.php +++ b/config/admin.php @@ -58,9 +58,9 @@ return [ */ 'route' => [ - 'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'), + 'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'), - 'namespace' => 'App\\Admin\\Controllers', + 'namespace' => 'App\\Admin\\Controllers', 'middleware' => ['web', 'admin'], ], @@ -110,11 +110,11 @@ return [ */ 'auth' => [ - 'controller' => App\Admin\Controllers\AuthController::class, + 'controller' => App\Admin\Controllers\AuthController::class, - 'guard' => 'admin', + 'guard' => 'admin', - 'guards' => [ + 'guards' => [ 'admin' => [ 'driver' => 'session', 'provider' => 'admin', diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..db3fec7 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,305 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + ], + + 'imports' => [ + + /* + |-------------------------------------------------------------------------- + | Read Only + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might only be interested in the + | data that the sheet exists. By default we ignore all styles, + | however if you want to do some logic based on style data + | you can enable it by setting read_only to false. + | + */ + 'read_only' => true, + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'heading_row' => [ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer/reader type should be used when the package + | needs to guess the correct type based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + /* + |-------------------------------------------------------------------------- + | Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + | Possible value binders: + | + | [x] Maatwebsite\Excel\DefaultValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class + | + */ + 'value_binder' => [ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Default cell caching driver + |-------------------------------------------------------------------------- + | + | By default PhpSpreadsheet keeps all cell values in memory, however when + | dealing with large files, this might result into memory issues. If you + | want to mitigate that, you can configure a cell caching driver here. + | When using the illuminate driver, it will store each value in a the + | cache store. This can slow down the process, because it needs to + | store each value. You can use the "batch" store if you want to + | only persist to the store when the memory limit is reached. + | + | Drivers: memory|illuminate|batch + | + */ + 'driver' => 'memory', + + /* + |-------------------------------------------------------------------------- + | Batch memory caching + |-------------------------------------------------------------------------- + | + | When dealing with the "batch" caching driver, it will only + | persist to the store when the memory limit is reached. + | Here you can tweak the memory limit to your liking. + | + */ + 'batch' => [ + 'memory_limit' => 60000, + ], + + /* + |-------------------------------------------------------------------------- + | Illuminate cache + |-------------------------------------------------------------------------- + | + | When using the "illuminate" caching driver, it will automatically use + | your default cache store. However if you prefer to have the cell + | cache on a separate store, you can configure the store name here. + | You can use any store defined in your cache config. When leaving + | at "null" it will use the default store. + | + */ + 'illuminate' => [ + 'store' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'transactions' => [ + 'handler' => 'db', + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => storage_path('framework/laravel-excel'), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + 'remote_prefix' => null, + + /* + |-------------------------------------------------------------------------- + | Force Resync + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup as above, it's possible + | for the clean up that occurs after entire queue has been run to only + | cleanup the server that the last AfterImportJob runs on. The rest of the server + | would still have the local temporary file stored on it. In this case your + | local storage limits can be exceeded and future imports won't be processed. + | To mitigate this you can set this config value to be true, so that after every + | queued chunk is processed the local temporary file is deleted on the server that + | processed it. + | + */ + 'force_resync_remote' => null, + ], +]; From 3ddfaa9502d601ea9b02e72a62fdb45c59bb5ef8 Mon Sep 17 00:00:00 2001 From: xuanchen <122383162@qq.com> Date: Tue, 29 Sep 2020 15:25:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=94=BE=E5=BC=80=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/User/IndexController.php | 600 +++++++++--------- 1 file changed, 299 insertions(+), 301 deletions(-) diff --git a/app/Admin/Controllers/User/IndexController.php b/app/Admin/Controllers/User/IndexController.php index 4b5b260..e717aac 100644 --- a/app/Admin/Controllers/User/IndexController.php +++ b/app/Admin/Controllers/User/IndexController.php @@ -1,301 +1,299 @@ - - * @Date : 2019/9/18 14:50 - * @return Grid - */ - protected function grid() - { - $user = Auth::guard('admin')->user(); - $grid = new Grid(new User); - - $grid->actions(function ($actions) use ($user) { - $actions->disableDelete(); - $actions->disableView(); - - if ($actions->row->identity_id == 1) { - $actions->add(new RefD3Key); - $actions->add(new ReCode); - $actions->add(new Callback); - } - - if ($actions->row->identity_id == 1 && $user->id == 1) { - $actions->add(new Profit); - } - }); - - $grid->tools(function (Grid\Tools $tools) { - // $tools->append(new UserImport); - }); - - $grid->model()->orderBy('id', 'desc'); - - $grid->quickSearch('username')->placeholder('登录账户'); - - $grid->filter(function ($filter) { - $filter->column(1 / 2, function ($filter) { - $filter->like('username', '登录账户'); - $filter->like('server_id', '渠道编号'); - $filter->like('outlet_id', '网点编号'); - $filter->like('PaOutletId', '平安网点id'); - $filter->between('created_at', '注册时间')->datetime(); - }); - $filter->column(1 / 2, function ($filter) { - $filter->like('info.nickname', '渠道/网点'); - $filter->like('server_key', '服务秘钥'); - $filter->equal('identity.identity_id', '用户身份')->select([ - ' ' => '全部', - '1' => '渠道商', - '2' => '网点', - ]); - $filter->equal('type', '所属项目')->select([ - ' ' => '全部', - 'pingan' => '平安券', - 'wo' => '沃支付', - ]); - }); - }); - - $grid->column('id', '#ID#'); - $grid->column('username', '登录账户'); - $grid->column('渠道编号')->display(function () { - return $this->server_id; - }); - $grid->column('网点编号')->display(function () { - return $this->outlet_id ?? '---'; - }); - - $grid->column('平安网点id')->display(function () { - return $this->PaOutletId ?? '---'; - }); - - $grid->column('所属项目')->display(function () { - return $this->type_text; - }); - - $grid->column('回调地址')->display(function ($title, $column) { - return '点击查看'; - })->modal(function ($model) { - $data = [ - [ - $this->callback, - ], - ]; - - return new Table(['url'], $data); - - }); - - $grid->column('密钥')->display(function ($title, $column) { - return '点击查看'; - })->modal(function ($model) { - $data = [ - [ - '服务秘钥', $model->server_key ?? '---', - ], - [ - 'DES3秘钥', $model->des3key ?? '---', - ], - ]; - - return new Table(['名称', '参数'], $data); - - }); - - $grid->column('nickname', '渠道/网点'); - $grid->column('用户身份')->display(function () { - if ($this->identity_id == 1) { - return "
" . $this->identity_text . "
"; - } else { - return $this->identity_text; - } - - }); - - $grid->column('隶属渠道')->display(function () { - return $this->parent ? $this->parent->nickname : '---'; - }); - - if ($user->id == 1) { - $grid->column('分润规则')->display(function ($title, $column) { - return '点击展开'; - })->modal(function ($model) { - if ($model->code) { - $codes = $model->code->map(function ($code) { - return $code->only(['name', 'code', 'profit']); - }); - - return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray()); - } - - }); - } - - $grid->column('created_at', '注册时间'); - $grid->disableExport(false); - - $grid->export(function ($export) { - $export->except(['密钥', '分润规则']); - $export->column('用户身份', function ($value, $original) { - return strip_tags($value); - }); - $export->column('渠道编号', function ($value, $original) { - return $value . "\t"; - }); - $export->column('网点编号', function ($value, $original) { - return $value . "\t"; - }); - $export->filename('用户管理' . date("YmdHis")); - }); - - return $grid; - } - - /** - * Notes: - * @Author:" . $this->identity_text . "
"; + } else { + return $this->identity_text; + } + + }); + + $grid->column('隶属渠道')->display(function () { + return $this->parent ? $this->parent->nickname : '---'; + }); + + $grid->column('分润规则')->display(function ($title, $column) { + return '点击展开'; + })->modal(function ($model) { + if ($model->code) { + $codes = $model->code->map(function ($code) { + return $code->only(['name', 'code', 'profit']); + }); + + return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray()); + } + + }); + + $grid->column('created_at', '注册时间'); + $grid->disableExport(false); + + $grid->export(function ($export) { + $export->except(['密钥', '分润规则']); + $export->column('用户身份', function ($value, $original) { + return strip_tags($value); + }); + $export->column('渠道编号', function ($value, $original) { + return $value . "\t"; + }); + $export->column('网点编号', function ($value, $original) { + return $value . "\t"; + }); + $export->filename('用户管理' . date("YmdHis")); + }); + + return $grid; + } + + /** + * Notes: + * @Author: