123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 |
- <?php
- namespace app\common\model\base\models;
- /**
- * @title : vue的Edit页面生成
- * @desc :
- * @Author : Rock
- * @Date : 2023-06-14 11:03:40
- */
- use app\common\model\base\menu\Menu;
- use app\common\model\base\menu\Menurequest;
- use think\facade\Db;
- class VueEditServer extends VueServer
- {
- /**
- * @title: 生成编辑弹窗文件
- * @desc: 描述
- * @param {int} {model_id} {} {模型ID}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-23 15:11:30
- */
- static public function createEditFile(int $model_id)
- {
- $info = ModelManage::where('id',$model_id)->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 = <<<EDIT
- <template>
- <el-dialog
- v-if="dialogFormVisible"
- :close-on-click-modal="false"
- :title="title"
- :visible.sync="dialogFormVisible"
- width="60%"
- @close="close"
- >
- <el-form ref="form" label-width="120px" :model="form" :rules="rules">
- $EditFormItem
- </el-form>
- <template #footer>
- <el-button @click="close">取 消</el-button>
- <el-button type="primary" @click="save">确 定</el-button>
- </template>
- </el-dialog>
- </template>
- <script>
- $EditImport
- export default {
- name:'{$classname}Edit',
- components:$components,
- data(){
- return {
- options:{},
- form:$defaultFormData,
- rules:$rules,
- title:'',
- dialogFormVisible:false,
- }
- },
- mounted(){
- this.fetchOptions()
- },
- methods:{
- /** 获取可选项 */
- async fetchOptions(){
- const {data} = await getOptions()
- this.options = data
- },
- /** 显示添加/编辑窗口 */
- show(row) {
- if (!row) {
- this.title = '添加'
- } else {
- this.title = '编辑'
- this.form = Object.assign({}, row)
- }
- this.dialogFormVisible = true
- },
- /** 关闭添加/编辑窗口 */
- close() {
- this.\$refs['form'].resetFields()
- this.form = this.\$options.data().form
- this.dialogFormVisible = false
- },
- /** 保存数据 */
- save() {
- this.\$refs['form'].validate(async (valid) => {
- if (valid) {
- const { code, msg } = await doEdit(this.form)
- if (1 == code) {
- this.\$baseMessage(msg, 'success')
- this.\$emit('fetch-data')
- this.close()
- }
- } else {
- return false
- }
- })
- },
- $jsonJs
- $updateFile
- }
- }
- </script>
- 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 .="<el-form-item label=\"{$title}\" prop=\"{$field}\">\n";
- }else{
- $str .="\t\t\t<el-form-item label=\"{$title}\" prop=\"{$field}\">\n";
- }
- }
- switch($fieldType){
- case 'string':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $str .= "\t\t\t\t<el-input v-model.trim=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'text':
- $extra_rule['rows'] = !empty($extra_rule['rows'])?intval($extra_rule['rows']):8;
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $extra_rule['type'] = 'textarea';
- $str .= "\t\t\t\t<el-input v-model.trim=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'editor':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $extra_rule['height'] = $extra_rule['height']?intval($extra_rule['height']):400;
- $str .="\t\t\t\t<vab-editor v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'number':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- if(isset($extra_rule['step']))$extra_rule['step'] = intval($extra_rule['step']);
- if(isset($extra_rule['min']))$extra_rule['min'] = intval($extra_rule['min']);
- if(isset($extra_rule['max']))$extra_rule['max'] = intval($extra_rule['max']);
- $str .="\t\t\t\t<el-input-number v-model.number=\"form.$field\"";
- $queryStr .="$field:0,\n";
- break;
- case 'year':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请选择年度';
- $extra_rule['format'] = $extra_rule['format']??'yyyy';
- $extra_rule['value-format'] = $extra_rule['format']??'yyyy';
- $extra_rule['aligh'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $extra_rule['type'] = 'year';
- $str .="\t\t\t\t<el-date-picker v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'month':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请选择月份';
- $extra_rule['format'] = $extra_rule['format']??'yyyy-MM';
- $extra_rule['value-format'] = $extra_rule['format']??'yyyy-MM';
- $extra_rule['aligh'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $extra_rule['type'] = 'month';
- $str .="\t\t\t\t<el-date-picker v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'date':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $extra_rule['format'] = $extra_rule['format']??'yyyy-MM-dd';
- $extra_rule['value-format'] = $extra_rule['format']??'yyyy-MM-dd';
- $extra_rule['aligh'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $extra_rule['type'] = 'date';
- $str .="\t\t\t\t<el-date-picker v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'time':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $extra_rule['format'] = $extra_rule['format']??'HH:mm:ss';
- $extra_rule['value-format'] = $extra_rule['format']??'HH:mm:ss';
- $extra_rule['align'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $str .="\t\t\t\t<el-time-picker v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'datetime':
- $extra_rule['placeholder'] = $extra_rule['placeholder']??'请输入信息';
- $extra_rule['format'] = $extra_rule['format']??'yyyy-MM-dd HH:mm:ss';
- $extra_rule['value-format'] = $extra_rule['format']??'yyyy-MM-dd HH:mm:ss';
- $extra_rule['align'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $extra_rule['type'] = 'datetime';
- $str .="\t\t\t\t<el-date-picker v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'datetimerange':
- $extra_rule['start-placeholder'] = $extra_rule['start_placeholder']??'开始时间';unset($extra_rule['start_placeholder']);
- $extra_rule['end-placeholder'] = $extra_rule['end_placeholder']??'结束时间';unset($extra_rule['end_placeholder']);
- $extra_rule['range-separator'] = $extra_rule['separator']??'至';unset($extra_rule['separator']);
- $extra_rule['format'] = $extra_rule['format']??'yyyy-MM-dd HH:mm:ss';
- $extra_rule['value-format'] = $extra_rule['format']??'yyyy-MM-dd HH:mm:ss';
- $extra_rule['align'] = 'right';
- $extra_rule['style'] = 'width:100%';
- $extra_rule['type'] = 'datetimerange';
- $str .="\t\t\t\t<el-date-picker v-model=\"form.$field\"";
- $queryStr .="$field:[],\n";
- break;
- case 'select':
- $str .= "\t\t\t\t<el-select v-model=\"form.$field\" style=\"width:100%\">\n";
- $str .= "\t\t\t\t\t<el-option v-for=\"(item,key) in options.{$camel}List \" :key=\"key\" :label=\"item\" :value=\"key\" />\n";
- $str .= "\t\t\t\t</el-select>\n";
- $val = $item['db_type']=='enum'?'':0;
- $queryStr .="$field:$val,\n";
- break;
- case 'selects':
- $str .= "\t\t\t\t<el-select v-model=\"form.$field\" multiple style=\"width:100%\">\n";
- $str .= "\t\t\t\t\t<el-option v-for=\"(item,key) in options.{$camel}List \" :key=\"key\" :label=\"item\" :value=\"key\" />\n";
- $str .= "\t\t\t\t</el-select>\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<vab-uploader v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'images':
- $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']):3;
- $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<vab-uploader v-model=\"form.$field\"";
- $queryStr .="$field:[],\n";
- break;
- case 'file':
- $extra_rule['accept'] = $extra_rule['accept']??'doc,xls,docx,xlsx,pdf';
- $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<vab-uploader v-model=\"form.$field\"";
- $queryStr .="$field:'',\n";
- break;
- case 'files':
- $extra_rule['accept'] = $extra_rule['accept']??'doc,xls,docx,xlsx,pdf';
- $extra_rule['size'] = !empty($extra_rule['size'])?intval($extra_rule['size']):2;
- $extra_rule['limit'] = !empty($extra_rule['limit'])?intval($extra_rule['limit']):3;
- $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<vab-uploader v-model=\"form.$field\"";
- $queryStr .="$field:[],\n";
- break;
- case 'switch':
- $extra_rule['active-text'] = !empty($extra_rule['active_text'])?$extra_rule['active_text']:'开';unset($extra_rule['active_text']);
- $extra_rule['inactive-text'] = !empty($extra_rule['inactive_text'])?$extra_rule['inactive_text']:'关';unset($extra_rule['inactive_text']);
- $extra_rule['active-value'] = !empty($extra_rule['active_value'])?intval($extra_rule['active_value']):1;unset($extra_rule['active_value']);
- $extra_rule['inactive-value'] = !empty($extra_rule['inactive_value'])?intval($extra_rule['inactive_value']):2;unset($extra_rule['inactive_value']);
- $extra_rule['active-color'] = !empty($extra_rule['active_color'])?intval($extra_rule['active_color']):'#13ce66';unset($extra_rule['active_color']);
- $extra_rule['inactive-color'] = !empty($extra_rule['inactive_color'])?intval($extra_rule['inactive_color']):'#ff4949';unset($extra_rule['inactive_color']);
- $extra_rule['style'] = "display: block";
- $str .="\t\t\t\t<el-switch v-model=\"form.$field\"";
- $queryStr .="$field:1,\n";
- break;
- case 'checkbox':
- $str .="\t\t\t\t<el-checkbox-group v-model=\"form.$field\">\n\t\t\t\t\t<el-checkbox v-for=\"(item,key) in options.{$camel}List\" :key=\"key\" :label=\"key\">{{ item }}</el-checkbox>\n\t\t\t\t</el-checkbox-group>\n";
- $queryStr .="$field:[],\n";
- break;
- case 'radio':
- $str .= "\t\t\t\t<el-radio-group v-model=\"form.$field\">\n\t\t\t\t\t<el-radio v-for=\"(item,key) in options.{$camel}List\" :key=\"key\" :label=\"key\" >{{ item }}</el-radio>\n\t\t\t\t</el-radio-group>\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<el-color-picker v-model=\"form.$field\"";
- $queryStr .="$field:'$default',\n";
- break;
- case 'json':
- $str .= self::createEditFormJson($field,$item['content']);
- $queryStr .="$field:[],\n";
- break;
- case 'slider':
- if(isset($extra_rule['step']))$extra_rule['step'] = intval($extra_rule['step']);
- if(isset($extra_rule['min']))$extra_rule['min'] = intval($extra_rule['min']);
- if(isset($extra_rule['max']))$extra_rule['max'] = intval($extra_rule['max']);
- $extra_rule['style'] = "width:100%";
- $str .= "\t\t\t\t<el-slider v-model=\"form.$field\"";
- $queryStr .="$field:0,\n";
- break;
- case 'relate_single':
- case 'relate_multiple':
- case 'relate_self':
- $extra_rule['label-field'] = $item['relation_show'];
- $lineName = self::getLine($item['relation_model']).'-selector';
- $str .="\t\t\t\t<$lineName v-model=\"form.$field\"";
- break;
- case 'relate_dic':
- $extra_rule['group'] = $item['relation_dic_group'];
- $extra_rule['label-field'] = 'title';
- $str .="\t\t\t\t<dic-selector v-model=\"form.$field\"";
- break;
- case 'user_select':
- $str .="\t\t\t\t<user-selector v-model=\"form.$field\"";
- break;
- case 'org_select':
- $str .="\t\t\t\t<org-selector v-model=\"form.$field\"";
- break;
- }
- if(!in_array($fieldType,['radio','checkbox','json','selects','select','user_auto','org_auto'])){
- ksort($extra_rule);
- $methodAry = [];
- foreach($extra_rule as $key=>$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</el-form-item>\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 = "<el-row>";
- // 写添加按钮
- $str .="<el-row size=\"mini\"><el-col :span=\"24\"><el-button size=\"mini\" type=\"primary\" @click=\"addValueRow(form.$field)\">添加</el-button></el-col></el-row>";
- // 写表头
- $str .="<el-row type=\"flex\">";
- $span = intval(24/(count($content) + 1));
- foreach($content as $item){
- $key = $item['key'];
- $title = $item['value'];
- $str .="<el-col align=\"center\" :span=\"$span\">$title</el-col>";
- if(empty($data)){
- $data[$key] = '';
- }
- }
- $str .="<el-col align=\"center\" :span=\"$span\">操作</el-col></el-row>";
- // 写内容
- $str .="<el-row v-for=\"(valueItem, valueIndex) in form.$field\" :key=\"valueIndex\" type=\"flex\">";
- foreach($content as $item){
- $key = $item['key'];
- $str .="<el-col :span=\"$span\"><el-input v-model.trim=\"valueItem.{$key}\" /></el-col>";
- }
- $str .="<el-col align=\"center\" :span=\"$span\">";
- $str .="<el-button v-if=\"valueIndex > 0\" size=\"mini\" type=\"text\" @click=\"delValueRow(form.$field, valueIndex)\">删除</el-button>";
- $str .="</el-col>";
- $str .="</el-row></el-row>";
- 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;
- }
- }
|