add:新增导入导出公共接口
This commit is contained in:
parent
38e10896d4
commit
4e1e040936
105
catch/system/controller/Excel.php
Normal file
105
catch/system/controller/Excel.php
Normal file
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
namespace catchAdmin\system\controller;
|
||||
|
||||
use catcher\base\CatchController;
|
||||
use catcher\CatchResponse;
|
||||
use think\Request;
|
||||
|
||||
class Excel extends CatchController
|
||||
{
|
||||
/**
|
||||
* 导出
|
||||
*
|
||||
* @time 2021年04月22日
|
||||
* @param Request $request
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function export(Request $request): \think\response\Json
|
||||
{
|
||||
$fields = $this->resetFields(\json_decode($request->post('fields'), true));
|
||||
|
||||
$excel = app()->make($request->post('model'))
|
||||
->field(array_column($fields, 'field'))
|
||||
->select()
|
||||
->each(function (&$item, $key) use ($fields) {
|
||||
foreach ($fields as $field) {
|
||||
if (isset($field['options']) && count($field['options'])) {
|
||||
$options = $this->valueToLabel($field['options']);
|
||||
|
||||
$item[$field['field']] = $options[$item[$field['field']]] ?? '';
|
||||
}
|
||||
}
|
||||
})->export(array_column($fields, 'name'));
|
||||
|
||||
return CatchResponse::success($excel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入
|
||||
*
|
||||
* @time 2021年04月23日
|
||||
* @param Request $request
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function import(Request $request): \think\response\Json
|
||||
{
|
||||
return CatchResponse::success(app()->make($request->post('model'))
|
||||
->import(
|
||||
\json_decode($request->post('fields'), 'field'),
|
||||
$request->file('file')
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* value => label
|
||||
*
|
||||
* @time 2021年04月22日
|
||||
* @param array $options
|
||||
* @return array
|
||||
*/
|
||||
protected function valueToLabel(array $options): array
|
||||
{
|
||||
$p = [];
|
||||
foreach ($options as $option) {
|
||||
$p[$option['value']] = $option['label'];
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
/**
|
||||
*label => value
|
||||
*
|
||||
* @time 2021年04月22日
|
||||
* @param array $options
|
||||
* @return array
|
||||
*/
|
||||
protected function labelToValue(array $options): array
|
||||
{
|
||||
$p = [];
|
||||
foreach ($options as $option) {
|
||||
$p[$option['label']] = $option['value'];
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重组 fields
|
||||
*
|
||||
* @time 2021年04月22日
|
||||
* @param array $fields
|
||||
* @return array
|
||||
*/
|
||||
protected function resetFields(array $fields): array
|
||||
{
|
||||
$f = [];
|
||||
|
||||
foreach ($fields as $field) {
|
||||
$f[$field['field']] = $field;
|
||||
}
|
||||
|
||||
return $f;
|
||||
}
|
||||
}
|
@ -48,6 +48,11 @@ $router->group(function () use ($router) {
|
||||
$router->put('modules/<module>', '\catchAdmin\system\controller\Module@disOrEnable');
|
||||
$router->put('cache/modules', '\catchAdmin\system\controller\Module@cache');
|
||||
$router->delete('clear/modules', '\catchAdmin\system\controller\Module@clear');
|
||||
|
||||
// excel 导入&导出通用
|
||||
$router->post('excel/export', '\catchAdmin\system\controller\Excel@export');
|
||||
$router->post('excel/import', '\catchAdmin\system\controller\Excel@import');
|
||||
|
||||
})->middleware('auth');
|
||||
|
||||
// 获取 table
|
||||
|
Loading…
x
Reference in New Issue
Block a user