vue_index_temp_path, "r"); //读取Index.vue模板文件,拿到模板文件的全部字符串 $temp_str = fread($tem_f, filesize($this->vue_index_temp_path)); //模板文件字符串替换 $temp_str = Tool::strReplacePlus($temp_str, [ //实体类名 '{$className}' => $this->class_name, //模块名 '{$moduleName}' => $this->module_name, //业务名 '{$businessName}' => $this->business_name, //Index.vue字段信息 '{$fields}' => $this->buildFieldsInfoTemp(), //Index.vue导出Excel方法 '{$exportExcelContent}' => $this->buildExportFun(), //Index.vue导入/下载模板Excel表头 '{$importExcelField}' => $this->buildImportDownloadFieldsTemp(), //Index.vue导入Excel方法 '{$importExcelContent}' => $this->buildImportFunTemp(), //Index.vue导入Excel初始化方法 '{$importExcelInitContent}' => $this->buildImportInitFunTemp(), ]); //打开Index.vue文件,拿到该文件资源(w写入方式打开) $gen_model = fopen($this->model_path, 'w'); //写入该Index.vue文件 fwrite($gen_model, $temp_str); } /** * 构建Index.vue字段信息模板字符 */ public function buildFieldsInfoTemp(): string { $str = ""; foreach ($this->fields as $value) { $str .= " '{$value['columnName']}' => '{$value['columnType']}' , \n"; } return $str; } /** * 构建Index.vue导出方法模板字符 */ private function buildExportFun(): string { if (!$this->is_export) return ''; //excel表头字符构建 $excel_header = []; foreach ($this->business_fields as $name) { $excel_header[] = $name; }; $excel_header_temp = $this->toFormTempStr($excel_header); //导出数据分配 $data_str = ''; foreach ($this->business_fields as $field => $name) { if (in_array($name, $this->img_fields)) { $data_str .= "Excel::ExportImgFiled(\$val['$field']),\n"; } else { $data_str .= "\$val['{$field}'],\n"; } } $data_str = "[\n{$data_str}]"; //模板字符构建并返回 return " /** * 导出Excel * * @param array \$select 导出的数据 */ public static function exportExcel(array \$select): void { \$data = [{$excel_header_temp}]; foreach (\$select as \$key => \$val) { \$data[] = {$data_str}; } \$excel = (new Excel())->exporTsheet(\$data); \$excel->save('{$this->function_name}.xlsx'); }"; } /** * 构建导入/下载模板表头模板字符 */ private function buildImportDownloadFieldsTemp(): string { if (!$this->is_import) return ''; $init_fields_str = $this->toFormTempStr($this->business_fields, 4); $init_fields_str = substr($init_fields_str, 0, strlen($init_fields_str) - 1); //末尾的逗号去除 return " // excel导入/下载模板表头 public const EXCELFIELD = {$init_fields_str}; "; } /** * 构建Index.vue导入方法模板字符 */ private function buildImportFunTemp(): string { if (!$this->is_import) return ''; //模板字符构建并返回 return " /** * 导入excel * * @param \app\common\arw\adjfut\src\UploadFile \$file excel */ public static function importExcel(\app\common\arw\adjfut\src\UploadFile \$file): string { \$msg = []; Db::startTrans(); try { \$excel = new Excel(\$file); \$data = \$excel->parseExcel( Tool::getExcelRule(self::EXCELFIELD), [ 'titleLine' => [1] ]); if (!\$data) throwErrorMsg('excel无数据', 1); \$msg = []; foreach (\$data as \$line => \$value) { try { \$model = self::importExcelInit(\$value); \$msg[] = \"{\$line} 新增成功!
\"; } catch (\Throwable \$th) { \$msg[] = \"{\$line} {\$th->getMessage()}
\"; } } Db::commit(); return implode(', ', \$msg); } catch (\Throwable \$th) { Db::rollback(); throw \$th; } }"; } /** * 构建Index.vue导入初始化方法模板字符 */ private function buildImportInitFunTemp(): string { if (!$this->is_import) return ''; /** * (匿名函数)获取excel每行导入数据变量分配-模板字符 */ $getImportAllocationTemp = function () { $str = ""; foreach ($this->business_fields as $field => $name) { $str .= "\${$field} = \$value['{$field}'];"; }; return $str; }; $import_allocation_temp = $getImportAllocationTemp(); /** * (匿名函数)获取新增的字段值们-模板字符 */ $getAddFieldsTemp = function () { $str = ""; foreach ($this->business_fields as $field => $name) { $str .= "'{$field}' => \${$field},\n"; }; return $str; }; $add_allocation_temp = $getAddFieldsTemp(); //模板字符构建并返回 return " /** * 导入excel初始化 * * @param array \$value excel每行数据 */ public static function importExcelInit(array \$value):void { {$import_allocation_temp} self::create( [{$add_allocation_temp}], {$this->add_fields_temp} ); } "; } }