diff --git a/catch/system/controller/Excel.php b/catch/system/controller/Excel.php new file mode 100644 index 0000000..5dcbfb6 --- /dev/null +++ b/catch/system/controller/Excel.php @@ -0,0 +1,105 @@ +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; + } +} \ No newline at end of file diff --git a/catch/system/route.php b/catch/system/route.php index 298cd97..0d4526f 100644 --- a/catch/system/route.php +++ b/catch/system/route.php @@ -48,6 +48,11 @@ $router->group(function () use ($router) { $router->put('modules/', '\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