drag-create-api/app/admin/controller/Gen/GenVue/GenIndex/Index.php
2023-06-25 08:51:24 +08:00

213 lines
6.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\admin\controller\Gen\GenApi\GenIndex;
use app\admin\controller\Gen\GenVue\GenDto;
use app\common\exception\Tool;
/**
* 前端列表页生成类
*/
class Index extends GenDto
{
/**
* 生成Index.vue
*/
public function createJsVue(): void
{
//打开Index.vue模板文件拿到该文件资源(r只读方式打开)
$tem_f = fopen($this->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} <span style='color:#27af49'>新增成功!</span><br>\";
} catch (\Throwable \$th) {
\$msg[] = \"{\$line} <span style='color:red'>{\$th->getMessage()}</span><br>\";
}
}
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}
);
}
";
}
}