find(); $name = $info->name; $pk = ModelManage::pk($name); $dirname = self::parseDirname($info->dirname);// 文件保存位置 $fileTitle = self::createTitle($info->title);// 生成文件注释 $fieldList = ModelFields::where('model_name',$name)->where('status',1)->order('weigh ASC')->select()->toArray();// 获取字段列表 $classname = self::getCamel($info->name);// 获取类名 $authName = strtoupper($classname); if(!empty($dirname)){ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS; } if(!is_dir($path)){ mkdir($path,0777,true); } $filename = $path.'index.vue'; $apiJS = "@/api/$dirname/$classname"; $queryForm = self::createQueryForm($fieldList); $dataQueryForm = self::createDataQueryForm($fieldList); $tableBody = self::createTableBody($fieldList); $operateBtn = self::createOperateBtn($fieldList,$authName); $importFile = self::createIndexImportFile($apiJS,$fieldList); $components = self::createIndexComponents($fieldList); $content = <<
$queryForm 查询 刷新 导出
添加
$tableBody
VUEINDEX; FileServer::writeLine($filename,$content); } /** * @title: 生成查询表单 * @desc: 描述 * @param {array} {fieldList} {} {字段列表} * @param {array} {info} {} {模型信息} * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-19 19:26:34 */ static public function createQueryForm(array $fieldList) { $str=""; $keyword = []; $hasPid = false; $modelName = ''; foreach($fieldList as $item){ $field = $item['field']; $title = $item['title']; $camel = self::getCamel($item['field']); $searchType = $item['search_type']; if($searchType!='none'){ switch($searchType){ case 'relation': if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){ $lineName = self::getLine($item['relation_model']).'-selector'; $multiple = $item['field_type']=='relate_multiple'?'true':'false'; $relationShow = $item['relation_show']; $str .=""; $str .="<$lineName v-model=\"queryForm.$field\" label-field=\"$relationShow\" :multiple=\"$multiple\" />"; $str .=""; }elseif($item['field_type']=='relate_dic'){ $dic_group_code = $item['relation_dic_group']; $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']?'true':'false'; $str .=""; $str .=""; $str .=""; }elseif($item['field_type']=='user_auto' || $item['field_type']=='user_select'){ $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']?'true':'false'; $str .=""; $str .=""; $str .=""; }elseif($item['field_type']=='org_auto' || $item['field_type']=='org_select'){ $str .=""; $str .="$val){ if(is_int($val)){ $str .=" :$key=\"$val\""; }elseif(is_bool($val)){ $value = $val?'true':'false'; $str .=" :$key=\"$value\""; }else{ $str .=" :$key=\"'$val'\""; } } $str .=" />\n"; $str .=""; } break; case 'list': $value = $item['db_type']=='enum'||$item['db_type']=='varchar'?"0":0; $str .=""; $str .=""; $str .=""; $str .=""; $str .=""; $str .=""; break; case 'keyword': $keyword[] = $title; break; case 'year': $str .=""; $str .=""; $str .=""; break; case 'month': $str .=""; $str .=""; $str .=""; break; case 'date': $str .=""; $str .=""; $str .=""; break; case 'daterange': $str .=""; $str .=""; $str .=""; break; case 'datetime': $str .=""; $str .=""; $str .=""; break; case 'datetimerange': $str .=""; $str .=""; $str .=""; break; default:break; } } } if(!empty($keyword)){ $keywordTxt = implode('|',$keyword); $str .=""; $str .=""; $str .=""; } return $str; } /** * @title: 创建JS代码中的queryForm初始值 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 11:16:31 */ static public function createDataQueryForm($fieldList) { $str = "{\n"; $str .= "\t\t\t\t\tpageNo:1,\n"; $str .= "\t\t\t\t\tpageSize:10,\n"; $hasKeyWord = false; foreach($fieldList as $item){ $field = $item['field']; $searchType = $item['search_type']; if($searchType!='none'){ switch($searchType){ case 'relation': $multiple = false; if('relate_multiple'==$item['field_type']){ $multiple = true; }elseif(in_array($item['field_type'],['relate_single','relate_self','user_auto','org_auto'])){ $multiple = false; }elseif(in_array($item['field_type'],['relate_dic','user_select','org_select'])){ $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']; } if(!$multiple){ $value = in_array($item['db_type'],['int','tinyint','smallint','bigint'])?0:'\'\''; $str .= "\t\t\t\t\t$field:$value,\n"; }else{ $str .= "\t\t\t\t\t$field:[],\n"; } break; case 'list': $value = $item['db_type']=='enum'||$item['db_type']=='varchar'?'\'\'':0; $str .="\t\t\t\t\t$field:$value,\n"; break; case 'keyword': $hasKeyWord = true; break; case 'year': case 'month': case 'date': $str .="\t\t\t\t\t$field:'',\n"; break; case 'daterange': $str .="\t\t\t\t\t$field:[],\n"; break; case 'datetime': $str .="\t\t\t\t\t$field:'',\n"; break; case 'datetimerange': $str .="\t\t\t\t\t$field:[],\n"; break; default:break; } } } if($hasKeyWord){ $str .="\t\t\t\t\tkeyword:'',\n"; } $str = rtrim($str,",\n")."\n\t\t\t\t}\n"; return $str; } /** * @title: 生成table内容 * @desc: 描述 * @param {array} $fieldList * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-19 20:14:27 */ static public function createTableBody(array $fieldList) { $txt = "\n\t\t\t\t\n\t\t\t"; foreach($fieldList as $item){ $field = $item['field']; $title = $item['title']; if($item['show_in_table']==1){ switch($item['field_type']){ case 'radio': case 'select': $txt .=""; $txt .=""; $txt .=""; break; case 'switch': $txt .=""; $txt .=""; $txt .=""; break; case 'text': case 'editor': $txt .=""; $txt .=""; $txt .=""; break; case 'image': $txt .=""; $txt .=""; $txt .=""; break; case 'images': $txt .=""; $txt .=""; $txt .=""; break; case 'files': $txt .=""; $txt .=""; $txt .=""; break; case 'selects': case 'checkbox': $txt .=""; $txt .=""; $txt .=""; break; case 'relate_single': $relationName = $item['relation_model']; $relationShow = $item['relation_show']; $tbName = explode('_',$relationName); $lastTbName = end($tbName); $functionName = $field == $lastTbName.'_id'?self::getCamel($relationName):self::getCamel($field); $txt .=""; $txt .=""; $txt .=""; break; case 'relate_multiple': $txt .=""; $txt .=""; $txt .=""; break; case 'relate_self': $relationName = self::getCamel($item['relation_model']); $relationShow = $item['relation_show']; $txt .=""; $txt .=""; $txt .=""; break; case 'relate_dic': $txt .=""; $txt .=""; $txt .=""; break; case 'user_auto': case 'org_auto': case 'user_select': case 'org_select': $txt .=""; $txt .=""; $txt .=""; break; case 'daterange': case 'datetimerange': $txt .=""; $txt .=""; $txt .=""; break; default: $txt .=""; break; } } } return $txt; } /** * @title: 创建启用/禁用操作按钮 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 09:54:15 */ static public function createOperateBtn($fieldList,$authName) { $str = ""; foreach($fieldList as $item){ if($item['field']=='status' && $item['field_type']=='switch'){ $str .="{{row.status==1?'禁用':'启用'}}"; break; } } return $str; } /** * @title: 创建引入js文件代码 * @desc: 描述 * @param {string} $apiJS * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 10:12:53 */ static public function createIndexImportFile(string $apiJS,array $fieldList) { $txt = "import {getList,doDelete,changeStatus,getOptions,doExport} from '$apiJS'\n"; $txt .= "\timport Edit from './components/Edit.vue'\n"; $importAry = []; foreach($fieldList as $item){ if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){ $modelInfo = ModelManage::where('name',$item['relation_model'])->find(); $dirname = self::parseDirname($modelInfo->dirname??''); $classname = self::getCamel($item['relation_model']); $importAry[$classname] = "@/views/$dirname/$classname/components/Selector.vue"; }elseif($item['field_type']=='relate_dic'){ $importAry['Dic'] = "@/components/VabDicSelector/index.vue"; }elseif(in_array($item['field_type'],['user_auto','user_select'])){ $importAry['User'] = "@/components/VabUserSelector/index.vue"; }elseif(in_array($item['field_type'],['org_auto','org_select'])){ $importAry['Org'] = "@/components/VabOrgSelector/index.vue"; } } foreach($importAry as $importKey => $importItem){ $txt .= "\t import {$importKey}Selector from '$importItem'\n"; } return $txt; } /** * @title: 创建列表页需要导入的组件 * @desc: 描述 * @param {array} {fieldList} {} {字段列表} * @return {*} * @author: Rock * @method: POST * @Date: 2023-05-04 15:30:18 */ static public function createIndexComponents(array $fieldList) { $components = ['Edit']; $txt = "{"; foreach($fieldList as $item){ if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){ $camel = self::getCamel($item['relation_model']); $components[] = $camel.'Selector'; }elseif($item['field_type']=='relate_dic'){ $components[] = "DicSelector"; }elseif(in_array($item['field_type'],['user_auto','user_select'])){ $components[] = "UserSelector"; }elseif(in_array($item['field_type'],['org_auto','org_select'])){ $components[] = "OrgSelector"; } } $txt .= implode(',',array_unique($components)); $txt .="}"; return $txt; } /** * @title: 生成Index文件注释 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-18 15:13:19 */ static public function createTitle(string $title) { $title = << EOF; return $title; } /** * @title: 删除模型的vue之index文件 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-23 17:29:13 */ static public function deleteIndex(int $model_id) { $info = ModelManage::where('id',$model_id)->find(); $name = $info->name; $dirname = self::parseDirname($info->dirname);// 文件保存位置 $classname = self::getCamel($info->name);// 获取类名 if(!empty($dirname)){ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS; } $filename = $path.'index.vue'; if(file_exists($filename)){ @unlink($filename); } } }