Bladeren bron

Merge branch 'V1.0.1'

Yue 2 jaren geleden
bovenliggende
commit
3e94e25a5a

+ 77 - 0
vber-common/src/main/java/com/vber/common/permissionNamesGen/PermissionNamesGen.java

@@ -0,0 +1,77 @@
+package com.vber.common.permissionNamesGen;
+
+import com.vber.common.core.domain.entity.SysMenu;
+import com.vber.common.utils.DateUtils;
+import com.vber.common.utils.StringUtils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+public  class PermissionNamesGen {
+
+    private static String javaPermissionStr;
+    private static String vuePermissionStr;
+    // region WRITE
+
+    public static void generatorPermission(List<SysMenu> meunList,String path){
+        vuePermissionStr = "/**\n\n";
+        vuePermissionStr += "class permissionName {\n";
+
+        javaPermissionStr ="";
+        javaPermissionStr +="package com.vber.system.permissions;\n\n";
+        javaPermissionStr +="import org.springframework.stereotype.Service;\n\n";
+        javaPermissionStr +="/**\n";
+        javaPermissionStr +=" * AUTO_GENERATOR\n";
+        javaPermissionStr +=" * DATE: " + DateUtils.getTime()+"\n";
+        javaPermissionStr +=" * BY IWB_Y\n";
+        javaPermissionStr +=" */\n";
+        javaPermissionStr +="@Service(\"pn\")\n";
+        javaPermissionStr +="public class permissionName {\n";
+        meunList.forEach(v->{
+            String name= StringUtils.convertToCamelCase(v.getPerms().replace(":","_"));
+            javaPermissionStr += String.format("\tpublic static final String %s = \"%s\";\n",name,v.getPerms());
+            vuePermissionStr += String.format("\t%s = \"%s\"\n",name,v.getPerms());
+        });
+        vuePermissionStr +="}\n";
+        vuePermissionStr +="export const permissionNames = new permissionName()\n";
+        vuePermissionStr +="export default permissionName\n\n";
+        vuePermissionStr +="*/\n";
+
+        javaPermissionStr +="}\n";
+        saveFile(path,"permissionName.java", javaPermissionStr +"\n\n"+ vuePermissionStr);
+    }
+
+    private static void saveFile(String filePath,String name,String content) {
+        File dir = new File(filePath);
+        // 检查放置文件的文件夹路径是否存在,不存在则创建
+        if (!dir.exists()) {
+            dir.mkdirs();// mkdirs创建多级目录
+        }
+        String javaPermissionFileName = filePath + name;
+        FileWriter writer = null;
+        try {
+            File javaFile= new File(javaPermissionFileName) ;
+            if (!javaFile.exists()) {
+                javaFile.createNewFile();// 创建目标文件
+            }
+            writer = new FileWriter(javaFile, false);
+            writer.append(content);
+            writer.flush();
+            System.out.println( "【"+name+"】文件写入成功 "+javaPermissionFileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try{
+                if (null != writer){
+                    writer.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // endregion
+}

+ 12 - 74
vber-data-seeder/src/main/java/com/vber/dataSeeder/menu/DefaultMenuCreator.java

@@ -2,16 +2,12 @@ package com.vber.dataSeeder.menu;
 
 import com.vber.common.constant.UserConstants;
 import com.vber.common.core.domain.entity.SysMenu;
-import com.vber.common.utils.DateUtils;
+import com.vber.common.permissionNamesGen.PermissionNamesGen;
 import com.vber.common.utils.StringUtils;
 import com.vber.dataSeeder.mapper.DsMenuMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -30,9 +26,6 @@ public class DefaultMenuCreator {
     private Long MenuId = 100L;
     private Long ChildMenuId = 500L;
     private Long BtnId = 1000L;
-
-    private String javaPermissionStr;
-    private String vuePermissionStr;
     private List<SysMenu>  meunList = new ArrayList<>();
 
 
@@ -45,10 +38,11 @@ public class DefaultMenuCreator {
 
         System(root);
         Monitor(root);
+
         if(isGenPerm){
-            generatorPermission();
+            String filePath =  System.getProperty("user.dir") + "\\vber-system\\src\\main\\java\\com\\vber\\system\\permissions\\";
+            PermissionNamesGen.generatorPermission(meunList, filePath);
         }
-
         log.debug(StringUtils.format("--  END  -- {}", this.getClass().getName()));
     }
 
@@ -61,8 +55,6 @@ public class DefaultMenuCreator {
         BtnId = 1000L;
 
         meunList=new ArrayList<>();
-        javaPermissionStr="";
-        vuePermissionStr="";
     }
     private SysMenu getRoot(){
         SysMenu root = new SysMenu();
@@ -385,70 +377,16 @@ public class DefaultMenuCreator {
         return menu;
     }
 
-    // endregion
 
-    // region WRITE
-
-    private void generatorPermission(){
-        vuePermissionStr += "/**\n\n";
-        vuePermissionStr += "class permissionName {\n";
-
-        javaPermissionStr ="";
-        javaPermissionStr +="package com.vber.system.permissions;\n\n";
-        javaPermissionStr +="import org.springframework.stereotype.Service;\n\n";
-        javaPermissionStr +="/**\n";
-        javaPermissionStr +=" * AUTO_GENERATOR\n";
-        javaPermissionStr +=" * DATE: " + DateUtils.getTime()+"\n";
-        javaPermissionStr +=" * BY IWB_Y\n";
-        javaPermissionStr +=" */\n";
-        javaPermissionStr +="@Service(\"pn\")\n";
-        javaPermissionStr +="public class permissionName {\n";
-        meunList.forEach(v->{
-            String name= StringUtils.convertToCamelCase(v.getPerms().replace(":","_"));
-            javaPermissionStr += String.format("\tpublic static final String %s = \"%s\";\n",name,v.getPerms());
-            vuePermissionStr += String.format("\t%s = \"%s\"\n",name,v.getPerms());
-        });
-        vuePermissionStr +="}\n";
-        vuePermissionStr +="export const permissionNames = new permissionName()\n";
-        vuePermissionStr +="export default permissionName\n\n";
-        vuePermissionStr +="*/\n";
-
-        javaPermissionStr +="}\n";
-        saveFile("\\vber-system\\src\\main\\java\\com\\vber\\system\\permissions\\","permissionName.java", javaPermissionStr +"\n\n"+ vuePermissionStr);
-    }
-
-
-    private void saveFile(String path,String name,String content) {
-        String filePath=  System.getProperty("user.dir") + path;
-        File dir = new File(filePath);
-        // 检查放置文件的文件夹路径是否存在,不存在则创建
-        if (!dir.exists()) {
-            dir.mkdirs();// mkdirs创建多级目录
-        }
-        String javaPermissionFileName = filePath + name;
-        FileWriter writer = null;
-        try {
-            File javaFile= new File(javaPermissionFileName) ;
-            if (!javaFile.exists()) {
-                javaFile.createNewFile();// 创建目标文件
-            }
-            writer = new FileWriter(javaFile, false);
-            writer.append(content);
-            writer.flush();
-            System.out.println( "【"+name+"】文件写入成功 "+javaPermissionFileName);
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            try{
-                if (null != writer){
-                    writer.close();
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
+    /**
+     * 根据ID查询 SysMenu
+     * @param id
+     * @return SysMenu
+     */
+    private SysMenu GetMenu(Long id){
+      return   menuMapper.selectMenuById(id);
     }
-
     // endregion
 
+
 }

+ 2 - 2
vber-generator-web/src/test/java/PermissionNameTest.java

@@ -1,5 +1,5 @@
 import com.vber.VberGeneratorApplication;
-import com.vber.generator.permission.PermissionNameGeneratorImpl;
+import com.vber.generator.permission.GenPermissionNameImpl;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,7 +10,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 @SpringBootTest(classes = VberGeneratorApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public  class PermissionNameTest {
     @Autowired
-    private PermissionNameGeneratorImpl permissionNameGeneratorImpl;
+    private GenPermissionNameImpl permissionNameGeneratorImpl;
 
     @Test
     public void Gen(){

+ 21 - 5
vber-generator/src/main/java/com/vber/generator/controller/GenController.java

@@ -9,11 +9,11 @@ import com.vber.common.core.text.Convert;
 import com.vber.common.enums.BusinessType;
 import com.vber.generator.domain.GenTable;
 import com.vber.generator.domain.GenTableColumn;
+import com.vber.generator.permission.IGenPermissionNameService;
 import com.vber.generator.service.IGenTableColumnService;
 import com.vber.generator.service.IGenTableService;
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -31,13 +31,29 @@ import java.util.Map;
 public class GenController extends BaseController
 {
     private String prefix = "tool/gen";
+    private final IGenPermissionNameService genPermService;
 
-    @Autowired
-    private IGenTableService genTableService;
+    private final IGenTableService genTableService;
 
-    @Autowired
-    private IGenTableColumnService genTableColumnService;
+    private final IGenTableColumnService genTableColumnService;
 
+    public GenController(IGenPermissionNameService genPermService, IGenTableService genTableService, IGenTableColumnService genTableColumnService) {
+        this.genPermService = genPermService;
+        this.genTableService = genTableService;
+        this.genTableColumnService = genTableColumnService;
+    }
+
+    /**
+     * 查询代码生成列表
+     */
+    //@PreAuthorize("@ss.hasPermission('tool:gen:list')")
+    @Anonymous
+    @PostMapping("/genPerm")
+    public AjaxResult genPerm()
+    {
+        genPermService.generator();
+        return  success();
+    }
     /**
      * 查询代码生成列表
      */

+ 2 - 0
vber-generator/src/main/java/com/vber/generator/mapper/GenMenuMapper.java

@@ -1,12 +1,14 @@
 package com.vber.generator.mapper;
 
 import com.vber.common.core.domain.entity.SysMenu;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
 /**
  * 菜单表 数据层
  */
+@Repository
 public interface GenMenuMapper
 {
     /**

+ 62 - 0
vber-generator/src/main/java/com/vber/generator/permission/GenPermissionNameImpl.java

@@ -0,0 +1,62 @@
+package com.vber.generator.permission;
+
+import com.vber.common.core.domain.entity.SysMenu;
+import com.vber.common.permissionNamesGen.PermissionNamesGen;
+import com.vber.generator.mapper.GenMenuMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+
+public class GenPermissionNameImpl implements IGenPermissionNameService
+{
+    private final GenMenuMapper genMenuMapper;
+    private List<SysMenu> menus=new ArrayList<>();
+    private List<SysMenu> menuList=new ArrayList<>();
+    private List<String > permList = new ArrayList<>();
+
+    public GenPermissionNameImpl(GenMenuMapper genMenuMapper) {
+        this.genMenuMapper = genMenuMapper;
+    }
+
+    public void generator(){
+        menuList = new ArrayList<>();
+        permList = new ArrayList<>();
+        generatorChildren(0L);
+        String filePath=  System.getProperty("user.dir") + "\\vber-system\\src\\main\\java\\com\\vber\\system\\permissions\\";
+        PermissionNamesGen.generatorPermission(menuList, filePath);
+
+    }
+
+    private void generatorChildren(Long parentId){
+        List<SysMenu> list=getChildrenMenu(parentId);
+        list.forEach(v->{
+            menuList.add(v);
+            List<SysMenu> children = getChildrenMenu(v.getMenuId());
+            if(!children.isEmpty()){
+                generatorChildren(children);
+            }
+        });
+    }
+    private void generatorChildren(List<SysMenu> list){
+        list.forEach(v->{
+            menuList.add(v);
+            List<SysMenu> children = getChildrenMenu(v.getMenuId());
+            if(!children.isEmpty()){
+                generatorChildren(children);
+            }
+        });
+    }
+
+    private List<SysMenu>  getChildrenMenu(Long parentId){
+        if(menus.isEmpty()){
+            menus= genMenuMapper.selectMenuAll();
+        }
+        List<SysMenu> children= menus.stream().filter(v-> v.getParentId().equals(parentId)).collect(Collectors.toList());
+        return children;
+    }
+
+}

+ 1 - 1
vber-generator/src/main/java/com/vber/generator/permission/IPermissionNameGeneratorService.java → vber-generator/src/main/java/com/vber/generator/permission/IGenPermissionNameService.java

@@ -1,5 +1,5 @@
 package com.vber.generator.permission;
 
-public interface IPermissionNameGeneratorService {
+public interface IGenPermissionNameService {
     void generator();
 }

+ 0 - 137
vber-generator/src/main/java/com/vber/generator/permission/PermissionNameGeneratorImpl.java

@@ -1,137 +0,0 @@
-package com.vber.generator.permission;
-
-import com.vber.common.constant.UserConstants;
-import com.vber.common.core.domain.entity.SysMenu;
-import com.vber.common.core.text.Convert;
-import com.vber.common.utils.StringUtils;
-import com.vber.generator.mapper.GenMenuMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class PermissionNameGeneratorImpl implements IPermissionNameGeneratorService
-{
-    @Autowired
-    private GenMenuMapper genMenuMapper;
-    private List<SysMenu> menus=new ArrayList<>();
-    private List<String > permList = new ArrayList<>();
-    private String javaPermissions;
-    private String vuePermissions;
-    public void generator(){
-        permList=new ArrayList<>();
-        vuePermissions="";
-        vuePermissions+="/**\n\n";
-        vuePermissions+="class permissionName {\n";
-
-        javaPermissions="";
-        javaPermissions+="package com.vber.system.permissions;\n\n";
-        javaPermissions+="/**\n";
-        javaPermissions+=" * AUTO_GENERATOR\n";
-        javaPermissions+=" */\n";
-        javaPermissions+="public class permissionName {\n";
-
-        generatorChildren(0L);
-
-        vuePermissions+="}\n";
-        vuePermissions+="export const permissionNames = new permissionName()\n";
-        vuePermissions+="export default permissionName\n\n";
-        vuePermissions+="*/\n";
-
-        javaPermissions+="}\n";
-
-        saveFile();
-
-    }
-
-    private void generatorChildren(Long parentId){
-        List<SysMenu> list=getChildrenMenu(parentId);
-        list.forEach(v->{
-            generatorString(v);
-            List<SysMenu> children = getChildrenMenu(v.getMenuId());
-            if(!children.isEmpty()){
-                generatorChildren(children);
-            }
-        });
-    }
-    private void generatorChildren(List<SysMenu> list){
-        list.forEach(v->{
-            if(v.getMenuId()==500)        {
-                System.out.println("==");
-            }
-            generatorString(v);
-            List<SysMenu> children = getChildrenMenu(v.getMenuId());
-            if(!children.isEmpty()){
-                generatorChildren(children);
-            }
-        });
-    }
-
-    private void generatorString(SysMenu menu){
-        if(UserConstants.TYPE_DIR!=menu.getMenuType()&&!menu.getPerms().isEmpty()){
-            String name= StringUtils.convertToCamelCase(menu.getPerms().replace(":","_"));
-            if(permList.contains(name)){
-                return;
-            }
-            permList.add(name);
-            javaPermissions+= String.format("\tpublic static final String %s = \"%s\";\n",name,menu.getPerms());
-            vuePermissions+= String.format("\t%s = \"%s\"\n",name,menu.getPerms());
-        }
-    }
-    private List<SysMenu>  getChildrenMenu(Long parentId){
-        if(menus.isEmpty()){
-            menus= genMenuMapper.selectMenuAll();
-        }
-        //List<SysMenu> children=  new ArrayList<>();
-        /*menus.forEach(v->{
-            if(v.getMenuId()==1039 && parentId==500){
-                System.out.println("1 => "+v.getParentId()+"=="+ parentId+":"+(v.getParentId().equals(parentId)));
-                System.out.println("2 => "+v.getParentId()+"=="+ parentId+":"+(v.getParentId()+1000 == parentId+1000));
-                System.out.println(Convert.toLong(v.getParentId()) == parentId);
-            }
-            if(v.getParentId()+1000 == parentId+1000){
-                children.add(v);
-            }
-        });*/
-        List<SysMenu> children= menus.stream().filter(v-> v.getParentId().equals(parentId)).collect(Collectors.toList());
-        return children;
-    }
-
-    private void saveFile() {
-        String filePath=  System.getProperty("user.dir").replace("vber-generator-web","vber-system")+"\\src\\main\\java\\com\\vber\\system\\permissions\\";
-        File dir = new File(filePath);
-        // 检查放置文件的文件夹路径是否存在,不存在则创建
-        if (!dir.exists()) {
-            dir.mkdirs();// mkdirs创建多级目录
-        }
-        String javaPermissionFileName = filePath+"permissionName.java";
-        FileWriter writer = null;
-        try {
-            File javaFile= new File(javaPermissionFileName) ;
-            if (!javaFile.exists()) {
-                javaFile.createNewFile();// 创建目标文件
-            }
-            writer = new FileWriter(javaFile, false);
-            writer.append(javaPermissions+"\n\n"+vuePermissions);
-            writer.flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } finally {
-            try{
-                if (null != writer){
-                    writer.close();
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-
-
-    }
-}

+ 12 - 0
vber-generator/src/main/java/com/vber/generator/util/VelocityUtils.java

@@ -57,6 +57,7 @@ public class VelocityUtils
         velocityContext.put("datetime", DateUtils.getDate());
         velocityContext.put("pkColumn", genTable.getPkColumn());
         velocityContext.put("importList", getImportList(genTable));
+        velocityContext.put("permissionNamePrefix", getPermissionNamePrefix(StringUtils.capitalize(moduleName), StringUtils.capitalize(businessName)));
         velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName));
         velocityContext.put("columns", genTable.getColumns());
         velocityContext.put("table", genTable);
@@ -314,6 +315,17 @@ public class VelocityUtils
     {
         return StringUtils.format("{}:{}", moduleName, businessName);
     }
+    /**
+     * 获取权限前缀
+     *
+     * @param moduleName 模块名称
+     * @param businessName 业务名称
+     * @return 返回权限名称前缀
+     */
+    public static String getPermissionNamePrefix(String moduleName, String businessName)
+    {
+        return StringUtils.format("{}{}", moduleName, businessName);
+    }
 
     /**
      * 获取上级菜单ID字段

+ 11 - 2
vber-generator/src/main/resources/templates/tool/gen/gen.html

@@ -25,6 +25,7 @@
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+								<a class="btn btn-danger btn-rounded btn-sm" onclick="genPerm()"><i class="fa fa-download"></i>&nbsp;生成权限名称</a>
 							</li>
 						</ul>
 					</div>
@@ -138,7 +139,15 @@
 		    };
 		    $.table.init(options);
 		});
-		
+
+		// 生成菜单权限名称
+		function genPerm() {
+			$.modal.confirm("确认要重新生成菜单权限名称吗?", function() {
+				$.operate.post(prefix + "/genPerm");
+				layer.msg('执行成功,正在重新生成菜单权限名称,请稍候…', { icon: 1 });
+			});
+		}
+
 		// 预览代码
 		function preview(tableId) {
 			console.log("=====>",tableId)
@@ -150,7 +159,7 @@
 					 var items = [];
 		                $.each(result.data, function(index, value) {
 		                    var templateName = index.substring(index.lastIndexOf("/") + 1, index.length).replace(/\.vm/g, "");
-		                    if(!$.common.equals("sql", templateName) && !$.common.equals("tree.html", templateName) && !$.common.equals("sub-domain.java", templateName)){
+		                    if( !$.common.equals("tree.html", templateName) && !$.common.equals("sub-domain.java", templateName)){
 		                        var codeName = templateName.replace(".", "");
 		                        var language = templateName.substring(templateName.lastIndexOf(".") + 1);
 								if(language == "vue"){

+ 6 - 6
vber-generator/src/main/resources/vm/java/controller.java.vm

@@ -40,7 +40,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 查询${functionName}列表
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix})")
     @GetMapping("/list")
 #if($table.crud || $table.sub)
     public TableDataInfo list(${ClassName} ${className})
@@ -60,7 +60,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 导出${functionName}列表
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix}Export)")
     @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, ${ClassName} ${className})
@@ -73,7 +73,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 获取${functionName}详细信息
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix}Query)")
     @GetMapping(value = "/{${pkColumn.javaField}}")
     public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
     {
@@ -83,7 +83,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 新增${functionName}
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix}Add)")
     @Log(title = "${functionName}", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ${ClassName} ${className})
@@ -94,7 +94,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 修改${functionName}
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix}Edit)")
     @Log(title = "${functionName}", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody ${ClassName} ${className})
@@ -105,7 +105,7 @@ public class ${ClassName}Controller extends BaseController
     /**
      * 删除${functionName}
      */
-    @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")
+    @PreAuthorize("@ss.hasPermission(@pn.${permissionNamePrefix}Remove)")
     @Log(title = "${functionName}", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{${pkColumn.javaField}s}")
     public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)

+ 35 - 0
vber-generator/src/main/resources/vm/java/data-seed.java.vm

@@ -0,0 +1,35 @@
+
+create${ModuleName}${BusinessName}(){
+    SysMenu parant =   new SysMenu();
+    parant.setMenuId(${parentMenuId});
+    parant.setPerms("${businessName}");
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+create${ModuleName}${BusinessName}(){
+    SysMenu parant =  GetMenu(${parentMenuId});
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+create${ModuleName}${BusinessName}(SysMenu parant){
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+
+public static final String ${permissionNamePrefix} = "${permissionPrefix}";
+public static final String ${permissionNamePrefix}Query = "${permissionPrefix}:query";
+public static final String ${permissionNamePrefix}Add = "${permissionPrefix}:add";
+public static final String ${permissionNamePrefix}Edit = "${permissionPrefix}:edit";
+public static final String ${permissionNamePrefix}Remove = "${permissionPrefix}:remove";
+public static final String ${permissionNamePrefix}Export = "${permissionPrefix}:export";
+
+ ${permissionNamePrefix} = "${permissionPrefix}";
+ ${permissionNamePrefix}Query = "${permissionPrefix}:query";
+ ${permissionNamePrefix}Add = "${permissionPrefix}:add";
+ ${permissionNamePrefix}Edit = "${permissionPrefix}:edit";
+ ${permissionNamePrefix}Remove = "${permissionPrefix}:remove";
+ ${permissionNamePrefix}Export = "${permissionPrefix}:export";
+

+ 29 - 2
vber-generator/src/main/resources/vm/js/api.ts.vm

@@ -1,5 +1,9 @@
 import Rs from '@/core/services/RequestService'
+
 class ${businessName}Api{
+  tableUrl = "/${moduleName}/${businessName}/list"
+  exportUrl = "/${moduleName}/${businessName}/export"
+
   // 查询${functionName}列表
   list${BusinessName} = (query: any) => {
     return Rs.get({
@@ -8,23 +12,45 @@ class ${businessName}Api{
     })
   }
 
+  // 查询${functionName}详细
   get${BusinessName} = (${pkColumn.javaField}: string) => {
     return Rs.get({
       url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
     })
   }
 
+  // 新增或修改${functionName}
+  addOrUpdate${BusinessName} = (data: any) => {
+    return new Promise((r)=>{
+      if(data.${pkColumn.javaField}){
+        update${BusinessName}(data).then((res: any)=>{
+          message.msgSuccess("修改成功")
+          r(res)
+        })
+      }else{
+        add${BusinessName}(data).then((res: any)=>{
+          message.msgSuccess("新增成功")
+          r(res)
+        })
+      }
+    })
+  }
+
+  // 新增${functionName}
   add${BusinessName} = (data: any) => {
     return Rs.post({
       url: '/${moduleName}/${businessName}',
-      data: data
+      data: data,
+      successAlert:false,
     })
   }
+
   // 修改${functionName}
   update${BusinessName} = (data: any) => {
     return Rs.put({
       url: '/${moduleName}/${businessName}',
-      data: data
+      data: data,
+      successAlert:false,
     })
   }
 
@@ -34,6 +60,7 @@ class ${businessName}Api{
       url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},
     })
   }
+
 }
 
 export default ${businessName}Api

+ 48 - 11
vber-generator/src/main/resources/vm/sql/sql.vm

@@ -1,22 +1,59 @@
 -- 菜单 SQL
 insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}菜单');
+values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}', 'front', 'admin', sysdate(), '', null, '${functionName}菜单');
 
 -- 按钮父菜单ID
 SELECT @parentId := LAST_INSERT_ID();
 
 -- 按钮 SQL
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}查询', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query',        '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, btn_class, btn_script, create_by, create_time, update_by, update_time, remark)
+values('${functionName}查询', @parentId, '1',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query',        'eye','','', 'admin', sysdate(), '', null, '');
 
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}新增', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add',          '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, btn_class, btn_script, create_by, create_time, update_by, update_time, remark)
+values('${functionName}新增', @parentId, '2',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add',          'plus-square', 'btn btn-light-primary','handleCreate', 'admin', sysdate(), '', null, '');
 
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}修改', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit',         '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, btn_class, btn_script, create_by, create_time, update_by, update_time, remark)
+values('${functionName}修改', @parentId, '3',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit',         'pencil-square', 'btn btn-light-success','handleUpdate@1', 'admin', sysdate(), '', null, '');
 
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}删除', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove',       '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, btn_class, btn_script, create_by, create_time, update_by, update_time, remark)
+values('${functionName}删除', @parentId, '4',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove',       'dash-square', 'btn btn-light-danger','handleDelete@0', 'admin', sysdate(), '', null, '');
 
-insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}导出', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export',       '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, btn_class, btn_script, create_by, create_time, update_by, update_time, remark)
+values('${functionName}导出', @parentId, '5',  '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export',       'cloud-download', 'btn btn-light-info','handleExport', 'admin', sysdate(), '', null, '');
+
+/*
+create${ModuleName}${BusinessName}(){
+    SysMenu parant = new SysMenu();
+    parant.setMenuId(${parentMenuId}L);
+    parant.setPerms("${businessName}");
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+create${ModuleName}${BusinessName}(){
+    SysMenu parant = GetMenu(${parentMenuId}L);
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+create${ModuleName}${BusinessName}(SysMenu parant){
+    SysMenu ${businessName} = createMenu(parent,"${functionName}","${businessName}","${moduleName}/${businessName}/index",100,"front");
+    createCurdBtnWithExport(${businessName},"${functionName}");
+}
+
+
+public static final String ${permissionNamePrefix} = "${permissionPrefix}";
+public static final String ${permissionNamePrefix}Query = "${permissionPrefix}:query";
+public static final String ${permissionNamePrefix}Add = "${permissionPrefix}:add";
+public static final String ${permissionNamePrefix}Edit = "${permissionPrefix}:edit";
+public static final String ${permissionNamePrefix}Remove = "${permissionPrefix}:remove";
+public static final String ${permissionNamePrefix}Export = "${permissionPrefix}:export";
+
+${permissionNamePrefix} = "${permissionPrefix}";
+${permissionNamePrefix}Query = "${permissionPrefix}:query";
+${permissionNamePrefix}Add = "${permissionPrefix}:add";
+${permissionNamePrefix}Edit = "${permissionPrefix}:edit";
+${permissionNamePrefix}Remove = "${permissionPrefix}:remove";
+${permissionNamePrefix}Export = "${permissionPrefix}:export";
+
+*/

+ 230 - 272
vber-generator/src/main/resources/vm/vue/index-tree.vue.vm

@@ -4,280 +4,259 @@
   import apis from "@/api"
   import message from "@/core/utils/message"
   import { permissionNames } from "@/core/services/PermissionNames"
-  import { ElDatePicker, ElInput, ElRadio, ElCheckbox, ElTreeSelect } from "element-plus"
-  import DictSelect from "@/components/dict/DictSelect.vue"
-  import VbSelect from "@/components/select/VbSelect.vue"
-  import VbUpload from "@/components/upload/VbUpload.vue"
-  import VbEditor from "@/components/editor/VbEditor.vue"
+  //import VbUpload from "@/components/upload/VbUpload.vue"
+  //import VbEditor from "@/components/editor/VbEditor.vue"
 
-  #if(${dicts} != '')
-      #set($dictsNoSymbol=$dicts.replace("'", ""))
-  const { ${dictsNoSymbol} } = useDict(${dicts});
-  #end
+
+      #if(${dicts} != '')
+          #set($dictsNoSymbol=$dicts.replace("'", ""))
+      const { ${dictsNoSymbol} } = useDict(${dicts});
+      #end
 
   const tableRef = ref()
   const modalRef = ref()
   const opts = reactive({
     columns:[
-#foreach ($column in $columns)
-    #set($javaField=$column.javaField)
-    #set($parentheseIndex=$column.columnComment.indexOf("("))
-    #if($parentheseIndex != -1)
-        #set($comment=$column.columnComment.substring(0, $parentheseIndex))
-    #else
-        #set($comment=$column.columnComment)
-    #end
-    #if($column.pk)
-      { field: "$javaField", name: "$comment", width: 100, isSort: true, visible:true },
-    #elseif($column.list)
-    #if($javaField.indexOf("Time")==${javaField.length()} - 4)
-      { field: "$javaField", name: "$comment", visible:true, isSort: true, width:185 },
-    #elseif($javaField=="remark")
-      { field: "$javaField", name: "$comment", visible:true, tooltip:true },
-    #elseif($column.dictType)
-      { field: "$javaField", name: "$comment", visible:true, width:100 },
-    #else
-      { field: "$javaField", name: "$comment", visible:true },
-    #end
-#end
-#end
+        #foreach ($column in $columns)
+            #set($javaField=$column.javaField)
+            #set($parentheseIndex=$column.columnComment.indexOf("("))
+            #if($parentheseIndex != -1)
+                #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+            #else
+                #set($comment=$column.columnComment)
+            #end
+            #if($column.pk)
+              { field: "$javaField", name: "$comment", width: 100, isSort: true, visible:true },
+            #elseif($column.list)
+                #if($javaField.indexOf("Time")==${javaField.length()} - 4)
+                  { field: "$javaField", name: "$comment", visible:true, isSort: true, width:185 },
+                #elseif($javaField=="remark")
+                  { field: "$javaField", name: "$comment", visible:true, tooltip:true },
+                #elseif($column.dictType)
+                  { field: "$javaField", name: "$comment", visible:true, width:100 },
+                #else
+                  { field: "$javaField", name: "$comment", visible:true },
+                #end
+            #end
+        #end
       { field: "actions", name: `操作`, width: 150 },
     ],
     queryParams: {
-#foreach ($column in $columns)
-#if($column.query)
-    #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-        #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-      dateRange${AttrName}:undefined,
-    #else
-      $column.javaField: undefined,
-    #end
-#end
-#end
+        #foreach ($column in $columns)
+            #if($column.query)
+                #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+                    #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+                  dateRange${AttrName}:undefined,
+                #else
+                        $column.javaField: undefined,
+                #end
+            #end
+        #end
     },
     searchFormItems:[
-#foreach($column in $columns)
-    #if($column.query)
-        #set($dictType=$column.dictType)
-        #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-        #set($parentheseIndex=$column.columnComment.indexOf("("))
-        #if($parentheseIndex != -1)
-            #set($comment=$column.columnComment.substring(0, $parentheseIndex))
-        #else
-            #set($comment=$column.columnComment)
-        #end
-      {
-
-      #if($column.htmlType == "datetime" && "BETWEEN" == $column.queryType)
-        field: "dateRange${AttrName}",
-      #else
-        field: "${column.javaField}",
-      #end
-        label: "${comment}",
-        class: "w-100",
-        required: false,
-          #if($column.htmlType == "input")
-            placeholder: "请输入${comment}",
-            component: ElInput,
-            listeners: {
-              keyup: (e: KeyboardEvent) => {
-                if (e.code == "Enter") {
-                  handleQuery()
-                }
+        #foreach($column in $columns)
+            #if($column.query)
+                #set($dictType=$column.dictType)
+                #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+                #set($parentheseIndex=$column.columnComment.indexOf("("))
+                #if($parentheseIndex != -1)
+                    #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+                #else
+                    #set($comment=$column.columnComment)
+                #end
+              {
+                  #if($column.htmlType == "datetime" && "BETWEEN" == $column.queryType)
+                    field: "dateRange${AttrName}",
+                  #else
+                    field: "${column.javaField}",
+                  #end
+                label: "${comment}",
+                class: "w-100",
+                required: false,
+                  #if($column.htmlType == "input")
+                    placeholder: "请输入${comment}",
+                    component: "I",
+                    listeners: {
+                      keyup: (e: KeyboardEvent) => {
+                        if (e.code == "Enter") {
+                          handleQuery()
+                        }
+                      },
+                    },
+                  #elseif($column.htmlType == "select"|| $column.htmlType == "radio")
+                      #if( "" != $dictType)
+                        component: "Dict",
+                        props: {
+                          placeholder: "请选择${comment}",
+                          dictType: "${dictType}",
+                          type: "select",
+                        },
+                      #else
+                        component: "VS",
+                        placeholder: "请选择${comment}",
+                        data:[],
+                      #end
+                  #elseif($column.htmlType == "datetime")
+                      #if( "BETWEEN" == $column.queryType)
+                        component: "D",
+                        placeholder: "请选择${comment}",
+                        props: {
+                          type: "daterange",
+                          valueFormat:"YYYY-MM-DD",
+                          rangeSeparator: "-",
+                          startPlaceholder: "开始日期",
+                          endPlaceholder: "结束日期",
+                        },
+                        listeners: {
+                          change: (v: any) => {
+                            queryParams.value.dateRange${AttrName} = v
+                          },
+                        },
+                        span: 5,
+                      #else
+                        component: "D",
+                        placeholder: "请选择${comment}",
+                        props: {
+                          type: "date",
+                          valueFormat:"YYYY-MM-DD",
+                        },
+                      #end
+                  #end
               },
-            },
-          #elseif($column.htmlType == "select"|| $column.htmlType == "radio")
-              #if( "" != $dictType)
-                component: DictSelect,
-                props: {
-                  placeholder: "请选择${comment}",
-                  dictType: "${dictType}",
-                  type: "select",
-                },
-              #else
-                component: VbSelect,
-                placeholder: "请选择${comment}",
-                data:[],
-              #end
-          #elseif($column.htmlType == "datetime")
-              #if( "BETWEEN" == $column.queryType)
-                component: ElDatePicker,
-                placeholder: "请选择${comment}",
-                props: {
-                  type: "daterange",
-                  valueFormat:"YYYY-MM-DD",
-                  rangeSeparator: "-",
-                  startPlaceholder: "开始日期",
-                  endPlaceholder: "结束日期",
-                },
-                listeners: {
-                  change: (v: any) => {
-                    queryParams.value.dateRange${AttrName} = v
-                  },
-                },
-                span: 5,
-              #else
-                component: ElDatePicker,
-                placeholder: "请选择${comment}",
-                props: {
-                  type: "date",
-                  valueFormat:"YYYY-MM-DD",
-                },
-              #end
-          #end
-      },
-    #end
-#end
+            #end
+        #end
     ],
     permission: permissionNames.${ModuleName}${BusinessName}List,
     handleBtns: [],
-    handleFuns: {
-      handleCreate,
-    },
+    handleFuns: {},
     customBtns: [],
-    tableListFun: getTableData,
+    tableListFun: apis.${moduleName}.${businessName}Api.list${BusinessName},
     getEntityFun: apis.${moduleName}.${businessName}Api.get${BusinessName},
     deleteEntityFun: apis.${moduleName}.${businessName}Api.del${BusinessName},
-    //exportUrl: apis.${moduleName}.${businessName}Api.exportUrl,
-    //exportName: "${BusinessName}",
+    exportUrl: apis.${moduleName}.${businessName}Api.exportUrl,
+    exportName: "${BusinessName}",
     modalTitle: "${functionName}",
     formItems:[
-      {
-        field: "parentId",
-        label: "上级菜单",
-        class: "w-100",
-        required: true,
-        placeholder: "选择上级菜单",
-        component: ElTreeSelect,
-        props: {
-          valueKey: "${businessName}Id",
-          checkStrictly: true,
-          data: ${businessName}Options,
-          props: { value: '${businessName}Id', label: '${businessName}Name', children: 'children' }
-        }
-      }
-#foreach($column in $columns)
-#set($field=$column.javaField)
-#if($column.insert && !$column.pk)
-    #if(($column.usableColumn) || (!$column.superColumn))
-        #set($parentheseIndex=$column.columnComment.indexOf("("))
-        #if($parentheseIndex != -1)
-            #set($comment=$column.columnComment.substring(0, $parentheseIndex))
-        #else
-            #set($comment=$column.columnComment)
+        #foreach($column in $columns)
+            #set($field=$column.javaField)
+            #if($column.insert && !$column.pk)
+                #if(($column.usableColumn) || (!$column.superColumn))
+                    #set($parentheseIndex=$column.columnComment.indexOf("("))
+                    #if($parentheseIndex != -1)
+                        #set($comment=$column.columnComment.substring(0, $parentheseIndex))
+                    #else
+                        #set($comment=$column.columnComment)
+                    #end
+                    #set($dictType=$column.dictType)
+                  {
+                    field: "${field}",
+                    label: "${comment}",
+                    class: "w-100",
+                      #if($column.required)
+                        required: true,
+                      #else
+                        required: false,
+                      #end
+                      #if($column.htmlType == "input")
+                        placeholder: "请输入${comment}",
+                        component: "I",
+                      #elseif($column.htmlType == "upload"||$column.htmlType == "image-upload")
+                        component: VbUpload,
+                      #elseif($column.htmlType == "upload")
+                        component: VbUpload,
+                        props:{
+                          uploadType: "file",
+                        },
+                      #elseif($column.htmlType == "summernote"||$column.htmlType == "editor")
+                        component: VbEditor,
+                        props:{
+                          minHeight: 192,
+                        },
+                      #elseif($column.htmlType == "select")
+                          #if( "" != $dictType)
+                            component: "Dict",
+                            props: {
+                              placeholder: "请选择${comment}",
+                              dictType: "${dictType}",
+                              type: "select",
+                            },
+                          #else
+                            component: "VS",
+                            placeholder: "请选择${comment}",
+                            data:[],
+                          #end
+                      #elseif($column.htmlType == "checkbox")
+                          #if( "" != $dictType)
+                            component: "Dict",
+                            props: {
+                              dictType: "${dictType}",
+                              type: "checkbox",
+                            },
+                          #else
+                            component: "C",
+                            data:[],
+                          #end
+                      #elseif($column.htmlType == "radio")
+                          #if( "" != $dictType)
+                            component: "Dict",
+                            props: {
+                              dictType: "${dictType}",
+                              type: "radio",
+                            },
+                          #else
+                            component: "R",
+                            data:[],
+                          #end
+                      #elseif($column.htmlType == "datetime")
+                        component: "D",
+                        props: {
+                          placeholder:"请选择${comment}",
+                          type: "date",
+                          valueFormat:"YYYY-MM-DD",
+                        },
+                      #elseif($column.htmlType == "textarea")
+                        placeholder: "请输入${comment}",
+                        component: "I",
+                        props: {
+                          type: "textarea",
+                          rows: 5,
+                        },
+                      #end
+                  },
+                #end
+            #end
         #end
-        #set($dictType=$column.dictType)
-      {
-        field: "${field}",
-        label: "${comment}",
-        class: "w-100",
-          #if($column.required)
-            required: true,
-          #else
-            required: false,
-          #end
-          #if($column.htmlType == "input")
-            placeholder: "请输入${comment}",
-            component: ElInput,
-          #elseif($column.htmlType == "upload"||$column.htmlType == "image-upload")
-            component: VbUpload,
-          #elseif($column.htmlType == "upload")
-            component: VbUpload,
-            props:{
-              uploadType: "file",
-            },
-          #elseif($column.htmlType == "summernote"||$column.htmlType == "editor")
-            component: VbEditor,
-            props:{
-              minHeight: 192,
-            },
-          #elseif($column.htmlType == "select")
-              #if( "" != $dictType)
-                component: DictSelect,
-                props: {
-                  placeholder: "请选择${comment}",
-                  dictType: "${dictType}",
-                  type: "select",
-                },
-              #else
-                component: VbSelect,
-                placeholder: "请选择${comment}",
-                data:[],
-              #end
-          #elseif($column.htmlType == "checkbox")
-              #if( "" != $dictType)
-                component: DictSelect,
-                props: {
-                  dictType: "${dictType}",
-                  type: "checkbox",
-                },
-              #else
-                component: ElCheckbox,
-                data:[],
-              #end
-          #elseif($column.htmlType == "radio")
-              #if( "" != $dictType)
-                component: DictSelect,
-                props: {
-                  dictType: "${dictType}",
-                  type: "radio",
-                },
-              #else
-                component: ElRadio,
-                data:[],
-              #end
-          #elseif($column.htmlType == "datetime")
-            component: DictSelect,
-            props: {
-              placeholder:"请选择${comment}",
-              type: "date",
-              valueFormat:"YYYY-MM-DD",
-            },
-          #elseif($column.htmlType == "textarea")
-            placeholder: "请输入${comment}",
-            component: ElInput,
-            props: {
-              type: "textarea",
-              rows: 5,
-            },
-          #end
-      },
-    #end
-#end
-#end
     ],
     resetForm: () => {
-      getTreeselect()
       form.value = emptyFormData.value
     },
     labelWidth:"80px",
     emptyFormData: {
-#foreach($column in $columns)
-#set($field=$column.javaField)
-#if($column.insert && !$column.pk)
-#if(($column.usableColumn) || (!$column.superColumn))
-      $column.javaField: undefined,
-#end
-#end
-#end
+        #foreach($column in $columns)
+            #set($field=$column.javaField)
+            #if($column.insert && !$column.pk)
+                #if(($column.usableColumn) || (!$column.superColumn))
+                        $column.javaField: undefined,
+                #end
+            #end
+        #end
     },
   });
   const { queryParams, emptyFormData } = toRefs(opts)
   const form = ref<any>(emptyFormData.value)
-  const ${businessName}Options = ref()
 
   /** 搜索按钮操作 */
   function handleQuery() {
-#foreach ($column in $columns)
-#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-  #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-  #if($AttrName=="CreateTime")
-    addDateRange(queryParams.value, queryParams.value.dateRange${AttrName})
-  #else
-    addDateRange(queryParams.value, queryParams.value.dateRange${AttrName},"${AttrName}")
-  #end
-#end
-#end
+      #foreach ($column in $columns)
+          #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
+              #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+              #if($AttrName=="CreateTime")
+                addDateRange(queryParams.value, queryParams.value.dateRange${AttrName})
+              #else
+                addDateRange(queryParams.value, queryParams.value.dateRange${AttrName},"${AttrName}")
+              #end
+          #end
+      #end
     tableRef.value?.search()
   }
 
@@ -298,18 +277,6 @@
     //
   }
 
-  /** 新增按钮操作 */
-  function handleCreate(row: any) {
-    opts.resetForm()
-    if (row != null && row.${businessName}Id) {
-      form.value.parentId = row.${businessName}Id
-    } else {
-      form.value.parentId = 0
-    }
-    modalRef.value.changePrefixTitle("添加")
-    modalRef.value.show()
-  }
-
   /** 修改按钮操作 */
   function handleUpdate(row: any) {
     tableRef.value.defaultHandleFuns["handleUpdate"]("", row)
@@ -320,15 +287,6 @@
       #end
   }
 
-  function getTreeselect() {
-    ${businessName}Options.value = []
-    apis.${moduleName}.${businessName}Api.listMenu({}).then((res) => {
-      const ${businessName}: any = { ${businessName}Id: 0, ${businessName}Name: "主类目", children: [] }
-      ${businessName}.children = handleTree(res.data, "${businessName}d")
-      ${businessName}Options.value.push(${businessName})
-    })
-  }
-
   /** 删除按钮操作 */
   function handleDelete(rows: Array<any>) {
     tableRef.value.defaultHandleFuns["handleDelete"]("", rows)
@@ -357,19 +315,20 @@
     }
   }
 
-  function getTableData(q: any) {
-    return new Promise((resolve) => {
-      apis.${moduleName}.${businessName}Api.listMenu(q).then((res) => {
-        res.data = handleTree(res.data, "${businessName}Id")
-        resolve(res)
-      })
-    })
-  }
 </script>
 <template>
   <div class="app-container">
-    <VbDataTable
+    <VbTreeTable
         ref="tableRef"
+        keyField="${businessName}Id"
+        iconField="${businessName}Name"
+        parentField="parentId"
+        childrenField="children"
+        :no-page="true"
+        :expand-depth="1"
+        :interval-left="10"
+        :show-right-column-btn="false"
+        :has-checkbox="false"
         :handle-perm="opts.permission"
         :handle-btns="opts.handleBtns"
         :handle-funs="opts.handleFuns"
@@ -383,7 +342,6 @@
         :reset-form-fun="opts.resetForm"
         v-model:form-data="form"
         :query-params="queryParams"
-        :check-multiple="true"
         :reset-search-form-fun="resetQuery"
         :custom-search-fun="handleQuery"
     >
@@ -447,7 +405,7 @@
           </el-button>
         </vb-tooltip>
       </template>
-    </VbDataTable>
+    </VbTreeTable>
     <VbModal
         v-model:modal="modalRef"
         :title="opts.modalTitle"

+ 19 - 30
vber-generator/src/main/resources/vm/vue/index.vue.vm

@@ -4,11 +4,8 @@
 import apis from "@/api"
 import message from "@/core/utils/message"
 import { permissionNames } from "@/core/services/PermissionNames"
-import { ElDatePicker, ElInput,  ElRadio, ElCheckbox, ElTreeSelect } from "element-plus"
-import DictSelect from "@/components/dict/DictSelect.vue"
-import VbSelect from "@/components/select/VbSelect.vue"
-import VbUpload from "@/components/upload/VbUpload.vue"
-import VbEditor from "@/components/editor/VbEditor.vue"
+//import VbUpload from "@/components/upload/VbUpload.vue"
+//import VbEditor from "@/components/editor/VbEditor.vue"
 
 
 #if(${dicts} != '')
@@ -78,7 +75,7 @@ const opts = reactive({
       required: false,
     #if($column.htmlType == "input")
       placeholder: "请输入${comment}",
-      component: ElInput,
+      component: "I",
       listeners: {
         keyup: (e: KeyboardEvent) => {
           if (e.code == "Enter") {
@@ -88,20 +85,20 @@ const opts = reactive({
       },
     #elseif($column.htmlType == "select"|| $column.htmlType == "radio")
     #if( "" != $dictType)
-      component: DictSelect,
+      component: "Dict",
       props: {
         placeholder: "请选择${comment}",
         dictType: "${dictType}",
         type: "select",
       },
     #else
-      component: VbSelect,
+      component: "VS",
       placeholder: "请选择${comment}",
       data:[],
     #end
     #elseif($column.htmlType == "datetime")
     #if( "BETWEEN" == $column.queryType)
-      component: ElDatePicker,
+      component: "D",
       placeholder: "请选择${comment}",
       props: {
         type: "daterange",
@@ -117,7 +114,7 @@ const opts = reactive({
       },
       span: 5,
     #else
-      component: ElDatePicker,
+      component: "D",
       placeholder: "请选择${comment}",
       props: {
         type: "date",
@@ -162,7 +159,7 @@ const opts = reactive({
 #end
 #if($column.htmlType == "input")
       placeholder: "请输入${comment}",
-      component: ElInput,
+      component: "I",
 #elseif($column.htmlType == "upload"||$column.htmlType == "image-upload")
       component: VbUpload,
 #elseif($column.htmlType == "upload")
@@ -177,41 +174,41 @@ const opts = reactive({
       },
 #elseif($column.htmlType == "select")
     #if( "" != $dictType)
-      component: DictSelect,
+      component: "Dict",
       props: {
         placeholder: "请选择${comment}",
         dictType: "${dictType}",
         type: "select",
       },
     #else
-      component: VbSelect,
+      component: "VS",
       placeholder: "请选择${comment}",
       data:[],
     #end
 #elseif($column.htmlType == "checkbox")
     #if( "" != $dictType)
-      component: DictSelect,
+      component: "Dict",
       props: {
         dictType: "${dictType}",
         type: "checkbox",
       },
     #else
-      component: ElCheckbox,
+      component: "C",
       data:[],
     #end
 #elseif($column.htmlType == "radio")
     #if( "" != $dictType)
-      component: DictSelect,
+      component: "Dict",
       props: {
         dictType: "${dictType}",
         type: "radio",
       },
     #else
-      component: ElRadio,
+      component: "R",
       data:[],
     #end
 #elseif($column.htmlType == "datetime")
-      component: DictSelect,
+      component: "D",
       props: {
         placeholder:"请选择${comment}",
         type: "date",
@@ -219,7 +216,7 @@ const opts = reactive({
       },
 #elseif($column.htmlType == "textarea")
       placeholder: "请输入${comment}",
-      component: ElInput,
+      component: "I",
       props: {
         type: "textarea",
         rows: 5,
@@ -305,17 +302,9 @@ function submitForm() {
     #if($table.sub)
       form.value.${subclassName}List = ${subclassName}List.value;
     #end
-  if (form.value.${pkColumn.javaField} != null) {
-    apis.${moduleName}.${businessName}Api.update${BusinessName}(form.value).then(() => {
-      message.msgSuccess("修改成功");
-      handleQuery()
-    });
-  } else {
-    apis.${moduleName}.${businessName}Api.add${BusinessName}(form.value).then(() => {
-      message.msgSuccess("新增成功");
-      handleQuery()
-    });
-  }
+      apis.${moduleName}.${businessName}Api.addOrUpdate${BusinessName}(form.value).then(() => {
+        handleQuery()
+      });
 }
 
 </script>

+ 5 - 0
vber-system/src/main/java/com/vber/system/permissions/permissionName.java

@@ -1,8 +1,13 @@
 package com.vber.system.permissions;
 
+import org.springframework.stereotype.Service;
+
 /**
  * AUTO_GENERATOR
+ * DATE: 2023-07-27 17:25:59
+ * BY IWB_Y
  */
+@Service("pn")
 public class permissionName {
 	public static final String System = "system";
 	public static final String SystemUser = "system:user";