From daa543f9515361fbd332ade6c8df899d433603d9 Mon Sep 17 00:00:00 2001 From: wolfcode <37436228+wolf-leo@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:54:45 +0800 Subject: [PATCH] =?UTF-8?q?CURD=E5=8F=AF=E8=A7=86=E5=8C=96=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/system/CurdGenerate.php | 92 +++++++++++++++ app/admin/service/curd/BuildCurd.php | 8 +- .../service/curd/templates/model/model.code | 2 + .../view/system/curd_generate/index.html | 46 ++++++++ config/install/sql/install.sql | 11 +- .../static/admin/js/system/curd_generate.js | 110 ++++++++++++++++++ 6 files changed, 267 insertions(+), 2 deletions(-) create mode 100644 app/admin/controller/system/CurdGenerate.php create mode 100644 app/admin/view/system/curd_generate/index.html create mode 100644 public/static/admin/js/system/curd_generate.js diff --git a/app/admin/controller/system/CurdGenerate.php b/app/admin/controller/system/CurdGenerate.php new file mode 100644 index 0000000..1eae8b9 --- /dev/null +++ b/app/admin/controller/system/CurdGenerate.php @@ -0,0 +1,92 @@ +fetch(); + } + + /** + * @NodeAnnotation(title="操作") + * @throws TableException + */ + public function save(Request $request, string $type = ''): ?Json + { + if (!$request->isAjax()) return $this->error(); + $tb_prefix = $request->post('tb_prefix/s', ''); + $tb_name = $request->post('tb_name/s', ''); + if (empty($tb_name) || empty($tb_prefix)) return $this->error('参数错误'); + switch ($type) { + case "search": + try { + $list = Db::query("SHOW FULL COLUMNS FROM {$tb_prefix}{$tb_name}"); + $data = []; + foreach ($list as $value) { + $data[] = [ + 'name' => $value['Field'], + 'type' => $value['Type'], + 'key' => $value['Key'], + 'extra' => $value['Extra'], + 'null' => $value['Null'], + 'desc' => $value['Comment'], + ]; + } + return $this->success('查询成功', compact('data', 'list')); + } catch (PDOException $exception) { + return $this->error($exception->getMessage()); + } + break; + case "add": + $force = $request->post('force/d', 0); + try { + $build = (new BuildCurd())->setTablePrefix($tb_prefix)->setTable($tb_name); + $build->setForce($force); // 强制覆盖 + $build = $build->render(); + $fileList = $build->getFileList(); + if (empty($fileList)) return $this->error('这里什么都没有'); + $result = $build->create(); + return $this->success('生成成功', compact('result')); + } catch (FileException $exception) { + return json(['code' => -1, 'msg' => $exception->getMessage()]); + } + break; + case "delete": + try { + $build = (new BuildCurd())->setTablePrefix($tb_prefix)->setTable($tb_name); + $build = $build->render(); + $fileList = $build->getFileList(); + if (empty($fileList)) return $this->error('这里什么都没有'); + $result = $build->delete(); + return $this->success('删除自动生成CURD文件成功', compact('result')); + } catch (FileException $exception) { + return json(['code' => -1, 'msg' => $exception->getMessage()]); + } + break; + default: + return $this->error('参数错误'); + break; + } + } +} \ No newline at end of file diff --git a/app/admin/service/curd/BuildCurd.php b/app/admin/service/curd/BuildCurd.php index 565f5bb..31512de 100644 --- a/app/admin/service/curd/BuildCurd.php +++ b/app/admin/service/curd/BuildCurd.php @@ -239,6 +239,12 @@ class BuildCurd return $this; } + public function setTablePrefix($prefix): static + { + $this->tablePrefix = $prefix; + return $this; + } + /** * 设置主表 * @param $table @@ -1059,12 +1065,12 @@ class BuildCurd array_pop($extendNamespaceArray); $extendNamespace = '\\' . implode('\\', $extendNamespaceArray); } - $modelValue = CommonTool::replaceTemplate( $this->getTemplate("model{$this->DS}model"), [ 'modelName' => $this->modelName, 'modelNamespace' => "app\admin\model{$extendNamespace}", + 'prefix_table' => $this->tablePrefix == config('database.connections.mysql.prefix') ? "" : $this->tablePrefix . $this->table, 'table' => $this->table, 'deleteTime' => $this->delete ? '"delete_time"' : 'false', 'relationList' => $relationList, diff --git a/app/admin/service/curd/templates/model/model.code b/app/admin/service/curd/templates/model/model.code index 8194111..bec8223 100644 --- a/app/admin/service/curd/templates/model/model.code +++ b/app/admin/service/curd/templates/model/model.code @@ -9,6 +9,8 @@ class {{modelName}} extends TimeModel protected $name = "{{table}}"; + protected $table = "{{prefix_table}}"; + protected $deleteTime = {{deleteTime}}; {{relationList}} diff --git a/app/admin/view/system/curd_generate/index.html b/app/admin/view/system/curd_generate/index.html new file mode 100644 index 0000000..88ea1c3 --- /dev/null +++ b/app/admin/view/system/curd_generate/index.html @@ -0,0 +1,46 @@ +
+ 数据表: ++