add:新增导入导出公共接口

This commit is contained in:
JaguarJack 2021-04-24 20:32:36 +08:00
parent 38e10896d4
commit 4e1e040936
2 changed files with 110 additions and 0 deletions

View 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;
}
}

View File

@ -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