gamebackend/application/admin/controller/GenerateController.php

295 lines
8.6 KiB
PHP
Raw Permalink Normal View History

<?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);
}
}