From 71caf80d45e5e2abf544e97dabde7959ea8e3c8c Mon Sep 17 00:00:00 2001 From: xjh <2423579486@qq.com> Date: Sun, 7 May 2023 16:53:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E5=9D=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/Gen/GenApi/GenApi.php | 120 +++++++++++++++--- .../controller/Gen/GenApi/GenModel/Model.php | 18 +-- 2 files changed, 107 insertions(+), 31 deletions(-) diff --git a/app/admin/controller/Gen/GenApi/GenApi.php b/app/admin/controller/Gen/GenApi/GenApi.php index 9199378..ed57b9b 100644 --- a/app/admin/controller/Gen/GenApi/GenApi.php +++ b/app/admin/controller/Gen/GenApi/GenApi.php @@ -9,6 +9,12 @@ use app\admin\controller\Gen\Gen; */ class GenApi { + /** + * 模型层模板文件字符串 + * @var string + */ + protected $model_temp; + /** * 项目根目录路径 * @var string @@ -69,17 +75,35 @@ class GenApi */ protected $model_path; + /** + * 新增功能必要字段 + * @var array + */ + protected $add_required_fields = ['guid', 'create_user_guid', 'update_user_guid']; + + /** + * 修改功能必要字段 + * @var array + */ + protected $edit_required_fields = ['update_user_guid']; + /** * 业务字段 - * @var array [ 'user_name' => '用户名称',...] + * @var array 例:[ 'user_name' => '用户名称',...] */ protected $business_fields = []; /** * 新增允许字段模板字符 - * @var string + * @var string 例:['user_name','user_id',...] */ - protected $add_fields_temp = ""; + protected $add_fields_temp; + + /** + * 编辑允许字段模板字符 + * @var string 例:['user_name','user_id',...] + */ + protected $edit_fields_temp; /** * 是否导入 @@ -115,13 +139,17 @@ class GenApi $this->business_name = $this->table['businessName']; $this->function_name = $this->table['functionName']; $this->model_temp_path = self::initFilePath("{$this->root}resources/view/admin/model.tpl"); + $this->model_temp = self::getTempStr($this->model_temp_path); $this->model_module_path = self::initFilePath("{$this->root}common/model/{$this->module_name}"); $this->model_path = self::initFilePath("{$this->model_module_path}/{$this->class_name}.php"); $this->mkdirModelModule(); - $this->buildBusinessFields(); - $this->buildAddFieldsTemp(); + $this->initBusinessFields(); + $this->initRequiredFields('add_required_fields'); + $this->initRequiredFields('edit_required_fields'); $this->initImportExportStatus(); $this->initImgFields(); + $this->buildAddFieldsTemp(); + $this->buildEditFieldsTemp(); } /** @@ -133,7 +161,7 @@ class GenApi if ($val['htmlType'] == 'imageUpload') { $this->img_fields[] = $val['columnName']; } - }; + } } /** @@ -143,8 +171,8 @@ class GenApi { //其他选项 4:导出 6:导入 $checked_btn_arr = $this->table['options']->CheckedBtn; - $this->is_import = in_array('6', $checked_btn_arr); - $this->is_export = in_array('4', $checked_btn_arr); + $this->is_import = in_array('6', $checked_btn_arr); + $this->is_export = in_array('4', $checked_btn_arr); } /** @@ -152,23 +180,39 @@ class GenApi */ private function buildAddFieldsTemp(): void { - $this->add_fields_temp .= '['; - foreach ($this->business_fields as $key => $val) { - $this->add_fields_temp .= "'{$key}',"; - }; - $this->add_fields_temp .= ']'; + $field_arr = array_merge(array_keys($this->business_fields), $this->add_required_fields); + + foreach ($field_arr as $val) { + $this->add_fields_temp .= "'{$val}',"; + } + + $this->add_fields_temp = "[{$this->add_fields_temp}]"; + } + + /** + * 构建编辑允许字段模板字符 + */ + private function buildEditFieldsTemp(): void + { + $field_arr = array_merge(array_keys($this->business_fields), $this->edit_required_fields); + + foreach ($field_arr as $val) { + $this->edit_fields_temp .= "'{$val}',"; + } + + $this->edit_fields_temp = "[{$this->edit_fields_temp}]"; } /** * 构建业务字段名 */ - private function buildBusinessFields() + private function initBusinessFields() { foreach ($this->fields as $val) { if (!$val['isInit']) { $this->business_fields[$val['columnName']] = $val['columnComment']; } - }; + } } /** @@ -188,7 +232,45 @@ class GenApi protected static function initFilePath(string $path): string { //系统分隔符替换 - return str_replace('/', DIRECTORY_SEPARATOR, $path); + return str_replace('/', DIRECTORY_SEPARATOR, $path); + } + + /** + * 获取模板文件字符串 + * + * @param string $temp_path 模板文件路径 + */ + protected static function getTempStr(string $temp_path): string + { + //打开该文件资源(r只读方式打开),读取模板文件内容 + return fread(fopen($temp_path, "r"), filesize($temp_path)); + } + + /** + * 写入文件 + * + * @param string $path 文件路径 + * @param string $content 写入内容 + */ + protected static function writeFile(string $path, string $content): void + { + //打开文件资源(w写入方式打开),进行写入 + fwrite(fopen($path, 'w'), $content); + } + + /** + * 初始化必要字段 + * + * @param string 必要字段变量名 + * + */ + protected function initRequiredFields(string $op_name): void + { + $init_data = []; + foreach ($this->$op_name as $val) { + $init_data[] = "{$this->business_name}_{$val}"; + } + $this->$op_name = $init_data; } /** @@ -200,7 +282,7 @@ class GenApi { if (!(new Gen(new \think\App()))->mkdir($path)) { throwErrorMsg(__METHOD__ . "创建文件夹失败!"); - }; + } } /** @@ -208,8 +290,8 @@ class GenApi * @param array $arr 数组 * @param int $type 模板字符类型 1:一维数组格式 2:验证器格式 3:列表条件查询 4:关联数组格式 */ - protected function toFormTempStr(array $arr, int $type = 1): string + protected function toFormTempStr(array $arr, int $type = 1): string { return (new Gen(new \think\App()))->toFormTempStr($arr, $this->business_fields, $type); } -} +} \ No newline at end of file diff --git a/app/admin/controller/Gen/GenApi/GenModel/Model.php b/app/admin/controller/Gen/GenApi/GenModel/Model.php index 10927d4..b6e830f 100644 --- a/app/admin/controller/Gen/GenApi/GenModel/Model.php +++ b/app/admin/controller/Gen/GenApi/GenModel/Model.php @@ -8,19 +8,15 @@ use app\common\exception\Tool; /** * 后端模型层生成类 */ -class Model extends GenApi + class Model extends GenApi { /** * 生成模型层 */ public function createNewModel(): void { - //打开模型层模板文件,拿到该文件资源(r只读方式打开) - $tem_f = fopen($this->model_temp_path, "r"); - //读取模型层模板文件,拿到模板文件的全部字符串 - $temp_str = fread($tem_f, filesize($this->model_temp_path)); //模板文件字符串替换 - $temp_str = Tool::strReplacePlus($temp_str, [ + $temp_str = Tool::strReplacePlus($this->model_temp, [ //实体类名 '{$className}' => $this->class_name, //模块名 @@ -38,11 +34,8 @@ class Model extends GenApi //模型层导入Excel初始化方法 '{$importExcelInitContent}' => $this->buildImportInitFunTemp(), ]); - - //打开模型层文件,拿到该文件资源(w写入方式打开) - $gen_model = fopen($this->model_path, 'w'); - //写入该模型层文件 - fwrite($gen_model, $temp_str); + //文件写入 + self::writeFile($this->model_path,$temp_str); } /** @@ -74,7 +67,8 @@ class Model extends GenApi //导出数据分配 $data_str = ''; foreach ($this->business_fields as $field => $name) { - if (in_array($name, $this->img_fields)) { + //图片字段处理 + if (in_array($field, $this->img_fields)) { $data_str .= "Excel::ExportImgFiled(\$val['$field']),\n"; } else { $data_str .= "\$val['{$field}'],\n";