find(); $name = $info->name; $dirname = self::parseDirname($info->dirname);// 文件保存位置 $fieldList = ModelFields::where('model_name',$name)->where('status',1)->order('weigh ASC')->select()->toArray();// 获取字段列表 $classname = self::getCamel($info->name);// 获取类名 if(!empty($dirname)){ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$dirname.DS.$classname.DS.'components'.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS.'components'.DS; } if(!is_dir($path)){ mkdir($path,0777,true); } $apiJS = "@/api/$dirname/$classname"; $filename = $path.'Edit.vue'; $EditFormItem = self::createEditForm($fieldList); $EditImport = self::createEditImportFile($apiJS,$fieldList); $jsonJs = self::createEditFromJsonJs($fieldList); $defaultFormData = self::createDefaultFormData($fieldList); $updateFile = self::createUpdateFile($fieldList); $components = self::createEditComponents($fieldList); $rules = self::createRules($fieldList); $content = << $EditFormItem EDIT; FileServer::writeLine($filename,$content); } /** * @title: 文件或图片上传的方法 * @desc: 描述 * @param {*} $fieldList * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-24 20:04:41 */ static public function createUpdateFile($fieldList) { $str = ""; $types = ['image','images','file','files']; foreach($fieldList as $item){ $fieldType = $item['field_type']; if(in_array($fieldType,$types)){ $str .="/** 文件更新 */\n"; $str .="\t\t\tupdateFile(name,data){\n"; $str .="\t\t\t\tthis.form[name] = data\n"; $str .="\t\t\t},\n"; break; } } return $str; } /** * @title: 创建编辑弹窗的form表单代码 * @desc: 描述 * @param {array} $fieldList * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 14:34:09 */ static public function createEditForm(array $fieldList) { $queryStr = ""; $str = ''; foreach($fieldList as $index=>$item){ $title = $item['title']; $field = $item['field']; $camel = self::getCamel($field); $fieldType = $item['field_type']; $extra_rule = $item['extra_rule']; if(!in_array($fieldType,['user_auto','org_auto'])){ if($index==0){ $str .="\n"; }else{ $str .="\t\t\t\n"; } } switch($fieldType){ case 'string': $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息'; $str .= "\t\t\t\t\n"; $str .= "\t\t\t\t\t\n"; $str .= "\t\t\t\t\n"; $val = $item['db_type']=='enum'?'':0; $queryStr .="$field:$val,\n"; break; case 'selects': $str .= "\t\t\t\t\n"; $str .= "\t\t\t\t\t\n"; $str .= "\t\t\t\t\n"; $queryStr .= "$field:[],\n"; break; case 'image': $extra_rule['accept'] = $extra_rule['accept']??'jpg,jpeg,png,gif'; $extra_rule['size'] = !empty($extra_rule['size'])?intval($extra_rule['size']):2; $extra_rule['limit'] = !empty($extra_rule['limit'])?intval($extra_rule['limit']):1; $extra_rule['name'] = $field; $extra_rule['show-title'] = is_bool($extra_rule['showTitle'])?$extra_rule['showTitle']:false;unset($extra_rule['showTitle']); $extra_rule['@fetch-data'] = 'updateFile'; $str .= "\t\t\t\t\n\t\t\t\t\t{{ item }}\n\t\t\t\t\n"; $queryStr .="$field:[],\n"; break; case 'radio': $str .= "\t\t\t\t\n\t\t\t\t\t{{ item }}\n\t\t\t\t\n"; $queryStr .="$field:0,\n"; break; case 'color': $extra_rule['color-format'] = !empty($extra_rule['format'])?$extra_rule['format']:'hex';unset($extra_rule['format']); $extra_rule['show-alpha'] = !empty($extra_rule['showAlpha'])?$extra_rule['showAlpha']:'false';unset($extra_rule['showAlpha']); $default = !empty($extra_rule['default'])?$extra_rule['default']:'#FFFFFF'; $str .="\t\t\t\t$val){ if(strpos($key,'@')===0){ $methodAry[$key] = $val; }elseif(is_int($val)){ $str .=" :$key=\"$val\""; }elseif(is_bool($val) || in_array($val,['true','false'])){ $value = $val===true||$val==='true'?'true':'false'; $str .=" :$key=\"$value\""; }else{ $str .=" :$key=\"'$val'\""; } } foreach($methodAry as $key => $val){ $str .=" $key=\"$val\""; } $str .=" />\n"; } if(!in_array($fieldType,['user_auto','org_auto'])){ $str .="\t\t\t\n"; } } return $str; } /** * @title: 创建data数据中,form的默认数据 * @desc: 描述 * @param {*} $fieldList * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-21 17:26:27 */ static public function createDefaultFormData(array $fieldList) { $str = "{\n"; foreach($fieldList as $item){ $field = $item['field']; $fieldType = $item['field_type']; $dbType = $item['db_type']; switch($fieldType){ case 'string': case 'text': case 'editor': case 'year': case 'month': case 'date': case 'time': case 'datetime': case 'image': case 'file': $str .= "\t\t\t\t\t$field:'',\n"; break; case 'number': case 'slider': $str .= "\t\t\t\t\t$field:0,\n"; break; case 'datetimerange': case 'selects': case 'images': case 'files': case 'json': $str .="\t\t\t\t\t$field:[],\n"; break; case 'switch': $str .="\t\t\t\t\t$field:1,\n";; break; case 'select': case 'radio': $value = $item['db_type']=='enum'||$item['db_type']=='varchar'?'\'\'':0; $str .="\t\t\t\t\t$field:$value,\n"; break; case 'color': $str .= "\t\t\t\t\t$field:'#ffffff',\n"; break; case 'relate_single': case 'relate_self': $str .="\t\t\t\t\t$field:'',\n"; break; case 'checkbox': case 'relate_multiple': $str .="\t\t\t\t\t$field:[],\n"; break; case 'relate_dic': case 'user_select': case 'org_select': $multiple = $item['extra_rule']&&$item['extra_rule']['multiple']; $tmp = $multiple?"[]":"''"; $str .="\t\t\t\t\t$field:$tmp,\n"; default:break; } } $str = rtrim($str,",\n")."\n\t\t\t\t}"; return $str; } /** * @title: 创建编辑弹窗引入的文件 * @desc: 描述 * @param {string} $apiJS * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 14:44:58 */ static public function createEditImportFile(string $apiJS,array $fieldList) { $str = "import {doEdit,getOptions} from '$apiJS'\n"; $uploadVabs = ['image','images','file','files']; $relations = ['relate_single','relate_multiple','relate_self']; $hasUpload = false; $hasEditor = false; $importAry = []; $hasValidator = false; foreach($fieldList as $item){ $fieldType = $item['field_type']; if(in_array($fieldType,$uploadVabs)){ $importAry['VabUploader'] = "@/components/VabUploader/index.vue"; } if(in_array($fieldType,['editor'])){ $importAry['VabEditor'] = "@/components/VabEditor/index.vue"; } if(in_array($fieldType,$relations)){ $modelInfo = ModelManage::where('name',$item['relation_model'])->find(); $dirname = self::parseDirname($modelInfo->dirname??''); $classname = self::getCamel($item['relation_model']); $importAry[$classname.'Selector'] = "@/views/$dirname/$classname/components/Selector.vue"; } if($fieldType=='relate_dic'){ $importAry['DicSelector'] = "@/components/VabDicSelector/index.vue"; } if($fieldType=='user_select'){ $importAry['UserSelector'] = "@/components/VabUserSelector/index.vue"; } if($fieldType == 'org_select'){ $importAry['OrgSelector'] = "@/components/VabOrgSelector/index.vue"; } // 判断是否需要引入验证器 $rule = $item['rule']; $ruleList = explode('|',$rule); $ruleList = array_filter($ruleList); foreach($ruleList as $ruleItem){ if($ruleItem!='require'){ $hasValidator = true; break; } } if($hasValidator){ $importAry['{validator}'] = '@/utils/validateRule'; } } foreach($importAry as $importKey => $importItem){ $str .= "import {$importKey} from '$importItem'\n"; } return $str; } /** * @title: 创建编辑弹窗的json类型表单代码 * @desc: 描述 * @param {array} {content} {} {JSON数据的key和title对应关系对象} * @param {array} {data} {} {JSON实际数据} * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-20 18:13:01 */ static public function createEditFormJson(string $field,array $content,array $data = []) { $str = ""; // 写添加按钮 $str .="添加"; // 写表头 $str .=""; $span = intval(24/(count($content) + 1)); foreach($content as $item){ $key = $item['key']; $title = $item['value']; $str .="$title"; if(empty($data)){ $data[$key] = ''; } } $str .="操作"; // 写内容 $str .=""; foreach($content as $item){ $key = $item['key']; $str .=""; } $str .=""; $str .=" 0\" size=\"mini\" type=\"text\" @click=\"delValueRow(form.$field, valueIndex)\">删除"; $str .=""; $str .=""; return $str; } /** * @title: 创建json表单的新增和删除功能的方法 * @desc: 描述 * @param {array} {fieldList} {} {字段数组} * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-21 10:47:05 */ static public function createEditFromJsonJs(array $fieldList) { $str = ""; foreach($fieldList as $item){ if($item['field_type']=='json'){ $field = $item['field']; $content = $item['content']; $str ="addValueRow(row) {\n"; $str .="row.push({"; foreach($content as $con){ $key = $con['key']; $str .="$key:'',"; } $str = rtrim($str,','); $str.="})},"; $str.="delValueRow(json, index) { json.splice(index, 1) },"; break; } } return $str; } /** * @title: 创建编辑页需要导入的组件 * @desc: 描述 * @param {array} {fieldList} {} {字段列表} * @return {*} * @author: Rock * @method: POST * @Date: 2023-06-14 09:44:51 */ static public function createEditComponents (array $fieldList) { $components = []; $txt = "{"; foreach($fieldList as $item){ if($item['field_type']=='editor'){ $components[] = 'VabEditor'; } if(in_array($item['field_type'],['image','images','file','files'])){ $components[] = 'VabUploader'; } if(in_array($item['field_type'],['relate_single','relate_multiple','relate_self'])){ $camel = self::getCamel($item['relation_model']); $components[] = $camel.'Selector'; } if($item['field_type']=='relate_dic'){ $components[] = 'DicSelector'; } if($item['field_type']=='user_select'){ $components[] = 'UserSelector'; } if($item['field_type']=='org_select'){ $components[] = 'OrgSelector'; } } $txt .= implode(',',array_unique($components)); $txt .= "}"; return $txt; } /** * @title: 删除模型的新增/编辑弹窗文件 * @desc: 描述 * @param {int} $model_id * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-23 17:30:13 */ static public function deleteEdit(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.'components'.DS; }else{ $path = root_path()."public".DS."vue".DS."src".DS."views".DS.$classname.DS.'components'.DS; } $filename = $path.'Edit.vue'; if(file_exists($filename)){ @unlink($filename); } } /** * @title: 创建编辑页面的验证规则 * @desc: 描述 * @param {array} {fieldList} {} {字段列表} * @return {*} * @author: Rock * @method: POST * @Date: 2023-07-26 16:07:59 */ static public function createRules(array $fieldList) { $str = "{\n"; foreach($fieldList as $item){ $field = $item['field']; $rule = $item['rule']; $title = $item['title']; if(!empty($rule) && !in_array($item['field_type'],['user_auto','org_auto'])){ $str.="\t\t\t\t$field:[\n"; $ruleList = explode('|',$rule); $ruleList = array_filter($ruleList); foreach($ruleList as $ruleItem){ if($ruleItem=='require'){ $str.="\t\t\t\t\t{ required: true, trigger: 'blur', message: '{$title}不能为空' },\n"; }else{ $str .= "\t\t\t\t\t{validator: validator,trigger:'blur',rule:'$ruleItem',title:'$title'"; if(false!==strpos($ruleItem,':')){ $ruleItemArr = explode(':',$ruleItem); $key = $ruleItemArr[0]; $val = $ruleItemArr[1]; if($key=='confirm' || $key=='different'){ $str .= ",form:()=>{return this.form}"; } } $str .="},\n"; } } $str.="\t\t\t\t],\n"; } } $str .="\t\t\t}"; return $str; } }