CURD可视化操作

This commit is contained in:
wolfcode
2023-11-30 12:54:45 +08:00
parent da3877cf2e
commit daa543f951
6 changed files with 267 additions and 2 deletions

View File

@@ -0,0 +1,92 @@
<?php
namespace app\admin\controller\system;
use app\admin\service\curd\BuildCurd;
use app\admin\service\curd\exceptions\TableException;
use app\common\controller\AdminController;
use app\admin\service\annotation\ControllerAnnotation;
use app\admin\service\annotation\NodeAnnotation;
use app\Request;
use think\db\exception\PDOException;
use think\exception\FileException;
use think\facade\Db;
use think\response\Json;
/**
* @ControllerAnnotation(title="CURD可视化管理")
* Class Auth
* @package app\admin\controller\system
*/
class CurdGenerate extends AdminController
{
/**
* @NodeAnnotation(title="列表")
*/
public function index()
{
return $this->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;
}
}
}

View File

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

View File

@@ -9,6 +9,8 @@ class {{modelName}} extends TimeModel
protected $name = "{{table}}";
protected $table = "{{prefix_table}}";
protected $deleteTime = {{deleteTime}};
{{relationList}}

View File

@@ -0,0 +1,46 @@
<div class="layuimini-container">
<div class="layuimini-main" id="app">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<form id="app-form" class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label">数据库表前缀</label>
<div class="layui-input-block">
<input type="text" name="tb_prefix" class="layui-input" lay-verify="required" placeholder="请输入" value="{:env('DATABASE.PREFIX','')}">
</div>
<tip></tip>
</div>
<div class="layui-form-item">
<label class="layui-form-label">数据库表名字</label>
<div class="layui-input-block">
<input type="text" name="tb_name" class="layui-input" lay-verify="required" placeholder="请输入:例如 test_goods" value="">
<tip>数据库表名字 不包含数据库表前缀。</tip>
</div>
</div>
<div class="hr-line"></div>
<div class="layui-form-item text-center">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" lay-filter="search" lay-submit="system.CurdGenerate/save?type=search" data-refresh="false">查询</button>
</div>
</form>
</div>
<div class="tableShow layui-hide">
<blockquote class="layui-elem-quote layui-quote-nm">
数据表:<span class="table-text"></span>
</blockquote>
<div class="layui-btn-container">
<form class="layui-form layuimini-form">
<button type="button" class="layui-btn layui-bg-cyan" lay-filter="add" lay-submit="system.CurdGenerate/save?type=add">自动生成CURD</button>
<button type="button" class="layui-btn layui-bg-red" lay-filter="delete" lay-submit="system.CurdGenerate/save?type=delete">删除CURD对应的文件</button>
</form>
<div class="file-list layui-elem-quote">还未生成任何文件</div>
</div>
<table id="currentTable" class="layui-table" lay-filter="currentTable"></table>
</div>
</div>
</div>