295 lines
8.6 KiB
PHP
295 lines
8.6 KiB
PHP
![]() |
<?php
|
|||
|
/**
|
|||
|
* 代码自动生成控制器
|
|||
|
* @author yupoxiong<i@yufuping.com>
|
|||
|
*/
|
|||
|
|
|||
|
namespace app\admin\controller;
|
|||
|
|
|||
|
use app\admin\model\AdminMenu;
|
|||
|
use Error;
|
|||
|
use Exception;
|
|||
|
use generate\field\Ip;
|
|||
|
use generate\field\Map;
|
|||
|
use generate\field\Province;
|
|||
|
use generate\field\Url;
|
|||
|
use generate\field\File;
|
|||
|
use generate\field\Icon;
|
|||
|
use generate\field\Year;
|
|||
|
use generate\field\Text;
|
|||
|
use generate\field\Date;
|
|||
|
use generate\field\Color;
|
|||
|
use generate\field\Email;
|
|||
|
use generate\field\Field;
|
|||
|
use generate\field\Radio;
|
|||
|
use generate\field\Image;
|
|||
|
use generate\field\Select;
|
|||
|
use generate\field\Mobile;
|
|||
|
use generate\field\IdCard;
|
|||
|
use generate\field\Number;
|
|||
|
use generate\field\Editor;
|
|||
|
use generate\field\Datetime;
|
|||
|
use generate\field\Checkbox;
|
|||
|
use generate\field\Password;
|
|||
|
use generate\field\Textarea;
|
|||
|
use generate\field\YearMonth;
|
|||
|
use generate\field\YearRange;
|
|||
|
use generate\field\MultiFile;
|
|||
|
use generate\field\DateRange;
|
|||
|
use generate\field\MultiImage;
|
|||
|
use generate\field\SwitchField;
|
|||
|
use generate\field\MultiSelect;
|
|||
|
use generate\field\DatetimeRange;
|
|||
|
use generate\field\YearMonthRange;
|
|||
|
use think\Db;
|
|||
|
use think\db\Connection;
|
|||
|
use think\facade\Log;
|
|||
|
use think\Request;
|
|||
|
use generate\Generate;
|
|||
|
use think\response\Json;
|
|||
|
|
|||
|
class GenerateController extends Controller
|
|||
|
{
|
|||
|
|
|||
|
//首页
|
|||
|
public function index()
|
|||
|
{
|
|||
|
$this->admin['title'] = 'AutoCode';
|
|||
|
return $this->fetch();
|
|||
|
}
|
|||
|
|
|||
|
//自动生成页面
|
|||
|
public function add()
|
|||
|
{
|
|||
|
$this->admin['title'] = 'AutoCode';
|
|||
|
|
|||
|
$this->assign([
|
|||
|
'table' => (new Generate())->getTable(),
|
|||
|
'menus' => (new Generate())->getMenu(10000),
|
|||
|
]);
|
|||
|
|
|||
|
return $this->fetch();
|
|||
|
}
|
|||
|
|
|||
|
//获取表数据
|
|||
|
public function getTable()
|
|||
|
{
|
|||
|
return admin_success('success', URL_CURRENT, (new Generate())->getTable());
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public function getMenu()
|
|||
|
{
|
|||
|
return admin_success('success', URL_CURRENT, (new Generate())->getMenu(10000));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//自动生成代码接口
|
|||
|
public function create(Request $request)
|
|||
|
{
|
|||
|
$param = $request->param();
|
|||
|
|
|||
|
|
|||
|
$data = [
|
|||
|
'table' => $param['table_name'],
|
|||
|
'cn_name' => $param['cn_name'],
|
|||
|
'menu' => [
|
|||
|
//创建菜单-1为不创建,0为顶级菜单
|
|||
|
'create' => $param['create_menu'],
|
|||
|
'menu' => $param['create_menu_list']
|
|||
|
],
|
|||
|
'controller' => [
|
|||
|
'module' => 'admin',
|
|||
|
'create' => $param['create_controller'] ?? 0,
|
|||
|
'name' => $param['controller_name'],
|
|||
|
'action' => $param['controller_action_list'],
|
|||
|
],
|
|||
|
'model' => [
|
|||
|
'module' => 'common',
|
|||
|
'create' => $param['create_model'] ?? 0,
|
|||
|
'name' => $param['model_name'],
|
|||
|
'timestamp' => $param['auto_timestamp'] ?? 0,
|
|||
|
'soft_delete' => $param['soft_delete'] ?? 0,
|
|||
|
],
|
|||
|
'validate' => [
|
|||
|
'module' => 'common',
|
|||
|
'create' => $param['create_validate'] ?? 0,
|
|||
|
'name' => $param['validate_name'],
|
|||
|
],
|
|||
|
'view' => [
|
|||
|
'create_index' => $param['create_view_index'] ?? 0,
|
|||
|
'index_button' => $param['index_operation_button'] ?? 1,
|
|||
|
'create_add' => $param['create_view_add'] ?? 0,
|
|||
|
'enable' => $param['list_enable'] ?? 0,
|
|||
|
'delete' => $param['list_delete'] ?? 0,
|
|||
|
'create' => $param['list_create'] ?? 0,
|
|||
|
'export' => $param['list_export'] ?? 0,
|
|||
|
'refresh' => $param['list_refresh'] ?? 0,
|
|||
|
],
|
|||
|
'module' => [
|
|||
|
'name_suffix' => $param['module_name_suffix'],
|
|||
|
'icon' => $param['module_icon'],
|
|||
|
],
|
|||
|
];
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 字段数据组装
|
|||
|
*/
|
|||
|
$field_data = [];
|
|||
|
foreach ($param['field_name'] as $key => $value) {
|
|||
|
|
|||
|
$field_data[] = [
|
|||
|
//字段名
|
|||
|
'field_name' => $param['field_name'][$key][0],
|
|||
|
//字段类型
|
|||
|
'field_type' => $param['field_type'][$key][0],
|
|||
|
//表单名称/中文名称
|
|||
|
'form_name' => $param['form_name'][$key][0] ?? '',
|
|||
|
//是否为列表字段
|
|||
|
'is_list' => $param['is_list'][$key][0] ?? 0,
|
|||
|
//是否为表单字段
|
|||
|
'is_form' => $param['is_form'][$key][0] ?? 0,
|
|||
|
//表单类型
|
|||
|
'form_type' => $param['form_type'][$key][0] ?? 0,
|
|||
|
//验证规则
|
|||
|
'form_validate' => $param['form_validate'][$key] ?? 0,
|
|||
|
//默认值
|
|||
|
'field_default' => $param['field_default'][$key][0] ?? 0,
|
|||
|
//获取器/修改器
|
|||
|
'getter_setter' => $param['getter_setter'][$key][0] ?? 0,
|
|||
|
//是否参与列表排序
|
|||
|
'list_sort' => $param['list_sort'][$key][0] ?? 0,
|
|||
|
//筛选字段
|
|||
|
'index_search' => $param['index_search'][$key][0] ?? 0,
|
|||
|
//筛选自定义select
|
|||
|
'field_select_data' => $param['field_select_data'][$key][0] ?? '',
|
|||
|
//验证场景
|
|||
|
'field_scene' => $param['field_scene'][$key] ?? 0,
|
|||
|
//关联
|
|||
|
'is_relation' => $param['is_relation'][$key][0] ?? 0,
|
|||
|
//关联类型
|
|||
|
'relation_type' => $param['relation_type'][$key][0] ?? 1,
|
|||
|
//关联表
|
|||
|
'relation_table' => $param['relation_table'][$key][0] ?? '',
|
|||
|
//关联显示字段
|
|||
|
'relation_show' => $param['relation_show'][$key][0] ?? 'name',
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
$data['data'] = $field_data;
|
|||
|
|
|||
|
//已经组装好data,先生成表,再生成模型,验证器,控制器,视图
|
|||
|
$generate = new Generate($data);
|
|||
|
$msg = '生成成功';
|
|||
|
$result = false;
|
|||
|
try {
|
|||
|
$generate->run();
|
|||
|
$result = true;
|
|||
|
} catch (Exception $e) {
|
|||
|
Log::error($e);
|
|||
|
$msg = $e->getMessage();//.$e->getFile().$e->getLine();
|
|||
|
}
|
|||
|
|
|||
|
return $result ? admin_success($msg, URL_CURRENT) : admin_error($msg);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//自动生成form表单字段
|
|||
|
public function form()
|
|||
|
{
|
|||
|
$this->admin['title'] = 'AutoCode';
|
|||
|
return $this->fetch();
|
|||
|
}
|
|||
|
|
|||
|
//生成表单字段html接口
|
|||
|
public function formField(Request $request)
|
|||
|
{
|
|||
|
$param = $request->param();
|
|||
|
if (empty($param['form_name']) || empty($param['field_name']) || empty($param['form_type'])) {
|
|||
|
return admin_error('信息不完整');
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
$result = false;
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
if ($param['form_type'] === 'switch') {
|
|||
|
$param['form_type'] = 'switch_field';
|
|||
|
}
|
|||
|
|
|||
|
$param['field_default'] = '';
|
|||
|
|
|||
|
$class_name = parse_name($param['form_type'], 1);
|
|||
|
|
|||
|
$class = '\\generate\\field\\' . $class_name;
|
|||
|
$data = $class::create($param);
|
|||
|
|
|||
|
$result = true;
|
|||
|
|
|||
|
$msg = '生成表单html成功';
|
|||
|
} catch (Exception $exception) {
|
|||
|
|
|||
|
$msg = $exception->getMessage();
|
|||
|
} catch (Error $error) {
|
|||
|
$msg = $error->getMessage();
|
|||
|
}
|
|||
|
|
|||
|
return $result ? admin_success($msg, URL_CURRENT, $data) : admin_error($msg);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//根据字段返回相关表单类型和验证
|
|||
|
public function getField(Request $request)
|
|||
|
{
|
|||
|
|
|||
|
$param = $request->param();
|
|||
|
$name = $param['name'];
|
|||
|
|
|||
|
$data = (new Generate())->getAll($name);
|
|||
|
|
|||
|
return admin_success('success', URL_CURRENT, $data);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//获取验证select内容
|
|||
|
|
|||
|
/**
|
|||
|
* @param Request $request
|
|||
|
* @return Json|void
|
|||
|
*/
|
|||
|
public function getValidateSelect(Request $request)
|
|||
|
{
|
|||
|
|
|||
|
$param = $request->param();
|
|||
|
|
|||
|
$result = false;
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
if ($param['form_type'] === 'switch') {
|
|||
|
$param['form_type'] = 'switch_field';
|
|||
|
}
|
|||
|
|
|||
|
$class_name = parse_name($param['form_type'], 1);
|
|||
|
|
|||
|
$class = '\\generate\\field\\' . $class_name;
|
|||
|
$data = $class::rule();
|
|||
|
|
|||
|
$result = true;
|
|||
|
|
|||
|
$msg = '获取字段验证规则成功';
|
|||
|
} catch (Exception $exception) {
|
|||
|
|
|||
|
$msg = $exception->getMessage();
|
|||
|
} catch (Error $error) {
|
|||
|
$msg = $error->getMessage();
|
|||
|
}
|
|||
|
|
|||
|
return $result ? admin_success($msg, URL_CURRENT, $data) : admin_error($msg);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|