model = new Ledger(); } /** * 模板列表 */ public function index(Request $request): Response { if ($request->isAjax()) { $param = $request->get(); if ($param['subResource'] ?? false) { $keyword = trim($param['keyword'] ?? ''); $subResource = []; switch ($param['subResource']) { case 'table': $subResource = $this->getTables($keyword); break; case 'column': $subResource = $this->getColumns($keyword); break; case 'export': $subResource = $this->getExport($param); break; default: return sparkSuccess(dataReturn(-1, '未知子资源')); } return sparkSuccess(dataReturn(0, '获取子资源成功', $subResource)); } $param['pagination'] ??= ['page' => 1, 'limit' => 10]; $query = $this->model::with([]); ($param['name'] ?? false) && $query->where('name', 'like', '%' . $param['name'] . '%'); ($param['type'] ?? false) && $query->where('type', $param['type']); return sparkSuccess(dataReturn(0, '获取成功', $query->paginate($param['pagination']['limit'], ['*'], 'page', $param['pagination']['page']))); } return view('system/ledger/index'); } /** * 获取数据库中的所有表名 */ private function getTables(?string $keyword = null) { // 获取目标数据库名 $databaseName = getenv('DB_NAME'); // 如果提供了关键词进行筛选,则构造包含LIKE语句的SQL查询 $likeRaw = $keyword ? "AND TABLE_NAME LIKE '%$keyword%'" : ''; // 使用 Laravel 的 DB 门面执行 SQL 查询以获取指定数据库中的所有表名 $result = Db::select(" SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? {$likeRaw} order by TABLE_NAME; ", [$databaseName]); return $this->option(collect($result), 'TABLE_NAME', 'TABLE_NAME'); } /** * 获取指定表的所有列名 */ private function getColumns(?string $keyword = null) { $tableName = $keyword; $result = Db::select(" SELECT COLUMN_NAME,COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?; ", [getenv('DB_NAME'), $tableName]); return $result; } /** * 获取导出 */ private function getExport(array $param) { $tablePrefix = getenv('DB_PREFIX'); $tableName = str_replace($tablePrefix, '', $param['table_name']); $query = Db::table($tableName); if ($param['field_org'] ?? false) { $orgIds = getOrgSelfAndChildrenIdsById(); $query->whereIn($param['field_org'], $orgIds); } if ($param['field_time'] ?? false) { ($param['date'][0] ?? false) && $query->where($param['field_time'], '>=', $param['date'][0]); ($param['date'][1] ?? false) && $query->where($param['field_time'], '<=', $param['date'][1]); } return $query->get(['*']); } /** * 增模板 */ public function store(Request $request): Response { $data = $request->post(); // 过滤黑名单 $blacklist = ['']; $data = Arr::except($data, $blacklist); $this->model::insert($data); // $that = $this; // $that->model->executeTransaction(function () use ($that, $data) { // $model = $that->model::create($data); // }); return sparkSuccess(dataReturn(0, '添加成功')); } /** * 改模板 */ public function update(Request $request, int $id): Response { $data = $request->post(); // 过滤黑名单 $blacklist = ['']; $data = Arr::except($data, $blacklist); $data['column_description'] = json_decode($data['column_description'], true); $this->model::find($id)->update($data); $that = $this; // $that->model->executeTransaction(function () use ($that, $id, $data) { // $model = $that->model::find($id); // $model->update($data); // }); return sparkSuccess(dataReturn(0, '操作成功')); } /** * 删模板 */ public function destroy(Request $request, $id): Response { $id = explode(',', $id); $this->model::destroy($id); // $that = $this; // $that->model->executeTransaction(function () use ($that, $id) { // $model::destroy($id); // }); return sparkSuccess(dataReturn(0, '操作成功')); } }